微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于WINCE的CAN驱动的研究与实现

基于WINCE的CAN驱动的研究与实现

时间:03-24 来源:互联网 点击:

子设备协议继续进行处理。

4.3 工作方式

驱动程序由三部分组成:在Windows内核中工作的windows设备驱动程序、MCGS中的CAN父设备、MCGS中的CAN子设备。

windows设备驱动程序:由于使用多主通讯,通讯的发生时间是不可预知的,而且sja1000的通讯缓冲区有限(64字节),因此最好在中断中处理通讯事务。建议将大部分工作在windows设备驱动程序中完成。可以建立一块内存如:unsigned char can_data[60][2][64][4]。将所有收到的I/O模块的寄存器数据解包后保存到该内存中,数组下标依次是模块地址(实际应减4)、过程或参数、寄存器编号、寄存器数据字节序号。MCGS可以通过windows设备驱动程序直接用读文件操作函数读出寄存器值,用写文件操作函数将可写的参数寄存器值写入windows设备驱动程序,windows设备驱动程序将其打包为命令数据帧发出。windows设备驱动程序还要完成对设备状态的监视,可使用一个60个元素的char数组来标识I/O设备(最大60个设备)的状态,值0为正常,其它为异常。当6秒内未收到模块的节拍帧时,应将模块对应的状态置成1。MCGS应能通过windows设备驱动程序读出设备状态。

MCGS中的CAN父设备:建议在MCGS中的CAN父设备中做改变通讯速率的工作。父设备通过windows设备驱动程序的ioctl函数来改变通讯速率。

MCGS中的CAN子设备:建议为了简化组态工作,为每一种不同类型的I/O模块定制不同的CAN子设备。Can子设备包含了模块名称、生产厂家、版本等信息,其中最重要的是模块的过程和参数寄存器的数量和数据类型。

5 运行设计

5.1 运行控制

1 整个父设备连同子设备在同一个线程下工作。注意不要阻塞了线程。

2 通过MCGS_DATA data可以得到接口指针,方法如下(MCGS_DATA是MCGS组态软件中封装了重要的用户数据的结构体):

MCGS_DATA* pData;

pData = (MCGS_DATA*)data.m_pParentData;

if (pData)

{

g_pDevCanProxy = (CDevCanProxy*)pData->m_pParentData;

if (g_pDevCanProxy)

{ //下面就可以对Can卡进行读写操作了

g_pDevCanProxy->SvrWriteAndRead(dwAimCanId, SendBuf);

}

}

5.2 运行时间

由于父设备连同子设备在同一个线程下工作,根据WINCE的消息响应机制,每个子设备论询采集消息,CPU执行消息队列如下所示:

在运行环境中,WINCE的消息响应的最小时隙为2毫秒,每个子设备的采集又有一个采集周期,设备命令是没有时间周期概念的,按照Windows消息队列来处理。

第一种,如果按照主从模式来开发子设备就先假设了子设备(CAN设备)不会主动发送数据,并且不会收到上个设备的干扰数据,在一般情况中这是不可能的。但可以这样处理,在向设备发送数据时,先等待一个周期,保证没有上个设备的干扰数据,再把它清空,最后才进行正常的设备采集工作。

第二种,如果按照分布式实时控制模式进行开发,主要流程包括按照协议组合数据包,发送帧信息,接收帧信息和解析数据包。

5.3 系统出错处理设计

设计原则:能从硬件上屏蔽数据的尽量从硬件上屏蔽(初始化设置控制器,验收寄存器和屏蔽寄存器),再从软件上屏蔽数据。如果不能达到设备地址解析一致性,就认为设计上是有缺陷的。当驱动不能通讯时,重启运行环境或进行复位操作就可以了。

6 结论

在本文中,首先介绍了CAN的基本原理以及在工业中的应用。然后以CAN在嵌入式系统的使用为例,提出了解决了CAN在实际中的系统设计,优化方案以及代码实现,并给出了在基于WINDOWS CE下的工控机上的具体实现。

在北京中联克龙科技发展有限公司,天地科技股份有限公司常州自动化分公司等公司,该系统解决方案都达到了令人满意的效果,满足了用户远程高速通讯的要求,能长期稳定的运行。这些项目的经济效益到达了五百万元。

本文作者创新点:提出了CAN在实际中的系统设计,优化方案以及代码实现,设计并实现了基于WINCE的满足工业现场要求的CAN驱动。

参 考 文 献

[1]WINDOWS CE 内核定制及应用开发 作者:周毓林。

[2]吴振纲,陈虎.PLC的人机接口与编程[J].微计算机信息,2005,8-1:21-23。

[3]WINDOWS CE 权威指南 作者:(美)Chris Muench。

[4]Windows VxD与设备驱动程序权威指南(第二版) 作者:孙喜明译。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top