电子百科
现场总线作为二十世纪80年代发展起来的新兴技术,在工业现场已有了广泛的应用。在比较有影响力的几种现场总线中,CAN总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。
现场总线网络技术的实现需要与计算机相结合。以往CAN总线网络与计算机的连接采用RS232、ISA或PCI接口。但是随着计算机接口技术的发展,ISA接口已经逐渐被淘汰;RS232接口数据传输率太低;PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。随着USB1.1、USB2.0规范的相继制定,为外设与计算机的接口提出了新的发展方向。USB的主要特点有:外设安装简单,可实现热插拨;通讯速率高,USB1.1全速传送速率为12Mbps,与标准串行端口相比,大约快100倍;支持多设备连接;提供内置电源。
本文给出一种在Windows2000下使用USB1.1协议实现CAN总线适配器的设计方法。整个设计主要开发适配器的固件及计算机的驱动程序、应用程序,以达到用USB接口连接现场CAN总线网络的目的。
1 适配器硬件接口设计
适配器硬件电路由微控制器、CAN总线接口、USB总线接口和DC-DC隔离电源模块等组成。原理框图如图1所示。
微控制器P89C51RD2是Philips公司生产的增强型MCS-51兼容单片机,片内集成64KB闪存和1KB扩展RAM,双数据指针,4级中断优先级,7个中断源,内置看门狗,可编程时钟输出,在6时钟模式下工作,速度是标准51单片机的两倍。此时外部最高频率可达20MHz。在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。
CAN总线接口使用Philips公司的独立CAN总线控制器SJA1000,并由光耦6N136进行总线隔离。SJA1000是一种独立控制器,用于移动目标和一般工业环境中的区域网络控制,符合CAN2.0A和2.0B规范,最高速率可在达1Mbps。CAN总线收发器采用PCA82C250。
PDIUSBD12是Philips公司推出的全速USB接口器件,完全兼容USB1.1规范。图1中D+引脚信号电平通过器件SoftConnect命令内部上拉,从而向主机表示为一个全速设备。EOT引脚自动检测USB接口的VBUS电压以确定USB电缆是否连接到了主机。SUSPEND是双向引脚,用以向微控制器指示器件是否挂起。当有USB总线事件发生时,引脚向微控制器发出中断信号。PDIUSBD12支持总线复用和非复用两种并行接口模式,以方便连接不同类型的微控制器。图1中采用总线复用方式,当用奇数地址访问PDIUSBD12时被认为是命令,偶数地址访问则被认为是数据读写。
各器件都需要外部时钟信号,而且它们自身也都有可编程的时钟输出功能,这就给系统的时钟设计带来了便利。图1中微控制器6时钟运行模式下,外部为12MHz晶振。P89C51RD2的P1.1引脚产生6MHz方波作为PDIUSBD12的输入时钟;通过PDIUSBD12的SetMode寄存器编程使CLKOUT输出时钟频率为24MHz,作为SJA1000的外部输入时钟。
2 软件设计
软件设计包括微控制器的固件设计和计算机端USB驱动程序两部分。
2.1 微控制器固件编程
固件编程是USB数据传输系统中终端设备程序设计的一个重要概念。微控制器通过固件是程序与计算机进行数据交换。固件设计的目的是:使PDIUSBD12在USB上达到最大的传输速率;增加系统的可扩展性和硬件无关性。
固件要实现的内容:一是对SJA1000初始化,接收CAN总线送来的数据,收集CAN网络状态信息,并将主机的数据下发到CAN网络;二是对PDIUSBD12初始化,完成USB总线连接过程,并组织CAN网络和主机之间的数据传送。设计中采用KeilC51软件编译环境,C51和ASM混合编程方式。
SJA1000和PDIUSBD12都有完善的中断机制,微控制器可以通过读它们的中断寄存器获得总线事件。为了提高固件的运行效率,主程序对系统进行实始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件。
2.1.1 CAN协议实现
SJA1000支持BasicCAN和PeliCAN两种协议模式。在适配器设计中采用了BasicCAN模式。中断设为电平中断方式,SJA1000中断服务程序框图如图2所示。
2.1.2 USB1.1协议实现
PDIUSBD12支持所有的四种USB数据传输方式。在适配器的设计中使用了控制传输、中断传输和批量传输。控制传输中只用来传递控制信息,固定使用端点0;中断传输使用端点1,用来传送CAN网络状态信息;批量传输用来实现主机和CAN网络节点之间的数据传送,使用端点2。图3是PDIUSBD12中断服务程序框图。
2.2 驱动程序设计
USB驱动程序属于WDM(Windows driver module)类型。WDM驱动程序是分层的,引入了FDO(Function Device Object)和PDO(Physical Device Object)两个新类来描述硬件,每一个物理硬件有一个PDO,但是可以有多个FDO,在驱动程序中直接操作的是PDO和FDO。系统通过全局唯一标识符GUID实现驱动程序的识别。应用程序和WDM驱动程序通信时,系统为每个用户请求打包形成一个I/O请求包发送到驱动程序。
图4是Windows中USB的通信层次结构模型。图4系统软件方块中的底部是Windows系统提供的驱动程序,包括主控制器驱动程序(OPENHCI.SYS或者UHCD.SYS)、HUB驱动程序(USBHUB.SYS)是一个类驱动程序(USBD.SYS)。
Windows2000下驱动程序的设计工具是VC++和Win2000DDK,但是直接使用DDK编程有相当大的难度。目前有第三方软件厂商提供了一些驱动程序开发工具,如Jungo公司的WinDriver、Compuware公司的DriverStudio等。这些工具仍然是基于WindowsDDK的,但是进行了新的封装,提供了驱动程序设计向导。
适配器设计中采用了DriverStudio作为驱动程序开发工具。利用其中的DriverWorks一步步地作出选择并修改少量参数,即可生成驱动程序框架和测试台应用程序框架,对USB设备的通用性部分支持得很好。在程序框架,对USB设备的通用性部分支持得很好。在VC++中对向导生成的代码作修改,并对设备特殊功能部分添加处理代码,然后用VC++编译为*.SYS文件,就是一个完整的驱动程序。SoftIce是DriverStudio的另一个调试工具,可以对驱动程序进行操作系统内核级的跟踪与调试。
生成驱动程序后,编写相应的INF文件是重要的一步。INF文件在操作系统发现新硬件之后向系统指明应该安装的驱动程序、系统向设备提供的服务以及注册表项要修改的内容。
基于USB接口的CAN总线适配器经过试验运行证明:在中小规模和短时大数据块传送时,能够很好地完成网络通信任务。USB接口是计算机外设的发展趋势,目前主要用在中低速场合。随着USB2.0规范的推出,又逐渐向高速应用发展。因此将现场总线网络和计算机接口相连的适配器具有广泛的应用前景。
DeviceNet是一种连接工业底层控制设备的开放式网络,自1994年提出以来,得到了广泛的应用。然而,组建控制系统网络时都面临着布线的问题,虽然采用以太网的现场总线相对来说成本低、维护方便,但在实际的应用中仍然会受到客观条件的限制,特别是在环境恶劣的条件下,不能采用布线来解决问题。在这种情况下,将无线技术引入到工业控制领域就显得很有必要了。基于这一目的,在设计适配器过程中,以无线局域网协议IEEE802.1lb为基础,结合DevlceNet应用层协议和适用于工业现场设备间通信的通信方式,提出实现无线功能的DeviceNet从站适配器的设计方法。
1 DOViceNet总线与IEEE802.11b
1.1 DeviceNet总线
DevlceNet是一种连接工业底层控制设备的开放式网络,采用先进的网络通信技术,具有低成本、高效率、高可靠性、高性能的特点。它可以提供底层网络设备互连的低成本、高效率的解决方案,现场设备的智能化,主从和对等通信能力。两个主要的用途为:传送与现场设备相关的控制和状态信息:传送与被控制系统相关的诊断。配置等其他信息。
1.2 IEEE802.11b
1999年9月,电子和电气工程师协会(IEEE)批准了IEEE 802.11b规范。此规范称为wi—Fi。IEEEE 802.11b定义了用于在共享的无线局域网(WLAN)进行通信的物理层和媒体访问控制(MAC)子层,是目前最流行的WLAN协议,使用2.4 GHz频段;最高速率11 Mbps,实际使用速率根据距离和信号强度可变(150 m内1~2 Mbps,50 m内可达到11 Mbps),802.11b的较低速率使得无线数据网的使用成本能够被大众接受(目前接入节点的成本仅为10~30美元);具有增强物理层,可以和1 Mbps和2 Mbps的802.11bps DSSS系统互操作;编码方式采用CCK(Complementary Code Keylng)技术。
2 系统总体框架和无线从站设计思路
2.1 无线网络总体框架
整个网络分为三个部分:组态软件(上位机)、主节点(一般为PLC)和从站。基于无线技术的DeviceNet网络如图1所示。其中网络组态软件包括RockweU公司的RSIinx和RSworks实时监控网络的状态,并可对主从节点的信息进行配置。PC通过无线网卡与各节点进行通信,在无主节点的情况下可直接对各从站进行直接控制。在通信过程中,各节点模块均需要相应的接收和发送模块。在对主、从节点之间配置后,可实现主从的控制过程。
2.2设计思路
基于802.11b的DeviceNet无线网络,实际上是将原来通过CAN网络进行通信的过程交给无线收发器来完成。这里,网络接口采用物理层接口,即指使用无线信道替代通常的有线信道,而物理层以上各层不变。这样做的最大优点是上层的网络操作系统及相应的驱动程序可不做任何修改。这种接口方式在使用时一般作为有线网的集线器和无线转发器,以实现有线局域网间互连或扩大有线局域网的覆盖面积。无线节点由适配器和从站构成,根据物理层接口的原理,设计中无线收发完成信号的传输,而链路层的功能交给FPGA完成。
3 从站适配器的设计
3.1 适配器系统定位
某系列变频器具备Modbus通信能力,但不具备DeviceNet通信能力。适配器位于从站和DeviceNet网络之间,使变频器能够运行于基于无线技术的DeviceNet网络上。
3.2硬件设计
系统使用ADI公司16位定点DSP。Blackfin531。该款芯片可以实现400 MHz的连续工作,系统支持片外同、异步存储器,具有2个双通道全双工同步串行接口和1个支持IrDA的通行串行口。其中DeviceNet端口使用FPGA+802.11b无线收发器与DeviceNet网络连接。
802.1lb无线收发电路主要由MAX2820和MAX2242等组合实现。MAX2820是单片零中频收发器.专为工作在2.4~2.5 GHz ISM(工作/科学/医疗)波段的802.11b应用而设计,内部包含实现802.11b射频到基带传输所需的所有电路,加上功率放大器MAX2242、RF开关和带通滤波器等就可以构建完整的前端电路。FPGA选用Xilinx公司的XCV50E,硬件电路如图2所示。
3.3数据链路层
数据链路层主要包括逻辑链接子层(LLC)和媒体访问控制子层(MAC)。另外,由于无线网络和DeviceNet网络频率有差异,故应有频率转换的功能。
(1)硬件选择
数据链路功能由FPGA实现。本设计选用Xilinx公司VirtexE系列系统级XcV50E。其主要资源有71 693个系统门、65 536位块内存和176个用户I/O口(其中包括83对差分I/o口)。主要特性有:1.8 V超低核心电压,支持20种高速总线标准,8个全数字延迟锁定环,0.18μm 6层金属工艺,支持IEEE 1149.1边界扫描;具有卓越的整体性能和高速特性,是实现高速系统级设计的优选芯片。
(2)数据帧格式和仲裁的实现
数据帧分为长帧结构和短帧结构,前者用于节点间的报文交换,结构如图3所示;后者用于仲裁,无数据区。
短帧实现仲裁正是利用到标识符的11位。当总线开放时,任何单元均可开始发送报文。若同时由两个或者更多的单元开始发送,总线访问冲突运用逐位仲裁规则,借助标识符ID解决。这种仲裁规则可以使信息和时间均无损失。标识符包含两个具体含义:一是在报文交换时,代表边接的生产者/消费者关系;二是代表报文本身的优先级(越小优先级越高)。无线网络中最大节点数为64,扫描器(主站)地址定义为O,仲裁的过程如图4所示。
3.4 应用层设计
本节从对象建模与寻址、事件驱动与消息响应两个方面,简要介绍无线从节点的应用层设计。
(1)对象建模与寻址
本设计对适配器建立图5所示的对象关系。图5中可以看出,适配器包含10个对象,其中4个为DeviceNet节点必须包含的对象,5个与应用相关的对象,1个组装对象。DeviceNet应用面向对象的技术,将网络节点抽象为若干个对象类的集合,每个对象有特定的功能,具有自己的属性和服务,表现出一定的行为。网络寻址的过程是:根据节点的MACID值确定当前被访问的设备,并由对象、实例、属性为路径定位具体的操作。
(2)事件驱动与消息响应
事件是指改变系统运行状态和运行流程的系统外部或内部的变化,消息是表示事件是否发生的标志。当系统一有事件发生,系统并不立即处理,而是发送一个事件对应的消息,系统的后台不停地捕捉消息。根据收到的消息执行相应的任务。这样尽管系统事件的触发是随机、分散的,但是事件的处理是集中的,程序思路清晰,管理简单。图6是基于这种思想的软件结构。
适配器采用这种程序组织思路,定义了十多个事件。将这些事件分为6类,即故障事件、DeviceNet事件、Modbus事件、RS232事件、定时器事件、设备更新事件和空闲事件,每一类事件中又包含若干个子事件。利用全局变量Global[_]Event来定义各事件的优先级,优先级高的事件先处理,优先级低的事件后处理。
4 总 结
设计将无线技术应用于DevieNet网络的从站适配器的设计中,使得无线领域的发展惠及传统的控制领域。其主要特点为:物理层使用了802.11b协议通信,传送距离远,突破了传统的铺线环节的局限性;利用FPGA实现链路层功能,而对象建模和事件驱动与消息响应则是协议软件设计中的重点。总之,基于无线技术是当前总线技术领域中研究的重要方向,而802.11b具备应用广泛、价格低廉的特点,成为其中的热点。
应急联动要求整个系统快速、灵活、高效地运作,因此,必然要求这些子系统能够协同工作,目前虽然各个 子系统的技术都已经比较成熟,但都自成体系,往往由于接口、架构的不统一使得这些本应紧密集成的子系统成 为了一个个的“信息孤岛”,相互间的协调配合往往在两个系统之间单一进行,每个系统要维护多个接口,系统 整合程度很低且存在瓶颈。各子系统间的信息整合基本上是基于点对点方式开发完成,没有统一的标准接口;对 系统联动缺乏统一的控制机制,并且开放性差,难以随着应急联动业务要求的变化而灵活应对。
智能应用平台(Intelligent Application Platform,IAP)是以智能网技术为基础,结合计算机辅助决 策,多种信息综合处理的平台。IAP 平台就是为了解决前述的系统集成问题,作为粘合剂来连接系统内外各种业 务相关的异构系统、应用以及数据源,从而满足各个子系统之间无缝共享和交换数据的需要。其中适配器为各城 市应急子系统接入到IAP 提供了适配转换桥梁。 1. 智能应用平台(IAP)
智能应用平台(IAP)完成后应用于城市应急联动系统中的理想结构应如图1 所示,系统中各个功能子系统通 过对应的适配器接入到智能应用平台(IAP)中,各子系统之间通过平台实现了客户请求与服务提供的关系,即 一个子系统向平台注册并提供其自身实现的功能(服务提供),同时它也可以向平台查询其需要的功能,并借助 平台使用该功能(客户请求);这样的客户/服务关系由IAP 来统一管理,IAP 对建立在其之上的各个系统来说是 透明的。通过这样统一的系统交换集成平台,以取代原有系统间多对多的网状联接。
图1 城市应急系统IAP 示意图
2. 基于IAP 的适配器设计
IAP 适配器位于结构模型的接入层,它是各城市应急子系统与平台进行交互的桥梁,实现各个子系统与IAP 平台之间共享和交换数据。目前连接到IAP 的各子系统大部分以微软的视窗操作系统为工作平台,因此IAP 适 配器也是基于Windows 平台下的。
2.1 IAP 适配器设计方案概述
Windows 下的适配器实现为ActiveX 控件的方式,适配器在系统中所处的位置如图2 所示:
图2 IAP 适配器示意图
适配器嵌入到各子系统应用中,提供调用方法,代理各子系统应用向 IAP 平台发送消息,同时在收到消息 的时候,通过触发事件,将消息传递给各子系统应用。在IAP 平台侧以接入服务的形式供适配器连接,适配器 与IAP 平台之间的消息采用XML 规范实现,便于灵活扩展。因此适配器必须实现XML 文档的解析和XML 文 档的生成。适配器与IAP 平台的接入服务间采用Socket 连接,以后可以考虑采用SOAP(Simple Object Access Protocal,简单对象接受协议),这是因为由于消息已经定义为XML 方式,可以比较方便地向SOAP 过渡。
2.2 IAP 适配器模块结构
适配器内部可分为三个模块,分别为通讯模块、消息转换模块、子系统接口模块,其结构如图 3 所示:
图 3 IAP 适配器内部结构图
各模块功能叙述如下: 通讯模块:处理与IAP 平台接入服务之间的底层通讯,数据包的收发。通讯层包含收发一对线程,确保通讯 层不成为性能瓶颈。通讯层与接入服务间建立并维护一条Socket 连接,适配器作为客户端。
消息转换模块:包含一个工作线程,通讯模块完成消息包的接收后,即把包发往消息转换模块的工作线程, XML 消息的解析是在工作线程中完成的。同时也处理将数据转换为XML 格式数据包发给通讯模块。 子系统接口模块:接收消息转换模块发来解析后的消息,并触发ActiveX 事件。同时,接收各子系统应用对 其接口方法的调用,并将有关数据发送给消息转换模块处理。
2.3 适配器消息处理机制
适配器的消息处理分为从 IAP 接收及向IAP 发送两个方向。从IAP 接收请求的消息处理流程如图4 所示:
图4 接收IAP 消息处理流程图
A) 通讯层收到业务请求消息,完成消息的接收后,将其发送到业务层的工作线程;
B) 工作线程将消息中的XML 字串解析后,得到命令码,根据不同的命令码调用不同的处理函数,对XML 字串进行进一步解析;
C) 完成 XML 的解析后,将消息中的各参数提取出来,如果带有应用数据的附件,则将提取附件。将消息打 包成内部数据结构,用窗口消息的方式发送给接口层的控件窗口;
D) 控件窗口接收到业务层发来的消息,从消息中解出触发ActiveX 事件所需要的参数,如果需要生成 VARIANT 则进行参数的打包,然后触发事件,将业务调用请求传递给各子系统应用; 向IAP 发送请求的消息处理流程则与从IAP 接收消息流程相反,叙述如下:
a) 各子系统应用通过调用 ActiveX 控件的方法,将业务请求的参数传递给适配器;
b) 适配器接口层将调用参数打包成 XML 消息,如果带有终端应用数据,则将其作为附件打包;
c) 调用通讯层的网络发送接口,通过通讯层的发送线程将消息发送给 IAP 的接入服务。 向IAP 发送请求消息流程如图5 所示:
图5 向IAP 发送消息处理流程图
2.4 适配器各模块设计
(1)通讯模块设计
针对用于Windows 平台的ActiveX 控件,考虑采用Windows 下的异步Socket 机制来实现,Socket 事件挂接 一个窗口句柄,该窗口句柄在接收线程中创建,因此共享该线程的消息循环。对于Socket 的写消息,在接收线 程收到后转发发送线程处理,业务层对Socket 的写操作也发送到发送线程处理。 以上机制封装在基类CSocketBase 中,同时它还封装了作为服务端进行监听的机制,在它的派生类中根据是 作为客户端或服务端,初始化为不同的方式。
(2)消息转换模块设计
消息转换模块以一个工作线程类CworkThread 来实现,类中考虑线程池机制,即可以启动多个工作线程。工 作线程处理IAP 平台发来的消息中XML 部分的解析,同时对终端应用的调用,生成相应的XML 文档,并发送到通 讯层。工作线程从收到的XML 子串中解析出命令字,对不同的命令,调用不同的处理函数来进行处理;完成XML 字串的解析后,将其转换为内部格式,发送到接口层。生成XML 文档处理的流程与上述方式相反。XML 转换的具体实现采用开放源码的xerces 库,并对其做二次封装以方便调用。
(3)子系统接口模块设计
子系统接口模块放在整个适配器的主线程中,包含控件窗口的消息循环。各子系统应用将业务请求以窗口消 息的形式发送给控件窗口,由窗口类中映射的消息进行处理,将请求传递给转换模块。反之,接口模块在收到消 息后,根据不同的消息触发不同的ActiveX 事件,从而将响应传递给各子系统应用处理。接口层必须触发的事件 包括:
与 IAP 平台接入服务Socket 连接建立事件;
向 IAP 注册并收到注册应答消息事件;
与平台间的链路断开后事件;
收到平台发送的业务请求事件(应支持应用数据以字符串的方式和二进制的方式传递);
收到平台发送的业务请求应答事件(应支持应用数据以字符串的方式和二进制的方式传递);
同时,各子系统应用通过调用适配器实现的ActiveX 方法与平台交互,方法包括:
初始化适配器方法;
建立与 IAP 平台间的Socket 连接方法;
断开与平台的网络连接方法;
向平台注册方法;
从平台中注销方法;
发起业务请求方法;
收到业务请求并处理后,发送处理结果方法;
考虑到ActiveX 控件需要跨语言环境使用,例如需要在Web 页面中使用,方法与事件传递中需要传递数组的 情况均采用VARIANT 参数来传递,为了从VARIANT 中解出数据,对此操作进行了封装。
3. 总结
本文设计的基于智能应用平台的适配器依托企业研发环境,很快地进入实用阶段,并很快体现出较好的实用 价值。四川省开县应急联动系统在智能应用平台使用前每日能实现的话务量小于1000 个,应用该平台后日话务 量可到5000 多个,大大提高了整体工作性能。