基于串口自定义协议的数据通信方式设计
•引言
计算机与计算机之间的数据交换不仅可以采用常用的通信协议进行联网方式交换,还可以采用串行通信方式或并行通信方式通过非常规的通信协议方式交换。不同安全等级的计算机之间需要进行数据传输(出于安全考虑,多数是从安全等级高的计算机向安全等级低的计算机单向传输数据) ,而不同安全等级的计算机是不允许进行直接网络连接的,由此设计了自定义通信协议下通过串行通信端口RS2232 实现处于不同安全等级的计算机之间进行数据传输。
1.RS232 串行端口
一组比特数据在多条线上同时被传送的传输方式被称为并行传输。在传输过程中各数据位可并行传送,传送速度快、效率高,多用于要求实时、快速的场合。但是有多少数据位就需要多少根数据线,传送成本高。而串行端口通信是数据通过一根传输线逐位传送,数据传送按位顺序进行,至少只需要一根传输线即可完成,节省传输线。由于串行通信方式使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用.
1.1 RS 2232 端口简介
RS232 串行通信端口属于PC 机(个人计算机)及电信应用领域中最为成功的串行数据标准。它被定义为一种在低速率串行通信中增加通信距离的单端标准,是目前PC 机与通信工业中应用最广泛的一种串行通信接口。现在的PC机一般有1 到2 个串行通信端口COM1 及COM2 ,这些串行通信端口均为9 个引脚,即异步通信的9 个信号。在通信速率低于20 kbit / s时,与其直接连接的电缆最大物理距离为15 m(即直接传输距离) 。RS232 标准规定,若不使用Modem ,在码元畸变小于4 %的情况下,数据终端设备(DTE)和数据通信设备(DCE)之间最大传输距离为15 m。一般应用中当通信距离小于12 m 时,可以用电缆线直接连接标准RS232 端口。若距离较远, 须附加调制解调器(Modem) 。本方案中传输数据的2 台计算机距离很近,采用最基本的接法,将RS232 端口的关键引脚直接用电缆线相连。
RS2232 端口引脚说明见表1。
1.2 硬件连接
基于网络安全考虑,自定义协议方式的串行通信端口引脚连接采用单向通信方式,见图1 所示。用一根电缆线将发送端的TXD 引脚与接收端的RXD 引脚连接,用另一根电缆线连接发送端和接收端的GND 引脚。如果考虑双向通信或要求进行双向信息对话,则需要连接另外相应的TXD 和RXD引脚,其他引脚是用来传递控制信号的;或者用双串口分别单向连接则安全性更好,其通信程序也就更复杂些。
2.数据通信的实现
2.1 通信控件
实现串行通信端口之间通信通常有如下几种方法:
1)使用Windows 的API函数编写串行通信端口通信程序,该方法较为复杂,需要掌握专业性很强的通信知识,其优点是可实现比较强大的功能,应用面比较广泛,适合编写较为复杂的低层次通信程序。
2)采用与编程语言相适应的控件来实现串行端口通信,该方法实现比较容易,如在Visual Bas ic语言中使用MSCOMM 控件(MSCOMM 控件为Microsof t 的OCX 控件) 、在Delp hi 语言中使用dpComPort 控件等。
本实例采用Delp hi 语言平台开发。AdpComPort 控件(AdpComPort 属于VCL 控件而非OCX控件)编译后的程序不需要其他额外的动态链接库或注册到系统的控件支持而可以运行于32 位的Windows 操作系统中,具有较好的可移植性,且该控
件具有丰富的与串行通信端口密切相关的属性及事件,提供了对串行通信端口的各种操作,该控件还支持多线程。
2.2 AdpComPort的主要属性、方法和事件
1)主要属性
Baud :设定波特率19200 ,9600 ,4800 等,根据实际需要来确定,在串行端口打开后也可更改波特率,实际波特率会随之更改。
CommNumber :填写0 , 1 , 2 , … 分别表示为COM1 ,COM2 ,COM3 , …等串行端口的名字,在打开串行端口前,必须设置好此值。
Parity :奇偶校验位,可根据实际情况确定。
Open :值为True 时表示打开串行端口,为
False 时表示关闭串行端口。
2)主要方法
PutChar :发送指定的字符。
Put St ring :发送指定的字符串。
GetChar :接收字符。
3)主要事件
On Trigger : ( CP : TObject ; Msg ,Trigger Handle , Data : Word) ,当Msg 为
APW_TRIGGERAVAIL 时表示有数据到达该串行通信端口,从而触发该事件,可以声明一个数据类为Char 的变量chrRcv 来接收该数据,接收语句为:chrRcv : = AdpComPort1. GetChar 即可。
2.3 设计步骤
本实例中2 台计算机之间采用RS2232 串口通信,实际要求2 台计算机处于无人监控下运行。
在源计算机(即发送数据端计算机)的通信程序窗体中加入AdpComPort 控件、定时器控件、连接
数据库的控件,以及其他辅助功能需要的控件。由定时器定时读取和源计算机连接的网络数据库的数据,进行相应处理后,通过AdpComPort 控件的Put St ring发送到指定的串行端口。在目标计算机(即接收数据端计算机) 的通信程序窗口加入AdpComPort 控件、连接数据库的控件,以及其他辅助功能需要的控件。当AdpComPort 控件的事件(On Trigger)检测指定串行通信端口有数据时,将数据接收下来,进行分析处理后提交到相应数据库内。
数据流程如图2 所示。
2.4 程序编写
1)发送端主要代码
在源计算机的定时器事件中先将数据类型为St ring 的st rSnd经过特别处理(如将中文字符转变为Unicode 码或加密等)后再加上前后缀数据标志发送到串行端口上。主要代码如下。
/ / st rSnd为需要发送的字符串(可为经过特别处理的字符串) 。
procedure Send (st rSnd :St ring) ;
begin
/ /在源计算机上显示发送的数据