[西门子] 一文学会:1200PLC之间Modbus RTU通信

[复制链接]
查看82 | 回复0 | 2024-11-2 08:50:58 | 显示全部楼层 |阅读模式
>

文末有55个实战案例资料

导读:自动化设备中经常有数据需要进行交互,而PLC之间或者PLC与第三方设备之间通信的话有很多种协议,比如S7Modbus RTU, Modbus TCP以及TCP/IP等等。那么比较广泛使用的还是Modbus RTU协议,那么本文借助21200PLC之间通信,帮助大家理解1200PLCModbus RTU通信,也可以借助这个案例理解多个数据之间轮询方法。

1.控制要求:

CPU 1217 作为 Modbus RTU 主站, CPU 1215 作为 Modbus RTU 从站,实现 S7-1200 PLC 两个串口通信模块 CM1241 RS422/485 之间的 Modbus RTU 通信,主站轮询读写从站数据。
① CPU 1217 Modbus RTU
主站读取 CPU1215 Modbus RTU 从站保持寄存器 40001 地址开始的两个字长的数据并存储到 DB3.DBW0 DB3.DBW2
② CPU 1217 Modbus RTU
主站将 DB3.DBW20DB3.DBW26 四个字长的数据写入到 CPU1215 Modbus RTU 从站 40003 开始的保持寄存器。
③ CPU 1217 Modbus RTU
主站将 DB3.DBX40.0DB3.DBX40.7 八个位的数据写入到 CPU1215 Modbus RTU 从站 Q0.0Q0.7

2.程序编写

Modbus RTU主站程序

硬件组态并且新建DB数据块

S7-1200启动的第一个扫描周期,将数值4传送到在“Modbus_Comm_Load.DBMODE,将工作模式设置为半双工RS485两线模式

③在S7-1200启动的第一个扫描周期,将Modbus RTU通信的RS485端口参数初始化为波特率:9600,无校验,无流控,响应超时1000msModbus RTU默认为数据位:8位,停止位:1位)

MB_DB指向"Modbus_Master"指令所使用的背景数据块引用

④第一步:"Master.Step"=1时触发“Modbus_Master”指令读取 Modbus RTU 从站地址2保持寄存器40001地址开始的两个字长的数据,将其存放于“DATA_PTR”指定的地址中

⑤第一步完成位或错误位作为条件转到第二步,使能MOVE指令,对步地址"Master. Step"赋值2

⑥第二步:"Master.Step"=2时触发“Modbus_Master”指令,将存放于“DATA_PTR”指定的地址中的4个字数据写到Modbus RTU从站40003地址开始的保持寄存器

⑦第二步完成位或错误位作为条件转到第三步,使能MOVE指令,对步地址"Master.Step"赋值3

⑧第三步:"Master.Step"=3时触发“Modbus_Master”指令,将存放于“DATA_PTR”指定的地址中的8位数据写到Modbus RTU从站Q0.0-Q0.7

⑨返回第一步:"Master.Step"=3,且第三步完成位或错误位作为条件回到第一步,使能MOVE指令,对步地址"Master.Step"赋值1


Modbus RTU从站程序

①硬件组态并且新建DB数据块

②在S7-1200启动的第一个扫描周期,将数值4传送到在“Modbus_Comm_Load.DBMODE,将工作模式设置为半双工 RS485两线模式

③在S7-1200启动的第一个扫描周期,将Modbus RTU通信的RS485端口参数初始化为波特率:9600,无校验,无流控,响应超时1000msModbus RTU默认为数据位:8位,停止位:1位)

MB_DB指向"ModbusSlave"指令所使用的背景数据块引用

④设置Modbus RTU从站地址 MB_ADDR=2,定义Modbus RTU 保持寄存器地址 MB_HOLD_REG

最近有很多小伙伴说要案例书籍,说是手机上看文章不是很方便,我抽时间把55个实战案例全部整理出来,案例都是比较典型的,其中包括气缸控制程序、报警程序、程序框架、运动控制程序封装、模拟量控制变频器、通信等实战案例。需要的可以加我微信:biao467524527,如果加不上可以私信我。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则