Windows 2K平台下多机通信卡及其驱动程序
点击数:7879 次 录入时间:03-04 11:35:38 整理:http://www.55dianzi.com 电力配电知识
在工业现场,监控系统经常采用RS-485/423/422通信标准。然而,在WINOOWs2K平台下,复杂的多机通信和大数据量的传输会加重计算机的负担。作者采用自制的多机通信卡解决了这一问题。本文介绍了WINOOWs2K平台下多机通信的基本原理,论述了多机通信卡的设计方法,进一步阐述了驱动程序设计的一般原则。 关键词:RS-485,单片机,多机通信,WDM 1 引言在电力监控系统中,为保证数据通信的可靠性,从机经常采用RS-485标准接口同主机进行通信。通常,主机是一台安装有WINOOWs9X、WinNT或WINOOWs2K等操作系统的计算机。从机为8051单片机系统,8051串行口的输入输出为TTL电平,抗干扰性较差,只能在几米的范围之内传输数据。为了增强抗干扰性,提高串地通信的可靠性,增加传输距离,必须采用标准串行总线接口。若将串行口的输入输出电平转换成目前流行的RS-485标准串行总线接口,那么主机也必须完成相应的RS-485转换接口。普遍采用的做法是给计算机外接一个RS-485/232转换接口卡,利用现有的RS-232接口完成主机同从机之间的通信。在单机通信的情况下,这种做法是可以的。但是在多机通信中,实现起来非常麻烦,而且会大量占用计算机CPU的时间。下面介绍WINOOWs平台实现通信的几种基本方式,以及开发多机通信卡的方法和技巧。2 WINOOWs平台下多机通信方式利用计算机的串行通信适配器,其核心为可编程异步收发器UART8250芯片,8250由10个可寻址寄存器供CPU读/写,实现与外界的数据通信,制动通信协议和提供通信状态信息。这样,可以满足单机通信的要求。8051单片机的串行通道是一个全双工的串行通信口,既可以实现双机通信,也可以实现多机通信。当串行口工作在方式2或方式3时,若特殊功能寄存器SCON的SM2由软件置为“1”,则为多机方式;若SM2置为“0”,则为9位异步通信方式。在多机通信时,8051的帧格式是11位,其中第9位是SCON中的TB8,它是多机通信时发送地址(TB8=1)或发送数据(TB8=0)的标志。计算机的串行通信接口芯片8250并不具有多机通信的功能,也不能产生类似8051的TB8。为了完成多机通信的功能,一般的实现方式是:计算机给每台8051单片机系统发送9位数据,查询是否有要发送的数据,并等待应答。若有,则接收数据;没有,则继续查询下一台。由此可以看出,这种通信方式速度是很慢的(如果有一台8051长时间没有响应,则耗时更长),而且也并不可靠,从机的台数越多则计算机的资源浪费就会越严重。这种实现方式效率不高,不能满足我们的通信要求。因此,直接利用计算机串口的方式进行通信是行不通的。为了尽可能减轻CPU的负担,采用自行设计的智能通信卡,利用中断方式的通信(这里指的是从机与通信卡之间的通信方式),来解决这个问题。3 通信卡与多个8051通信的原理为完成异步串行通信,首先就需要实现异步收发器的功能,其次还要实现多机通信时发送的帧格式。考虑到8051除了实现异步收发的功能外,还可以编制控制程序,使用起来更加灵活、方便,因此,用8051来实现异步收发器。为了提高通信速度,从机与通信卡之间采用中断通信方式。具体的实现方案如图1所示。

图示的这种硬件结构,使从机解放出来,平时不必处于监听状态。当计算机要求通信时,可以利用多机通信卡的处理器向从机发出中断信号,即通信卡通过3487(TTL电平转换为RS-485电平),从机通过3486(RS-485电平转换为TTL电平)进行从机中断信号联系。从机进入中断服务程序后,则关闭外部中断,保护现场,监听主机发送的地址信号,并对其进行识别,如果与本机地址相符,取消监听,进入通信状态。通信卡与计算机进行通信是通过数据接口和译码电路实现的。该接口卡利用中断方式与计算机通信,即通信卡向计算机发出中断请求,计算机接收到相应中断请求后,执行数据收发的任务。其中,计算机对通信卡的访问是利用内存映射方式实现的。4 通信卡设计该通信卡基于ISA总线工业标准。它的设计主要分为三个部分:地址译码电路、数据接口电路和控制逻辑电路。(1)地址译码电路由于采用的是端口统一编址的方式(也就是给每一个I/O端口分配一个存储器地址),I/O端口的寻址信号由地址总线通过译码得到。CPU用存储器读写指令对I/O接口进行读写,此时,I/O端口的读写操作控制信号采用存储器读(MEMR)和存储器写(MEMW)信号。而在通信卡上为实现内存映射就必须完成相应的译码转换,也就是将对应的双口RAM地址与分配的地址空间对应起来,实现地址的转换。实现时,采用动态配置内存映射设备,改变内存映射端口的地址也相对方便,比老式的ISA[1]接口用跳线配置要优越些。该双口RAM为8K,但计算机能够访问的只有4K。其中CTRL线是8K RAM的控制线,通过该线可以实现“乒乓”结构[1]的数据传输。(2)数据接口电路数据接口电路实现数据线的驱动功能。尽管很多计算机主板的数据总线都经过驱动,但为了确保可靠性,数据总线不应直接与双口RAM相连接,而是通过数据驱动器件与数据线相连。(3)控制逻辑电路控制逻辑电路是与计算机通信的核心部分,该部分主要是实现“乒乓”结构的硬件控制部分。当存储器中的RAM达到HALF READY(半满状态)时发出中断申请实现数据的传输,同时,将CTRL状态取反,使得计算机访问的是其中的一半,即实现了数据传输的“乒乓”结构。此外,数据的读写控制也通过控制逻辑实现。89C52实现与从机多机通信,同时将得到的数据存入双口RAM中,控制逻辑协调RAM的数据读写工作。5 设备驱动程序的设计在WINOOWs 9x下的VxD(虚拟设备驱动程序)相比,WINOOWs 2K下的WDM(WINOOWs设备驱动模型)驱动程序要复杂一些。WDM驱动程序是分层的,不同层上的驱动程序有着不同的优先级[2]。此外,WDM还引入了FDO(功能设备对象)与PDO(物理设备对象)两个新类来描述硬件。在开发驱动程序过程中,使用了DriverStudio中的DriverWorks工具用来创建WDM框架。DriverWorks提供用于访问内存映射地址的类KmemoryRange和KmemoryRegister。实现步骤如下:

(3)在初始化成功后,可以调用类KmemoryRange的成员函数实现对内存映射地址寄存器[2]的访问。在驱动程序的开发中还涉及到硬件中断的处理。具体地说,首先安装一个中断服务例程(ISR),当相应的中断发生时,内核调用它的中断服务例程。中断服务例程的第一个工作是判断该中断是否由自己的设备产生。如果不是,则返回FALSE,交给其他的中断服务例程;如果是,则处理该中断,并返回TRUE。同样,DriverWorks提供Kinterrpt和KdefrredCall类处理中断。具体编程如下:




6 结束语由于在接口卡中采用了89C52芯片完成数据收发工作,同时协助主机进行信号的处理,这在很大程度上减轻了主机的负担,加速了I/O操作。在驱动程序的编制上,采用了WDM驱动模型,这样可以很方便地将程序移植到任何支持WDM模型的操作系统中去。 参考文献 1 路友荣 编著.PC系列微机接口扩展设计.成都:成都科技大学出版社,19942 尤晋元,史美琳等 编著.WINOOWs操作系统原理.北京:机械工业出版社,2001
本文关键字:通信 程序 Windows 电力配电知识,电工技术 - 电力配电知识