组态王软件驱动程序开发.docx

上传人:b****5 文档编号:6302577 上传时间:2023-01-05 格式:DOCX 页数:59 大小:2.09MB
下载 相关 举报
组态王软件驱动程序开发.docx_第1页
第1页 / 共59页
组态王软件驱动程序开发.docx_第2页
第2页 / 共59页
组态王软件驱动程序开发.docx_第3页
第3页 / 共59页
组态王软件驱动程序开发.docx_第4页
第4页 / 共59页
组态王软件驱动程序开发.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

组态王软件驱动程序开发.docx

《组态王软件驱动程序开发.docx》由会员分享,可在线阅读,更多相关《组态王软件驱动程序开发.docx(59页珍藏版)》请在冰豆网上搜索。

组态王软件驱动程序开发.docx

组态王软件驱动程序开发

组态王驱动开发包

 

 

 

 

 

用户手册

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

北京亚控科技发展有限公司

 

 

 

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)      启动VisualStudio.NET2003。

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

(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文件中,可以随工程浏览。

 

其他支持:

oUSB通讯

oADO数据库操作 

(6)点击“确定”后,将完成驱动工程的创建工作。

5.工程转换工具

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

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

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

 

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

在使用的时候,可以把这个工具放在系统文件夹C:

\WINDOWS\system32中,这样可以在命令行中输入“kvdriver”,然后把需要转换的VisualStudio2003工程文件拖动过来运行即可,如下所示:

 

 

 

 

6.驱动信息结构

 

所有的结构都定义在文件“Data类型.h”中。

_DevAddr

该结构定义了设备地址格式.

类型defstruct_DevAddr        

{                      

   UINT   nDevAddr;          

   TCHAR  sDevAddr[MAX_DEV_LEN]; 

}DEVADDR,*PDEVADDR;

 

成员:

sDevAddr:

用户在组态王中输入的原地址格式字符串。

nDevAddr:

实际转换后的设备地址数字.

 

ComDevice

这是串口设置信息的结构体.

structComDevice           

{                  

   shortnFlag;      

   WORD deviceKind;      

   TCHAR deviceName[32]; 

   int  baudRate;    

   shortdataBits;    

   shortstopBits;    

   shortparity;      

   shorttimeOut;     

   shortfailTimes;       

   shortretryInterval;   

   shortisRs232;     

};

 

成员:

nFlag:

串口标志,目前没有用到.

DeviceKind:

设备类型,'1'代表串口设备

DeviceName:

逻辑名称=={COM1,COM2...}

BaudRate:

波特率,范围是从110到256000。

DataBits:

数据位

StopBits:

停止位.

描述

ONESTOPBIT

1停止位

ONE5STOPBITS

1.5停止位

TWOSTOPBITS

2停止位

Parity:

校验.

描述

EVENPARITY

偶校验

MARKPARITY

标志校验

NOPARITY

无校验

ODDPARITY

奇校验

SPACEPARITY

空格校验

 

TimeOut:

超时,单位是毫秒

FailTimes:

失败次数

RetryInterval:

尝试间隔

isRs232:

通讯模式,'1'代表RS232,'2'代表RS422,'3'代表RS485.

PLCVAR

该结构定义了用户变量的属性.

类型defstructvar             

{                          

   WORDwVarID;              

  WORDwVarType;               

  TCHARszVarName[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:

变量ID

wVarType:

变量类型,为如下几种:

Bit,byte,int,uint,BCD,long,float,longbcd,string

szVarName:

变量名

nDeviceIndex:

设备索引

nUnitNo:

设备地址单元

pDevAddr:

设备地址

pszRegName:

寄存器名称

nRegType;寄存器类型

nSubType:

nSubType1:

nSubType2:

子类型,没有用到,如在驱动中有其他需要,可以自己定义使用。

nNo:

寄存器通道

nDataType:

数据类型

nAccessMode:

读写属性

nFrequency:

采集频率

nTimerCount:

超时次数

pComThread:

通讯线程

maxRaw:

最大原始值

minRaw:

最小原始值

PACKET

该结构定义了通讯包的属性 

类型defstructPacket          

{                     

   short nDeviceIndex;       

   short nUnitNo;        

   DEVADDR*pDevAddr;    

   TCHAR   *pszDevName;     

   TCHAR  *pszRegName;       

   short nRegType;           

   short nSubType;           

   short nSubType1;          

   short nSubType2;          

   int   nStartNo;           

   int   nEndNo;         

   short nPacketType;    

   CPtrListvarList;          

}PACKET,*PPACKET;

    

成员:

nDeviceIndex:

设备索引

nUnitNo:

设备地址单元

pDevAddr:

设备地址结构指针

pszDevName:

设备地址

nRegType:

寄存器类型

nSubType:

nSubType1:

nSubType2:

子类型,没有用到,自己可以使用

nStartNo:

开始通道

nEndNo:

结束通道 

nPacketType:

包读写类型 

VarList:

变量列表,存储ID_NO和ID_NO2两种类型变量

 ID_NO

该结构定义了老的接口的变量

类型defstructIdNo    

{                  

   WORDwVarId;       

   WORDwNo;          

   WORDwDataType;    

   BYTESpecial[4];       

   PlcValue plcValue;

}ID_NO;

成员:

wVarId:

变量ID

wNo:

通道

wDataType:

数据类型

Special:

目前没有使用

plcValue:

PLCVAR结构体指针

ID_NO2

该结构定义了新的接口的变量

类型defstructIdNo2       

{                  

   WORDwVarId;       

   WORDwNo;          

   WORDwDataType;   

   PlcValue plcValue;

   BYTESpecial[4];      

   WORDwQualities;     

   ftTimeStamps;   

                  

}ID_NO2;

成员:

wVarId:

变量ID 

wNo:

通道

wDataType:

数据类型

Special:

目前没有用到

plcValue:

PLCVAR结构体指针

wQualities:

质量戳,0xc0代表GOOD,0代表BAD.

ftTimeStamps:

时间戳,在驱动中一般设置当前的时间

DEVICE_INFO

该结构定义了设备信息

类型def structdeviceinfo 

{                  

   TCHAR sDeviceName[32];

}DEVICE_INFO;

成员:

SDeviceName:

设备名称,最大允许长度是32,使用TCHAR字符

REG_INFO

该结构定义了寄存器信息

类型def structreginfo        

{                      

   TCHAR sRegName[8];    

   int  nLowIndex;           

   int  nUpperIndex;     

   WORD wDataType;           

   int  nData;           

}REG_INFO;

成员:

sRegName:

寄存器名称

nLowIndex:

开始通道

nUpperIndex:

结束通道

7.接口函数

7.1接口描述

组态王与驱动交互,包括2个COM接口:

IprotocolImp(老接口)和IProtocolImp2(新接口)

IProtocolImp:

:

StrToDevAddr

XProtocolImp:

:

StrToDevAddr(constTCHAR*str,LPVOIDlpDevAddr)

类型:

Public

目的:

实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王,如果必要,也可以将地址以字符串的形式传给组态王。

返回值:

成功返回TRUE,否则返回FALSE

参数

Str:

[in]用户输入的地址字符串

lpDevAddr:

[in,out]用于保存地址信息的结构

XProtocolImp:

:

GetRegisters

XProtocolImp:

:

GetRegisters(constTCHAR*szDeviceName,      

                   LPVOID*ppRegs,int*pRegNum)

类型:

Public

目的:

得到由szDeviceName确定的寄存器的名字和个数

返回值;成功返回TRUE,否则返回FALSE

参数

szDeviceName

[in]设备的唯一名字

ppReg

[out]返回寄存器信息的指针数组的指针。

如果szDeviceName无效,则返回NULL。

pRegNum

[out]返回寄存器的个数,如果szDeviceName无效,则返回0。

 

XProtocolImp:

:

ConvertUserConfigToVar

XProtocolImp:

:

ConvertUserConfigToVar(LPVOIDlpDbItemItem,LPVOIDlpVar)

类型

Public

目的

将用户的配置字符串转换为组态王变量结构

 返回值

WORD:

如果转换成功则返回0,否则返回非零的错误代码

参数

lpDbItem

[in]指向结构MiniDbItem的指针

lpVar

[in,out]指向结构PLCVAR的指针,返回变量就存放在这里

XProtocolImp:

:

AddVarToPacket

XProtocolImp:

:

AddVarToPacket(LPVOIDlpVar,intnVarAccessType,LPVOIDlpPacket)

类型

Public

目的

确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包,如果可以加入,返回TRUE并修改包的起止地址;否则返回FALSE。

返回值

BOOL:

FALSE表示不能打包,否则能

 

参数

lpVar

[in] 变量指针

nVarAccessType

[in] 读写方式

lpPacket

[out]包指针

 

XProtocolImp:

:

OpenComDevice

XProtocolImp:

:

OpenComDevice(intnDeviceType,LPVOIDlpInitData)

类型

Public

目的

初始化通讯设备如:

(串口或板卡等)

 返回值

BOOL:

成功则返回TRUE,否则返回FALSE

 参数

nDeviceType

[in]设备类型

lpInitData

[in]一个指向COMM_CONFIG结构的指针

XProtocolImp:

:

InitialDevice

XProtocolImp:

:

InitialDevice(constTCHAR* pDeviceName,intnUnitAddr,LPVOIDlpDevAddr)

 类型

Public 

目的

初始化设备,设置该设备的初始化状态

 返回值

BOOL:

如果szDeviceName有效,则返回TRUE,否则返回FALSE。

参数

pDeviceName

[in]设备的唯一名字

nUnitAddr

[in]设备地址

lpDevAddr

[in] 应将此参数转换为结构---PDEVADDR。

此结构详情参阅DATA类型.H文件。

XProtocolImp:

:

ProcessPacket

XProtocolImp:

:

ProcessPacket(LPVOIDlpPacket)

 

类型

Public

 

目的

根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->varList。

 

返回值

BOOL:

如果成功,返回TRUE,否则,返回FALSE。

 

参数

lpPacket

[In,out]包指针

 

XProtocolImp:

:

CloseComDevice

XProtocolImp:

:

CloseComDevice()

类型:

Public

目的:

关闭该通讯设备

返回值

BOOL:

成功则返回TRUE,否则返回FALSE。

参数

Null

XProtocolImp:

:

TryConnect

XProtocolImp:

:

TryConnect(constTCHAR* pDeviceName,intnUnitAddr,LPVOIDlpDevAddr)

类型:

Public

目的:

与地址为UnitAddr的设备尝试进行通讯,用于故障侦探及恢复尝试。

返回值

尝试通讯成功返回TRUE,否则返回FALSE。

参数

pDeviceName

[in]设备的唯一名字

nUnitAddr

[in] 需要进行故障侦探及恢复尝试的设备的地址。

lpDevAddr

[in] 应将此参数转换为结构---PDEVADDR。

此结构详情参阅   DATA类型.H文件。

 备注

当"ProcessPacket"失败后,"TryConnect"将被组态王调用2次,如果仍然失败,则该接口将按设定的尝试连接间隔被组态王调用。

 

XProtocolImp:

:

GetLastError

XProtocolImp:

:

GetLastError()

 

类型

Public

目的

返回最近一次的错误信息。

返回值

将最近一次的错误信息。

参数

XProtocolImp2:

:

GetTrans

XProtocolImp2:

:

GetTrans(LPVOID*pHcomm)

 

类型

Public

目的

获取驱动打开的设备句柄,以便其他设备可以使用此句柄。

返回值

成功返回TRUE,否则返回FALSE。

参数

lpHcomm

[out]接受设备句柄的指针

XProtocolImp2:

:

SetTrans

XProtocolImp2:

:

SetTrans(LPVOID*pHcomm)

类型:

Public

目的:

将其他驱动打开的设备句柄传递给驱动。

返回值:

成功返回TRUE,否则返回FALSE。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1