80C196KB与PC机之间的远程通讯系统设计
扫描二维码
随时随地手机看文章
在许多实时监测系统中,经常需要接收距离较远的测控点数据,如何快速可靠的实现数据的远程传输是这些监测系统必须解决的问题。在监测现场,为了降低系统的成本,往往采用单片机系统作为数据采集和记录单元;在中央控制中心,常常利用PC机来完成人机会话及与监测现场的通信。数据的远程传输目前经常用调制解调器(Modem)通过电话线来进行。本文将介绍一套实用的主从式远程通记系统。其下位机由16位单片机80C196KB承提,上位机的管理平台则基于界面友好、功能强大的Visual Basic 6.0。
1 80C196与PC间的通讯方式
用80C196KB单片机的串行接口和调制解调器以及现有的电话线来实现远程双向通讯的系统方框图如图1所示。
在利用现有电话线进行数据传输的串行通讯时,必须把将要传送的数据按先后顺序,在公共信道上逐位传送。
串行通讯对字符编码、字符格式和传输速度都有具体规定,必须严格遵守。
异步串行通讯数据的传送格式由四部分组成,即起始位、数据位、奇偶校验位和终止位。通讯协议要求在发送端每传送一个字符都必须要有起始位、数据位、奇偶校验位和一个终止位的字符串;而在接收端,也要按照起始位、数据位、奇偶校验位和一个终止位的字符串进行计数接收。
2 80C196KB与Modem间的接口
RS-232C的标准规定,逻辑“0”表示其电位应在+5~+15V之间,逻辑“1”表示其电位应在-5~-15V之间,而80C196KB单片机串口电闰为TTL电平,因此必须要通过电平转换才能符合串行通讯标准。具体的接口电路如图2所示。
电路中采用IN-TERSIL公司生产的只需+5V供电的串行收/发驱动器芯片ICL232来进行电平的转换和驱动。当终端(196KB)处于操作规程状态并可接收数据时,为了能将此信息传送给MODEM,则必须使用管脚4上的数据终端就绪(DTR)信号;同样地,为使终端设备(196KB)能够将数据传输的信息通知调制解调器,就必须使用管脚7上的请求发送(RTS)信号。
由图2可见,单片机DB(9芯)只给调制解调器的RS-232接口(9芯)提供三条信号线,即发送数据(TXD)、接收数据(RXD)和信号地SG。为了使数据链路能正常工作,可将调制解调器RS-232接口的4脚(DTR)和7脚(RTS)置高,以使之长期有效。
表1列出了RS-232的管脚及描述。表中的DTE为数据终端设备(Data Terminal Equipment)。本文中指下位机80C196KB和上位机PC,而DCE则表示数据通信设备(Data Communication Equipment)。本文中指调制解调器。
表1 RS-232各引脚描述
3 波特率设置
为了实现与远方中央控制计算机正确可靠地通讯,双方波特率必须一致。考虑到所选信道为公用电话网,为兼顾数据传输的高速性和可靠性,文中将波特率定为9600bps。
3.1 下位机部分
80C196KB串行口的波特率取决于16位波特率寄存器的内容。该寄存器应以连续2个字节进行装载,低位字节优先。寄存器的最高位用于选择波特率发生器的输入时钟源,最高位为1,选用XTAL1(即晶体振荡器)信号为源信号,否则选用自T2CLK引脚的信号为源信号。
80C196KB 的内部时钟信号是经2分频获得的。若以BAUD-REG表示波特率寄存器的装载值,那么在同步模式0时,BUAD-REG=XTAL1/(2×波特率)- 1或T2CLK/波特率;而在异步模式1、2和3时,其BAUD-REG=XTAL1/(16×波特率)-1或T2CLK/(8×波特率)。
80C196KB的通信方式设定为异步方式1时,可进行全双工通讯,其格式为每10位构成一串行帧,其中包括1位起始位,8位数据位和1位停止位。
在本系统中,80C196KB的晶振为12MHz,因此,为使波特率达到9600,需将波特率寄存器赋值为804EH。
表2列出了采用XTAL1作为时钟源时,异步模式下一些常用波特率所对应的波特率寄存器值。应注意,表中所列的值是根据上述公式计算所得的值再加上最高位“1”后得到的。
表2 常用波特率对应的波特率寄存器值
3.2 上位机部分
微机数据采集系统中的一个关键问题是要在Windows环境下编写相应的通信程序。Windows应用编程接口(API)所提供的有关串行通讯的16个函数可以实现完整的通讯功能,但其应用较为复杂。而VB中有一个通讯控件MSComm,通过改变其属性设置和编写相应的程序,就能在Windows环境下方便地实现不同用户的串行通讯要求。
利用下面的语句可以方便地设置传输波特率,MSComm1.Settings=“9600,N,8,1”
表明波特率为9600,无奇偶校验位,8位数据位,1位停止位。
4 80C196KB和中央控制机的通讯
在本系统中,下位机为主叫端,上位机为应答端,它们通过公用电话网进行数据传输。其数据链路的建立、数据传输及结束通信的全过程如表3所列。
表3 数据传输过程表
调制解调器安装好后,必须预先设置好调制解调器的初始状态,然后再开通。否则通讯将不会成功。用户对Modem初始化状态的设置可以保存在非易失性RAM中。
下面对表3所列的传输过程进行说明。
(1)在握手初期,两端的DTE需对Modem进行复位操作。为此,它们先给本端的Modem发ATZ命令。若Modem能执行重设操作,便会返回结果码OK,若Modem尚未与电话线连接,便返回NO DIALTONE,表示没有拨号音。
(2)两端DTE给各自的Modem发AT&F命令,调入Modem出厂缺省设置。
(3)主叫端DTE(196KB)向应答端Modem发拨号命令ATDT xxxx(ATDT表示音频拨号,xxxx为对端的电话号码)。当对端Modem检测到振铃(RING)后,由PC机控制并回送应答呼叫命令ATA。如果话路正常,则在一定的延时后,两端Modem收到结果码CONNECT 9600,并使Modem的CD指示灯亮,以表明数据传输链路成功建立。
(4)数据传输。
(5)数据通讯完成后,双方Modem要拆链挂机。“+ + +”命令是由数据传输状态转为命令状态的AT指令,它的前后必须有一段时间延时。当Modem状态变为命令状态时,可以用命令ATH来实现挂机。至此,两台Modem间的通讯任务就完成了。此时PC机内已存放了主机传来的数据,将这些数据存入数据库后可作进一步的处理。
5 数据传输的流量控制和侦错纠错
当两端Modem正确可靠地建立起数据链路后就可以进行数据通讯了。在通过电话系统传输数据时,没有一种简单的方法能确保数据正确完整地到达对方。数据错误的发生可能有多种原因。由于串行通讯时数据是逐位发送的,因此即使极小的噪声都有可能在多个位上造成严重错误,当波特率较高时出现错误更严重。在实际应用,常采用XMODEM协议对数据进行打包处理以检测传输过程中出现的错误,若检测到错误信息,则要求重传出现错误的数据信息。理论上讲如果每个数据包都能正确地传送,那么整个数据块也将成功地传送。XMODEM协议按照一套特定的准则控制着数据传输的所有细节,其中包括如何启动传输、包的大小、包的内容、正负应答以及如何完成传输等。
XMODEM协议虽然较为成熟和完美,全过于复杂。本系统借鉴XMODEM协议的设计思想,并针对现场监控数据的特点,设计了一套简洁的流控和侦错协议。从本系统的实际运行情况来看,该协议可保证数据的可靠传输,并能在话路质量较差时多次重发出错的数据帧直到数据传输正确为止。
图3为上位机通信子程序的流程图,它主要利用VB6.0的通讯控件MSComm的ON COMM事件。
本系统在每次通信中,由80C196KB送给PC机的有效数据帧共4320帧,每帧113字节。其中有效字节112个,以3个FFH开头,最后1个字节为异或结果,可用于传输后的异或校验。在发送有效数据帧之前,下位机先发一个请求帧(仍为113字节),其帧结构为112个F0H加一异或结果。上位机收到该帧请求信号后,将回送握手成功信号,并作好接收有效数据的准备。下位机收到上位机发回的握手成功信号后,便将有效数据帧逐帧发送。
上位机对每帧数据的均要作异或校验。如有错误的则回送失败信号,并要求下位机重发;正确的则放入缓冲数组以备存库,并回送成功信号。当有效数据帧发送完毕后,下位机将发一个结束帧,其帧结构为112个FCH加一个异或结果。上位机收到该帧结束信号后,发出AT命令“+ + +ATH”以拆链挂机。至此,数据通信过程结束,之后,上位机将缓冲数组里数据存入数据库,以便日后进行数据分析。
6 结束语
利用公用电话网,80C196KB单片机系统可通过Modem与远方监控中心进行通讯。这种系统的软硬件设计方案简单可行,运行成本低,数据传输速率较高。本监控系统已在现场投入使用,经受了实际考验。可推广应用于各类远程通讯系统。