zoukankan      html  css  js  c++  java
  • 串口通信

    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、数据缓冲区、移位寄存器

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

  • 相关阅读:
    [转]三五个人十来条枪 如何走出软件作坊成为开发正规军
    [转]asp.net页面字体变大问题总结
    [练手7]传值和传引用区别
    [练手3]选择排序
    [练手5]希尔排序
    oracle用select for update 中断后无法操作表的处理:杀掉SESSION
    [转]最省时管理法:让你一天随意
    [练手4]插入排序
    没有对“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”的写访问权限
    NUnit单元测试编写指南
  • 原文地址:https://www.cnblogs.com/jndx-ShawnXie/p/9395554.html
Copyright © 2011-2022 走看看