>文末有55个实战案例资料 导读:自动化设备中经常有数据需要进行交互,而PLC之间或者PLC与第三方设备之间通信的话有很多种协议,比如S7,Modbus RTU, Modbus TCP以及TCP/IP等等。那么比较广泛使用的还是Modbus RTU协议,那么本文借助2个1200PLC之间通信,帮助大家理解1200PLC的Modbus 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.DBW20~DB3.DBW26 四个字长的数据写入到 CPU1215 Modbus RTU 从站 40003 开始的保持寄存器。 ③ CPU 1217 Modbus RTU 主站将 DB3.DBX40.0~DB3.DBX40.7 八个位的数据写入到 CPU1215 Modbus RTU 从站 Q0.0~Q0.7。 2.程序编写 Modbus RTU主站程序 ① 硬件组态并且新建DB数据块
②在S7-1200启动的第一个扫描周期,将数值4传送到在“Modbus_Comm_Load.DB”MODE,将工作模式设置为半双工RS485两线模式
③在S7-1200启动的第一个扫描周期,将Modbus RTU通信的RS485端口参数初始化为波特率:9600,无校验,无流控,响应超时1000ms(Modbus 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.DB”MODE,将工作模式设置为半双工 RS485两线模式
③在S7-1200启动的第一个扫描周期,将Modbus RTU通信的RS485端口参数初始化为波特率:9600,无校验,无流控,响应超时1000ms(Modbus RTU默认为数据位:8位,停止位:1位) MB_DB指向"ModbusSlave"指令所使用的背景数据块引用
④设置Modbus RTU从站地址 MB_ADDR=2,定义Modbus RTU 保持寄存器地址 MB_HOLD_REG
最近有很多小伙伴说要案例书籍,说是手机上看文章不是很方便,我抽时间把55个实战案例全部整理出来,案例都是比较典型的,其中包括气缸控制程序、报警程序、程序框架、运动控制程序封装、模拟量控制变频器、通信等实战案例。需要的可以加我微信:biao467524527,如果加不上可以私信我。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |