侵权投诉

搜索
更多>> 热门搜索:
当前位置:

OFweek工控网

测控通信

正文

基于串口自定义协议的数据通信方式设计

导读: 简要介绍了计算机通用的串行通信端口 RS2232 在数据通信中的引脚功能。在 Delphi 环境中利用第三方通信控件 AdpComPort 设计了自定义通信协议方式下实现数据通信的方法。

     引言
    计算机与计算机之间的数据交换不仅可以采用常用的通信协议进行联网方式交换 ,还可以采用串行通信方式或并行通信方式通过非常规的通信协议方式交换。不同安全等级的计算机之间需要进行数据传输(出于安全考虑 ,多数是从安全等级高的计算机向安全等级低的计算机单向传输数据) ,而不同安全等级的计算机是不允许进行直接网络连接的 ,由此设计了自定义通信协议下通过串行通信端口 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 Basic 语言中使用 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
  / /在源计算机上显示发送的数据
  MemoSnd. Lines. Add ( st rSnd) ;
  / /“TAG” 为数据前缀标志“3 ” 为数据后缀标志
  st rSnd : =’TA G ’ + st rSnd +’ 3’ ;
  / /发送指定的字符串
  AdpComPort1. PutSt ring (st rSnd) ;
  / /还可加入判断串行端口是否已经发送完毕的语句等

end。

    2)接收端主要代码
   目标计算机的 AdpComPort 控件的 事 件(On Trigger)的主要代码如下。
procedure AdpComPort1Trigger ( CP : TObject ; Msg ,TriggerHandle , Data : Word) ;
var
wrdLen :Word ;
chrRcv :Char ;
st rRcv , st rData : st ring ;
begin
 try
   if Msg = APW_TRIGGERAVAIL then begin
   for wrdLen : = 1 to Data do begin
  / /逐个接收字符
   chrRcv : = AdpComPort1. GetChar ;
  / /是结束标志 “3 ” 就中断接收 ,开始分析数据
   if chrRcv =’ 3’ then break
  else st rRcv : = st rRcv + chrRcv ;
end ;
if chrRcv =’ 3’ then begin
  / /提取标志以外的数据
  st rData : = copy ( st rRcv ,4 ,length ( st rRcv) ) ) ;
  / /是接收端可以接收的数据
   if copy ( st rRcv ,1 ,3) =’TA G ’ then begin
  / /处理(特别处理的逆处理等)接收到的数据

  …
  / /在接收界面端显示
  MemoRcvData. Lines. Add ( st rData) ;
 / /其他情况(如接收文件等) ,有待扩展
 end else ;
 / /将接收字符串变量清空
 st rRcv : =” ;
 / /将接收字符变量清空
chrRcv : = # 0 ;
end ;
end ;
end ;
except end ;
end ;


    3   系统性能
    3.1   硬件方面
    2 台计算机之间只需要新增加 2 个串行通信端口插头后用 2 根细导线将 2 个插头的相应引脚分别
连接起来即可。在串行通信端口连线时可根据单向或双向数据传输的实际需求进行硬件处理。
    3.2   软件方面
    发送端增加 1 个往指定串行通信端口写数据的程序;接收端增加 1 个从串行通信端口读取数据写入数据库的程序。
    3.3   安全方面
    因为不同安全级别网络之间只是从串行通信端口传递数据 ,不使用常规的网络协议 ,而且接收和发送端均以独占方式拥有该串行通信端口的绝对使用权 ,接收端在接收数据时还进行判断 ,是接收方认可的数据就接收 ,不是就不予处理 ,安全系数非常高。
    4   结语
    本方案现已应用于二滩水调网络向四川省调二滩前置机的数据传输系统中 ,系统运行正常 ,数据传输畅通。虽然根据国家经贸委 30 号文[2 ]要求没有从根本上断开网络的连接 ,但因这种通信途径不使用常规的网络协议而直接对串行通信端口进行硬件读写 ,对网络之间的安全是有很大的保障的。

声明: 本文由入驻OFweek公众平台的作者撰写,除OFweek官方账号外,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

我来说两句

(共0条评论,0人参与)

请输入评论

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

  • 机械
  • 自动化
  • 单片机
  • 猎头职位
更多
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码: