950 likes | 1.19k Views
Delphi 串口通信编程. 第一章 基本概念. 通信 串行通信 硬件基础知识 模式及流量 接线和错误预防 错误排除. 1 、通信. 通信:不同的独立系统通过线路互相交换数据 数据通信:终端与计算机之间的通信或计算机与计算机之间的通信 网络:构成整个通信的线路 数据传送 通信的类型 字符传输. 数据传送. 完整的通信系统包括发送端、接收端、转换数据 的接口以及传送数据的实际信道或媒体 DTE ( Data Terminal Equipment ):发送与接收的节点
E N D
第一章 基本概念 • 通信 • 串行通信 • 硬件基础知识 • 模式及流量 • 接线和错误预防 • 错误排除
1、通信 通信:不同的独立系统通过线路互相交换数据 数据通信:终端与计算机之间的通信或计算机与计算机之间的通信 网络:构成整个通信的线路 • 数据传送 • 通信的类型 • 字符传输
数据传送 完整的通信系统包括发送端、接收端、转换数据 的接口以及传送数据的实际信道或媒体 DTE(Data Terminal Equipment):发送与接收的节点 DSE(Data Switching Equipment):中间节点,负责数据转送工作 DCE(Data Communication Equipment ):负责数据与电气信号转换的设备 DTE与DCE间的数据传输线路通常使用RS-232 DTE与DSE间的媒体则包括了双绞线、同轴电缆、光纤或无线电等
传送的方式 • 并行传送(Parallel ):一次的传输量为8个位(1字节) 通过并行端口,如打印机 • 串行传送(Serial ):一次只传输1个位 通过串行端口,如RS-232
通信的种类 将数据转换成串行通信有两种方式 • 同步方式:接收设备能自动与发送计算机同步,接收字符有规则的分割开来,以块为单位,没有起始位和停止位,效率高。 • 异步方式:以字符为传送单位,传送的字符之间有无规律的间隔,这样可能使接收设备不能正常接收数据,因为每接收完一个字符都不能确切地知道下一个接收的字符从何时开始。(通过加开始位和停止位实现)传输效率低,成本也低。
字符传输 • 位和字节 • 文本编码 • 非文本编码 • 帧
位和字节 • 二进制中的每一位0和1,被叫做一个位 • 每8个位构成一个字节 • 一个字节中最右面的位被称为第0位,最左面的位被称为第7位。
文本编码 文本(字符字母、标点符号等)在计算机中存储时,每个不同的字符都用不同的数值来表示。这些数值的范围通常在0-127或0-255范围。 7位:ASCII码,每个字节留一个备用位 8位:前128个遵循ASCII码规则,其余的128个用来做扩展字符、数字符号、图形字符等编码。
非文本编码 某些可执行指令文件和图形图像文件就是 以二进制形式而不是ASCII码形式存储的。 一个数据可用二进制形式存储,可以占多 个字节。 在通信领域,常常把这种类型的资料叫做 二进制数据。
帧 帧:在串行异步通信情况下,构成一个字节的那些数据单元被称为数据位,在数据位的前、后要加上起始位、停止位和奇偶校验位。 一个字符所使用的位数根据协议而不同。 称这些位数为字符位数据长或字长。 通常不是8位就是7位。
2、串行通信 • RS-232串行通信 • RS-485串行通信 • USB接口 • IEEE-1394
RS-232串行通信 RS-232的通信端口是每台计算机上的必要配置, 通常含有COM!和COM2两个端口。 计算机上的RS-232均是公头 一般有两种:9引脚和25引脚
RS-485串行通信 RS-485的通信方式可有效地防止噪声信号的干扰。 RS-485的信号将被发送出去时会先分成正负的两条线路,当到达接收端后,再将信号相减还原来原来的信号;如果将原始的信号记为(DT),而被分成后的信号分别记为(D+)及(D-),则原始的信号与离散的信号在由发送端发送出去时: (DT)= (D+)- (D-) 如果此线路受干扰,则两条传输线上的信号会分别成为(D+)+Noise及(D-)+Noise (DT)= [(D+) +Noise]- [(D-) +Noise] = (D+)- (D-)
USB(Universal Serial Bus)接口 集成一般计算机所使用的外围设备的连接方式, 而且其所采用的信号传输方式也是串行通信。 USB特性:低价位,热连接,单一的连接头方式,连接数多,线上供电,不占系统资源,错误检测与复原,节省能源,支持四种传输(巨量、实时、中断及控制4种传输模式),速度较快(12M bps/RS-232最快115bps)
IEEE-1394 IEEE-1394(也称FireWire,火线)与USB一样拥有即插即用的功能,也是用于解决计算机与外围设备复杂的连接问题,并且也是使用串行通信的传输方式。 IEEE-1394的传输速度是400Mbps,而且速度还向1000Mbps迈进
USB与IEEE-1394的比较 比较项目 USB IEEE-1394 应用 低速设备 高速设备 带宽( Mbps) 1.5,12 100,200,400 电缆长度 5米 4.5米 电缆 4线 6线 即插即用 支持 支持
3、硬件基础知识 PC机的RS-232接口名称尚未统一,有多个名称:RS-232口、串口、通信口、COM口、异步口等。 5 4 3 2 1 9 8 7 6
一次应答呼叫过程 Modem从接收到振铃信号开始,到数据传输结束Modem和DTE恢复到原来的空闲状态为止的过程。
数据终端DTE的控制软件持续监视振铃指示RI,等待该数据终端DTE的控制软件持续监视振铃指示RI,等待该 信号有效 响铃后, RI信号在ON和OFF状态之间交替变化。 DTE的通信控制软件在检测到振铃指示后,开始通过计 算机振铃指示的ON和OFF状态的变化次数来进行计数。 当达到程序设计的次数时,控制软件发出终端就绪信号 (DTR)有效,使Modem进行摘机状态,开始应答电话 Modem在等待一小段时间后,自动地发送它的应答载波 信号。同时Modem发出数据设备就绪信号(DSR),通 知DTE已经完成所有准备工作,正在等待对方的载波信 号
在DTE发出数据终端就绪信号(DTR)期间,DTE的控制软件监视数据设备就绪信号(DSR)是否有效,当DSR为ON状态后,DTE便知道Modem已准备建立数据链路,于是DTE开始检测载波信号(DCD),以检查数据链路是否已经建立在DTE发出数据终端就绪信号(DTR)期间,DTE的控制软件监视数据设备就绪信号(DSR)是否有效,当DSR为ON状态后,DTE便知道Modem已准备建立数据链路,于是DTE开始检测载波信号(DCD),以检查数据链路是否已经建立 当主叫Modem的载波信号出现在电话线上时,被叫Modem发出载波信号(DCD),以检查数据链路是否已经建立 在数据链路连接期间,发送数据(TxD)和接收数据(RxD)线上即开始了全又工通信。同时,DTE仍监视载波信号(DCD),以确定数据链路是否连接 数据传输结束后,DTE使数据终端就绪信号(DTR)无效, Modem撤消载波检测(DCD),并且使设备数据就绪信号(DSR)信号无效。数据候链路释放后, Modem和DTE返回到初始状态。
通信参数 • 数据的传送速度 • 数据的传送单位
数据的传送速度 • 波特率:每秒所能产生的最大电压状态改变率(一秒钟可以振荡的次数)bps • 通信双方必须要取得一样的通信速度。原始信号经过不一样的波特率取样后,所得的结果完全不一样,如取样速度只有原来一半时,信号被跳着取样,数据因此错误。
数据的传送单位 一般串行通信端口所传送的数据是字符类型,若用来传输文件,则会使用二进制的数据类型。
起始位及停止位 • 异步串行传输时需要 • 当发送端要开始传送数据时,便将传输线上的电压由低电位提升至高电位,而当传送结束后,再将电压降至低电压。接收端会因起始位的触发(因电压由低电位升至高电位)而开始接收数据;并因停止位的通知(因电压维持在低电位)而确节知道数据的字符已经结束。
校验位的检查 • 用来检查所传送数据正确性的一种核对码,其中又分成奇校验(Odd)及偶校验(Even) • 串行通信上的字符数据格式 起始位+传送字符+校验位+停止位
4、模式及流量 • 工作模式 • 硬件握手 • 软件握手
工作模式 当计算机在进行数据的传送与接收时,传输线上的数据 流动情况可分为3种: • 单工:传输线上的数据流动只有一个方向 • 半双工:数据流动是双向,但同一时间只能一个方向行进 • 全双工:传输线同时具有两个方向的传输能力 RS-485属于半双工,RS-232属于全双工(引脚在设计时就是接收与传送是分属两个不同的引脚与线路。)
串行数据的流动方式 当数据要由A设备传送至B设备前,数据会 先被送到A设备的数据输出缓冲区,接着 再由此缓冲区将数据由RS-232线路传送到 B设备;同样地,当数据通过硬件线路传送 到B设备时,数据首先会送到接收缓冲区, 而设备B的CPU再到接收缓冲区将数据读取 并进行处理。
握手 握手信号:提供一种控制数据流的方法,即接收设备可以控制发送设备的数据发送。 如果接收设备速度比发送速度快,握手信号可以略去。 在异步串行通信中,这称之为握手(handshaking)或流量控制(flow control)。 流量控制:保证传输双方都能正确地传送和接收数据而不会漏失。 握手控制可以具休分为硬件握手和软件握手。
硬件握手 使用专门的握手电路去控制数据的传输。 当接收设备准备好之后,就通过专用的握手电路传送一 个正电压给发送设备,指示发送设备发送数据。如果接 收设备传送一个负电压给发送设备,则指示发送设备停 止发送数据。 硬件握手用到DSR、CTS、DTR、RTS4条硬件线路,其中DTR、RTS指的是计算机上的RS-232端;而DSR、CTS则是指被控制的设备端。
计算机->设备 • 设备必须将相对于计算机上的DSR引脚降为低电压 • 计算机检测到DSR引脚为低电位后,暂停数据的传输;同时设备继续处理位于缓冲区的数据 • 等设备的接收缓冲区数据量下降到一定程度后,设备将DSR引脚的标准电压升高 • 计算机一检测到DSR引脚为高电压后,随即继续传送数据给设备
设备->计算机 • 计算机将DTR引脚降为低电压 • 设备检测到DTR引脚为低电压后,暂停数据的传输;同时计算机也会继续处理位于缓冲区的数据 • 待计算机的接收缓冲区中数据量下降到一定程度后,计算机将DTR引脚的标准电压升高 • 设备一检测到DTR引脚为高电压后,随即继续传送数据给计算机
软件握手 以数据线上的数据信号来代替实际的硬件线路 最常见的是XON/XOFF协议: 若接收端欲使发送端暂停数据的传送时,它便向发送端 送出ASCII第19号字符(十六进制是13);而欲恢复传送 时,便向发送端送出ASCII第17号字符(十六进制是11), 两个字符的交互使用,便可控制发送端的传送操作了。 其操作流程与硬件握手类似。
5、接线和错误预防 • 接线方法 • 错误预防
接线方法 RS-232口特点: • 9引脚或25引脚 • 公头(区别于打印机接头) 5 4 3 2 1 1 2 3 4 5 9 8 7 6 6 7 8 9 计算机上为公头 连线上为公头
当使用RS-232与Modem进行连接时,直接连接即可 • 当使用RS-232和其他的设备进行连接时,有时就必须做必要的跳线
跳线 跳线的实际意义就是一个传送的信号必须到达对方的接 收引脚,如此才能形成一个完整的通路。 跳线:欲将数据从一个地方传送至另一个地方,其实只要使用第2引脚、第3引脚与第5引脚就可以形成一个最简单的通信线路。实际制作:将RS-232线的一端接头拆掉,将里面的第2引脚和第3引脚对调即可。 跳线的意义:甲方传送的数据必定到乙方的接收信道;而乙方的传送数据则会到达甲方的接收信道,双方的传送与接收形成一个完整的回路。
错误预防 检测数据在传送过程中发生的错误 • CheckSum:将所有要传送字符的ASCII码做加法运算,计算其总和后将此数目与一数字(通常是255)做除法运算,再取其余数,将此余数组合成传送字符串的一部分而传送出去;同样,接收方也以相同的方式对所传送过来的字符串进行运算操作,以判断数据的正确性,如果不对,则要求发送方重发。 • CRC(Cyclic Redundancy Check Code循环冗余校验码) 将欲传输的数据块视为一堆连续位所构成的一个整数值,并将此数值除一个特定的除数。
错误预防原理: 将所传送的数值做相加的操作后与一个固定的除 数进行除法运算,所得的余数即为校验码。传送 与接收的双方只要针对其固定的检查方法分别进 行运算,比较后只要双方均一致,即正确;若不 一致,数据重传。
6、错误排除 • 波特率失配 • 检验错误 • 字长不匹配 • 停止位错 • 帧错
波特率失配 如果两个设备的波特率设置不同,当接收 设备试图接受数据时,程序将报告校验错 和帧错。
校验错误 指数据在传输中被破坏,至少可以说明设 备在奇偶校验位类型设置不同或者字长不 同。
字长不匹配 • 发送的是8位字长,接收采用7位字长 • 发送的是7位字长,接收采用8位字长
停止位错 • 接收端要求一个停止位,而发送端发送了两个停止位 • 接收端要求两个停止位,而发送端发送了一个停止位
帧错 一般指位数不匹配。 这个类型的错误,通常是在没有接收到要求的停止位时出现。
第2章 串行通信程序及组件建立 1、串行通信的WindowsAPI简述 2、通信测试 3、自动与事件
1、串行通信的WindowsAPI简述 • 串行通信相关函数 • 串口通信流程 Delphi的Windows.pas单元文件中已经将Win32 API均声明进去,因此在Delphi里面使用API时 只要在uses 区段中加入Windows,使其引用该 单元文件即可
串行通信相关函数 • CreateFile:建立文件,在此用打开通信端口 • CloseHandle:关闭由CreateFile建立的文件,在此用于关闭通信端口 • GetCommState:取得计算机串口的设置参数 • SetCommState:设置计算机串口的参数 • WriteFile:将数据写入文件,在此用来将数据由串口送出 • ReadFile:由文件中读取数据,在此用来取得送到串口的数据 • ClearCommError:清除串行端口的错误,并取得信息