串口通信

落爺英雄遲暮 提交于 2019-12-20 03:24:47

1、并行通信

 

2、串口通信

  (1)同步通信(synchronous data communication,SYNC)

  指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),保证了通信双方在发送和接收数据时具有完全一致的定时关系。

  信息帧,每帧的开始用同步字符来指示。

  一次通信只能连续传送一帧信息。

  同步字符+数据字符+CRC校验码

  传输线路始终保持连续的字符位流,如果没有数据传输,要用专用的“空闲”字符或同步字符填充。

  举例:欧姆龙PLC-HostLink协议。  

 

  (2)异步通信(asynchronous data communication,ASYNC)

  字符之间没有固定的时间要求,而每个字符中的各位以固定的时间传送。

  收、发双方取得同步的方法是采用在字符格式中设置起始位和停止位。

  停止位和空闲位都是高电平(逻辑值为1)。

  异步通信一个信息帧只包含一个字符,但是包括了起始位、数据位、奇偶校验位和停止位。

  举例:modbus协议常见,HPZ80三项电力仪表的Modbus-RTU通信。

 

  每一次完整接收数据,最后是包含有OK字符的,接收数据的开头是发送指令的字符,例如发送“AT+CREC=1,1,0”指令,返回的数据中是包含“AT+CREC=1,1,0”这个字符的,然后数据尾部返回OK表示是成功的

**************************c#是使用流来处理串口的,所以不是存在准确的间隔时间的。串口驱动并不一定能及时引发DataReceived事件。而且串口的不确定性也不能用时间间隔作为数据的分隔。下位机应使用特定的通信协议来传送数据。电脑则使用默认的每来一个字节触发一次DataReceived,但这个触发时机也是不准的,不可能真的每来一个字节就会触发一次DataReceived。当收来下位机发来的起始字符就说明收数开始,可一直收到结束字符。使用串口一定要对数据进行CRC校验。通常来这样设计通信协议:起始字符 数据 结束字符 CRC校验码。校验正确后就可对数据进行处理。

  --------******Modbus-RTU通信时,以二进制发送和接收数据,而HostLink通信时候,以字符的ascii形式发送数据,取回时以文本方式取回。Modbus也有ascii形式。

 

3、调制和编码

  数字信号或模拟信号调制成模拟信号,最后经过解调还原成数字或模拟信号。

  数字信号或模拟信号编码后变成数字信号,然后经过解码变成数字信号或者模拟信号。

4、编码形式

  不归零编码(non-return-to-zero,NRZ)

  曼切斯特编码(Manchester):自同步编码,因为在每一位中间会有电压跳变。

  差分曼切斯特编码(differential Manchester encoding):自同步编码,每一位之间有跳变则是“0”,否则就是“1”。

 

5、数据缓冲区、移位寄存器

  由于数据串行传送时,时间精度非常高,软件达不到这个要求,因此,要先将数据放入缓冲区,也就是硬件层的移位寄存器中,然后硬件发现寄存器中有数据,则进行发送。接收数据也是一样,先收入缓冲区,然后从缓冲区取出。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!