引言:
目前最为先进的嵌入式工业计算机PCl04,以其优良的品质、高可靠性及模块化的特点,而被广泛应用于工业控制、航空航天、军事、医疗、智能仪器仪表等领域。PC104中的MSM486SV模块是一个基于PC/104而成的高可靠性、高集成度的ALL-IN-ONE CPU模块;它在PC/104的标准尺寸上集成了计算机的所有功能(包括SVGA和LCD接口);板上除了包含标准PC的一般接口,还为适应嵌入式的应用,而对MSM486SV单板进行一系列附加特性设计,使得板上功能更为完善。
光电计时仪是我们研制的一种适用于恶劣环境下测量某一时刻及测量时间间隔的专用设备,由于PC104中的MSM486SV模块的优越性能,我们选用其作为光电计时仪的控制计算机。在实际运行中为实现上位PC机与PC104之间进行数据交换,我们采用串行通信的通信方式。串行通信具有使用方便、传输可靠、信号线数量少等优点,因而它在传输数据量不大、要求速度不高而传输距离较远的通信场合得到广泛的应用。本文结合光电计时仪实例,介绍了PC104串口通信在工程中的应用。
1. 串口通信的基本原理
串行端口的基本功能是实现CPU和串行设备间的编码转换,当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位;在接收数据时,串行的位被转换为字节数据。PC系列及其兼容机为了实现串行通讯,都配置了一个大规模集成通讯组件-----通用异步接收发送器(简称UART);UART 有一系列的内部寄存器,通过这些内部寄存器操作来实现通讯功能。
对于可编程的异步串行通信芯片UART,我们可根据协议的要求对其进行初始化。初始化后,当要发送一个数据字符时,如果UART发送保持寄存器为空,可用CPU的输入输出指令把该数据输出到UART的发送保持寄存器。UART按初始化时设置的要求,把相应的起始位,奇偶位和停止位加到来自CPU的8位数据上,然后按设置的波特率把这个二进制位串发送到串行通信线上;同样UART能自动从通信线上接收串行数据,并取出有效的数据位,然后转换成数据字符存入接收数据寄存器。
2. 利用串口实现远程控制
在仪表、工控领域,采用嵌入式PC是自动化设备和测量装置开发的一个方向。嵌入式PC装置安装在设备中,一般安装很少的外设甚至不需安装键盘、显示器、软驱等外设;当需要更新、交换其中的应用程序和数据文件时,常规方法是将嵌入式PC从设备上拆下来,再利用外挂键盘、显示器和软驱来进行文件管理,实际操作起来十分不便。注意到嵌入式PC上一般带有串口、并口和USB口等通讯接口,我们可以利用上述通讯接口外接一台普通的PC机,采用客户机/服务器模式和仿真终端来进行嵌入式PC装置的文件更新和管理。基于这种想法,本文论述了在某型光电计时仪的设计中利用串口来实现远程连接/调试功能的两种方法,一种是将PC机的外设定向为嵌入式PC104的外设,另一种是将嵌入式PC104的物理驱动器镜像为PC机的驱动器,具体方法如下:
方法1:仿真终端模式
MSM486SV模块在系统BIOS中特别安装了512K 的“远程连接/调试”扩展。我们可以重新定向"显示""键盘""硬盘"或"软驱"。这样,当我们将MSM486SV通过串行口与一台计算机(HOST)相连后(如图1),即使MSM486SV上没有连接任何外设,我们仍然可以对MSM486SV进行操作。首先我们在HOST上运行"REMHOST.EXE"实用程序,然后我们对指定的"HOST"的外设重新定向,这样"HOST"上的"键盘""显示器"或"软驱"就变成了MSM486SV的外设,接下来,我们就可以对MSM486SV进行调试或程序更新了。这一点对那些“黑”模式的现场嵌入式应用有特殊意义------我们只要一台“笔记本"作为HOST即可。
方法2:驱动器镜像模式
应用DOS6.22的intersever功能来实现远程连接/调试。 PC104作为服务器,PC机作为客户端。
步骤如下:
1. 将PC104通过串行口与PC机相连(如图1);
2. 两台计算机均在DOS同一版本下启动;
3.在服务器端:在AutoExec中启动intersve.exe;
4. 在客户端:启动interlink.exe;
5. 如果联机正确,Dos操作系统自动将sever(服务器)中的物理驱动器镜像到客户端,比如服务器中的C盘,被映射到客户端的G盘,这时在客户端操作G盘就是对服务器的C盘进行操作。
在应用中,PC104如果没有任何外设,但却需要现场操作调试,方法1无疑是最佳选择。
在我们研制的光电计时仪中,PC104接有矩阵键盘和显示屏,没有安装软驱。平时PC104单独进行工作控制,当我们需要改写模拟电子硬盘上用户程序时,我们可以利用串口来实现。在此情况下,上述两种方法都可以使用。但第二种方法就相对简单一些,它不用设置BIOS和装载REMHOST.EXE,只需要一张DOS最小系统的启动盘即可。
3.利用串口传送文件
光电计时仪在完成测量工作后,需要及时地将测量结果上传到上位机,以便进行实时处理和判断。在测量文件比较小(1K左右)、传输距离短的情况下,串口通信是最佳的传输方式,我们在测量程序中设计了一种简单的文件发送程序来实现这种功能。我们将主控室的计算机作为上位机接收文件,将系统的PC104计算机作为下位机发送文件,采用双向通信方式;串行通讯的波特率为4800BPS、8位数据位、1个停止位,采用奇校验的方法。
3.1 下位机(PC104)文件发送的软件程序设计
软件程序设计采用C语言,运行环境为DOS6.22平台系统,它的可读性好,并且能够方便可行的移植到其他平台。
在DOS系统下有好多种的串口编程方法,结合实际,我们采用直接读写UART内部寄存器的方法,通过使用C语言提供的基本输入输出函数inportb (),outportb ()实现了PC104模块的异步串行通信。对于串口连接,我们采用了最简单的三线制连法。对于无硬件握手信号的处理,我们采用了一种比较简单的方法进行软件握手,即在发送一组数据字符前,先发送一个联络信号(约定字符),然后等待对方的应答信号,在收到对方的应答信号后,就认为对方在最近一段时间内是准备好的;在此之后的发送就总是认为对方是准备好的。这种方法简单可行,缺点是波特率不能设置过高:因为必须确保对方能及时的处理掉发送出去的字符。但是对我们只有1K左右文件的传输,即使在波特率为4800时,也不会耗时很长。程序流程如图2所示。
3.2 上位机(PC机)接收的软件程序设计
上位PC机工作在Windows下,我们采用Visual C++6.0语言编程。在Windows下用Visual C++ 6.0开发串行通信程序时主要有两种方法:① 利用Visual C++ 6.0提供的MSComm控件来编程;② 利用专门的Windows的SDK提供的API函数来编程。利用MSComm控件实现串口通信的编程方法原理上比较简单,容易实现,但编程的灵活性较差,传输速率受到限制;利用API函数实现串口通信的编程方法功能强大,灵活性好,但原理比较复杂,需要编程人员对硬件的工作原理有深入的了解。实际应用时为了满足大容量数据传输的需要以及增加系统的灵活性,我们采用第二种方法。程序流程图如图3所示。
在32位的Windows系统中,串口和其他通信设备是作为文件处理的。串口的打开、关闭,读取和写入所用的函数与操作文件的函数完全一致。这方面的文献和教材很多,在这里我们就不再叙述。
4 串口的硬件设计
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),当通信距离较近时(<12m),适合采用电缆线直接连接标准RS232端口。若距离较远,则需附加调制解调器(MODEM)。最为简单且常用的是采用3线制RXD、TXD、GND软握手的零MODEM 方式,即将PC机和PC104的发送数据线TXD与接收数据RXD交叉连接,二者的地线GND直接相连(如图4所示),采用软件握手方式 ,其它信号线(如握手信号线)均不使用。这样既可以实现预定的任务,又可以简化电路设计、节约成本。
结束语:
本文较全面介绍了PC104的串口通信原理在光电计时仪中的应用,主要阐述了利用串口进行文件发送的程序设计的方法。光电计时仪的运行实践证明了利用串口改写模拟电子盘上的用户程序的方法方便可行;同时表明用本文中提及的串口程序来传送文件方法简单、效果稳定。这种方法也可以广泛应用在其它传输文件小、波特率要求不高的场合。
参考文献:
[1] 龚建伟 熊光明. Visual C++/Turbo C 串口通信编程实践[M]. 北京:电子工业出版社2004
[2] 吕强 杨季文等.C语言的DOS系统程序设计[M].北京:清华大学出版社 1994
[3] 罗利. 基于中断方式PC104高速串行通讯软件[J]. 电子测量技术 2004年4月
[4] 张蓉等.用串口通讯实现嵌入式PC设备文件管理[J].工业控制计算机 2002年15卷6期