文章目录[隐藏]
1 应用概述
1.1 通用描述
Modbus-RTU 协议是一种开放的串行通信协议,在不同的行业中都有非常广泛的应用,因为其是串行通信,所以其报文的传送需要按照串行队列来发送,而具体到S7-200 SMART 的 Modbus-RTU 主站通信的编程中就需要考虑针对不同地址和不同站的轮询的问题,为了提高轮询的效率和轮询程序的通用性,本文推出了 Modbus 轮询的应用库,可以简化用户轮询编程,也可以实现根据需要写入功能,更可以实现 仅当设定值改变时的参数值写入功能。
1.2 硬件及软件需求
本应用软硬件的需求
为了使得本应用案例成功运行,必须满足以下硬件和软件需求。
-
硬件
S7-200 SMART CPU 控制器: SIMATIC S7-200 SMART 产品家族
-
软件
STEP 7-Micro/WIN SMART V2.7及以上
2 程序库
2.1 简要说明
该程序库实现了 Modbus 轮询队列的产生,可以产生两种独立的队列,读队列和写 队列,并可以根据需要实时操作写队列,也可以实现当设定值改变时实时写入的功 能。
2.2程序库
2.2.1 轮询队列控制块
-
程序块引脚
参数 &类型 数据类型 描述 EN BOOL 程序块使能 readStart IN BOOL 启动读轮询队列,上升沿触发 write IN/OUT BOOL 启动写轮询队列,使用置位信号 readDone IN/OUT BOOL 读指令 MSG 完成位 writeDone IN/OUT BOOL 写指令 MSG 完成位 readCtrl IN/OUT DWORD 读指令 MSG 控制字,每一位控制一个站点,最 多可以控制 32 个站 WriteCtrl IN/OUT WORD 写指令 MSG 控制字,每一位控制一个站点,最 多可以控制 16 个站写 lastQueue IN/OUT DWORD 储存写入时的读取队列,写入完成后返回队列 -
使用说明
该子程序主要用于产生 Modbus 轮询队列,会产生读队列 readCtrl 控制字和写队列 writeCtrl 控制字,正常执行时,仅执行读队列 readCtrl 控制字运算,当有写操作时,中断读操作,优先执行写操作队列 writeCtrl 控制字运算,仅当写操作完成后,会返回到之前读队列的中断点开始继续执行读队列。
-
注意事项
该子程序需要配合 Modbus 通信库使用。
2.2.2 整数设定值改变时输出功能块
-
程序块引脚
参数 &类型 数据类型 描述 EN BOOL 程序块使能 slave IN BYTE 从站地址(参考 MBUS_MSG 指令介绍) addr IN DWORD 参数地址(参考 MBUS_MSG 指令介绍) dataPtr IN DWORD 数据指针(参考 MBUS_MSG 指令介绍) lastValue IN/OUT WORD 存储上一个周期的参数值 write IN/OUT BOOL 当参数改变时置位该位输出 slaveOut IN/OUT BYTE 参数改变时输出从站地址(对应 MSG 输入) addrOUT IN/OUT DWORD 参数改变时输出参数地址(对应 MSG 输入) countOut IN/OUT WORD 参数改变时输出参数数量(对应 MSG 输入) dataPtrOut IN/OUT DWORD 参数改变时输出数据指针(对应 MSG 输入) -
使用说明
该子程序可以实现当输入整数值发生改变时,把对应地址传送到输出地址,并输出标志位 write。
-
注意事项
该子程序需要配合 Modbus 通信库和 ModbusQueue 库使用。
2.2.3 双整数设定值改变时输出功能块
-
程序块引脚
参数 &类型 数据类型 描述 EN BOOL 程序块使能 slave IN BYTE 从站地址(参考 MBUS_MSG 指令介绍) addr IN DWORD 参数地址(参考 MBUS_MSG 指令介绍) dataPtr IN DWORD 数据指针(参考 MBUS_MSG 指令介绍) lastValue IN/OUT DWORD 存储上一个周期的参数值 write IN/OUT BOOL 当参数改变时置位该位输出 slaveOut IN/OUT BYTE 参数改变时输出从站地址(对应 MSG 输入) addrOUT IN/OUT DWORD 参数改变时输出参数地址(对应 MSG 输入) countOut IN/OUT WORD 参数改变时输出参数数量(对应 MSG 输入) dataPtrOut IN/OUT DWORD 参数改变时输出数据指针(对应 MSG 输入) -
使用说明
该子程序可以实现当输入双整数值发生改变时,把对应地址传送到输出地址,并输出标志位 write。
-
注意事项
该子程序需要配合 Modbus 通信库和 ModbusQueue 库使用。
2.2.4 浮点数设定值改变时输出功能块
-
程序块引脚
参数 &类型 数据类型 描述 EN BOOL 程序块使能 slave IN BYTE 从站地址(参考 MBUS_MSG 指令介绍) addr IN DWORD 参数地址(参考 MBUS_MSG 指令介绍) dataPtr IN DWORD 数据指针(参考 MBUS_MSG 指令介绍) lastValue IN/OUT REAL 存储上一个周期的参数值 write IN/OUT BOOL 当参数改变时置位该位输出 slaveOut IN/OUT BYTE 参数改变时输出从站地址(对应 MSG 输入) addrOUT IN/OUT DWORD 参数改变时输出参数地址(对应 MSG 输入) countOut IN/OUT WORD 参数改变时输出参数数量(对应 MSG 输入) dataPtrOut IN/OUT DWORD 参数改变时输出数据指针(对应 MSG 输入) -
使用说明
该子程序可以实现当输入浮点数值发生改变时,把对应地址传送到输出地址,并输出标志位 write。
-
注意事项
该子程序需要配合 Modbus 通信库和 ModbusQueue 库使用。
3 例程说明
3.1 Modbus 初始化
-
简单说明
初始化 Modbus 程序,本例程中并根据库存储区地址,设置 VB4257 (mModbusRetries)重试次数为 0,即只尝试一次,加快轮询效率。
-
程序
3.2 Modbus 轮询序列
-
简单说明
该程序实现了 Modbus 轮询队列的产生,可以产生两种独立的队列,读队列和写队列,并可以根据需要实时操作写队列,也可以实现当设定值改变时实时写入的功能。
本例程中,读队列的控制字为 MD0,写队列的控制字为 MW4。
MD0 每一个位可以控制一个站点读指令 MSG,最多可以控制 32 个 MSG 指令。
MW0 每一个位可以控制一个站点的写指令 MSG,最多可以控制 32 个 MSG 写指令。
-
程序
3.3 Modbus 读控制
-
简单说明
本例程中读控制由读控制字 MD0 控制,其中
M3.0~3.7 为 MD0 的 bit0~bit7;M2.0~2.7 为 MD0 的 bit8~bit15
M1.0~1.7 为 MD0 的 bit16~bit23;M0.0~0.7 为 MD0 的 bit24~bit31
用户可以根据现场实际需要来灵活增加或者减少读指令个数,每个读指令的控制由 MD0 对应的位来控制即可。
-
程序
3.4 Modbus 写控制
-
简单说明
本例程中写控制由写控制字 MW4 来控制,其中
M5.0~5.7 为 MW4 的 bit0~bit7;
M4.0~4.7 为 MW4 的 bit8~bit15;
用户可以根据现场实际需要来灵活增加或者减少写指令个数,每个写指令的控制由 MW4 对应的位来控制即可。
-
程序
3.5 Modbus 设定值改变功能块
-
简单说明
用户可以根据设定值的类型(INT/DINT/REAL)来选择合适的指令库来判断设定值是 否变化,若发生变化,则传送对应参数到 Modbus 写指令,并启动写标志位。
用户可以根据需要修改的参数个数来灵活调用对应指令库。
-
程序
版本V1.0.0