求教:弄不懂数据通信中通信速率设置与报文帧格式的区别
最近在看MODBUS通信协议,当中提到开始进行MODBUS通信时,先得对通信双方的端口初始化,比如速率9600,数据长度8bit,无校验,一个起始位,一个停止位,总计11位,这个能理解。现在的问题是:一个标准的MODBUS报文格式是这样的:
以主站读取从站的线圈状态为例:
站号 +功能码+线圈首地址+需要读取的线圈个数+CRC校验
01 01 0000 000A BC0D
上面的帧格式中,已经有很多位了,不仅仅只有8位,那么这些信息与端口初始化中的8bit是什么关系?
恳请知道的老师给与解答。谢谢了!
每次8位,分次传送。 一个标准字节8个位,不管你一个数据包多大,都得拆成8个一组8个一组。 在单片机的收发端口,按需要的字节模式设置好,每个字节的附加位都是由硬件自动完成的,无须在程序中处理,程序只需顺序读取或发送即可。
数据长度8位是指物理层的一帧数据中,有效的数据(用户数据)是8位,比如实际发送11位,有效数据8位
你举的例子,数据总长度是64位,那么需要8帧才能发送完成,也就是这些数据并不是连在一起直接发送出去,而是分成8位一组, 每一组都要添加起始位和停止位等,所以实际发送的位数是64 + 3*8 报文是:
站号8位+功能码8位+首址16位+长度16位+CRC校验16位——共有8个字节内容(64位)。
依次用11位发送8位信息。也就是共要发送88位。这样是否明白? 数据长度8bit,无校验,一个起始位,一个停止位,总计11位,这个你可以理解为字节帧。若干个字节帧构成一个数据帧 站号 +功能码+线圈首地址+需要读取的线圈个数+CRC校验 。数据帧之间的间隔可以约定特定字符,也可以用定时器,比如两个字节之间的时间小于20ms认为是一个数据帧的。收完一帧数据就按协议分析各个字段 感谢上面各位老师的解答,终于解开了我多年的困惑。 本帖最后由 addorr 于 2021-7-13 00:24 编辑
一个是硬件层的定义,一个是软件层的定义,这样说你明白了吧,硬件层传输的是以8bit【一个字节】为单位的二进制数据,uart就是硬件层约定的协议传递一个字节前后都加一个位分别是开始和停止位,如同软件层的modbus rtu协议约定的前后3.5个字符间隔作为开始和停止一样的道理!modbus是软件层约定好的协议,单位自己定!当然这是施耐德定的!如果你够把炮你自己也可以定一个协议,前提是让别人的设备用你的协议来迁就你!
页:
[1]