当前位置:文档之家› 组态王软件驱动程序开发

组态王软件驱动程序开发

组态王驱动开发包用户手册北京亚控科技发展有限公司1. 版权本开发包版权属于北京亚控科技发展有限公司,任何组织、团体、个人,未经亚控公司允许,不得擅自拷贝,使用,对于购买本开发包的组织、团体、个人,只能内部使用,不得擅自泄漏给第三方。

2. 概述本开发包采用微软标准的COM组件技术,采用该技术,在创建接口时,可以创建多个互相独立对象,每个对象都可以拥有自己的变量。

最后的结果是一个DLL文件。

接口中的各函数,是被组态王的两个应用程序---TouchExplorer.exe和TouchVew.exe调用的。

如果这两个应用程序都不启动,函数中的代码将永远没有机会执行。

组态王的驱动程序是组态王和硬件设备连接的桥梁,本开发包用于开发组态王的驱动程序。

只要拥有硬件的通讯协议,即可以使用本开发包开发组态王的驱动程序。

本开发包只能使用VC++开发。

3. 开发包3.0修订目的a)通用版和嵌入版统一到一套代码中,通用版和嵌入版实现同步更新。

b)生成设备类,为多设备型号驱动提供解决方法。

c)详尽、稳健的基类代码。

d)完善的功能与向导。

e)规范各类帮助函数。

f)规范编码格式、统一使用英文版。

g)修改部分功能的实现方法。

4. 开发包使用我们提供一个开发向导工具“DriverToolKit3.0.0.0.exe”,使用这个工具,能够自动地生成驱动代码框架。

运行工具,如下图:请在下页输入您的目标文件夹点击“安装”,开发包即安装完成。

使用开发包向导创建驱动的过程:(1)启动Visual 2003。

(2)新建一个工程,“项目类型”选择“Visual C++项目”,“模板”选择“KingView Wizard”,在下面的编辑框中输入工程的名字以及存储路径,点击“确定”。

(3)这个创建向导分3页,第一页是“概述”,显示的是默认的设置信息,如果您不需要改变这些,直接点击“确定”即可成功的创建驱动框架。

(4)第二页是“驱动类型和编译选项”,包含如下部分:驱动类型:o串口驱动(适用于查询式设备)这个类型,是我们一般常用的,适合于普通的上位查询,设备应答的通讯类型。

o串口驱动(适用于实时上发数据的设备,非重叠IO)这种方式,适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口事件的通讯类型,采用非重叠IO方式。

o串口驱动(适用于实时上发数据的设备,重叠IO,WinCE不支持)这种方式,同上一种,也是适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口的通讯类型。

与前一种不同的是:采用了重叠IO方式。

我们不推荐使用这种方式,因为WINCE系统不支持这种方式,使用这种方式开发的驱动,将不能在WINCE系统的嵌入式设备中运行。

o以太网驱动(TCP服务器端)这是针对于TCP方式通讯的驱动,适用于设备为客户端,组态王为Server,组态王查询,设备应答的通讯类型。

如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。

o以太网驱动(TCP客户端)这是TCP方式通讯客户端的驱动,适用于组态王查询、设备应答的通讯类型。

这种方式需要驱动主动去连接设备。

如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。

o以太网驱动(UDP服务器端)目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。

o以太网驱动(UDP客户端)目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。

设备名称:默认的设备名称是“Name1”,可以自由填写,但须注意应该与设备列表中的设备名称保持一致。

尝试连接类型:当组态王与设备通讯失败了,组态王会周期性的尝试与设备通讯,这个过程,我们称之为“尝试连接”。

尝试连接,目前准备了如下几种类型:o永远为True,常用于板卡驱动。

o程序员自由定义,常用于网络通讯或实时上发数据的设备。

o使用“PACKET”进行通讯,适用于普通的驱动。

(5)第三页是“驱动基本信息”,包含如下条目:驱动基本信息o驱动名称o版本o描述o程序员o项目经理这些信息将被自动保存到历史文件(History.txt)中,同时也是保存在工程的ReadMe文件中,可以随工程浏览。

其他支持:o USB 通讯o ADO 数据库操作(6)点击“确定”后,将完成驱动工程的创建工作。

5. 工程转换工具我们要求通用版和嵌入版使用同一套代码,做到通用版和嵌入版驱动实现同步更新,这就需要一个工具来将通用版工程文件转换为嵌入版工程文件。

同时,考虑到有的开发者习惯使用Visual Studio 98进行开发编译,我们也要有一个工具来将Visual Studio 2003的工程文件转换成Visual Studio 98的工程文件。

我们提供一个转换工具kvdriver(包含3个文件,kvdriver.exe, vc7tovc6.exe,vc7toevc.exe),使用这个工具,可以根据Visual Studio 2003的工程文件,创建成Visual Studio 98和EVC的工程文件,开发者可以在不同的开发环境间自由选择。

驱动开发包安装完成后,这个工具存放在目录KingViewDriver下。

在使用的时候,可以把这个工具放在系统文件夹C:\WINDOWS\system32中,这样可以在命令行中输入“kvdriver”,然后把需要转换的Visual Studio 2003工程文件拖动过来运行即可,如下所示:6. 驱动信息结构所有的结构都定义在文件“Data类型.h”中。

_DevAddr该结构定义了设备地址格式.类型def struct _DevAddr{UINT nDevAddr;TCHAR sDevAddr[MAX_DEV_LEN];}DEVADDR, * PDEVADDR;成员:sDevAddr:用户在组态王中输入的原地址格式字符串。

nDevAddr:实际转换后的设备地址数字.ComDevice这是串口设置信息的结构体.struct ComDevice{short nFlag;WORD deviceKind;TCHAR deviceName[32];int baudRate;short dataBits;short stopBits;short parity;short timeOut;short failTimes;short retryInterval;short isRs232;};成员:nFlag:串口标志,目前没有用到.DeviceKind:设备类型,'1'代表串口设备DeviceName:逻辑名称 =={COM1,COM2...}BaudRate:波特率,范围是从 110到256000。

DataBits:数据位StopBits:停止位.TimeOut:超时,单位是毫秒FailTimes:失败次数RetryInterval:尝试间隔isRs232:通讯模式,'1'代表RS232, '2'代表RS422, '3'代表RS485. PLCVAR该结构定义了用户变量的属性.类型def struct var{WORD wVarID;WORD wVarType;TCHAR szVarName[32];short nDeviceIndex;short nUnitNo;DEVADDR *pDevAddr;TCHAR *pszRegName;short nRegType;short nSubType;short nSubType1;short nSubType2;short nNo;short nDataType;short nAccessMode;long nFrequency;long nTimerCount;CWinThread* pComThread;DDEValue maxRaw;DDEValue minRaw;short bConvertion;short isBad;short isUnvalid;}PLCVAR, * PPLCVAR;成员:wvarID:变量IDwVarType:变量类型,为如下几种:Bit, byte, int, uint, BCD, long, float, longbcd, string szVarName:变量名nDeviceIndex:设备索引nUnitNo:设备地址单元pDevAddr:设备地址pszRegName:寄存器名称nRegType;寄存器类型nSub Type:nSub Type1:nSub Type2:子类型,没有用到,如在驱动中有其他需要,可以自己定义使用。

nNo:寄存器通道nData Type:数据类型nAccessMode:读写属性nFrequency:采集频率nTimerCount:超时次数pComThread:通讯线程maxRaw:最大原始值minRaw:最小原始值PACKET该结构定义了通讯包的属性类型def struct Packet{short nDeviceIndex;short nUnitNo;DEVADDR * pDevAddr;TCHAR * pszDevName;TCHAR *pszRegName;short nRegType;short nSubType;short nSubType1;short nSubType2;int nStartNo;int nEndNo;short nPacketType;CPtrList varList;}PACKET,* PPACKET;成员:nDeviceIndex:设备索引nUnitNo:设备地址单元pDevAddr:设备地址结构指针pszDevName:设备地址nRegType:寄存器类型nSubType:nSubType1:nSubType2:子类型,没有用到,自己可以使用nStartNo:开始通道nEndNo:结束通道nPacketType:包读写类型VarList:变量列表,存储ID_NO和ID_NO2两种类型变量ID_NO该结构定义了老的接口的变量类型def struct IdNo{WORD wVarId;WORD wNo;WORD wDataType;BYTE Special[4];PlcValue plcValue;}ID_NO;成员:wVarId:变量IDwNo:通道wDataType:数据类型Special:目前没有使用plcValue:PLCVAR结构体指针ID_NO2该结构定义了新的接口的变量类型def struct IdNo2{WORD wVarId;WORD wNo;WORD wData Type;PlcValue plcValue;BYTE Special[4];WORD wQualities;FILETIME ftTimeStamps;}ID_NO2;成员:wVarId:变量IDwNo:通道wDataType:数据类型Special:目前没有用到plcValue:PLCVAR结构体指针wQualities:质量戳,0xc0代表GOOD, 0代表BAD.ftTimeStamps:时间戳,在驱动中一般设置当前的时间DEVICE_INFO该结构定义了设备信息类型def struct deviceinfo{TCHAR sDeviceName[32];}DEVICE_INFO;成员:SDeviceName:设备名称,最大允许长度是32,使用TCHAR字符REG_INFO该结构定义了寄存器信息类型def struct reginfo{TCHAR sRegName[8];int nLowIndex;int nUpperIndex;WORD wDataType;int nData;}REG_INFO;成员:sRegName:寄存器名称nLowIndex:开始通道nUpperIndex:结束通道7. 接口函数7.1 接口描述组态王与驱动交互,包括2个COM接口: IprotocolImp(老接口) 和IProtocolImp2(新接口)IProtocolImp::StrToDevAddrXProtocolImp::StrToDevAddr(const TCHAR* str, LPVOID lpDevAddr)类型:Public目的:实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王,如果必要,也可以将地址以字符串的形式传给组态王。

相关主题