当前位置:文档之家› 串口通信协议

串口通信协议

1 串口串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal SerialBus或者USB混淆)。

2 串行通信的传输方向2.1 单工单工是指数据传输仅能沿一个方向,不能实现反向传输。

2.2 半双工半双工是指数据传输可以沿两个方向,但需要分时进行。

2.3 全双工全双工是指数据可以同时进行双向传输。

单工半双工全双工3 重要参数串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。

对于两个进行通行的端口,这些参数必须匹配。

3.1 波特率这是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如300波特表示每秒钟发送300个bit。

当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。

这意味着串口通信在数据线上的采样率为4800Hz。

通常电话线的波特率为14400,28800和36600。

波特率可以远远大于这些值,但是波特率和距离成反比。

高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

常用的波特率有,1200,2400,4800,9600,19200,38400,115200等。

3.2 数据位这是衡量通信中实际数据位的参数。

当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。

如何设置取决于你想传送的信息。

比如,标准的ASCII码是0~127(7位)。

扩展的ASCII码是0~255(8位)。

如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。

每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。

由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

3.3 停止位用于表示单个包的最后一位。

典型的值为1,1.5和2位。

由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。

因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。

适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

3.4 奇偶校验位在串口通信中一种简单的检错方式。

有四种检错方式:偶、奇、高和低。

当然没有校验位也是可以的。

对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。

例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。

如果是奇校验,校验位位1,这样就有3个逻辑高位。

高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。

这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。

4 RS-232/422/485 标准RS-232、RS-422 与RS-485 最初都是由电子工业协会(EIA)制订并发布的。

R S-232在1962 年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。

RS-422是由RS-232 发展而来,它是为弥补RS-232 之不足而提出的。

为改进RS-232 通信距离短、速率低的缺点,RS-422 定义了一种平衡通信接口,将传输速率提高到10Mbps,传输距离延长到4000 英尺(速率低于100kbps 时),并允许在一条平衡总线上连接最多10 个接收器。

RS-422 是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A 标准。

为扩展应用范围,EIA 又于19 83 年在RS-422 基础上制定了RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A 标准。

由于EIA 提出的建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS 作前缀称谓。

RS-232、RS-422 与RS-485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。

但由于PC 上的串行数据通讯是通过UART 芯片(较老版本的PC 采用I8250 芯片或Z8530 芯片)来处理的,其通讯协议也规定了串行数据单元的格式(8-N-1 格式):1 位逻辑0 的起始位,6/7/8 位数据位,1 位可选择的奇(ODD)/偶(EVEN)校验位,1/2 位逻辑1 的停止位。

基于PC 的RS-232、RS-422 与RS-485标准均采用同样的通讯协议。

4.1 RS-232 标准RS-232 被定义为一种在低速率、近距离串行通讯的单端标准。

RS-232 采取不平衡传输方式,即所谓单端通讯。

RS-232 的电气标准:电平为逻辑“0”时:+3V~+15V;电平为逻辑“1”时:-3V~-15V;未定义区:-3V~+3V。

在此区域内的信号处理将由通讯接口的RS-232 收发器决定。

4.2 RS-485 标准电子工业协会(EIA)于1983 年制订并发布RS-485 标准,并经通讯工业协会(TIA)修订后命名为TIA/EIA-485-A,习惯地称之为RS-485 标准。

RS-485 标准是为弥补RS-232 通信距离短、速率低等缺点而产生的。

RS-485 标准只规定了平衡发送器和接收器的电特性,而没有规定接插件、传输电缆和应用层通信协议。

RS-485 标准与RS-232 不一样,数据信号采用差分传输方式(Differential Driver Mode),也称作平衡传输,它使用一对双绞线,将其中一线定义为A,另一线定义为B,如图所示。

发送器示意图通常情况下,发送发送器A、B 之间的正电平在+2~+6V,是一个逻辑状态;负电平在-2~-6V,是另一个逻辑状态。

另有一个信号地C。

在RS-485 器件中,一般还有一个“使能”控制信号。

“使能”信号用于控制发送发送器与传输线的切断与连接,当“使能”端起作用时,发送发送器处于高阻状态,称作“第三态”,它是有别于逻辑“1”与“0”的第三种状态。

对于接收发送器,也作出与发送发送器相对的规定,收、发端通过平衡双绞线将A-A 与B-B 对应相连。

当在接收端A-B 之间有大于+200mV 的电平时,输出为正逻辑电平;小于-200mV 时,输出为负逻辑电平。

在接收发送器的接收平衡线上,电平范围通常在200mV 至6V 之间。

参见下图所示。

接收器示意图定义逻辑1(正逻辑电平)为B>A 的状态,逻辑0(负逻辑电平)为A>B 的状态,A、B 之间的压差不小于200mV。

5 接线方式5.1 RS232通讯连接方式示意图5.2 RS485通讯连接方式示意图2台连接方式:多台连接组成主从网络:6 通信方式演示6.1 RS232通信演示通过串口助手实现演示全双工串口设置6.2 RS485通信演示通过485助手和地址表软件模拟演示 半双工 串口设置 地址表 从机地址 ModBus 上层协议7 RS485通讯协议RS-485 标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议;因此,用户需要在RS-485 应用网络的基础上建立自己的应用层通信协议。

很多具有RS-485 接口电路的用户设备采用自己制定的简单通讯协议,或是直接 取自ModBus 协议(AscII/RTU 模式)中的一部分功能;7.1 ModBus 通讯协议Modbus 协议已经成为一种通用工业标准。

Modbus 在串行链路上的协议帧格式如下所示:Modbus ADUModbus PDUModbus 协议帧格式PDU :Modbus 的一个简单协议数据单元;ADU :Modbus 在总线或者网络上的应用数据单元。

Modbus 协议使用主从通信技术,采用查询-回应形式实现通信,主机可对各从机寻址,发出广播信息,从机返回信息作为对查询的响应,具体过程如下所示:Modbus 查询-回应形式通信当通信或者操作出错的时候,从机同样会给主机回应异常帧,其格式和正常响应的数据格式相似,只是回应时的功能码和数据响应区域变成Modbus 定义的异常功能码和异常码。

Modbus协议支持两种数据传输模式:ASCII格式和RTU格式,控制器主要采用RTU 模式实现数据传输。

在RTU传输模式下Modbus信息帧格式如下所示:RTU传输模式下Modbus信息帧格式是CRC高字节;在RTU模式下每个字节传输是从最低位到最高位(即LSB→MSB)连续传输。

7.2 地址表参照普乐特标准地址表来描述地址表含义。

7.3 命令字普乐特地址表主要涉及到协议中的03和06命令帧。

7.3.1 03查询帧查询帧主要用来查询读取一个或者连续多个指定寄存器的值。

举例如下:查询帧:01 03 00 00 00 02 c4 0b该条查询指令意义:读取地址为1的从站数据,所查询数据从寄存器0000H开始,查询2个寄存器的值,也即查询地址为0000H和0001H两个寄存器的值。

响应帧:01 03 04 00 06 00 05 da 31该条查询指令意义:从站响应查询帧,一共返回4个字节的查询结果(地址表中一个寄存器2个字节,所以查询两个寄存器就会返回4个字节),其中0000H寄存器的值为0006H,0001H寄存器的值为0005H。

7.3.2 06命令帧06命令帧主要用来写一个单个寄存器,也即给从站发送控制指令或者改变从站地址表的某些数值。

主机命令字:11 06 00 01 00 03 9a 9b该条命令帧意义:主机给从站号为1的设备发送写指令,修改寄存器0001H的值,改为0003H。

从机响应帧:11 06 00 01 00 03 9a 9b。

相关主题