嵌入式驱动程序是运行在嵌入式操作系统平台上驱动程序。嵌入式操作系统如WinCE,其运行环境和Win2000在硬件和和软件方面都有很大不同,嵌入式操作系统主要运行在单板机上,嵌入式驱动是操作单板机的串口,网口等资源的程序。
一、嵌入式驱动的运行环境
Mcgs嵌入式驱动程序是运行在WinCE操作系统平台上。由嵌入式Mcgs软件调用。 在从上位机下载工程到嵌入机的同时,驱动程序(一般为*E.drv文件)也被下载,嵌入机中运行的Mcgs调用驱动程序,完成对数据的采集。
二、嵌入式驱动的编译过程
- 使用VC6.0编译能在组态环境下运行的驱动程序,文件名为*.DLL。
- 编译通过,调试成功后用_unicode重新编译,文件名为*U.DRV。
- 用模拟环境调试运行是否正常。
- 用ECV4.0建立工程,加入VC6.0中的所有文件,重新编译,文件名为*E.DRV。
编译过程中的注意事项:
- 调试程序时用McgsSetE调试版,发行版本用Mcgs发行版,版本必须一致。
- 在调试unicode版时,经常会出现字符串编译错误,解决办法是用_T(“”)括起来。
- 在调试unicode版和EVC4.0编译时,有的函数不能使用,出现这种情况大多因为一些函数在Win2000和WinCE下不同而造成的,特别是一些函数WinCE下是不支持的。遇到这种问题,可以参考MSDN,选用适当的函数。
- 编码时要注意编码规范,可参阅编码规则。
三、嵌入式驱动的接口函数功能。
驱动中对外接口函数共有14个,编制驱动主要是编制各个函数,函数由主程序调用,不同的驱动在函数内部处理也不同。
- SvrDoHelp
- SvrGetProperty
- SvrEnumPropertyValue
- SvrSetProperty
- SvrEditProperty
- SvrEditCustomProperty
- SvrInitDevSet
- SvrInitDevRun
- SvrCollectDevData
- SvrDevIOCtrl
- SvrExitDevRun
- SvrGetChannel
- SvrDoHelp
- SvrGetDevInfo
部分函数的功能:
- SvrGetProperty()函数功能,设置设备属性列表,如图所示:

函数主要是设置属性页中最小采样周期以后的设备属性名(strPropertyName[])、设备属性名(strPropertyValue[]),和是否有下拉框(bPropertyHasValueArray)。设置下拉菜单用SvrEnumPropertyValue()函数。
- SvrSetProperty()函数功能:设置设备属性列表,主程序在调通道连接和设备调试属性页之前运行,系统获取基本属性页中的数据。在SvrGetProperty()中设置的通道(每一行),必须保存。
- SvrCollectDevData()函数功能:采集数据显示到各个通道中,或者读取通道中的值对设备进行控制。
- SvrGetChannel()函数功能:设置通道个数。数组strChannelName中设置名称,数组tyChannelType中设置类型。VSINGLE为只读数值型,-VSINGLE为可写数值型,VSTRING为只读字符型,-VSTRING为可写字符型。如图,画面上显示11个通道。

四、嵌入式数据保存
- MCGS_DATA结构由MCGS负责分配,其中有许多系统信息,包括父设备类型(m_ParentType)等。
- MCGS_DATA结构中的void* m_pDevData指向DEV_DATA结构体,DEV_DATA结构体中保存设备信息用的自定义结构,设备编写者在设备初始化中分配,在设备退出时释放,也就是主属性页中添加的变量。
五、编辑客户自定义属性
当调内部属性页函数SvrEditCustomProperty()时,情况比较复杂。由于是在DLL中调用对话框,需要装载资源,而对话框中的数据要让系统保存需要将数据流化到系统中,这部分可以参照PLC驱动程序。
六、CParentDevHelper是一个帮助类,其中集成了许多公用函数,比如对串口的操作Svr_WriteComm(),Svr_ReadComm()等。
七、CownerArchive是一个流化类,用于流化数据。
|