APP下载

喷气织机控制器CAN通信接口设计及实现

2010-11-15胡旭东金玉珍何伟强

丝绸 2010年1期
关键词:织机喷气驱动程序

汪 静,胡旭东,金玉珍,何伟强

(浙江理工大学 浙江省现代纺织装备技术重点实验室,杭州 310018)

喷气织机控制器CAN通信接口设计及实现

汪 静,胡旭东,金玉珍,何伟强

(浙江理工大学 浙江省现代纺织装备技术重点实验室,杭州 310018)

提出了基于Win CE的喷气织机控制器CAN通信接口设计及实现的方法。设计了CAN通信接口的硬件电路,介绍了接口驱动程序的工作机制及开发环境,详细阐述了Win CE流接口驱动程序的开发过程,并通过编写CAN通信应用程序测试通信。测试结果表明,CAN通信接口在Win CE下通信正常且具有较强的实时性。

Windows CE;CAN总线;流接口驱动;喷气织机控制器

喷气织机控制器主要由人机界面、主控制模块及送经/卷取模块这三大部分组成,用户在人机界面上设定织造工艺条件后传送给织机下位机,下位机的主控制板及送经/卷取板根据人机界面设定的参数执行相应动作并把当前织机运行情况传回人机界面实时显示。织机控制器的正常通信是保证织机正常运行的先决条件。目前,国外高档喷气织机的机电一体化控制普遍采用基于现场总线的通信方式实现,如日本津田驹公司的ZAX-N喷气织机、丰田公司的JAT710喷气织机、比利时必佳乐公司OMNI plus 800喷气织机的控制系统。

CAN总线技术自20世纪80年代末以来已逐渐发展形成一定影响,目前,CAN总线已形成国际标准。CAN总线适用于数据交换简短而频繁的场合,它高性能、高可靠性的优点特别适合工业设备的互连,是解决工业控制设备之间数据通信的有效方式。

基于CAN总线本身具有的优势能够满足喷气织机控制系统的通信要求,本设计中喷气织机控制器的各部分机构通信采用CAN总线通信实现。Windows CE系统是微软公司专门为移动设备、嵌入式应用等非PC领域而设计的一种32位嵌入式实时操作系统,它具有很好的模块性,良好的实时性及强大的通信能力,该操作系统在工业现场设备中也被广泛应用[1-2]。本研究以喷气织机控制器的CAN通信实现为实例,具体给出Win CE下CAN通信接口的实现,详细介绍CAN接口硬件设计及Win CE下接口驱动程序的开发实现流程。

1 Win CE下接口驱动工作机制

在Windows CE中,驱动程序是Windows CE内核的一部分,所有驱动皆为动态链接库,且在驱动实现中可以调用所有标准的API函数。Win CE驱动程序模型有本机驱动程序和流接口驱动程序两种。本机驱动程序通常与基于Win CE的平台有着紧密的连接,总是在平台启动时加载,如键盘、显示器等都有专门用于Win CE的接口。流接口驱动程序是为连接到基于Win CE平台的外围设备而设计的,典型的流式设备如串口、网卡,打印机等。

流接口驱动程序是一般类型的设备驱动程序,由设备管理器统一加载、管理和卸载,它有固定的入口点函数,主要任务是通过流接口函数使得应用程序通过Win CE的文件系统访问这些驱动程序,达到应用程序访问驱动程序、操作硬件的目的。应用程序使用文件API对设备进行访问的过程是:OS接受API调用FileSys.exe,FileSys.exe发现是对设备进行操作,就会把执行交给device.exe,调用流接口与硬件交互[3]。流驱动的体系结构如图1所示。

图1 流式接口驱动程序体系结构Fig.1 Architecture of Stream Interface Driver

2 CAN接口硬件设计

本次设计的基于Win CE的CAN通信接口应用于喷气织机控制器的各部分通信,主要是织机的人机交互界面与织机的主控板及送经/卷取板这三部分机构的通信实现。设计选用基于ARM9结构EP9307为核心处理器,外接触摸板及液晶屏用于系统的输入及输出显示,由于EP9307微处理器不带CAN总线控制器,所以在外部扩展了独立的CAN控制器。为提高系统的驱动能力、增大通信距离,CAN收发器采用PCA82C250芯片作为其与物理总线间的接口,以实现物理层的转换和传输,增加了对总线的差动发送能力和对CAN控制器的差动接收能力[4]。CAN控制器采用SJA1000芯片,SJA1000完全支持CAN 2.0A和CAN 2.0B协议;通信位速率最高可达1 Mbps;有扩展的接收缓冲器64字节,先进先出(FIFO)。硬件结构如图2所示。

为提高系统的可靠性和抗干扰能力,主要从以下几个方面考虑,在CAN收发器与控制器之间接入高速光耦TLP113以实现电气隔离,TLP113可满足在最高速率1 Mbps下的电气响应,保护控制系统电路;采用隔离型DC/DC模块为收发器电路供电,选择B0505S型号定电压输入隔离非稳压单输出型DC/DC模块,可向收发器电路提供低于200 mA的电流,隔离电压可高于1 000 VDC;由于CAN总线对收发器82C250发送数据输入端(TXD)状态的要求,在82C250的TXD端与高速光耦TLP113的输出端5脚相连,同时接390 Ω上拉电阻以保证在总线空闲或出现异常情况时TXD端的状态为高电平;在CAN总线末端必须连接2个120 Ω终端电阻以起到其对总线阻抗的匹配作用,加强总线数据通信的可靠性和抗干扰性。设计时还考虑其他抗干扰措施,如在82C250的CANH、CANL端与地之间并联2个小电容以减小总线上的高频干扰,在82C250与TLP113的电源端与地之间添加去耦合电容以降低干扰。具有光电隔离及电源隔离的CAN通信接口电路如图3示。

图2 硬件结构框图Fig.2 Hardware Structure Diagram

图3 CAN通信接口电路Fig.3 Communication Interface Circuit ofCAN

3 CAN接口驱动设计

3.1 驱动开发环境

Platform Builder(PB)是微软公司提供的一个集成开发软件,通过它可创建系统镜像,包括核心文件系统、存储的程序和文档、系统配置文件等。本次CAN驱动开发选择PB作为开发工具,通过串口连接在超级终端输出打印信息,进行驱动调试。由于驱动开发需要多次的调试、修改,而在PB中每次修改驱动程序后把它编译进系统镜像再调试需要耗费大量的时间。为简化开发过程,选择在Win CE下动态加载流驱动的方法,即单独编译驱动,通过加载DLL文件的方式把驱动加载到Win CE系统中结合硬件进行调试,直到对驱动程序进行多次迭代调试,修改完成之后再将其封装入Win CE系统映像。

3.2 CAN驱动程序的实现

CAN驱动程序的开发过程主要可概括为编写DLL做成Project再加入到操作系统。实现的步骤是先在PB中新建一个DLL项目,编写一些输入函数,寄存器,外设的声明,写DLLENTRY函数;编写流接口函数;编写DLL的导出函数文件.DEF;为驱动程序写入注册表项,修改bib文件。

流接口驱动程序必须实现一组标准的函数用来完成标准的输入输出管理和电源管理,而流驱动开发的重点就在于这10个标准流接口函数的实现[5]。接口函数见表1,在此设备名前缀命名为“CAN”。

表1 流接口函数Tab.1 Function of Stream Interface

现主要对CAN_Init、CAN_Open和CAN_IOControl这3个函数进行分析。

3.2.1 CAN_Init()函数

CAN_Init()函数的主要任务是分配内存、绑定中断,CAN_Init函数流程如图4所示。

图4 CAN_Init函数流程Fig.4 Function Flow of CAN_Init

在Windows CE中,对物理内存的访问是通过虚拟地址进行的,VirtualAlloc()函数负责在虚拟内存空间内保留一段虚拟内存,而VirtualCopy()函数负责把一段物理内存和虚拟内存绑定,这样,最终实现通过虚拟地址进行对物理内存的访问,地址映射的关键代码如下:

DWORD dwRet=1;

SJA1000_VBASE=VirtualAlloc (0, 0x04,MEM_RESERVE, PAGE_NOACCESS);

dwRet=VirtualCopy(SJA1000_VBASE, (PVOID)(SJA1000_PHYBASE>>8), 0x04, PAGE_READWRITE |PAGE_NOCACHE | PAGE_PHYSICAL);

3.2.2 CAN_Open()函数

CAN_Open()函数主要完成初始化,创建有名事件。初始化包括寄存器初始化、SJA1000初始化、缓冲区初始化、CAN设备初始化设置工作方式和波特率参数等。在Win CE中有名事件可以在进程间被识别,通过有名事件实现处于不同进程中的驱动程序与应用程序间的通信,在此创建有名事件以备应用程序使用。

3.2.3 CAN_IOControl()函数

在CAN通信应用程序中通过调用CAN_IOControl()函数可根据自定义协议进行相关参数设置。以波特率设置为例,定义IOCTL_CAN_SET_BAUDRATE函数之后,在应用程序中通过设置控制代码IoControlCode=IOCTL_CAN_SET_BAUDRATE,即可用DeviceIoControl直接调用进行波特率的设置,而不必再对寄存器进行设置,简化了应用程序的开发。

在驱动程序开发过程中还需注意Windows CE中断的处理[6],处理中断的几个关键步骤是:首先在驱动的初始过程中用CreateEvent()函数创建有名事件,调用InterruptInitialize()函数将事件与中断号绑定同时设置该中断使能标识。驱动程序中的中断服务线程(IST)使用WaitForSingleObject()函数等待中断发生,中断发生时唤醒等待相应事件的IST进行中断处理,处理完成后调用InterruptDone()函数告诉操作系统中断处理结束,完成中断处理。

中断程序的任务是接收中断触发完成相应操作。若接收到中断类型为“接收中断”,则读缓存数据,置中断使能并SetEvent()设置同步等待事件对象为有信号量状态,若为其他类型中断(如数据传输错误中断,总线错误中断,数据溢出中断等)则置相应中断使能标志,通信应用程序即可根据使能标志位捕捉错误信息。处理完成后调用InterruptDone()函数完成中断。中断程序流程图如图5所示,其中bStop标识符在初始化函数中赋值,线程创建成功赋False,中断程序不断查询等待中断到达。

3.3 CAN驱动程序的封装

完成驱动程序的编写后,需把驱动程序与Win CE操作系统的其他组件一起编译,将编译后产生的文件封装进操作系统。需要完成的工作是,把驱动程序写入注册表项并修改bib文件。

1)在注册表文件Platform.reg中增加CAN子键和相应键值。[HKEY_LOCAL_MACHINEDriversBuiltInCAN]"Index"=dword: 1;设备驱动程序在同名设备文件中的序号

"Prefix"="CAN" ;设备文件前缀

"Dll"="can.dll" ;设备驱动的DLL文件名

"Order"=dword: 0

图5 中断流程Fig.5 Interrupt Flowchart

2)在文件Platform.Bib的MODULE部分增加代码“CAN.DLL $(_FLATRELEASEDIR)CAN1.DLL NK SH”,使CAN驱动文件被包含在最终编译生成的镜像文件中。

完成驱动封装之后,就可在应用程序中通过标准的文件I/O函数来调用驱动函数控制设备“CAN1:”,如,调用CreateFile函数打开设备,调用ReadFile函数、WriteFile函数读、写设备信息,调用CloseHandle函数关闭设备。最终达到通过应用程序访问CAN驱动程序、操作CAN设备的目的。

4 通信协议

本次CAN通信协议采用自定义的协议规范。CAN报文采用CAN2.0B协议规范中的扩展帧格式。CAN的一包帧由帧信息、帧ID、帧数据三部分组成,为使通信协议简单实用,规定帧信息只能为扩展帧(29位ID),帧数据长度为8个字节。帧ID定义如图6所示,ID值越小优先级越高。帧数据、8位功能代码和8位功能代码参数根据实际需求自行定义,需传输的参数量近100个,8位数据位(28=256)足够使用。针对本系统定义的6位地址ID如表2所示。由于本次设计中CAN总线上设备较少,采用易于实现的总线形拓扑结构及多主式结构的通信方式。

根据以上CAN通信协议实现织机上位机人机交互系统与底层主控板及送经/卷取板的通信。当人机交互系统启动后在总线上发送广播ID侦听总线上其他CAN设备的连接请求,在收到总线上CAN设备的发送的请求后按优先级高低与其建立连接进行通信。

图6 帧ID定义Fig.6 De fi nition of Frame ID

表2 地址ID定义Tab.2 De fi nition of Address ID

5 CAN通信测试

驱动封装入系统后与系统镜像一同下载到目标设备中,再根据CAN通信协议规范编写通信应用程序来测通信是否正常,本次设计的通信应用程序用C#语言编写,采用Windows API函数操作文件的方式访问CAN端口。用USB-CAN收发器连接普通计算机作为测试工具连接CAN收发器82C250的CANH、CANL两脚进行CAN通信的数据收发测试。

为提高CAN通信的实时数据处理能力,通信应用程序设计引入多线程技术,与底层CAN驱动结合,采用中断触发及事件同步对象实现通信应用程序与驱动程序的实时通信,保证CAN总线上数据的即时接收与显示,若在通信过程中出错,则根据中断类型判断错误原因以提示用户进行相应操作。程序中除主线程负责消息处理之外另外创建2个辅助线程:一个是读线程,用于监听CAN端口的缓冲是否有数据到达从而判断是否执行读操作;另一个是显示线程,用于在界面上实时显示接收到的数据信息。辅助线程使用线程同步的事件对象信号量来触发。主线程在打开CAN口后创建与驱动程序初始化中创建的有名事件同名的事件,并将事件对象状态标识为“无信号”状态,同时在主线程中创建读线程并阻塞等待,当驱动程序中类型为“读中断”的中断触发,则设置事件为有信号量状态,阻塞的读线程被激活,调用函数读取“接收缓冲区”中数据。在界面显示还需注意,用户界面上的控件是由主线程创建的,在主线程外修改控件属性涉及跨线程处理控件的问题,因为在C#中不允许在函数中直接修改本线程外的控件属性,必须使用控件的Invoke方法修改。采用委托调用的方法,在声明委托时需注意在Win CE中必须且只能是EventHandler委托。

CAN通信可供选择的波特率范围最低为10 K,最高可达1 M,经数据收发测试结果表明在此波特率范围下通信正常,通信发送方与接收的帧数据、帧格式一致且能即时收发数据,根据测试经验采用250 K的波特率传输稳定性较好,传送速度以ms为单位,实时性及可靠性都很好。

6 结 语

本研究提出了喷气织机控制器CAN通信接口的设计与实现方法,给出基于EP9307微处理器和Win CE下CAN接口的具体实现过程,CAN接口电路设计中采取的措施提高了通信的可靠性及抗干扰能力。CAN接口驱动开发为进一步开发Win CE下CAN总线设备提供了一个良好的底层硬件驱动支持,并可供以后开发基于Win CE下其他设备驱动程序进行参考。CAN通信测试结果表明,CAN通信正常且实时性较强,能满足喷气织机控制器各机构间的通信需求。

[1] 金玉珍,吴震宇,武传宇,等.基于CAN总线喷气织机控制系统的研制[J].纺织学报,2009,30(2):117-120.

[2] 罗健飞,吴仲城,沈春山,等.基于ARM和Win CE下的设备接口驱动设计与实现[J].自动化与仪表,2009(3):1-3.

[3] 何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[4] 刘涛.CAN总线接口电路设计中的关键问题[J].工矿自动化,2007(1):100.

[5] 张毅,王学思.基于Win CE的流接口驱动程序开发[J].工业控制计算机,2008,21(6):47-48.

[6] 胡朝斌,王治森,董伯麟,等.基于Windows CE的数控系统中断控制[J].中国机械工程,2005,16(9):761-764.

Design and Implementation of CAN Communication Interface for Air-jet Loom Controller

WANG Jing, HU Xu-dong, JIN Yu-zhen, HE Wei-qiang
(Zhejiang Province Key Laboratory of Modern Textile Machine, Zhejiang Sci-Tech University, Hangzhou 310018, China)

A design and implementation method of CAN communication interface for Air-jet loom controller based on Win CE was presented in the article. Firstly, the hardware circus of CAN communication interface was designed. Secondly, the working principle and the development environment of interface driver were introduced, the development process of the stream interface driver based on Win CE was discussed in detail.Finally, the application program of CAN communication was developed to test the communication effect.The test results showed that the CAN communication interface based on Win CE could achieve real-time communication.

Windows CE; CAN bus; Stream interface driver; Air-jet loom controller

TS103.337.11;TP316.7

A

1001-7003(2010)01-0031-05

2009-06-27

浙江省自然科学基金项目(Y1080469)

汪静(1986- ),女,硕士研究生,研究方向为纺织设备机电一体化。通讯作者:胡旭东,教授,xdhu@zstu.edu.cn。

猜你喜欢

织机喷气驱动程序
计算机硬件设备驱动程序分析
喷水织机进入大面积更新换代期
实地调研国产中高端织机
喷气的板车
喷气织机辅助喷嘴专利技术综述
喷气织机松经机构与后梁配合的应用探讨
发热纤维/棉/黏胶多组分喷气纺纱线的开发
基于MPC8280的CPU单元与内部总线驱动程序设计
The United States Set Out to Build a New Generation of Unmanned Drones SR-71
妙用鼠标驱动