S7-1200作为ModbusRTU从站

S7-1200支持ModbusRTU通信模式的模块可作为ModbusRTU从站。以下以CPU1215CDC/DC/DC和CM1241RS485为例,介绍S7-1200ModbusRTU从站通信组态及编程步骤。
硬件和软件需求及所完成的通信任务:
硬件:①CPU1215CDC/DC/DC(订货号:6ES7215-1AG31-0XB0)②CM1241RS485(订货号:6ES7241-1CH30-0XB0)③PS307电源(订货号:6ES7307-1KA02-0AA0)④PC(带以太网卡)⑤TP以太网电缆软件:①STEP7V11ProfessionalSP2UPD4+HSP②ModScan(该软件是第三方软件,可以从Internet网络下载)所完成的通信任务:将ModbusRTU从站CPU1215C中地址从开始的5个字中的数据,分别读取到ModbusRTU主站ModScan中Modbus地址从40001开始的5个字中。

1组态ModbusRTU通信模块
在硬件目录里找到“通信模块”→“点到点”→“CM1241(RS485)”,双击或拖拽此模块至CPU左侧即可,如下图1所示:

图1组态通信模块
接下来,在“设备视图”中用鼠标选中CM1241(RS485)模块,在“属性”→“端口组态”中配置此模块硬件接口参数。如下图2所示:
以下以传输率=9.6Kbps,奇偶校验=无奇偶校验,数据位=8位字符,停止位=1,其它保持默认设置为例。

图2RS485端口设置
最后在“硬件标识符”里确认一下硬件标识符为271,如下图3所示:

图3硬件标识符
2添加启动OB
在项目树下选择“CPU1215CDC/DC/DC”→“程序块”→“添加新块”,在弹出的窗口中选择“OB组织块”→“Startup”,添加启动OB100,如下图4所示:

图4添加启动OB
3调用MB_COMM_LOAD指令
为使端口一启动就被设置为ModbusRTU通信模式,可在OB100中调用“MB_COMM_LOAD”指令。调用“MB_COMM_LOAD”指令时会自动弹出创建相应背景数据块的界面,如下图5所示:

图5调用MB_COMM_LOAD指令
注意:“MB_COMM_LOAD”指令输入位“REQ”需使用上升沿触发。由于OB100只在S7-1200启动时执行一次,因此,此例中将“REQ”设为“TRUE”。

图6MB_COMM_LOAD指令
MB_COMM_LOAD指令参数意义如下表1所示:
引脚
说明
EN
使能端
REQ
在上升沿执行该指令
PORT
通信端口的硬件标识符
BAUD
波特率选择:3600,6000,12000,2400,4800,9600,19200,38400,57600,76800,115200(注意:所有其它值均无效)
PARITY
奇偶检验选择:0-无;1-奇校验;2-偶校验
FLOW_CTRL
流控制选择:0-(默认值)无流控制
RTS_ON_DLY
RTS延时选择:0-(默认值)
RTS_OFF_DLY
RTS关断延时选择:0-(默认值)
RESP_TO
响应超时:默认值=1000ms。MB_MASTER允许用于从站响应的时间(以毫秒为单位)。
MB_DB
对MB_MASTER或MB_SLAVE指令所使用的背景数据块。
DONE
完成位:指令执行完成且未出错置1
ERROR
错误位:0-未检测到错误;1-检测到错误。在参数STATUS中输出错误代码。
STATUS
表1MB_COMM_LOAD指令参数意义
4创建MB_HOLD_REG数据块
注意:MB_HOLD_REG使用的DB访问类型必须是标准与S7-300/400兼容。

图7创建MB_HOLD_REG数据块
5调用MB_SLAVE指令
在OB1中调用MB_SLAVE指令,调用该指令时会自动弹出创建相应背景数据块的界面,如下图8所示:

图8调用MB_SLAVE指令
S7-1200作为ModbusRTU从站,MB_HOLD_REG指向Modbus保持寄存器数据块的指针。设置如下所示:MB_HOLD_REG=P1616168187?
输出状态字”STATUS“=16#8187表示指向MB_HOLD_REG指针无效。以下两种情况会造成如上错误:
程序中不存在“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。
在创建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时选择了“仅符号寻址”。
解决方法分别如下:
新建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块。
创建“MB_SLAVE”指令的输入引脚“MB_HOLD_REG”对应的DB块时只能选择了“标准与S7-300/400兼容”。

公众号





