900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > modbus rtu与计算机通讯 关于modbus rtu一个主站与多个从站通信的一点总结

modbus rtu与计算机通讯 关于modbus rtu一个主站与多个从站通信的一点总结

时间:2021-09-21 22:19:34

相关推荐

modbus rtu与计算机通讯 关于modbus rtu一个主站与多个从站通信的一点总结

一、文章背景

1个master,30个slaver,485 RTU通信。

master主动读取slaver的寄存器信息,下面用来做啥就省略了,本文只介绍如何处理通信逻辑。

关于协议的基本信息省略。

由于计算机加密,文字都是在博客编辑框中现写的。

二、注意点

1、 master不可同时与30个从站通信,必须挨个轮询,而且一问一答,串口的半双工特性就决定了这种通信方式,同一时刻只允许一个人占用这个信道。

2、 广播模式不适用该项目,广播模式通常用于写入slaver,而且slaver不回应数据。

3、 slaver回应时,可能会分几次回应,这一点与tcp类似。

4、 一个机器接30个串口设备,用的扩展板卡,光线缆就一捆,前面说了需要挨个轮询,通常一次通信大约在100ms,30个设备轮询完了就需要3秒钟了,特别要注意这一点,如果对实时性要求很高,则必须将slaver分组,比如用三个串口,每个串口接10个slaver,本文就介绍这种方法。

三、实现方法

1、 使用三个串口、每个串口接10个slaver。相当于三个master,每个master与10个slaver通信。

2、 建立slaverid的映射关系,master编号1、2、3,每组slaver编号1、2、3、4…10,主站获取slaver数据后,往业务层反馈数据时加上master编号,用两个字节表示,第一个字节是主站编号,第二个字节是slaver编号。这样业务层根据id映射就能区分出哪一个slaver设备反馈的数据。

3、 业务层与通信层交互时引入一个转换回调层。

业务层---->回调层(业务数据结构转换成adu)---->通信层

通信层---->回调层(adu转换成业务数据结构)---->业务层

4、 master向slaver发送请求后,需要等到回应后,才能执行下一步操作,前面说了回应可能分几次进行,处理回应数据方式如下:

(1) 根据发送的请求,我们可以知道期望的回应是什么,比如读一个线圈(slaveID=1线圈地址2),则发送adu为01 01 0002 0001 CRC,期望返回是01 01 01 XX,异常则是01 80 XX CRC,因此可以读取功能码判断后面期望的adu的总长度到底是多少。

(2) 回应获取以后crc校验,然后将数据转发给回调层处理,一个slaver的通信逻辑就算完成了,然后执行下一个。

(3) 异常情况,等回应需要加上超时(500ms),把超时的slaver信息回调给上一业务层。

四、总结

要扩展的话,就创建多个master对象就行了,上层业务处理映射关系就行。把启用多少个master及slaver映射放到配置文件,这样 扩展就很方便了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。