组态王软件驱动程序开发Word格式.docx
- 文档编号:21243302
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:59
- 大小:2.09MB
组态王软件驱动程序开发Word格式.docx
《组态王软件驱动程序开发Word格式.docx》由会员分享,可在线阅读,更多相关《组态王软件驱动程序开发Word格式.docx(59页珍藏版)》请在冰豆网上搜索。
(4)第二页是“驱动类型和编译选项”,包含如下部分:
驱动类型:
o串口驱动(适用于查询式设备)
这个类型,是我们一般常用的,适合于普通的上位查询,设备应答的通讯类型。
o串口驱动(适用于实时上发数据的设备,非重叠IO)
这种方式,适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口事件的通讯类型,采用非重叠IO方式。
o串口驱动(适用于实时上发数据的设备,重叠IO,WinCE不支持)
这种方式,同上一种,也是适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口的通讯类型。
与前一种不同的是:
采用了重叠IO方式。
我们不推荐使用这种方式,因为WINCE系统不支持这种方式,使用这种方式开发的驱动,将不能在WINCE系统的嵌入式设备中运行。
o以太网驱动(TCP服务器端)
这是针对于TCP方式通讯的驱动,适用于设备为客户端,组态王为Server,组态王查询,设备应答的通讯类型。
如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。
o以太网驱动(TCP客户端)
这是TCP方式通讯客户端的驱动,适用于组态王查询、设备应答的通讯类型。
这种方式需要驱动主动去连接设备。
o以太网驱动(UDP服务器端)
目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。
o以太网驱动(UDP客户端)
设备名称:
默认的设备名称是“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;
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:
通讯模式,'
代表RS232,'
2'
代表RS422,'
3'
代表RS485.
PLCVAR
该结构定义了用户变量的属性.
类型defstructvar
WORDwVarID;
WORDwVarType;
TCHARszVarName[32];
short
nDeviceIndex;
nUnitNo;
DEVADDR*pDevAddr;
*pszRegName;
nRegType;
nSubType;
nSubType1;
nSubType2;
nNo;
nDataType;
nAccessMode;
long
nFrequency;
nTimerCount;
CWinThread*pComThread;
DDEValue
maxRaw;
minRaw;
bConvertion;
isBad;
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
{
DEVADDR*pDevAddr;
*pszDevName;
nStartNo;
nEndNo;
nPacketType;
CPtrListvarList;
}PACKET,*PPACKET;
设备地址结构指针
pszDevName:
nRegType:
子类型,没有用到,自己可以使用
nStartNo:
开始通道
nEndNo:
结束通道
nPacketType:
包读写类型
VarList:
变量列表,存储ID_NO和ID_NO2两种类型变量
ID_NO
该结构定义了老的接口的变量
类型defstructIdNo
WORDwVarId;
WORDwNo;
WORDwDataType;
BYTESpecial[4];
PlcValue
plcValue;
}ID_NO;
wVarId:
wNo:
通道
wDataType:
Special:
目前没有使用
plcValue:
PLCVAR结构体指针
ID_NO2
该结构定义了新的接口的变量
类型defstructIdNo2
WORDwQualities;
ftTimeStamps;
}ID_NO2;
变量ID
目前没有用到
wQualities:
质量戳,0xc0代表GOOD,0代表BAD.
ftTimeStamps:
时间戳,在驱动中一般设置当前的时间
DEVICE_INFO
该结构定义了设备信息
类型def
structdeviceinfo
sDeviceName[32];
}DEVICE_INFO;
SDeviceName:
设备名称,最大允许长度是32,使用TCHAR字符
REG_INFO
该结构定义了寄存器信息
structreginfo
sRegName[8];
nLowIndex;
nUpperIndex;
wDataType;
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]用于保存地址信息的结构
GetRegisters
GetRegisters(constTCHAR*szDeviceName,
LPVOID*ppRegs,int*pRegNum)
得到由szDeviceName确定的寄存器的名字和个数
返回值;
szDeviceName
[in]设备的唯一名字
ppReg
[out]返回寄存器信息的指针数组的指针。
如果szDeviceName无效,则返回NULL。
pRegNum
[out]返回寄存器的个数,如果szDeviceName无效,则返回0。
ConvertUserConfigToVar
ConvertUserConfigToVar(LPVOIDlpDbItemItem,LPVOIDlpVar)
类型
目的
将用户的配置字符串转换为组态王变量结构
返回值
WORD:
如果转换成功则返回0,否则返回非零的错误代码
lpDbItem
[in]指向结构MiniDbItem的指针
lpVar
[in,out]指向结构PLCVAR的指针,返回变量就存放在这里
AddVarToPacket
AddVarToPacket(LPVOIDlpVar,intnVarAccessType,LPVOIDlpPacket)
确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包,如果可以加入,返回TRUE并修改包的起止地址;
否则返回FALSE。
BOOL:
FALSE表示不能打包,否则能
lpVar
[in]
变量指针
nVarAccessType
读写方式
lpPacket
[out]包指针
OpenComDevice
OpenComDevice(intnDeviceType,LPVOIDlpInitData)
初始化通讯设备如:
(串口或板卡等)
成功则返回TRUE,否则返回FALSE
nDeviceType
[in]设备类型
lpInitData
[in]一个指向COMM_CONFIG结构的指针
InitialDevice
InitialDevice(constTCHAR*
pDeviceName,intnUnitAddr,LPVOIDlpDevAddr)
Public
初始化设备,设置该设备的初始化状态
如果szDeviceName有效,则返回TRUE,否则返回FALSE。
pDeviceName
nUnitAddr
[in]设备地址
lpDevAddr
应将此参数转换为结构---PDEVADDR。
此结构详情参阅DATA类型.H文件。
ProcessPacket
ProcessPacket(LPVOIDlpPacket)
根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->
varList。
如果成功,返回TRUE,否则,返回FALSE。
[In,out]包指针
CloseComDevice
CloseComDevice()
关闭该通讯设备
成功则返回TRUE,否则返回FALSE。
Null
TryConnect
TryConnect(constTCHAR*
与地址为UnitAddr的设备尝试进行通讯,用于故障侦探及恢复尝试。
尝试通讯成功返回TRUE,否则返回FALSE。
nUnitAddr
需要进行故障侦探及恢复尝试的设备的地址。
此结构详情参阅
DATA类型.H文件。
备注
当"
ProcessPacket"
失败后,"
TryConnect"
将被组态王调用2次,如果仍然失败,则该接口将按设定的尝试连接间隔被组态王调用。
GetLastError
GetLastError()
返回最近一次的错误信息。
将最近一次的错误信息。
无
XProtocolImp2:
GetTrans
GetTrans(LPVOID*pHcomm)
获取驱动打开的设备句柄,以便其他设备可以使用此句柄。
成功返回TRUE,否则返回FALSE。
lpHcomm
[out]接受设备句柄的指针
SetTrans
SetTrans(LPVOID*pHcomm)
将其他驱动打开的设备句柄传递给驱动。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组态 软件 驱动程序 开发