摘要 地下电磁波法近年来得到了长足的进步,但其通信技术(软件方面)一直沿用过去的老方法:在 DOS 界面下,利用一些专用软件来实现的。随着新的工作平台的出现,人们迫切地要求在新界面中开发和应用通信技术。本文作者利用 Visual Basic 6.0 的编程环境,实现了 Windows 下微机与地下电磁波仪器之间的数字通信。通讯软件是以控件的形式完成的,减少了不同编程语言间的挚肘。在控件中应用了新的技术:通信环境的配置、接收数据的解读、调制解调控件的使用和数据通信事件驱动等。
关键词 : 串口通信 地下电磁波法 Visual Basic 6 。 0
一、串口通信的原理
通信系统包括传送端、接收端、转换数据的接口、传送数据的通道:传送端为地下电磁波仪器、接收端是安装地下电磁波法处理系统的微机系统、中间的节点就是我们的数据接口和通道。 同时在编程中应用了控件MSComm,简化了编程的复杂性,直接调用它的成员,继承其成员的属性特征,分享他丰富多彩的函数功能。
9 针端口的管脚编号及意义 表 1
管 脚 | 方 向 | 英文缩写 | 意 义 |
Pin1 | 微机 | CD | 载波探测 (Carry Detect) |
Pin2 | 微机 | RXD | 接收字符 (Receive) |
Pin3 | 仪器 | TXD | 传送字符 (Transmit) |
Pin4 | 仪器 | DTR | 数据端状态 (Data Ready) |
Pin5 | 仪器、微机 | GND | 地线 (Ground) |
Pin6 | 微机 | DSR | 数据备妥 (Data Set Ready) |
Pin7 | 仪器 | RTS | 要求发送 (Request to Send) |
Pin8 | 微机 | CTS | 消除已发送 (Clear to Send) |
Pin9 | 微机 | RI | 响铃探测 (Ring Indicator) |
见表 1 的描述: Pin2 —接收字符、 Pin3 —传送字符,同时数据的方向都是指向对方,这给了我们一个启示:利用两管脚的跳线,可以实现同机通信。当然这是在调试阶段专用的一个临时举措,却十分方便和实用。
二、字符和字节的接收与解码
微机接收的是一些字节或字符,在未解开之前是不可读的(不可辨识),所谓“乱码”。将接收内容读出来必须有两个条件:遵守发送方的约定、按字符或字节的方式解读。所谓遵守约定,就是与发送方的通信参数一致。具体在我们的通信中,使用的是: 1200 , E , 7 , 1 。
上述的参数意义依次为: ① 波特率—数据传输的速度,其物理定义是每秒钟所能产生的最大电压状态改变率,或者说一秒钟可振荡的次数。这是因为在串口的异步通信中,发接双方没有一个基准的同步脉冲来参考,也就是说双方不知道对方的高低电位究竟代表几位,这就需要有一个双方认可的标准,它就是波特率。若双方波特率不一样将产生错误。 ② 校验位—物理定义为:用来检查传输正确性的一个核对码。一般有三种情况,无校验、偶校验和奇校验。我们在传输中用的是偶校验( Even Parity ):检查字符的第一位的奇偶性。它的作用也是为了保证数据传输的正确。 ③数据传输单位—JIS码使用的是7位形成一个字符,它可以表示所有的ASCII码127个字符。 ④ 停止位,1。
对接收内容的解读,首先应确定按字符还是字节来接收的。在数字通信中字符和字节有不同的概念和意义:字符是一个或两个字节组成,二两个不同的字节又可以组成新的字符。在本软件中采用的是:以字节为接收单位、接收缓冲区的字节来启动接收事件。其目的是为了提高软件的稳定性,加强接收数据的质量监控,确保通信成功。其次是对接收数据内容的解读,也是通信工作的一部分,没有正确的解读,也不可能得到正确的数据。
在电波仪器中使用的数据是:无间断字符串结构。对多频率扫描的野外观测数据,数据串很长。在软件编程中,任何字符串变量的长度都是有限的,无法满足这样的字符结构(几乎是无限长的字符变量)。因此,在软件中我们是定义一个富文本框控件(RichEditBox)来接收缓冲区的内容,其容量可达32K。同时加入刚接收到的接收缓冲区数据,并同步刷新显示。
三、通信软件的编制与应用
Visual Basic 6.0 是一个可视化的软件开发环境,在其设计中有很多内置的或外挂的控件,由开发者来选用,调制解调控件就是其中之一。在我们的通信软件中,它是调用的主要控件。
1、 调制解调控件的作用和功能
MSComm控件的目的是为了让用户设计一个系统与串口进行沟通、数据传输。因此信息会在通过端口流动,为此控件提供了两种处理信息的方法:事件驱动和查询(Polling)。在通信软件中采用的是事件驱动:如果接收缓冲区有数据(只要有一个数)立刻驱动接收扫描事件,并不间断地接收数据。
在我们编制的通信软件中使用主要属性有:
CommPort—通信端口号。一般在新机器中使用了USB口,COM1为通信端。在老型号的机器中,COM1是鼠标或键盘,COM2通信口。
Setting—通信口的参数:波特率、奇偶校验、数据传输单位和停止位。在我们的软件中,速率是1200,字符校验方式是偶校验,7位数据位,1位停止位。
我们编制的通信软件主要是接收信息,因此在位接收方主要注意的是仪器发送时的参数设置,必须与发送的设置一致,否则将导致通信失败。
InputMode—数据传输的模式。这里有两种模式可选择:文本和二进制格式。
InputBufSize—接收缓冲区的大小。
Input—接收缓冲区。发送的信息最先到达这里,再通过接收方的软件一系列的动作,将其消化吸收,处理加工成一份整齐的且有规定格式的数据文件。
InputLength—每次读取接收缓冲区字符或字节的长度。
其他的各种属性值所使用的频率不大,暂不赘述。
软件中使用通信控件时,都是通过上述属性(Property)来具体实现的,因此属性就是控件的生命。例如接收缓冲区的字符并传给一个文本来显示,可以如此来安排程序语句:
txtReceive.Text=MSComm.Input
上面这句程序语句的含义为:MSComm控件的接收缓冲区(Input)的数据赋值到文本框txtReceive中作为它的文本变量Text来显示。
其他属性的使用可类推。
2、 通信软件对 MSComm 控件的使用
我们编制的通信软件主要是围绕着 MSComm 控件来做的,因此控件的使用是软件的主要任务。对控件使用的成功与否是关系到通信能否实现。
对此为说明其逻辑关系,可以用一个逻辑框图来说明。 框图的中心是通信控件MSComm,它将控制着一系列的通信传输动作。
图 1 、通信控件的功能流程框图
3、 串口通信的软件实现
一般在使用串口都是异步的,所以串口通信有时也称异步数字通信。从软件编制的角度来讲,实现通信,除了硬件方面的基本保证之外,作者以为主要的任务是接收信息的辨识和驱动机制、以及错误陷阱的设计。
在电磁波法仪器的野外数据采集是一个无间隔的自由串,在编程中专门为此做了试验,以确定字节和字符的细微区别。在我们的通信程序中,使用的字节方式解读接收十六进制的信息。这是因为字节将全面地接受所有的信息,包括一些不可见的数字符号,如回车、换行符号等,可以较详细地了解数据的全貌,减少漏码现象发生。
通过解读代码,将在预定的显示框中出现人们可识别的数字,但是挤在一起的看似如同电报码类的数据。下面的工作和译电码无大的区别,根据发送的协议规定分开就是了:主要有两部分,头文件部分(前64位)和观测数据部分(65位以后)。
4、 软件的流程和特点
我们编制的通信软件虽然是对地下电磁波法的专用模块,但其编程方法是通用的,控件也是公开发行的,对其他的通信工作也有借鉴作用。 软件的流程见图2。
主要特点有这样几方面:
稳定的程序结构 。软件的稳定是编程人员不懈追求的最高境界,我们在编程中也是有着同样的愿望,以期减少以后维护的难度,为客户提供高质量的产品。
图2、通信软件流程框图
在我们编制的通信模块控件中,影响其稳定的主要因素是通信端口各管脚的电压不稳,同时对方的数据在发送前并未加一些防错措施(如CheckSum技术),致使接收方的接收难度加大。从接收到的错误信息来观察,主要有这样几类:对方发送错码,如有中断的信号;两次数据通信之间出现的电冲击信号(操作电波仪器时引发)等。这些都不是接收方软件能解决的问题,即所谓“不可修改的错误”,惟一的办法就是尽量地降低发生的概率。为此在程序中安排了一些错误陷阱,增强捕捉错误的能力。
准确的驱动机制 。通信的速度相对微机的CPU来说是很慢,当我们接收时,一部分数据已经接收到并显示在指定的区域,而另一些数据还在路上走,所以需要有一个“接待站”随时监视接收缓冲器新的信息,并刷新显示区的内容。因此我们在软件中引入了事件驱动的机制
建立一个良好的驱动要求有几方面的设置:①确定接收缓冲器中的等待数据。语句为 MSComm.Rthreshold=1(可视具体要求来确定其数值),当缓冲区中有一个字节就启动接收事件。②在收到数据的同时,必须与前面已经收到的数据相接,并同步刷新显示的结果。。
友好的用户界面。 界面的友好应具备两个条件,操作尽可能的简单,提供的帮助尽可能的丰富全面。控件几乎没有什么操作:启动控件就进入了对缓冲区的查询等待;对方的数据一来就立刻显示在屏幕上。惟一的操作时开启和关闭几个按钮。
对在线帮助文档的编制目前正在进行中。
5、 操作软件的步骤和要点
该通信软件是以控件的形式发布的,所以可外挂在很多语言编制的软件单元中,其操作简单易行,下面逐一说明。
方法、成员属性和事件的使用。
作为一个控件,必须由若干个方法来组成控件的主要动作,完成其功能。本软件在编制中安排了: ReadFile 、 Savefile 、 Packup 、 Inital 等几个主要的方法。使用的调用语法为: 控件调用名 . 方法名
事件只有一个: MSComm_OnComm
软件一经装载 (Loading) ,将立刻启动事件,接受缓冲区随时准备接收数据,同时捕捉错误的陷阱也同步运行,监视通信的全过程。
安排一个属性变量值: Serial1 ,数据文件的序号。
数据通信模块的操作。
① 联接必要的电缆和接线,发送方式五针圆母头;接收方位九针母头。
② 在菜单上点击电波数据通信项,进入通信子菜单。
③ 操作电波仪的面板,进入通信状态,选定文件名或号码。
④ 当发送方出现文件号时,按下回车。
⑤ 接收方—微机的屏幕上将出现传输的内容,然后按“整理数据”键,整理之后的数据将出现在规定的区域和文本框中。
⑥ 按“数据存盘” 键。将显示存盘的文件名和路径。
⑦ 确认正确无误后,按“进行下一个”键。第一轮数据传输结束。
⑧ 转到上面的第三项操作,开始新一轮数据通信。
在通信的过程中,应该记录下每一次数据的文件名,以备后用。
后记
利用 VB 的软件环境制作专用的通信控件,对我们来说是一个新的尝试。如果各位用户在使用中有问题希望及时地反馈给我们,以便进一步维护和改正。
参考文献:
1 、“ Visual Basic 与 RS-232 串口通信控制”范逸之,中国青年出版社, 2002 。
2 、“钻孔电磁波法” 吴以仁等,地质出版社, 1982 。
3 、“ JW-4 地下电磁波仪使用说明书”高文利 , 物化探所内部出版 , 2002.
(英文说明)
Subject The Development and Application of Software of Communication Between Computer and Instrument of Under-Ground EM Wave