Modbus-RTU协议是一种开放的串行通信协议,在不同的行业中都有非常广泛的应用,因为其是串行通信,所以其报文的传送需要按照串行队列来发送,而具体到S7-200 SMART的Modbus-RTU主站通信的编程中就需要考虑针对不同地址和不同站的轮询的问题。
为了提高轮询的效率和轮询程序的通用性,本文推出了Modbus轮询的应用库,可以简化用户轮询编程,也可以实现根据需要写入功能,更可以实现仅当设定值改变时的参数值写入功能。
小贴士
硬件及软件需求
1. 硬件要求
S7-200 SMART CPU控制器
SIMATIC S7-200 SMART产品家族
2. 软件要求
STEP 7-Micro/WIN SMART V2.7
程序库
该程序库实现了Modbus轮询队列的产生,可以产生两种独立的队列,读队列和写队列,并可以根据需要实时操作写队列,也可以实现当设定值改变时实时写入的功能。
程序库
轮询队列控制块
程序块引脚
使用说明
该子程序主要用于产生Modbus轮询队列,会产生读队列readCtrl控制字和写队列writeCtrl控制字,正常执行时,仅执行读队列readCtrl控制字运算,当有写操作时,中断读操作,优先执行写操作队列writeCtrl控制字运算,仅当写操作完成后,会返回到之前读队列的中断点开始继续执行读队列。
注意事项:该子程序需要配合Modbus通信库使用。
整数设定值改变时输出功能块
程序块引脚
使用说明
该子程序可以实现当输入整数值发生改变时,把对应地址传送到输出地址,并输出标志位write。
注意事项:该子程序需要配合Modbus通信库和ModbusQueue库使用,不需要可以不调用。
双整数设定值改变时输出功能块
程序块引脚
使用说明
该子程序可以实现当输入双整数值发生改变时,把对应地址传送到输出地址,并输出标志位write。
注意事项:该子程序需要配合Modbus通信库和ModbusQueue库使用,不需要可以不调用。
浮点数设定值改变时输出功能块
程序块引脚
使用说明
该子程序可以实现当输入浮点数值发生改变时,把对应地址传送到输出地址,并输出标志位write。
注意事项:该子程序需要配合Modbus通信库和ModbusQueue库使用,不需要可以不调用。
例程说明
本例程解释了Modbus轮询库的使用方法,以及当设定值改变时写入的功能,如果客户不需要设定值改变功能,仅需要调用ModbusQueue功能块即可。
Modbus初始化
初始化Modbus程序,本例程中并根据库存储区地址,设置VB4257(mModbusRetries)重试次数为0,即只尝试一次,加快轮询效率。
程序
Modbus轮询序列
该程序实现了Modbus轮询队列的产生,可以产生两种独立的队列,读队列和写队列,并可以根据需要实时操作写队列,也可以实现当设定值改变时实时写入的功能。
本例程中,读队列的控制字为MD0,写队列的控制字为MW4。MD0每一个位可以控制一个站点读指令MSG,最多可以控制32个MSG指令。MW0每一个位可以控制一个站点的写指令MSG,最多可以控制32个MSG写指令。
程序
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对应的位来控制即可。
程序
Modbus写控制
本例程中写控制由写控制字MW4来控制,其中
▶M5.0~5.7为MW4的bit0~bit7;
▶M4.0~4.7为MW4的bit8~bit15;
用户可以根据现场实际需要来灵活增加或者减少写指令个数,每个写指令的控制由MW4对应的位来控制即可。
程序
Modbus设定值改变功能块
用户可以根据设定值的类型(INT/DINT/REAL)来选择合适的指令库来判断设定值是否变化,若发生变化,则传送对应参数到Modbus写指令,并启动写标志位。
用户可以根据需要修改的参数个数来灵活调用对应指令库。
程序