PLC自由口实现Modbus多站点轮询研究
扫描二维码
随时随地手机看文章
引言
在PLC控制系统中,Modbus串行通信是PLC控制系统与外部设备进行通信、监控外部信号的重要方式。西门子PLC在控制系统的Modbus通信中,更多的是作为主站与多个从站设备进行通信。因此,本文主要研究西门子PLC如何采用自由口(AsCII协议)实现Modbus多站点轮询。
#1odbusRTU多站点轮询原理
本文研究ModbusRTU多站点轮询通信的前提是西门子PLC支持自由口实现Modbus通信。鉴于此前提,本文采用AsCII协议仿照Modbus主站协议进行多站点轮询通信。
在AsCII协议驱动实现多站点轮询的过程中,采用的处理方式如下:
(l)基本模式:主站主动发出请求,从站根据主站请求作出响应。
(2)数据帧:在发送或响应数据帧中要包含有站点标识的信息。
(3)实现方法:定时轮询,直接启动下个作业,延时启动下个作业。
(4)校验、错误处理机制:CRC、等待、丢弃、重试等,其中CRC是ModbusRTU的CRC校验[l],是非常重要的环节。第一,自编CRC校验功能来实现校验:第二,依据从站提供的数据信息,提前计算出CRC校验码,直接填入到数据帧的最后。
(5)各个从站响应时间:需要单独测试以便获取每个从站响应主站的响应时间,得出时间的最大值,以此作为从站未响应主站的超时时间。
上述是本文采用的合理的轮询处理方式,在实际应用中,针对不同的通信对象,可以具体分析并作出相应的轮询处理。
2轮询机制数据帧格式
根据表l中ModbusRTU数据帧格式[2],主站(基于AsCII协议)通过发送不同地址标识字符的帧来轮询不同的从站,同时从站根据地址字符来判断是否是给自己的消息,并据此做出相应的处理。AsCII数据帧格式如表2所示。
3主站轮询时序
依据前面介绍的轮询原理,本文采用合理的轮询处理方式。西门子PLC串口作为主站进行从站轮询时,启动发送作业,发送作业完成位D0NE置位,主站接收功能块将从站响应的数据送回给CPU处理,接收作业完成位NDR置位:同时主站构造下条请求指令,将请求指令传递到发送区域,并更新下一条指令的接收区域,启动下一个从站的发送作业。
注意当发生故障时,可以从以下3个方面进行处理:
(1)发送功能块无法完成,报错位ERR0R置位,则判断发送作业失败,启动下一个从站的发送作业。
(2)发送作业成功,而接收功能块的报错位ERR0R置位,则判断发送作业失败,启动下一个从站的发送作业。
(3)发送作业成功,而接收功能块的完成位NDR和报错位ERR0R由于某些故障无法置位,通信无法启动下一个从站的发送作业,所以在启动发送作业的同时启动超时定时器,即定时器计时结束时接收功能块的完成位NDR和报错位ERR0R仍然没有置位,则判断发送作业失败,启动下一个从站的发送作业。
当发生故障时,可以向当前站点再次发送请求,本文选择的重复次数是1次。
本文以CP341作主站为例,CP341作主站轮询从站时序图如图l所示,关于功能块的信息如图2、图3所示。主站通过发送功能块FB8向s1avel发送请求指令,由于slavel断线故障,没有收到主站请求,无法返回数据,且接收功能块FB7的完成位NDR和报错位ERR0R无法置位,则当超时定时器时间t0超时,主站判断本条指令失败,同时发起下条指令访问s1ave2,s1ave2收到主站请求后,将响应数据返回给主站CP34l,主站将接收到的数据保存到指定位置,接收功能块D0NE置位,同时触发下一次发送作业。
注意,超时定时器时间t0(t0设置为秒级数据)大于主站接收到从站响应数据时间t,t是主站发出请求后直至接收到从站数据的时间。即t0>max(tl,t2,…,tl),其中tl是主站向第l个从站发出请求后直至接收到第l个从站数据的时间。
4主站轮询流程
本节设计了初始化流程和主站轮询流程,具体如下:
第一,初始化流程。主要完成CP模块的参数化、轮询计数器、复位接收缓冲区以及发送数据帧等方面的工作。
第二,主站轮询流程。在系统初始化完成后,手动启动第一次轮询作业,先轮询l#从站,如果在指定的超时时间内接收到1#从站返回的数据,则轮询2#从站,如果在指定的超时时间内接收到2#从站返回的数据,则一次完整的轮询结束,自动启动新一轮的轮询。主站轮询流程图如图4所示。
如果在指定的超时时间内不能接收到从站的返回数据或接收错误,则跳过本站,开始轮询下一个站点。以上内容是本文设计的西门子PLC自由口实现Modbus多站点轮询的方案。
5结语
综上所述,PLC自由口实现Modbus多站点轮询的原理是比较灵活的,可以根据控制系统的要求以及从站的信息,在轮询原理基础上进行相应灵活的组合,实现最佳通信。本文提出的该方案最突出的优势是这种轮询处理方式复制性强、灵活简便、成本低廉,可为许多工程项目带来直接的经济利益,有着非常广泛的应用前景。