1引言
目前,先进的嵌入式计算机以其优良的品质、高可靠性及模块化,广泛地应用于工业控制、航空航天、医疗、智能仪表、通讯、数控、自动化生产设备、数据采集等领域。在实际应用中,有时需要借助微机的强大的数据处理能力和丰富的软件资源,使得组成的系统功能更为强大。这样,为了提升系统的整体性能,必须实现PC机和嵌入式计算机之间的通讯。它们之间的通讯可以通过并行通讯或串行通讯两种方式来实现。由于串行通讯相对于并行通讯有接线数量少,抗干扰性能好等优点,所以,这里采用串行通讯的方式。
2嵌入式计算机的硬件和通讯软件的设计
2.1系统的功能简介
本文以温控系统为背景作介绍。现场的嵌入式计算机的模拟量采集模块和数字量采集模块采集温度湿度、以及执行机构的开关量状态,经自身的MCU(微控器)进行简单的处理后,经串行通讯的方式,将这些数据上传至微机,微机则先将模拟量资料存入数据库中(为了中长期地跟踪温控系统的控制效果,便于以后的分析),再通过控制算法来计算输出控制量,并通过通讯下传到嵌入式计算机中,然后再由其控制量输出至相应的执行机构进行控制。整个系统这样设计的优点在于:通过微机上的图形控制接口,生动实时地向用户显示控制对象的情况;友好的用户接口使得用户可以在微机上直接手动输出来控制被控对象;同时又发挥了嵌入式计算机系统的稳定性、可靠性和高度灵活性等特点。
2.2嵌入式计算机的硬件结构
嵌入式计算机系统由以下几部分组成:模拟量采集部分,数字量采集部分及输出部分,通讯部分和微控器的综合控制部分。
模拟量采集部分最少可以采集32路的模拟量,并可以通过硬件的跳线设置最多采集64路的模拟量。通过模拟开关的切换,可以将模拟量信号经过A/D芯片转化为数字量信号,再做进一步的处理。A/D芯片用的是德州仪器公司(Texas InstrumentsIncorporaTIon)的TLC2543C。TLC2543C是渐次逼近式的A/D转换器,具有12位的精度,可以同时对11路信号进行转换。数字量采集部分及输出部分使用了NEC8255芯片,通过软件对NEC8255进行设置来选择数字量的输入与输出的方向。通讯部分将MCU的TTL电平转换为进行RS-485通讯所需的485电平。微控器的综合控制部分的作用是:对模拟量采集部分、数字量采集部分及输出部分、以及通讯部分进行协调控制,同时可以接受用户的按键输入,它也将负责将采集到的模拟量转换后,在现场的LED上显示出来。系统框图如图1所示。
2.3嵌入式计算机的通讯部分硬件设计
通讯部分将MCU的TTL电平转换为进行RS-485通讯所需的485电平,进行电平转换的是MAX1480C。MAX1480B是一种完全电气隔离的RS422/RS485数据通信接口,在一个标准的DIP封装
中有完整的接口,包括收发器、光耦合器和变压器,逻辑侧的单电源+5V给接口两侧供电。信号于电源在内部跨过隔离层进行传送,电源通过中心抽头的变压器从隔离层的逻辑侧(非隔离侧)变换至隔离侧,信号由高速的光耦合器从隔离的一侧传至另一侧。MAX1480B具有有限斜率驱动器,即驱动器发送的数字信号,其边沿斜率是受限制的,以使电磁干扰(EMI)最小,且能减小由于电缆终端不匹配而引起的反射,在数据速率高达250kbps时能做到无误差的数据传送。驱动器具有限制短路电流的功能,并使用热关闭电路保护,使之功耗不致过大。热关闭电路可把驱动器的输出置于高阻状态,接收器输入端具有故障保护的特性,如果输入开路,可保证输出为高点平。MCU与MAX1480B的硬件接口如图2所示。
2.4嵌入式计算机的通讯部分软件设计
由于嵌入式计算机系统中的微控器(MCU)是AT89C55,要和PC机进行通讯,必须对微控器的串行口进行初始化,设置通讯方式(协议)、通讯速度、传送的资料格式和长度,然后打开通讯口进行通讯。嵌入式计算机系统中的编程语言使用的是KEILINCORPORATION公司的KeilC6.12。通讯部分的软件流程如图3所示。
相应的重要通讯代码:
3Windows98平台上的串行通讯程序
为了和嵌入式计算机进行485通讯,所以在上位微机中我们采用了研华工控的基于ISA的485电平转换板卡。在视窗98操作系统下,操作系统全面地接管了PC机的硬件系统,所以在Windows98下,通过自己编写低层端口的驱动程序将十分麻烦。而VisualBasic6.0中的MSComm则解决了开发者对Windows管理低层硬件不熟悉的问题。所以我们使用VisualBasic6.0中的MSComm来编制通讯程序。VB中的MSComm为应用程序提供了串行通讯功能,它通过串行口发送和接收数据,非常方便地实现串行通讯。MSComm控件提供了一系列的标准通讯命令的使用界面。使用它可以建立与串行口的连接,通过串行口连接到其他通讯设备,进行数据交换,以及监视和响应串行连接中发生的事件和错误。下面先来介绍一下MSComm的一些属性和事件,见表1。
OnComm事件是MSComm中的唯一的一个事件。无论何时当CommEvent属性的值变化时,就产生OnComm事件,标志发生了一个通讯事件或一个错误。
在属性中,根据笔者的调试经验有以下两点值得注意:
(1)Input属性和InputMode属性之间的关系:
InputMode属性确定用Input属性读取的数据类型。如果设置InputMode为comInputModeText,Input属性通过一个Variant返回文本数据。如果设置InputMode为comInputModeBinary,Input属性通过一个Variant返回一二进制数据的数组。因为,根据本系统的通讯协议要求,通讯中数据部分的数值可能会大于127,而comInputModeText方式采用ASCII编码,其最大值只有127,所以要用comInputModeBinary方式。
(2)Output属性讨论:Output属性可以传输文本数据或二进制数据。用Output属性传输文本数据,必须定义一个包含一个字符串的Variant。而字符串中的字符也是用ASCII编码,这样也不符合通讯协议的要求。所以要用Output属性传输二进制数据,这样才能与符合通讯协议的要求。发送二进制数据,必须传递一个包含字节数组的Variant到Output属性。具体发送做法如下:
下面是一些重要的程序代码:
4结束语
本系统在实际应用中,运行稳定,得到了用户的好评。由嵌入式计算机和微机(PC)组成的系统,通过发挥各自的长处,并通过串行通讯相连,极大地提高了系统的稳定性和可靠性,同时从成本的角度来考虑,它也是经济实惠的,高性价比的。