IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【工控老马】S7-200通过自由口控制Modbus变频器正反转实例详解 -> 正文阅读

[嵌入式]【工控老马】S7-200通过自由口控制Modbus变频器正反转实例详解

S7-200通过自由口控制Modbus变频器正负转

西门子S7-200通过自由口需要控制英威腾变频器的正负转 停止和故障复位,运行频率控制以及分二次读取运行速度等12条变频器信息。程序略微变动适应所有Modbus RTU需要控制。
下面是程序,可以直接导入程序后写入PLC试验。
注:程序实例图在文末

ORGANIZATION_BLOCK 主程序:OB1
TITLE=
BEGIN
Network 1
// 主程序,初始化并查执各变频器指令

一.功能介绍
// 该程序专为英威腾CHF系列变频器编写。英威腾CHF系列变频器内置国际标准的MODBUS通信协议。程序运行时,变频器作为MODBUS协议从站接收来自CPU224 PLC的通信指令,实现起停、频率给定、监控等功能。
// CHF系列矢量变频器在与CPU224通信前须做好以下准备工作:
// 1.确认己安装好CHF系列变频器的通讯卡,并将卡上的端口跳线置于RS485端;
// 2.用一根带9针阳性插头的串口通信电缆连接在CPU224 PLC的自由通信口端,电缆另一端的第5、3、8线分别接在CHF变频器RS485通讯卡的GND、485+、485一端子上,其余线屏蔽不用;
// 3.预先设置变频器以下参数:
// PC.00=1 //变频器通讯地址为1
// PC.01=3 //通讯波特率9.6K
// PC.02=1 //通讯数据偶校验 8位数据位 1位停止位
// P0.03=2 //变频器的运行指令采用通讯方式
// P3.01=7 //变频器的A频率设定采用通讯方式(注意P3.04/P3.05对P3.01通讯频率的影响)

二.程式结构说明
// 该程序由1个主程序3个子程序及2个中断程序组成。子程序里包含了变频器的起停、复位、查询功能指令,由主程序调用。中断程序为发送及接收指令提供中断支持。
// main //主程式,初始化并查执各变频器指令
// sbr0 //CRC校验子程序
// sbr1 //通讯端口初始化子程序
// sbr2 //发送变频器写入06/读取03指令,共8个字节
// intO //接收完成中断程序
// int1 //发送完成中断程序
LD SM0.1
CALL SBR1 //调用初始化子程序,使能PORT0自由口模式

Network 2
// 接收完成后延时10mS M4.4接通,运行下一次发送数据
LDN M4.0
AN M4.1
TON T35, 1 // 通讯完成后延时10mS M4.4=1,允许下一次通讯,
A T35
= M4.4 //主要是为了Modbus RTU二次通讯中间3.5字符间隔时间

Network 3
// 如果发送或接收超时,延时0.2秒复位M4.0/M4.1,这里暂时设置5秒是为了方便调试
LD M4.0
O M4.1
TON T199, 50
A T199
R M4.0, 2 //发送或接收超过0.2秒没有完成,复位发送/接收

Network 4 // 调用Modbus06写入指令,通讯成功,这里暂时不用,可以作打手频率设定,不知道是否支持广播写入,广播写入主要是变频器故障复位和三个打手频率设定.给棉变频器如果需要用PID控制没有必要用PLC的PID
// 当VW110≠VW300时把VW110写入变频器,VW110范围(+10000~-10000)÷10000×50Hz
// 地址为变频器地址;字节为发送的字节数量=8个字节;指令=03为读取指令,06为写入指令;数据地址=2000H为英威腾变频器设置频率的地址;数据内容为写入2000H的内容,范围+10000~0~-10000
// 运行命令权限最高,如果运行命令没有完成,程序将会一直执行下去,直到运行命令完成
LDN M8.1 //没有发送运行命令,当运行命令发送过程中不能够发送频率写通讯
AW<> VW300, VW110 //发送的数据VW110与通讯完成返回的数据不等
A M4.4 //允许发送
S M8.0, 1 //发送为写运行速度命令,为了接收信息时保存到VW300用
CALL SBR3, 1, 8, 6, 16#2000, VW110 //把VW110数据写入到变频器地址1的2000H寄存器

Network 5
// 控制变频器正负转 停止和故障复位 同时有几个输入时执行最后的指令
LD SM0.0
LPS
A I5.1 //运行命令
MOVW 1, VW304
LRD
A I5.3 //反转命令
MOVW 2, VW304
LRD
A I5.2 //停车命令
MOVW 5, VW304
LPP
A I5.4 //故障复位命令
MOVW 7, VW304

Network 6 // 设定英威腾变频器1000H通信控制命令,来控制变频器正负转和停止等操作命令
// 控制变频器运转 英威腾变频器地址1000H 01正转运行 02反转运行 03正转点动 04反转点动 05停车 06自由停车 07故障复位 08点动停车
LDW<> VW304, VW302 //运行命令VW304与接收的返回信息比较,不相等将一直发送下去
A M4.4
S M8.1, 1 //为了把返回信息的保存到VW302寄存器
CALL SBR3, 1, 8, 6, 16#1000, VW304 //把命令内容VW304写入到英威腾变频器的1000H地址

Network 7 // 调用Modbus读取,不要读取范围以外的内容,不然会报错误
// 读取变频器状态3000H 运行速度 3001H 设定速度 3002H 母线电压 3003H 输出电压 3004H 输出电流 3005H 运转速度
// 当有其他重要的读写命令时该通讯暂停
// 分2次读取英威腾变频器3000H~3005H 3008H~3013H信息,本来英威腾变频器说明书说可以连续读取16条信息,不过我读取16条信息返回数据没有CRC校验内容,不知为何,本来是试验程序,有时需要连续读取多条信息,就试验读取2次12条信息
LDN M8.0
AN M8.1 //程序没有发送写频率和运行命令时才能够读取变频器数据
A M4.4
LPS //调用查询变频器
INCB VB270 //启动T37延时断开计时器
A V270.0
S M8.2, 1
MOVW 16#3000, VW272 //读取3000H开头的连续6条信息
LRD
AN V270.0
S M8.3, 1
MOVW 16#3008, VW272 //读取3008H开头的连续6条信息
LPP
CALL SBR3, 1, 8, 16#03, VW272, 6
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK 初始化:SBR1
TITLE=通讯端口初始化子程序
// 该程序在PLC的第一个扫描周期运行,主要是设置CPU224自由端口的通信格式、数据接收格式及复位各寄存区(参见西门子S7-200编程手册)。
// 通信格式内容包括:波特率9.6K、每字节位数8位、偶校验等(注意与变频器一致)。
// 数据接收格式完全参照MODBUS RTU格式设定,以不少于3.5个字节传输时间的通信口空闲间隔作为数据接收的开始及结束信号。根据协议,PLC在准备接收数据前会先监测通信口是否空闲,如连续空闲时间超过了3.5个字节的传输时间,则PLC默认数据接收开始,此后通讯口上出现的信息即被认为是一个数据帧的内容。同理,随着一个数据帧的最后一个字节传输完成,又会出现一个3.5字节传输时间的空闲间隔,来表示一个数据帧传输的结束。(参见MODBUS协议标准及CHF系列矢量变频器通讯卡使用说明书)
// 对9.6K的通信波特率来说,3.5个字节传输时间约为5ms左右。因该程式的每个指令只准备接收一个数据帧的回馈信息,所以接收数据前的空闲检测时间可设为0,即PLC在发出数据后立即开始接收数据,但一个数据帧的传输结束空闲检测时间仍需设为5ms以上。

BEGIN
Network 1
LD SM0.0
MOVB 16#49, SMB30 //设置自由通信口格式
MOVW +0, SMW90 //空闲行间隔检测时间0ms
MOVW +5, SMW92 //字符问定时器超时检测时间5ms
MOVB 20, SMB94 //接收信息的最大缓冲区20字节
MOVB 148, SMB87 //设置自由通信口的数据接收格式
FILL +0, MW8, 1 //输出印象寄存区复位
FILL +0, MW9, 1 //标志寄存区复位
FILL +0, VW100, 5 //发送缓冲区复位
FILL +0, VW200, 5 //接收缓冲区复位
ATCH INT2, 23 //接收完成中断
ATCH INT1, 9 //发送完成中断
ENI //在全局启用中断
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK CRC校验:SBR2
TITLE= CRC校验子程序
// 英威腾CHV系列矢量变频器内置的MODBUS协议采用RTU传输格式,该格式使用CRC校验方式对每次发出或接收的数据帧进行校验。因此,该子程序使用了多个局部变量,以方便其它子程序调用。
// 在西门子STEP 7-Micro/win编程环境下(如图一),需要在该子程序的局部变量表中预先设定以下局部变量:
// (1)输入型局部变量(VAR INPUT)
// ld 0:DWORD://待发送数据地址指针变量
// 1w 4:WORD; //待发送数据字节个数变量
// (2)输出型局部变量(VAR-OUTPUT)
// lb 6:BYTE;//CRC校验值高位变量
// lb 7:BYTE;//CRC校验值低位变量
// (3)临时局部变量(VAR)
// 1w 8:WORD; //待发送数据字节个数计数变量
// 1w 10:WORD;//待发送数据每字节8位二进制数计数变量
VAR_INPUT
LD_0:DWORD; // 待发送数据地址指针变量
LW_4:WORD; // 待发送数据字节个数变量
END_VAR
VAR_OUTPUT
IB_6:BYTE; // CRC校验值高位变量
LB_7:BYTE; // CRC校验值低位变量
END_VAR
VAR
LW_8:WORD; // 待发送数据字节个数计数变量
LW_10:WORD; // 待发送数据每字节8位二进制数计数变量
END_VAR
BEGIN
Network 1
// //将16位CRC校验寄存器LW6全置为1
LD SM0.0
MOVW 16#FFFF, LW6 //将16位CRC校验寄存器LW6全置为1

Network 2
// //对待发送数据字节个数(Lw4)计数(Lw8)循环
LD SM0.0
FOR LW8, +1, LW4 //对待发送数据字节个数(Lw4)计数(Lw8)循环

Network 3
// //使待发送数据的第一个字节(*LD0)与CRC校验寄存器低位字节(LB7)进行异或运算
LD SM0.0
XORB *LD0, LB7 //使待发送数据的第一个字节(*LD0)与
//CRC校验寄存器低位字节(LB7)进行异或运算
Network 4
// //ld 0指向待发送数据的下一个地址
LD SM0.0
INCD LD0 //ld 0指向待发送数据的下一个地址
Network 5
// //对每字节8位二进制数计数(LW10)循环
LD SM0.0
FOR LW10, +1, +8 //对每字节8位二进制数计数(LW10)循环

Network 6
// //CRC校验寄存器LW6右移一位
LD SM0.0
SRW LW6, 1 //CRC校验寄存器LW6右移一位

Network 7
// //若移位后的溢出值SMl.1为1,则使值16#A001与LW6进行异或运算
LD SM1.1 //若移位后的溢出值SMl.1为1
XORW 16#A001, LW6 //则使值16#A001与LW6进行异或运算

Network 8
// //结束每字节8位二进制数计数循环
NEXT //结束每字节8位二进制数计数循环
Network 9
// //结束每数据帧字节个数计数循环
NEXT //结束每数据帧字节个数计数循环
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK Modbus读写:SBR3
TITLE= 三.PLC内存使用说明
// 西门子S7-200系列PLC的自由通讯端口编程必定会用到两个指令,即XMT(发送)指令和
// RCV(接收)指令。编写程序时需要为这两个指令指定数据缓冲区,一般以最低位数为0的地
// 址作为数据缓冲区的起始地址。
// 1.发送指令XMT缓冲区(写/读)
// VB100 //xmt指令要发送的字节个数
// VB101 //变频器通讯地址(01)
// VB102 //modbus功能码(06/03)
// VW103 //变频器被写地址/变频器被读起始地址
// VW105 //被写数据/被读数据字个数
// VB107 //被发送数据CRC低位
// VB108 //被发送数据CRC高位
VAR_INPUT
地址:BYTE; // 变频器地址,字节
字节:BYTE; // 发送字节数
指令:BYTE; // 读16#03 写16#06
数据地址:WORD; // 需要写的变频器参数地址
数据内容:WORD;
END_VAR
BEGIN
Network 1
LD SM0.0
MOVB LB1, VB100 //XMT指令要发送的字节个数
MOVB LB0, VB101 //变频器地址(01)
MOVB LB2, VB102 //modbus写功能码(06)
MOVW LW3, VW103 //变频器频率设定值地址
MOVW LW5, VW105 //频率设定值
CALL SBR2, &VB101, 6, VB108, VB107 //调用CRC校验子程序
XMT VB100, 0 //将缓冲区(VBl00~VBl08)数据由0端口发送

S M4.0, 1
INCW VW4004
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK 发送完成:INT1
TITLE=发送完成中断子程序
BEGIN
Network 1
// //数据接收开始
LD SM0.0
RCV VB200, 0 //数据接收开始

Network 2
// 发送完成中断中复位M4.0,置位M4.1 监控程序是否因发送超时还是接收超时
LD SM0.0
R M4.0, 1
S M4.1, 1
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK 接收完成:INT2
TITLE=接收完成中断程序
// 利用西门子S7_200系列PLC提供的系统中断事件,使发送指令XMT及接收指令RCV完成时自动产生程序中断,以便及时完成其它必要的程序操作。
// 这里程序只利用VB205来反映变频器工作状态。
// 2.接收指令RCV缓冲区
// VB200 //rcv指令要接收的字节个数
// VB201 //变频器地址(01)
// VB202 //modbus功能码(06/03)
// VW203 //变频器被写地址/被读数据字节个数
// VW205 //被写数据/被读数据
// VB207 //被接收数据CRC低位
// VB208 //被接收数据CRC高位
// VB217 //被接收数据CRC验算低位
// VB218 //被接收数据CRC验算高位
BEGIN
Network 1 // 网络标题
// M8.2=0是8位字节写指令,返回数据也是8个字节,校验数据有6个字节VB201~VB206,VB257 VB258(VW257)是校验码。同时比较校验码与实际计算校验码是否正确,正确后M10.1置位1
LDN M8.2 //非读取信息时,因读取信息返回数据字节数因信息不一样而不同
LPS //写信息返回字节数固定不变,均为8字节接收信息
R M4.1, 1
CALL SBR2, &VB201, 6, VB258, VB257 //接收接收到的信息VB201开头连续6个字节的CRC值,见过保存到VW257
AW= VW257, VW207 //比较接收信息的CRC位VW207与实际计算的CRC是否相等,相等说明信息正确
S M10.1, 1 //信息正确,M10.1置位1
LPP
AW<> VW257, VW207
R M10.1, 1 //信息校验错误,M10.1=0

Network 2
// 如果是读取信息命令(2次读取均是读取6条信息,返回信息数17字节)
LD M8.2 //第一条读取命令
O M8.3 //第二条读取命令
LPS
R M4.1, 1
CALL SBR2, &VB201, 15, VB258, VB257 //校验VB201开头连续15字节接收信息的CRC校验值
AW= VW216, VW257
S M10.2, 1
LPP
AW<> VW216, VW257 //接收信息CRC校验位与实际接收的信息计算的CRC结果比较,如果相等说明计算信息正确

R M10.2, 1
Network 3
// 如果是第一条读取信息,则返回信息保存到VW1000开头的连续6字
LD M8.2
A M10.2
MOVW VW204, VW1000
MOVW VW206, VW1002
MOVW VW208, VW1004
MOVW VW210, VW1006
MOVW VW212, VW1008
MOVW VW214, VW1010
R M8.2, 1
Network 4
// 如果是第二条读取信息,则接收到的信息保存到VW1012开头的连续6个字
LD M8.3
A M10.2
MOVW VW204, VW1012
MOVW VW206, VW1014
MOVW VW208, VW1016
MOVW VW210, VW1018
MOVW VW212, VW1020
MOVW VW214, VW1022
R M8.3, 1
Network 5
// 写英威腾变频器H2000数据,如果返回数据正确,M8.0复位0,VB310清零
LD M10.1
A M8.0
MOVW VW205, VW300
R M8.0, 1
Network 6
LD M10.1
MOVW VW203, VW312
MOVW VW205, VW302
R M8.1, 1

Network 7
END_INTERRUPT_BLOCK

主程序梯形图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-05-08 08:17:54  更:2022-05-08 08:18:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:33:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码