串口通信之RS232和RS485
《C#串口编程系列文章》
(1)预备知识
(2)介绍SerialPort类的API
(3)使用SerialPort进行C#串口编程的常见bug点
(4)深入探究关闭串口时Winform界面卡死原因
(5)项目实战-串口编程代码示例
(6)RS232,RS485,串口,三个名词的联系与区别
(7)详解串口通信协议
什么是单工通信、半双工通信、全双工通信
单工通信
单工就是指A只能发信号,而B只能接收信号,通信是单向的,就像灯塔之于航船,收音机之于耳朵。
半双工通信
半双工就是指A能发信号给B,B也能发信号给A,但这两个过程不能同时进行。就像我们在影视作品中看到的对讲机一样:
007:呼叫总部,请求支援,OVER
总部:收到,增援人员将在5分钟内赶到,OVER
007:要5分钟这么久?!要快呀!OVER
总部:……
GAME OVER
在这里,每方说完一句话后都要说个OVER,然后切换到接收状态,同时也告之对方——你可以发言了。如果双方同时处于收状态,或同时处于发状态,便不能正常通信了。
全双工通信
全双工比半双工又进了一步。在A给B发信号的同时,B也可以给A发信号。典型的例子就是打电话。
A:我跟你说呀……
B:你先听我说,情况是这样的……
A和B在说的同时也能听到对方说的内容,这就是全双工。
RS232和RS485区别
RS485诞生于RS232之后,是针对RS232的缺点进行了改良后的串口实现。
通信距离
RS232的最大通信距离是15m,实际工程现场,建议不超过10m。RS485最大通信距离1km(180kbits/s),实际工程现场,建议不超过500m。串口的通讯距离与通信速率是成反比的,RS485在1km的距离上传输数据时,为了保证数据的准确性,传输速率应控制在100-180kbps以下,100m时RS485的传输速率可达12Mbit/s。RS485可以使用中继器延长通信距离和增强通信可靠性。
通信速率
RS232的最大传输速率是20kbps,RS485的最大传输速率是10Mbps。
抗干扰性
RS485硬件设计的优越性,使其通信的抗干扰性比RS232强的多。
电气特性
RS232接口的信号电平值较高(±3-±15V),易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路(MAX232)方能与TTL电路连接。
RS-485接口的信号电平值较高(±2-±6V)。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路直接连接。
通信模式
RS232是一对一的全双工通信。它仅仅支持两个设备一对一的通信模式,常见的应用场景是超市收银台的手持扫码枪。
工控机的串口一般是RS232,外设的串口如果也是RS232,可以直连。如果外设的串口是RS485,需要RS232转RS485模块。如果外设的串口是信号电平是TTL的串口(单片机),需要一个MAX232转换电平。
RS485是一对多的半双工通信。多个具有RS485接口的设备,可以以手牵手
的方式串联到一起组网。由于RS485是半双工通信,总线上也没有仲裁机制,所以同一时间只能有一个设备在总线上发送数据,而网络上的其他设备都能同时接收到它发送的数据。因此典型的RS485组网通信模式是master-slaves一主多从模式,网络上的任意设备都可以作为主设备,但主设备通常是PC上的应用程序。RS485网络只负责将一个RS485设备的消息等价的传送到网络上其他RS485设备,这些RS485收到消息后按照一定的规则解析消息,根据消息中的地址辨别出是不是送给自己的消息而决定是否响应回复。这个规则是烧写进RS485的固件程序(如ModbusRTU)决定的,一般会为设备赋予一个地址,根据消息中的地址信息判定消息是不是给自己的,以及如何响应消息。RS485组网最常见的使用场景是:主设备轮询从设备,获取从设备的状态,即主设备主动发送请求,从设备答复,但从设备不会主动发送数据。
补充:RS485串联时采用手牵手
方式,这样线路的干扰最低,杜绝使用星型,分叉等连接方式。
RS485与RS232仅仅是通讯的物理协议(即接口标准)有区别,RS485是差分传输方式,RS232是单 端传输方式,但通讯程序没有太多的差别。PC机上已经配备有RS232,直接使用就行了,若使用 RS485通讯,只要在RS232端口上配接一个RS232转RS485的转换头就可以了,我们也可以购买PCI多串口卡,直接从工控机的PCI引出RS485接口,不需要修改程序。
串口的应用场景
PC的RS232串口与单片机的串口通信
前提说明:PC的串口称为RS232,因为其电平特性是±3 - ±15V,符合RS232标准。单片机的串口虽然也是串口,但是不能称之为RS232,因为其电平特性是TTL ±3 - ±5.即,RS232,RS485,单片机TTL串口等只是按照串口协议的某种实现。
单片机有一个全双工的串行通讯口,所以单片机和电脑(ibm-pc机)之间可以方便地进行串口通讯。由于ibm-pc机串行口输出的是rs232电平,而单片机串口输出的是ttl电平,两者之间应有一个电平转换电路。本系统采用了专用芯片max232进行转换,如下图所示。
图中,imp-pc机的下传命令和数据由ibm-pc机的txd端(rs-232电平)发送,经max232转换为ttl电平被at89c51串行口所接收。同样,at89c51的上传代码(ttl电平)由max232转换rs-232电平加以发送,经过ibm-pc机的rxd端,并由其内部的串行口变换为ttl电平。