组态王驱动开发包用户手册docx.docx
《组态王驱动开发包用户手册docx.docx》由会员分享,可在线阅读,更多相关《组态王驱动开发包用户手册docx.docx(56页珍藏版)》请在冰豆网上搜索。
组态王驱动开发包用户手册docx
组态王驱动开发包
用户手册
北京亚控科技发展有限公司
1.版权
本开发包版权属于北京亚控科技发展有限公司,任何组织、团体、个人,未经亚控公司允许,不得擅自拷贝,使用,对于购买本开发包的组织、团体、个人,只能内部使用,不得擅自泄漏给第三方。
2.概述
本开发包采用微软标准的COM组件技术,采用该技术,在创建接口时,可以创建
多个互相独立对象,每个对象都可以拥有自己的变量。
最后的结果是一个DLL文件。
接口中的各函数,是被组态王的两个应用程序
---TouchExplorer.exe和TouchVew.exe调用的。
如果这两个应用程序都不启动,函数中的
代码将永远没有机会执行。
组态王的驱动程序是组态王和硬件设备连接的桥梁,本开发包用于开发组态王的驱动程序。
只要拥有硬件的通讯协议,即可以使用本开发包开发组态王的驱动程序。
本开发包只能使用VC++开发。
3.开发包3.0修订目的
a)通用版和嵌入版统一到一套代码中,通用版和嵌入版实现同步更新。
b)生成设备类,为多设备型号驱动提供解决方法。
c)详尽、稳健的基类代码。
d)完善的功能与向导。
e)规范各类帮助函数。
f)规范编码格式、统一使用英文版。
g)修改部分功能的实现方法。
4.开发包使用
我们提供一个开发向导工具“DriverToolKit3.000.exe”,使用这个工具,能够自
动地生成驱动代码框架。
运行工具,如下图:
请在下页输入您的目标文件夹
逵算实寰宜査
lift“舸态王弓勵开发包30Q.3"的童装丈件买.
黑场薦舗勰謎鑑鼾.曙穿暑嚮罷蠶勰问如夹•单
点击“安装”,开发包即安装完成。
使用开发包向导创建驱动的过程:
启动VisualStudio.NET2003。
新建一个工程,"项目类型”选择"VisualC++项目”,"模板”选择“KingView
Wizard”,在下面的编辑框中输入工程的名字以及存储路径,点击“确定”。
这个创建向导分3页,第一页是“概述”,显示的是默认的设置信息,如果您不需
要改变这些,直接点击“确定”即可成功的创建驱动框架。
驱动类型:
o串口驱动(适用于查询式设备)
这个类型,是我们一般常用的,适合于普通的上位查询,设备应答的通讯类型。
o串口驱动(适用于实时上发数据的设备,非重叠10)这种方式,适用于下位设备实时上发数据的情况,驱动中需要创建一个线程
来监视串口事件的通讯类型,采用非重叠10方式。
o串口驱动(适用于实时上发数据的设备,重叠10,WinCE不支持)
这种方式,同上一种,也是适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口的通讯类型。
与前一种不同的是:
采用了重叠I0方式。
我们不推荐使用这种方式,因为WINCE系统不支持这种方式,使
用这种方式开发的驱动,将不能在WINCE系统的嵌入式设备中运行。
o以太网驱动(TCP服务器端)
这是针对于TCP方式通讯的驱动,适用于设备为客户端,组态王为Server,
组态王查询,设备应答的通讯类型。
如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。
o以太网驱动(TCP客户端)
这是TCP方式通讯客户端的驱动,适用于组态王查询、设备应答的通讯类型。
这种方式需要驱动主动去连接设备。
如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。
o以太网驱动(UDP服务器端)
目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。
o以太网驱动(UDP客户端)
目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。
设备名称:
默认的设备名称是"Namel,可以自由填写,但须注意应该与设备列表中的设备名称
保持一致。
尝试连接类型:
当组态王与设备通讯失败了,组态王会周期性的尝试与设备通讯,这个过程,我们
称之为“尝试连接”。
尝试连接,目前准备了如下几种类型:
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
该结构定义了设备地址格式
UINTnDevAddr;
TCHARsDevAddr[MAX_DEV_LEN];}DEVADDR,*PDEVADDR;
成员:
sDevAddr:
用户在组态王中输入的原地址格式字符串。
nDevAddr:
实际转换后的设备地址数字•
ComDevice
这是串口设置信息的结构体.
tructComDevice
shortnFlag;
WORDdeviceKind;
TCHARdeviceName[32];intbaudRate;
shortdataBits;
shortstopBits;
shortparity;
shorttimeOut;
shortfailTimes;
shortretryInterval;
shortisRs232;
};
成员:
nFlag:
串口标志,目前没有用到.
DeviceKind:
设备类型,’1'代表串口设备
DeviceName
逻辑名称=={C0M1,COM2...}
BaudRate:
波特率,范围是从110到256000。
DataBits:
数据位
StopBits:
停止位.
值
描述
ONESTOPBIT
1停止位
ONE5STOPBITS
1.5停止位
TWOSTOPBITS
2停止位
Parity:
校验.
值
描述
EVENPARITY
偶校验
MARKPARITY
标志校验
NOPARITY
无校验
ODDPARITY
奇校验
SPACEPARITY
空格校验
TimeOut:
超时,单位是毫秒
FailTimes:
失败次数
Retrylnterval:
尝试间隔
isRs232:
通讯模式,’1'代表RS232,2代表RS422,3代表RS485.
PLCVAR
该结构定义了用户变量的属性.
类型defstructvar
{
WORDwVarlD;
WORDwVarType;
TCHARszVarName[32];
shortnDeviceIndex;
shortnUnitNo;
DEVADDR*pDevAddr;
TCHAR*pszRegName;
shortnRegType;
shortnSubType;
shortnSubTypel;
shortnSubType2;
shortnNo;
shortnDataType;
shortnAccessMode;
longnFrequency;
longnTimerCount;
CWinThread*pComThread;
DDEValuemaxRaw;
DDEValueminRaw;
shortbConvertion;
shortisBad;
shortisUnvalid;
}PLCVAR,*PPLCVAR;
成员:
wvarlD:
变量IDwVarType:
变量类型,为如下几种:
Bit,byte,int,uint,BCD,long,float,Iongbcd,stringszVarName变量名nDeviceIndex:
设备索引nUnitNo:
设备地址单元pDevAddr:
设备地址pszRegName寄存器名称nRegType;寄存器类型nSubType:
nSubType1:
nSubType2:
子类型,没有用到,如在驱动中有其他需要,可以自己定义使用。
nNo寄存器通道
nDataType:
数据类型nAccessMode读写属性nFrequency:
采集频率nTimerCount:
超时次数pComThread通讯线程maxRaw最大原始值minRaw最小原始值
PACKET
该结构定义了通讯包的属性类型defstructPacket
{
shortnDeviceIndex;
shortnUnitNo;
DEVADDR*pDevAddr;TCHAR*pszDevName;
TCHAR*pszRegName;
shortnRegType;shortnSubType;shortnSubTypel;shortnSubType2;intnStartNo;intnEndNo;
shortnPacketType;
CPtrListvarList;
}PACKET,*PPACKET;
成员:
nDeviceIndex:
设备索弓丨nUnitNo:
设备地址单元pDevAddr:
设备地址结构指针pszDevName设备地址nRegType寄存器类型
nSubType:
nSubTypel:
nSubType2子类型,没有用到,自己可以使用
nStartNo:
开始通道
nEndNo结束通道
nPacketType:
包读写类型
VarList:
变量列表,存储ID_NO和ID_NO2两种类型变量
ID_NO
该结构定义了老的接口的变量
类型defstructIdNo
{
WORDwVarId;
WORDwNo;
WORDwDataType;
BYTESpecial[4];
PlcValueplcValue;
}ID_NO;
成员:
wVarId:
变量ID
wNo通道
wDataType:
数据类型
Special:
目前没有使用
plcValue:
PLCVAR结构体指针
ID_NO2
该结构定义了新的接口的变量
类型defstructIdNo2
{
WORDwVarId;
WORDwNo;
WORDwDataType;
PlcValueplcValue;
BYTESpecial[4];
WORDwQualities;
FILETIMEftTimeStamps;
}ID_NO2;
成员:
wVarId:
变量ID
wNo通道
wDataType:
数据类型
Special:
目前没有用到plcValue:
PLCVAF结构体指针wQualities:
质量戳,OxcO代表GOOD,0代表BAD.ftTimeStamps:
时间戳,在驱动中一般设置当前的时间
DEVICE」NFO
该结构定义了设备信息
TCHARsDeviceName[32];
}DEVICE_INFO;
成员:
SDeviceName:
设备名称,最大允许长度是32,使用TCHAR字符
REG_INFO
该结构定义了寄存器信息
类型defstructreginfo
{
TCHARsRegName[8];
intnLowIndex;
intnUpperlndex;
WORDwDataType;
intnData;
}REG_INFO;
成员:
sRegName寄存器名称
nLowIndex:
开始通道
nUpperIndex:
结束通道
7.接口函数
7.1接口描述
组态王与驱动交互,包括2个COM接口:
IprotocolImp(老接口)和
IProtocollmp2(新接口)
IProtocollmp:
:
StrToDevAddr
XProtocolImp:
:
StrToDevAddr(constTCHAR*str,LPVOIDlpDevAddr)类型:
Public
目的:
实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王
如果必要,也可以将地址以字符串的形式传给组态王。
返回值:
成功返回TRUE否则返回FALSE
参数
Str:
[in]用户输入的地址字符串
lpDevAddr:
[in,out]用于保存地址信息的结构
XProtocolImp:
:
GetRegisters
XProtocollmp:
:
GetRegisters(constTCHAR*szDeviceName,
LPVOID*ppRegs,int*pRegNum)
类型:
Public
目的:
得到由szDeviceName确定的寄存器的名字和个数
返回值;成功返回TRUE否则返回FALSE
参数
szDeviceName
[in]设备的唯一名字
ppReg
[out]返回寄存器信息的指针数组的指针。
如果szDeviceName无效,则返回
NULL。
pRegNum
[out]返回寄存器的个数,如果szDeviceName无效,则返回0。
XProtocollmp:
:
ConvertUserConfigToVar
XProtocolImp:
:
ConvertUserConfigToVar(LPVOIDIpDbltemltem,LPVOIDIpVar)类型
Public
目的
将用户的配置字符串转换为组态王变量结构
返回值
WORD:
如果转换成功则返回0,否则返回非零的错误代码参数
lpDbItem
[in]指向结构MiniDbltem的指针
lpVar
[in,out]指向结构PLCVAR的指针,返回变量就存放在这里
XProtocollmp:
:
AddVarToPacket
XProtocolImp:
:
AddVarToPacket(LPVOIDlpVar,intnVarAccessType,LPVOIDlpPacket)
类型
Public
目的
确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包,如果可以加入
返回TRUE并修改包的起止地址;否则返回FALSE。
返回值
BOOL:
FALSE表示不能打包,否则能
参数
lpVar
[in]变量指针
nVarAccessType[in]读写方式lpPacket
[out]包指针
XProtocollmp:
:
OpenComDevice
XProtocollmp:
:
OpenComDevice(intnDeviceType,LPVOIDlpInitData)
类型
Public
目的
初始化通讯设备如:
(串口或板卡等)
返回值
BOOL:
成功则返回TRUE,否则返回FALSE
参数
nDeviceType
[in]设备类型
IplnitData
[in]一个指向COMM_CONFIG结构的指针
XProtocollmp:
:
lnitialDevice
XProtocollmp:
:
lnitialDevice(constTCHAR*pDeviceName,intnUnitAddr,
IpDevAddr)
类型
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
XProtocollmp:
:
CloseComDevice()类型:
Public
目的:
关闭该通讯设备
返回值
BOOL:
成功则返回TRUE,否则返回FALSE。
参数
Null
XProtocollmp:
:
TryConnect
XProtocollmp:
:
TryConnect(constTCHAR*pDeviceName,intnUnitAddr,LPVOID
IpDevAddr)类型:
Public
目的:
与地址为UnitAddr的设备尝试进行通讯,用于故障侦探及恢复尝试。
返回值
尝试通讯成功返回TRUE否则返回FALSE
参数
pDeviceName
[in]设备的唯一名字
nUnitAddr
[in]需要进行故障侦探及恢复尝试的设备的地址。
lpDevAddr
[in]应将此参数转换为结构---PDEVADDR。
此结构详情参阅DATA类型.H文件。
备注
当"ProcessPacket"失败后,”TryConnect"将被组态王调用2次,如果仍然失败,则该接
口将按设定的尝试连接间隔被组态王调用。
XProtocollmp:
:
GetLastError
XProtocollmp:
:
GetLastError()
类型
Public
目的
返回最近一次的错误信息。
返回值
将最近一次的错误信息。
参数
无
XProtocollmp2:
:
GetTrans
XProtocolImp2:
:
GetTrans(LPVOID*pHcomm)
类型
Public
目的
获取驱动打开的设备句柄,以便其他设备可以使用此句柄返回值
成功返回TRUE否则返回FALSE
参数
lpHcomm
[out]接受设备句柄的指针
XProtocollmp2:
:
SetTrans
XProtocollmp2:
:
SetTrans(LPVOID*pHcomm)类型:
Public
目的:
将其他驱动打开的设备句柄传递给驱动返回值:
成功返回TRUE否则返回FALSE参数
IpHcomm
[in]其他驱动打开的设备句柄。
XProtocollmp2:
:
ProcessPacket2
XProtocollmp2:
:
ProcessPacket2(LPVOIDIpPacket)
类型
Public
目的
根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入
pPac->varList。
返回值
BOOL:
如果成功,返回TRUE,否则,返回FALSE。
参数
lpPacket
[in,out]包指针
7.2接口函数的调用
7.2.1开发环境
7.2.1.1新建设备
在向导页输入地址字符串时,程序加载驱动,并调用驱动的StrToDevAddr
当向导页转向下一页,也就是点击下一步时,组态王会调用StrDevToAddr,并将用
户输入传递给驱动。
驱动的功能是进行地址转换,具体解释参见StrDevToAddr。
7.2.1.2新建变量
用户在变量字典里面点击新建变量时,会弹出如下建立变量的对话框,
若用户有不是驱动使用域填写有误或者有相关的域(包括驱动使用域)没有填写,组态王
将会给出相应的提示,即组态王不调用驱动,直接给出错误提示。
当用户点击连接设备完成设备连接或者在设备组合框中选定设备时,组态王会调用GetRegisters,组态王会将设备名称传递给驱动,由驱动返回给组态王寄存器列表。
具体解释
参见GetRegisters。
所有用户必填域填写完毕,切换TAB页或者确定变量时,组态王会调用
组态王会将驱动域的输入作为MiniDbltem传递给驱动,ConvertUserConfigToVar将
结果返回在组态王建立的变量PLCVAR中。
具体解释见ConvertUserConfigToVar。
721.3串口设备测试
可以方便的使用串口设备测试工具进行测试用户进
若用户使用的设备是串口设备,入测试设备对话框,如下图所示:
当用户进入此对话框时,组态王立刻调用GetRegisters获取设备可以使用的寄存器列
表。
当用户点击添加或者加入变量时,组态王立刻调用ConvertUserConfigToVar进行变量
校验。
当用户点击读取,组态王就开始变量采集。
所有采集步骤与运行环境一致,只是这儿测
试只是测试一个设备,而运行环境采集定义的所有的设备。
7.2.2.运行环境
以下步骤为特殊目的时,组态王对于每个设备都会调用一次此函数。
722.1校验设备地址
调用StrToDevAddr,对用户输入的地址字符串进行转换•若StrToDevAddr返回TRUE,
转7222否则组态王提示用户地址格式不对,同时中止此设备的采集,不影响使用同一驱动的其他设备。
7.2.2.2打开设备
调用OpenComDevice,若是串口设备,则驱动应在此中进行串口初始化.若不是串口驱动,
驱动可以在此中完成一次性的初始化工作。
若OpenComDevice返回TRUE,组态王会在信息窗口提示打开设备成功,并给出成功的设备名称,同时转722.3。
否则组态王会在信息窗口提示打开设备失败,认为设备存在问
题,若是串口设备,此串口下连接的