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

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5718|回复: 3

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

[复制链接]
发表于 2016-1-18 22:13 | 显示全部楼层 |阅读模式
  在陈吕洲书中有这么一句话,ARDUINO串口通信是没有奇偶校验的,也就是说一个字节加起始加停止位10bit数据。而在MODBUS RTU协议里,讲到一个字节的传输无论有没有校验位,都为11bit数据(无奇偶校验位时有2个停止位)。那么用ARDUINO怎么完成RTU的功能啊,请教下。
发表于 2016-1-18 23:56 | 显示全部楼层
这个问题,我还真没深究过,书上主要是参考AVR手册的描述:

串行数据帧由数据字加上同步位 ( 开始位与停止位 ) 以及用于纠错的奇偶校验位构成。 USART接受以下30种组合的数据帧格式:
•1 个起始位
•5 、 6、 7、 8或9 个数据位
•无校验位、奇校验或偶校验位
•1 或2个停止位
数据帧以起始位开始,紧接着是数据字的低位,数据字多可以有9个数据位,以数据 的高位结束。如果使能了校验位,校验位将紧接着数据位,后是结束位。当一个完整 的数据帧传输结束后,可以立即传输下一个新的数据帧,或使传输线处于空闲状态。
发表于 2016-1-19 00:03 | 显示全部楼层
另外RTU是什么?有什么特殊需求么?
 楼主| 发表于 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通讯这里卡了我好久啊,都是不太成功

点评

关于Arduino输出具体怎样,建议拿示波器打一下; 另外,modbus见: https://github.com/stephane/modbusino https://github.com/andresarmento/modbus-arduino  详情 回复 发表于 2016-1-19 09:34
发表于 2016-1-19 09:30 | 显示全部楼层
参考看看这个吧 ~ 我也没使用过Modbus !
http://playground.arduino.cc/Code/ModbusMaster ModBus.zip (10.13 KB, 下载次数: 8)

发表于 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
 楼主| 发表于 2016-1-19 09:57 | 显示全部楼层
奈何col 发表于 2016-1-19 09:34
关于Arduino输出具体怎样,建议拿示波器打一下;
另外,modbus见:
https://github.com/stephane/modbusi ...

哎,我自己是电气工程师,喜欢捣鼓点电子,无奈工具不全啊,没有示波器。像5楼那个朋友发的,计算时就是按11bit算的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 05:23 , Processed in 0.086347 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表