求助,关于陈吕洲书中的一句话-Arduino中文社区 - Powered by Discuz! Archiver

kagetang 发表于 2016-1-18 22:13

求助,关于陈吕洲书中的一句话

在陈吕洲书中有这么一句话,ARDUINO串口通信是没有奇偶校验的,也就是说一个字节加起始加停止位10bit数据。而在MODBUS RTU协议里,讲到一个字节的传输无论有没有校验位,都为11bit数据(无奇偶校验位时有2个停止位)。那么用ARDUINO怎么完成RTU的功能啊,请教下。

奈何col 发表于 2016-1-18 23:56

这个问题,我还真没深究过,书上主要是参考AVR手册的描述:

串行数据帧由数据字加上同步位 ( 开始位与停止位 ) 以及用于纠错的奇偶校验位构成。 USART接受以下30种组合的数据帧格式:
•1 个起始位
•5 、 6、 7、 8或9 个数据位
•无校验位、奇校验或偶校验位
•1 或2个停止位
数据帧以起始位开始,紧接着是数据字的低位,数据字多可以有9个数据位,以数据 的高位结束。如果使能了校验位,校验位将紧接着数据位,后是结束位。当一个完整 的数据帧传输结束后,可以立即传输下一个新的数据帧,或使传输线处于空闲状态。

奈何col 发表于 2016-1-19 00:03

另外RTU是什么?有什么特殊需求么?

kagetang 发表于 2016-1-19 08:18

MODBUS RTU就是一种通讯协议,我看了很多教程里反复强调RTU发送一个8bit的数据是需要11个bit的
•1 个起始位
•8个数据位
•无校验位      奇校验或偶校验位
•2个停止位       1 个停止位

同时,我也参考了很多MODBUS的库文件,里面算到T1.5字符时间是,问题就来了
有10bit算法的,就是1.5x10x1000x1000/baud=15000000/波特率
也有11bit算法的,就是1.5x11x1000x1000/baud=16500000/波特率

加上我自己不懂ARDUINO串口通讯到底是10bit还是11bit,所以我不知道该怎么选了

MODBUS通讯这里卡了我好久啊,都是不太成功

hmjack2008 发表于 2016-1-19 09:30

参考看看这个吧 ~ 我也没使用过Modbus !
http://playground.arduino.cc/Code/ModbusMaster

奈何col 发表于 2016-1-19 09:34

kagetang 发表于 2016-1-19 08:18
MODBUS RTU就是一种通讯协议,我看了很多教程里反复强调RTU发送一个8bit的数据是需要11个bit的
•1 个起始 ...

关于Arduino输出具体怎样,建议拿示波器打一下;
另外,modbus见:
https://github.com/stephane/modbusino
https://github.com/andresarmento/modbus-arduino

kagetang 发表于 2016-1-19 09:57

奈何col 发表于 2016-1-19 09:34
关于Arduino输出具体怎样,建议拿示波器打一下;
另外,modbus见:
https://github.com/stephane/modbusi ...

哎,我自己是电气工程师,喜欢捣鼓点电子,无奈工具不全啊,没有示波器。像5楼那个朋友发的,计算时就是按11bit算的
页: [1]
查看完整版本: 求助,关于陈吕洲书中的一句话