1、组态王驱动开发包 用户手册 北京亚控科技发展有限公司 1. 版权 本开发包版权属于北京亚控科技发展有限公司,任何组织、团体、个人,未经亚控公司允许,不得擅自拷贝,使用,对于购买本开发包的组织、团体、个人,只能内部使用,不得擅自泄漏给第三方。 2. 概述 本开发包采用微软标准的COM组件技术,采用该技术,在创建接口时,可以创建多个互相独立对象,每个对象都可以拥有自己的变量。 最后的结果是一个DLL文件。接口中的各函
2、数,是被组态王的两个应用程序---TouchExplorer.exe和TouchVew.exe调用的。如果这两个应用程序都不启动,函数中的代码将永远没有机会执行。 组态王的驱动程序是组态王和硬件设备连接的桥梁,本开发包用于开发组态王的驱动程序。只要拥有硬件的通讯协议,即可以使用本开发包开发组态王的驱动程序。 本开发包只能使用VC++开发。 3. 开发包3.0修订目的 a) 通用版和嵌入版统一到一套代码中,通用版和嵌入版实现同步更新。 b) 生成设备类,为多设备型号驱动提供解决方法。 c) 详尽、稳健的基类代码。 d) 完善的功能与
3、向导。 e) 规范各类帮助函数。 f) 规范编码格式、统一使用英文版。 g) 修改部分功能的实现方法。 4. 开发包使用 我们提供一个开发向导工具“DriverToolKit3.0.0.0.exe”,使用这个工具,能够自动地生成驱动代码框架。 运行工具,如下图: 请在下页输入您的目标文件夹 点击“安装”,开发包即安装完成。 使用开发包向导创建驱动的过程: (1) 启动Visual Studio.NET 2003。 (2) 新建一个工程,“项目类型”选择“Visual C++项目”,“模板”选择
4、 “KingView Wizard” ,在下面的编辑框中输入工程的名字以及存储路径,点击“确定”。 (3) 这个创建向导分3页,第一页是“概述”,显示的是默认的设置信息,如果您不需要改变这些,直接点击“确定”即可成功的创建驱动框架。 (4)第二页是“驱动类型和编译选项”,包含如下部分: 驱动类型: o 串口驱动(适用于查询式设备) 这个类型,是我们一般常用的,适合于普通的上位查询,设备应答的通讯类型。 o 串口驱动(适用于实时上发数据的设备,非重叠IO) 这种方式,适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口事件的通讯类
5、型,采用非重叠IO方式。 o 串口驱动(适用于实时上发数据的设备,重叠IO,WinCE不支持) 这种方式,同上一种,也是适用于下位设备实时上发数据的情况,驱动中需要创建一个线程来监视串口的通讯类型。与前一种不同的是:采用了重叠IO方式。我们不推荐使用这种方式,因为WINCE系统不支持这种方式,使用这种方式开发的驱动,将不能在WINCE系统的嵌入式设备中运行。 o 以太网驱动(TCP服务器端) 这是针对于TCP方式通讯的驱动,适用于设备为客户端,组态王为Server,组态王查询,设备应答的通讯类型。如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动
6、线程来监听网络事件。 o 以太网驱动(TCP客户端) 这是TCP方式通讯客户端的驱动,适用于组态王查询、设备应答的通讯类型。这种方式需要驱动主动去连接设备。如果遇到设备主动实时上发数据的情况,驱动中提供了相应的函数,可以直接调用函数,启动线程来监听网络事件。 o 以太网驱动(UDP服务器端) 目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。 o 以太网驱动(UDP客户端) 目前还没有实现,参考TCP方式,代码中需要改动的地方有标注。 设备名称: 默认的设备名称是“Name1”,可以自由填写,但须注意应该与设备列表中的设备名称保持一致。 尝试
7、连接类型: 当组态王与设备通讯失败了,组态王会周期性的尝试与设备通讯,这个过程,我们称之为“尝试连接”。 尝试连接,目前准备了如下几种类型: o 永远为True,常用于板卡驱动。 o 程序员自由定义,常用于网络通讯或实时上发数据的设备。 o 使用“PACKET”进行通讯,适用于普通的驱动。 (5)第三页是“驱动基本信息”,包含如下条目: 驱动基本信息 o 驱动名称 o 版本 o 描述 o 程序员 o 项目经理 这些信息将被自动保存到历史文件(History.txt)中,同时也是保存在工程的ReadMe文件中,可以随工程浏览。 其他支持
8、 o USB 通讯 o ADO 数据库操作 (6)点击“确定”后,将完成驱动工程的创建工作。 5. 工程转换工具 我们要求通用版和嵌入版使用同一套代码,做到通用版和嵌入版驱动实现同步更新,这就需要一个工具来将通用版工程文件转换为嵌入版工程文件。 同时,考虑到有的开发者习惯使用Visual Studio 98进行开发编译,我们也要有一个工具来将Visual Studio 2003的工程文件转换成Visual Studio 98的工程文件。 我们提供一个转换工具kvdriver(包含3个文件,kvdriver.exe, vc7tovc6.exe,vc7toevc.exe),使
9、用这个工具,可以根据Visual Studio 2003的工程文件,创建成Visual Studio 98和EVC的工程文件,开发者可以在不同的开发环境间自由选择。 驱动开发包安装完成后,这个工具存放在目录KingViewDriver下。 在使用的时候,可以把这个工具放在系统文件夹C:\WINDOWS\system32中,这样可以在命令行中输入“kvdriver”,然后把需要转换的Visual Studio 2003工程文件拖动过来运行即可,如下所示: 6. 驱动信息结构 所有的结构都定义在文件“Data类型.h”中。 _DevAddr
10、该结构定义了设备地址格式. 类型def struct _DevAddr { UINT nDevAddr; TCHAR sDevAddr[MAX_DEV_LEN]; }DEVADDR, * PDEVADDR; 成员: sDevAddr: 用户在组态王中输入的原地址格式字符串。 nDevAddr: 实际转换后的设备地址数字. ComDevice 这是串口设置信息的结构体. struct ComDevice {
11、 short nFlag; WORD deviceKind; TCHAR deviceName[32]; int baudRate; short dataBits; short stopBits; short parity; short timeOut; short failTimes; short retryInterval; sh
12、ort isRs232; }; 成员: nFlag: 串口标志,目前没有用到. DeviceKind: 设备类型,'1'代表串口设备 DeviceName: 逻辑名称 =={COM1,COM2...} BaudRate: 波特率,范围是从 110到256000。 DataBits: 数据位 StopBits: 停止位. 值 描述 ONESTOPBIT 1 停止位 ONE5STOPBITS 1.5 停止位 TWOSTOPBITS 2 停止位 Parity :校验. 值 描述 EVENPARITY 偶校验 MARKPARI
13、TY 标志校验 NOPARITY 无校验 ODDPARITY 奇校验 SPACEPARITY 空格校验 TimeOut:超时,单位是毫秒 FailTimes:失败次数 RetryInterval:尝试间隔 isRs232:通讯模式,'1'代表RS232, '2'代表RS422, '3'代表RS485. PLCVAR 该结构定义了用户变量的属性. 类型def struct var { WORD wVarID; WORD wVarT
14、ype; TCHAR szVarName[32]; short nDeviceIndex; short nUnitNo; DEVADDR *pDevAddr; TCHAR *pszRegName; short nRegType; short nSubType; short nSubType
15、1; short nSubType2; short nNo; short nDataType; short nAccessMode; long nFrequency; long nTimerCount; CWinThread* pComThread; DDEValue
16、maxRaw; DDEValue minRaw; short bConvertion; short isBad; short isUnvalid; }PLCVAR, * PPLCVAR; 成员: wvarID:变量ID wVarType:变量类型,为如下几种: Bit, byte, int, uint, BCD, long, float, longbcd, string szVarName:变量名
17、nDeviceIndex:设备索引 nUnitNo:设备地址单元 pDevAddr:设备地址 pszRegName:寄存器名称 nRegType;寄存器类型 nSubType: nSubType1: nSubType2: 子类型,没有用到,如在驱动中有其他需要,可以自己定义使用。 nNo:寄存器通道 nDataType:数据类型 nAccessMode:读写属性 nFrequency:采集频率 nTimerCount:超时次数 pComThread:通讯线程 maxRaw:最大原始值 minRaw:最小原始值 PACKET 该结构定义了通讯包的属性 类
18、型def struct Packet { short nDeviceIndex; short nUnitNo; DEVADDR * pDevAddr; TCHAR * pszDevName; TCHAR *pszRegName; short nRegType; short nSubType; short nS
19、ubType1; short nSubType2; int nStartNo; int nEndNo; short nPacketType; CPtrList varList; }PACKET,* PPACKET; 成员: nDeviceIndex:设备索引 nUnitNo:设备地址单元 pDevAddr:设备地址结构指针 pszDevName:设备地址 nRegType:寄存器类型
20、 nSubType: nSubType1: nSubType2:子类型,没有用到,自己可以使用 nStartNo:开始通道 nEndNo:结束通道 nPacketType:包读写类型 VarList:变量列表,存储ID_NO和ID_NO2两种类型变量 ID_NO 该结构定义了老的接口的变量 类型def struct IdNo { WORD wVarId; WORD wNo; WORD wDataType; BYTE Special[
21、4]; PlcValue plcValue; }ID_NO; 成员: wVarId:变量ID wNo:通道 wDataType:数据类型 Special:目前没有使用 plcValue:PLCVAR结构体指针 ID_NO2 该结构定义了新的接口的变量 类型def struct IdNo2 { WORD wVarId; WORD wNo; WORD wDataType; PlcValue plcValue;
22、 BYTE Special[4]; WORD wQualities; FILETIME ftTimeStamps; }ID_NO2; 成员: wVarId:变量ID wNo:通道 wDataType:数据类型 Special:目前没有用到 plcValue:PLCVAR结构体指针 wQualities:质量戳,0xc0代表GOOD, 0代表BAD. ftTimeStamps: 时间戳,在驱动中一般设置当前的时间 DEVICE_INFO 该结构定义了设备信息
23、类型def struct deviceinfo { TCHAR sDeviceName[32]; }DEVICE_INFO; 成员: SDeviceName: 设备名称,最大允许长度是32,使用TCHAR字符 REG_INFO 该结构定义了寄存器信息 类型def struct reginfo { TCHAR sRegName[8]; int nLowIndex; int nUpper
24、Index; WORD wDataType; int nData; }REG_INFO; 成员: sRegName:寄存器名称 nLowIndex:开始通道 nUpperIndex:结束通道 7. 接口函数 7.1 接口描述 组态王与驱动交互,包括2个COM接口: IprotocolImp(老接口) 和 IProtocolImp2(新接口) IProtocolImp::StrToDevAddr XProtocolImp::StrToDevAddr(const TCHAR* str, LPV
25、OID lpDevAddr) 类型:Public 目的:实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王,如果必要,也可以将地址以字符串的形式传给组态王。 返回值:成功返回TRUE,否则返回FALSE 参数 Str:[in] 用户输入的地址字符串 lpDevAddr:[in,out] 用于保存地址信息的结构 XProtocolImp::GetRegisters XProtocolImp::GetRegisters(const TCHAR* szDeviceName, LPVOID * ppRe
26、gs, int *pRegNum) 类型:Public 目的:得到由szDeviceName确定的寄存器的名字和个数 返回值;成功返回TRUE,否则返回FALSE 参数 szDeviceName [in] 设备的唯一名字 ppReg [out] 返回寄存器信息的指针数组的指针。如果szDeviceName无效,则返回NULL。 pRegNum [out] 返回寄存器的个数,如果szDeviceName无效,则返回0。 XProtocolImp::ConvertUserConfigToVar XProtocolImp:: ConvertUserConfigToVar(
27、LPVOID lpDbItemItem, LPVOID lpVar) 类型 Public 目的 将用户的配置字符串转换为组态王变量结构 返回值 WORD:如果转换成功则返回0,否则返回非零的错误代码 参数 lpDbItem [in] 指向结构MiniDbItem的指针 lpVar [in,out] 指向结构PLCVAR的指针,返回变量就存放在这里 XProtocolImp::AddVarToPacket XProtocolImp:: AddVarToPacket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket)
28、 类型 Public 目的 确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否则返回FALSE。 返回值 BOOL:FALSE表示不能打包,否则能 参数 lpVar [in] 变量指针 nVarAccessType [in] 读写方式 lpPacket [out] 包指针 XProtocolImp::OpenComDevice XProtocolImp::OpenComDevice( int nDeviceType, LPVOID lpInitData) 类型 Public
29、目的 初始化通讯设备如:(串口或板卡等) 返回值 BOOL:成功则返回TRUE,否则返回FALSE 参数 nDeviceType [in] 设备类型 lpInitData [in] 一个指向COMM_CONFIG结构的指针 XProtocolImp::InitialDevice XProtocolImp::InitialDevice(const TCHAR* pDeviceName, int nUnitAddr, LPVOID lpDevAddr) 类型 Public 目的 初始化设备,设置该设备的初始化状态 返回值 BOOL:如果szDevice
30、Name有效,则返回TRUE,否则返回FALSE。 参数 pDeviceName [in] 设备的唯一名字 nUnitAddr [in] 设备地址 lpDevAddr [in] 应将此参数转换为结构--- PDEVADDR。此结构详情参阅DATA类型.H文件。 XProtocolImp::ProcessPacket XProtocolImp:: ProcessPacket(LPVOID lpPacket) 类型 Public 目的 根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->varList。 返回值
31、 BOOL:如果成功,返回TRUE,否则,返回FALSE。 参数 lpPacket [In, out] 包指针 XProtocolImp::CloseComDevice XProtocolImp::CloseComDevice() 类型:Public 目的:关闭该通讯设备 返回值 BOOL:成功则返回TRUE,否则返回FALSE。 参数 Null XProtocolImp::TryConnect XProtocolImp::TryConnect(const TCHAR* pDeviceName, int nUnitAddr, LPVOID lpDevA
32、ddr) 类型:Public 目的:与地址为UnitAddr的设备尝试进行通讯,用于故障侦探及恢复尝试。 返回值 尝试通讯成功返回TRUE,否则返回FALSE。 参数 pDeviceName [in] 设备的唯一名字 nUnitAddr [in] 需要进行故障侦探及恢复尝试的设备的地址。 lpDevAddr [in] 应将此参数转换为结构--- PDEVADDR。此结构详情参阅 DATA类型.H文件。 备注 当 "ProcessPacket" 失败后, "TryConnect"将被组态王调用2次,如果仍然失败,则该接口将按设定的尝试连接间隔被组态王调用。
33、 XProtocolImp::GetLastError XProtocolImp::GetLastError() 类型 Public 目的 返回最近一次的错误信息。 返回值 将最近一次的错误信息。 参数 无 XProtocolImp2::GetTrans XProtocolImp2::GetTrans( LPVOID* pHcomm) 类型 Public 目的 获取驱动打开的设备句柄,以便其他设备可以使用此句柄。 返回值 成功返回TRUE,否则返回FALSE。 参数 lpHcomm [out] 接受设备句柄的指针 XProtocolImp
34、2::SetTrans XProtocolImp2::SetTrans( LPVOID* pHcomm ) 类型:Public 目的:将其他驱动打开的设备句柄传递给驱动。 返回值:成功返回TRUE,否则返回FALSE。 参数 lpHcomm [in] 其他驱动打开的设备句柄。 XProtocolImp2::ProcessPacket2 XProtocolImp2:: ProcessPacket2(LPVOID lpPacket) 类型 Public 目的 根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->varList。 返回
35、值 BOOL:如果成功,返回TRUE,否则,返回FALSE。 参数 lpPacket [in,out] 包指针 7.2 接口函数的调用 7.2.1 开发环境 7.2.1.1 新建设备 在向导页输入地址字符串时,程序加载驱动,并调用驱动的StrToDevAddr 当向导页转向下一页,也就是点击下一步时,组态王会调用StrDevToAddr,并将用户输入传递给驱动。 驱动的功能是进行地址转换,具体解释参见StrDevToAddr。 7.2.1.2 新建变量 用户在变量字典里面点击新建变量时,会弹出如下建立变量的对话框, 若用户有不是驱动使用域填写有误或
36、者有相关的域(包括驱动使用域)没有填写,组态王将会给出相应的提示,即组态王不调用驱动,直接给出错误提示。 当用户点击连接设备完成设备连接或者在设备组合框中选定设备时,组态王会调用GetRegisters,组态王会将设备名称传递给驱动,由驱动返回给组态王寄存器列表。具体解释参见GetRegisters。 所有用户必填域填写完毕,切换TAB页或者确定变量时,组态王会调用ConvertUserConfigToVar. 由驱动进行变量校验。 组态王会将驱动域的输入作为MiniDbItem传递给驱动,ConvertUserConfigToVar将结果返回在组态王建立的变量PLCVAR中。
37、 具体解释见ConvertUserConfigToVar。 7.2.1.3 串口设备测试 若用户使用的设备是串口设备,可以方便的使用串口设备测试工具进行测试.用户进入测试设备对话框,如下图所示: 当用户进入此对话框时,组态王立刻调用GetRegisters获取设备可以使用的寄存器列表。 当用户点击添加或者加入变量时,组态王立刻调用ConvertUserConfigToVar进行变量校验。 当用户点击读取,组态王就开始变量采集。所有采集步骤与运行环境一致,只是这儿测试只是测试一个设备,而运行环境采集定义的所有的设备。 7.2.2. 运行环境 以下步骤为特殊目的时
38、组态王对于每个设备都会调用一次此函数。 7.2.2.1校验设备地址 调用StrToDevAddr,对用户输入的地址字符串进行转换.若StrToDevAddr返回TRUE,转7.2.2.2. 否则组态王提示用户地址格式不对,同时中止此设备的采集,不影响使用同一驱动的其他设备。 7.2.2.2 打开设备 调用OpenComDevice,若是串口设备,则驱动应在此中进行串口初始化.若不是串口驱动,驱动可以在此中完成一次性的初始化工作。 若OpenComDevice返回TRUE,组态王会在信息窗口提示打开设备成功,并给出成功的设备名称,同时转7.2.2.3。否则组态王会在信息窗口提
39、示打开设备失败,认为设备存在问题,若是串口设备,此串口下连接的所有设备都不能通信, 若是其他类型设备,则此种设备全部不能通信。 OpenComDevice的参数由用户配置。 7.2.2.3 设备初始化 调用InitialDevice,对设备进行初始化.若InitialDevice返回TRUE,转7.2.2.4.否则组态王在信息提示用户设备初始化失败,同时中止此设备的采集,不影响使用同一驱动的其他设备。 7.2.2.4 变量校验 调用ConvertUserConfigToVar对所有变量进行变量校验。若一个设备使用的所有变量都成功,转7.2.2.5。若某一个设备中有一个变
40、量校验失败,则组态王会在信息窗口提示变量校验无效,同时组态王会中止此设备的采集。 7.2.2.5 变量打包 调用AddVarToPacket对变量进行打包处理.对于属于同一驱动的所有变量进行打包处理,当所有变量打包完成,7.2.2.6。 7.2.2.6 设备通信 调用ProcessPacket2进行设备通信,若返回TRUE,则释放7.2.2.5中建立的PACKET,同时进行下一个PACKET处理.当按照刷新频率全部处理完毕,转7.2.2.5重新打包通信.若返回FALSE,则转7.2.2.7。 7.2.2.7 尝试恢复设备通信 调用TryConnect进行设备尝试恢复,若返回T
41、RUE,则返回7.2.2.6进行正常通信处理。若返回失败组态王会再次调用TryConnect,若仍然返回FALSE,组态王认为设备失败,会中止设备采集一段时间,在定义设备时设置。 7.2.2.8 关闭设备 调用CloseComDevice关闭设备,若CloseComDevice返回FALSE或者迟迟不能完成关闭设备动作,将大大影响组态王的退出速度,甚至可能阻止组态王退出。 8 程序结构 程序包含如下几个主要的类: 驱动工程类 (Cpro): 实现2个接口: IprotocolImp 和 IprotocolImp2。 设备类 (CDev): 实现COM接口, 包括2个类,
42、设备基类和设备子类。 通讯类 (CCom): 实现串口,网卡等的通讯,开发包向导会根据您的设置,自动地产生串口通讯类 (CSerialCom) 或者网络通讯类 (CNetCom), 您也可以根据需要添加USB通讯类(CUSBCom)。 调试信息类 (CDebug): 该类实现各种调试信息在组态王信息窗口中的输出,比如错误信息,接口信息,数据信息等。 帮助函数(CHelper): 提供了一系列您在开发驱动过程中可能会用到的功能函数。 数据桢校验类 (CCheck): 提供了在开发中会遇到的各种校验函数,包括和校验、异或校验、循环冗余校验等。 类的调用与继承关系,如
43、下图: 8.1 驱动工程类 (CPro) 该类实现2个接口: IprotocolImp 和 IprotocolImp2。 关于接口函数目的,见“7.1” 节。 8.2 设备类 (CDev) 实现COM接口,包含2个类,设备基类(CDevBase)和设备子类(CDev)。 类CDevBase是所有设备子类的父类。 属性: m_szDevKind:设备类型. m_pSerialCom:串口通讯类指针 m_pCheck:校验类指针 m_pPro:工程类指针 操作: GetRegisters BOOL CDev::GetRegisters( LPVOID *p
44、pReg, int *pRegNum ) 类型 Public 目的 得到由szDeviceName确定的寄存器的名字和个数。 返回值 成功返回TRUE,否则返回FALSE。 参数 ppReg [out] 返回寄存器信息的指针数组的指针。 pRegNum [out] 返回寄存器的个数。 GetDevices BOOL CDev::GetDevices(LPVOID *ppDevice, int *pDeviceNum) 类型:Public 目的:得到设备的名字和个数。 返回值:成功返回TRUE,否则返回FALSE。 参数:ppDevice [out] 返回设备
45、列表信息的指针。 pDeviceNum:[out] 返回设备的个数。 ConvertUserConfigToVar WORD CDev::ConvertUserConfigToVar( LPVOID lpDbItemItem, LPVOID lpVar) 类型:Public 目的:将用户的配置字符串转换为组态王变量结构 返回值:WORD:如果转换成功则返回0,否则返回非零的错误代码。 参数 lpDbItem:[in] 指向结构MiniDbItem的指针。 lpVar:[in,out] 指向结构PLCVAR的指针,返回变量就存放在这里。 AddVarToPacket
46、BOOL CDev::AddVarToPacket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket) 类型 Public 目的 确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否则返回FALSE。 返回值 BOOL:FALSE表示不能打包,否则能。 参数 lpVar [in] 变量指针 nVarAccessType [in] 读写方式 lpPacket [int] 包指针 ProcessPacket2 BOOL CDev::Process
47、Packet2( LPVOID lpPacket ) 类型 Public 目的 根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->varList。(在新接口中调用)。 返回值 BOOL:如果成功,返回TRUE,否则,返回FALSE。 参数 lpPacket [in,out] 包指针。 TryConnect BOOL CDev::TryConnect ( const TCHAR* szDeviceName, int iUnitAddr, LPVOID lpDevAddr ) 类型 Public 目的 与地址为UnitAddr
48、的设备尝试进行通讯,用于故障侦探及恢复尝试。 返回值 尝试通讯成功返回TRUE,否则返回FALSE。 参数 pDeviceName [in] 设备的唯一名字。 nUnitAddr [in] 需要进行故障侦探及恢复尝试的设备的地址。 lpDevAddr [in] 应将此参数转换为结构--- PDEVADDR。此结构详情参阅 DATATYPE.H文件。 备注 当 "ProcessPacket" 失败后, "TryConnect"将被组态王调用2次,如果仍然失败,则该接口将按设定的尝试连接间隔被组态王调用。 StrToDevAddr BOOL CDevBase::Str
49、ToDevAddr(const TCHAR* str, LPVOID lpDevAddr) 类型:Public 目的:实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王,如果必要,也可以将地址以字符串的形式传给组态王。 返回值:成功返回TRUE,否则返回FALSE。 参数 str [in] 用户输入的地址字符串。 lpDevAddr [in,out] 用于保存地址信息的结构。 SetProPtr void CDevBase::SetProPtr(CProject16Pro* pPro) 类型 Public 目的 设置工程类的指针。 返回值
50、 Null 参数 pPro [in] 工程类的指针。 GetSendTimes int CDevName1::GetSendTimes(PPACKET pPac) 类型 Public 目的 获取与设备一次交互的次数。 返回值 一个整型数据。 参数 pPac [in,out] 包指针 GetSendString BOOL CDev::GetSendString(PPACKET pPac,int& iLen, int& iRecLen, int iTimes) 类型 Public 目的 根据协议组合成发送桢。 返回值 成功返回TRUE,否则返回FA






