ModbusRTU 程序设计及轮询编程

ModbusRTU 程序设计及轮询编程


在指令—–通信处理器——ModbusRTU通信【新款】,可以防止轮询卡死,,也有Modbus通信【老款】,无论是做主站还是从站首先调用Modbus_Comm_Load_DB指令;

  • PORT添加硬件号,在组态时要添加CM_1241模块才有此项;

  • PARITY是奇偶校验位,0是无校验,1是奇校验,2是偶校验;
  • RESP_TO 是主站等待从站的响应时间,也就是当主站发送请求帧之后,等1秒的时间,如果在这个时间内从站并没有应答帧的回复,那主站认为这个从站已经丢失了。里面有些信息可以在背景块右击———转到——–定义中查看。

  • MB_DB这个是主站与从站关联的管脚;它是标签2数据DB块Modbus_Master_DB中的MB_DB,将这个引脚给标签1即可。

因为是PLC是做主站的,所以还要调用主站指令Modbus_Master指令;

初始化完成以后去触发主站的管脚。

  • MB_ADDR 向从站号为1号的设备写数据;
  • MODE中0是读1是写;
  • DATA_ADDR 从站的数据地址为48093
  • DATA_PTR 就是要将这里的数据写到从站的48093处;

在Modbus RTU轮询时,不管有多少步,所有的Modbus Master的背景DB块都是相同的。

完整代码如下图所示:

在第6个标签处是打开Modbus_Comm_Load_DB指令的背景DB块,将里面的模式改为4,代表使用的是485的模式;否则的话这个新的ModbusRTU指令是不会运行的。

在每一步下都要写上故障处理代码,其中move的In口由于是同一个DB块,所以输入都一样;但是Modbus_Comm_Load指令的背景DB不一样,但是每个都是IN脚是背景DB块中的STATUS;

轮询卡死

轮询卡死busy一直为1,无done也无error,断电重启后恢复的可能原因:

1、程序问题,通过时间控制轮询,并未采用指令的done或error,并非上升沿触发Modbus_Master指令的REQ,而是持续的高电平;

2、通信质量不好,如EMC,特征阻抗不匹配造成通信模块宕机;

3、所有问题都排查了,还不能解决,总不能总是断电重启吧

ModbusRTU 程序设计及轮询编程

转载请注明出处:  https://www.cntworld.cn
智能工控 » ModbusRTU 程序设计及轮询编程

发表回复

提供最优质的资源集合

立即查看 了解详情
文章加载时间:0.005 秒