本期分享
Modbus RTU 通讯是设备数据交互的常用方式,而S7-1214C PLC 低版本固件在指令调用时可能会出现隐蔽问题。
西门子工业技术论坛【精华之星】WWCWWC 分享的 Modbus RTU 通讯调试经验,不仅详细记录了问题解决全过程,更精准戳中低版本 CPU 指令调用的核心痛点,对一线调试人员极具实用价值,得到了论坛用户的点赞和好评!今天就为大家进行分享~
近段时间,为配合集团公司OA数据采集优化方案的落实,将公司内部各设备具有流量、电能管理硬件特性的设备,创建Modbus rtu通讯从站条件,在调试过程中遇到的一些错误,进行重新认识和学习。
对于cpu版本在V2.2以下的,在通讯指令调用时,该版本尚不支持Modbus rtu指令,只能调用Modbus的指令应用,现将自己测试过程中的应用错误认识进行了整理。
组态和应用
1) 组态cpu,图示:CPU S7-1214C,版本 V2.2
2) 添加CB1241 RS485信号板,版本V1.0,图示:
通讯测试参数基本按按默认值,等待时间有修改。
3) Modbus rtu通讯指令的调用情况,图示:
Modbus rtu下面是没有可以调用的通讯指令,在Modbus指令下有可以调用的通讯指令。
4) 将Modbus rtu初始化及从站指令拖放到编辑区,填写管脚,图示:
初始化指令。
供主站读写DB3.DBD0和DB3.DBD4的2个REAL数据。
5) 将这些“正常”的组态及程序下载到cpu中,监控没有报警,图示:
初始化指令正确完成。
从站SLAVE指令也没有报警。
6) 启动串口调试软件,设置相同的通讯参数,在发送器编辑读取5#从站的DB3.DBD0和DB3.DBD4的数据,16#进制数表示,图示:
发送读取从站数据给PLC,接收区无反应,重新检查、确认硬件接线,具体描述在帖子中有具体说明双方的硬件连接,【S7-200smart主站与s7-1200从站的Modbus rtu通讯】,https://www.ad.siemens.com.cn/club/bbs/post_1950172_50_0_1.html#anch,没有错误。
但是,串口调试软件的接收区就是没有从站数据的接收,检查数据块DB3,确实有测试数据写入,且这个并不是调试软件没有接收到从站数据的要因。反反复复检查,始终没有找到问题的所在,调试一度进入死胡同。
7) 从西门子技术手册中的例子程序,都是在MB_COMM_LOAD的REQ管脚,应该是沿触发的思路,将测试初始化触发位M10.0设置为0,图示:
8) 重新在串口调试软件中发送同样的读取从站数据,图示:
05:5#从站
03:功能码,读取从站数据
08:8个字节长度的数据
41:实际的起始数据
。。。:。。。
00:实际的结束数据
34:CRC校验
FB:CRC校验
数据能够正常读取从站的数据。
无法正常通讯的原因是:MB_COMM_LOAD的REQ管脚始终为ON值引起!希望在调用低版本CPU的用户引起注意。
小结:
没有理解官方技术手册中的具体说明,图示:
OB100的MB_COMM_LOAD的REQ管脚TRUE,是建立在OB100,相当于沿触发,而我在实际应用是OB1中调用,正确应用应该是沿触发,修改M10.0 = 0,也相当于沿触发。如果没有将M10.0设置为0,相当于每应该周期始终初始化,由此与串口调试软件通讯不成功。
再次感谢西门子工业技术论坛用户 WWCWWC 的无私经验分享,正是这种实战干货的传递,帮助更多技术人员少走弯路、提升调试效率。希望本文内容能为大家的工作提供有效助力,也期待更多行业同仁分享实战经验,共同推动工业自动化技术的高效应用!






