[应用相关] 基于STM32 modbus rtu 从机设计--------------1理论篇

[复制链接]
3044|21
 楼主| hanzhen654 发表于 2019-5-14 10:12 | 显示全部楼层 |阅读模式
1.       通讯协议
01.  硬件层协议:解决0和1的可靠传输,常有RS232、RS485、CAN、IIC、SPI …
02.  软件层协议:解决传输目的,常有Modbus、TCP/IP、CANopen …
137385cda23ee559fd.png

 楼主| hanzhen654 发表于 2019-5-14 10:12 | 显示全部楼层
RS485 模型
914925cda240fa3b5d.png
 楼主| hanzhen654 发表于 2019-5-14 10:13 | 显示全部楼层
2.        主从模式
01.        系统中只有一个设备是主机。
02.        系统中所有的从机不可以主动向主机发数据。
03.        系统中的主机和所有从机上电后处于接受状态(监听状态)。
04.        任何一次数据交换有主机发起。
01.        主机将自己转为发动态。
02.        主机按照预先约定的格式发出寻址数据帧,同时恢复为接受态。
03.        恢复接受态的目的是等待寻址的从机做回应。
 楼主| hanzhen654 发表于 2019-5-14 10:13 | 显示全部楼层
3.        基于485总线的Modbus
861345cda2458bc6fd.png
 楼主| hanzhen654 发表于 2019-5-14 10:14 | 显示全部楼层
1.主从模式:整个系统只有一个主机,每个从机必须有一个唯一的地址(0-247)
0地址是广播地址,主机保留,即主机向0地址发送数据包时,发送所有从设备,所有的从设备都不相应。
 楼主| hanzhen654 发表于 2019-5-14 10:14 | 显示全部楼层
2.        Modbus主机寻址格式(两种传输方式)
01.        Rtu方式,也是十六进制方式,该方式执行效率高。比如发送0x03: 总线上传输数据形式为: 0000 0011
02.        ASC方式,该方式便于调试,比如发送0x03:将数据0和3转为’0’和’3’ 即是0x30 和0x33 总线上传输数据形式为: 0011 0000  0011 0011
 楼主| hanzhen654 发表于 2019-5-14 10:15 | 显示全部楼层
3.Rtu方式:
852585cda24a722087.png
 楼主| hanzhen654 发表于 2019-5-14 10:15 | 显示全部楼层
4.Rtu帧结束方式:
从机以接受数据停止时间到达3.5字符以上,认为主机的寻址帧完成,并开始处理。例如:波特率9600bit/s 每位数据传输时间:100000 us/9600 = 104us ,一个字符(10位)传输时间:104us*10 =1040us, 3.5个字符传输时间:1040*3.5 = 3645us  4ms
 楼主| hanzhen654 发表于 2019-5-14 10:15 | 显示全部楼层
5.ASC方式:
253585cda24d597191.png
 楼主| hanzhen654 发表于 2019-5-14 10:16 | 显示全部楼层
6. LCR校验:
01.        地址码+功能码+数据1+数据2+…+数据n。  相加
02.        (地址码+功能码+数据1+数据2+…+数据n)%256  取余
03.        ~((地址码+功能码+数据1+数据2+…+数据n)%256) 取反
04.        ~((地址码+功能码+数据1+数据2+…+数据n)%256)+1  加1
 楼主| hanzhen654 发表于 2019-5-14 10:16 | 显示全部楼层
Modbus从设备回应数据包格式
01.        回应数据与主机查询数据包格式一致
02.        正常回应:功能码与主机发送的功能码一致(1-127)
03.        异常回应:功能码要在收到的功能码+128.
 楼主| hanzhen654 发表于 2019-5-14 10:16 | 显示全部楼层
modbus从机协议实现
01.        硬件上具备串口或485接口。
02.        硬件上需要一个定时器,精确到ms级别。
 楼主| hanzhen654 发表于 2019-5-14 10:17 | 显示全部楼层
Modbus硬件接口电路如下:
726005cda2525a2277.png
heimaojingzhang 发表于 2019-6-12 09:35 | 显示全部楼层
好的讲解的非常详细
keaibukelian 发表于 2019-6-12 10:01 | 显示全部楼层
modbus到底是什么方式呢  一直搞不清楚
labasi 发表于 2019-6-12 10:06 | 显示全部楼层
keaibukelian 发表于 2019-6-12 10:01
modbus到底是什么方式呢  一直搞不清楚

Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De facto),并且现在是工业电子设备之间常用的连接方式。 Modbus比其他通信协议使用的更广泛的主要原因有:

公开发表并且无版权要求
易于部署和维护
对供应商来说,修改移动本地的比特或字节没有很多限制
Modbus允许多个 (大约240个) 设备连接在同一个网络上进行通信,举个例子,一个由测量温度和湿度的装置,并且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和远程终端控制系统(RTU)。
paotangsan 发表于 2019-6-12 10:11 | 显示全部楼层
共性讲解的非常到位
renzheshengui 发表于 2019-6-12 10:18 | 显示全部楼层
楼上列举的都可以用这种协议吗
keaibukelian 发表于 2019-6-13 12:59 | 显示全部楼层
labasi 发表于 2019-6-12 10:06
Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻 ...

非常感谢热心解答
labasi 发表于 2019-6-13 13:12 | 显示全部楼层

客气了 应该的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

1766

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部