为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

组态王驱动程序用户手册

2017-12-07 50页 doc 510KB 165阅读

用户头像

is_477730

暂无简介

举报
组态王驱动程序用户手册组态王驱动程序用户手册 组态王驱动开发包 北京亚控科技发展有限公司 1. 版权 本开发包版权属于北京亚控科技发展有限公司,任何组织、团体、个人,未经亚控公司允许,不得擅自拷贝,使用,对于购买本开发包的组织、团体、个人,只能内部使用,不得擅自泄漏给第三方。 2. 概述 本开发包采用微软标准的COM组件技术,采用该技术,在创建接口时,可以创建多个互相独立对象,每个对象都可以拥有自己的变量。 最后的结果是一个DLL文件。接口中的各函数,是被组态王的两个应用程序---TouchExplorer.exe和TouchVew...
组态王驱动程序用户手册
组态王驱动程序用户手册 组态王驱动开发包 北京亚控科技发展有限公司 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”,使用这个工具,能够自动地生成驱动代码框架。 运行工具,如下图: 请在下页输入您的目标文件夹 点击“安装”,开发包即安装完成。 使用开发包向导创建驱动的过程: 启动Visual Studio.NET 2003。 (1) (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: 停止位. 值 描述 ONESTOPBIT 1 停止位 ONE5STOPBITS 1.5 停止位 TWOSTOPBITS 2 停止位 Parity :校验. 值 描述 EVENPARITY 偶校验 MARKPARITY 标志校验 NOPARITY 无校验 ODDPARITY 奇校验 SPACEPARITY 空格校验 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:变量ID wVarType:变量类型,为如下几种: Bit, byte, int, uint, BCD, long, float, longbcd, string szVarName:变量名 nDeviceIndex:设备索引 地址单元 nUnitNo:设备 pDevAddr:设备地址 pszRegName:寄存器名称 nRegType;寄存器类型 Type nSub: nSubType1: nSubType2: 子类型,没有用到,如在驱动中有其他需要,可以自己定义使用。 nNo:寄存器通道 nDataType:数据类型 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:包读写类型 变量列表,存储ID_NO和ID_NO2两种类型变量 VarList: ID_NO 该结构定义了老的接口的变量 类型def struct IdNo { WORD wVarId; WORD wNo; WORD wDataType; BYTE Special[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; BYTE Special[4]; WORD wQualities; FILETIME ftTimeStamps; }ID_NO2; 成员: wVarId:变量ID wNo:通道 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::StrToDevAddr XProtocolImp::StrToDevAddr(const TCHAR* str, LPVOID lpDevAddr) 类型:Public 目的:实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王, 如果必要,也可以将地址以字符串的形式传给组态王。 返回值:成功返回TRUE,否则返回FALSE 参数 Str:[in] 用户输入的地址字符串 lpDevAddr:[in,out] 用于保存地址信息的结构 XProtocolImp::GetRegisters XProtocolImp::GetRegisters(const TCHAR* szDeviceName, LPVOID * ppRegs, int *pRegNum) 类型:Public :得到由szDeviceName确定的寄存器的名字和个数 目的 返回值;成功返回TRUE,否则返回FALSE 参数 szDeviceName [in] 设备的唯一名字 ppReg [out] 返回寄存器信息的指针数组的指针。如果szDeviceName无效,则返回 NULL。 pRegNum [out] 返回寄存器的个数,如果szDeviceName无效,则返回0。 XProtocolImp::ConvertUserConfigToVar XProtocolImp:: ConvertUserConfigToVar( LPVOID lpDbItemItem, LPVOID lpVar) 类型 Public 目的 将用户的配置字符串转换为组态王变量结构 返回值 WORD:如果转换成功则返回0,否则返回非零的错误代码 参数 lpDbItem [in] 指向结构MiniDbItem的指针 lpVar [in,out] 指向结构PLCVAR的指针,返回变量就存放在这里 XProtocolImp::AddVarToPacket XProtocolImp:: AddVarToPacket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket) 类型 Public 目的 确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否则返回FALSE。 返回值 BOOL:FALSE表示不能打包,否则能 参数 lpVar [in] 变量指针 nVarAccessType [in] 读写方式 lpPacket [out] 包指针 XProtocolImp::OpenComDevice XProtocolImp::OpenComDevice( int nDeviceType, LPVOID lpInitData) 类型 Public 目的 初始化通讯设备如:(串口或板卡等) 返回值 BOOL:成功则返回TRUE,否则返回FALSE 参数 nDeviceType [in] 设备类型 lpInitData [in] 一个指向COMM_CONFIG结构的指针 XProtocolImp::InitialDevice XProtocolImp::InitialDevice(const TCHAR* pDeviceName, int nUnitAddr, LPVOID lpDevAddr) 类型 Public 目的 初始化设备,设置该设备的初始化状态 返回值 BOOL:如果szDeviceName有效,则返回TRUE,否则返回FALSE。 参数 pDeviceName [in] 设备的唯一名字 nUnitAddr [in] 设备地址 lpDevAddr [in] 应将此参数转换为结构--- PDEVADDR。此结构详情参阅DATA类型.H文件。 XProtocolImp::ProcessPacket XProtocolImp:: ProcessPacket(LPVOID lpPacket) 类型 Public 目的 根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入 pPac->varList。 返回值 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 lpDevAddr) 类型: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。 参数 lpHcomm [in] 其他驱动打开的设备句柄。 XProtocolImp2::ProcessPacket2 XProtocolImp2:: ProcessPacket2(LPVOID lpPacket) 类型 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页或者确定变量时,组态王会调用ConvertUserConfigToVar. 由驱动进行变量校验。 组态王会将驱动域的输入作为MiniDbItem传递给驱动,ConvertUserConfigToVar将结果返回在组态王建立的变量PLCVAR中。 具体解释见ConvertUserConfigToVar。 7.2.1.3 串口设备测试 若用户使用的设备是串口设备,可以方便的使用串口设备测试工具进行测试.用户进 入测试设备对话框,如下图所示: 当用户进入此对话框时,组态王立刻调用GetRegisters获取设备可以使用的寄存器列表。 当用户点击添加或者加入变量时,组态王立刻调用ConvertUserConfigToVar进行变量校验。 当用户点击读取,组态王就开始变量采集。所有采集步骤与运行环境一致,只是这儿测试只是测试一个设备,而运行环境采集定义的所有的设备。 7.2.2. 运行环境 以下步骤为特殊目的时,组态王对于每个设备都会调用一次此函数。 7.2.2.1校验设备地址 调用StrToDevAddr,对用户输入的地址字符串进行转换.若StrToDevAddr返回TRUE,转7.2.2.2. 否则组态王提示用户地址格式不对,同时中止此设备的采集,不影响使用同一驱动的其他设备。 7.2.2.2 打开设备 调用OpenComDevice,若是串口设备,则驱动应在此中进行串口初始化.若不是串口驱动,驱动可以在此中完成一次性的初始化工作。 若OpenComDevice返回TRUE,组态王会在信息窗口提示打开设备成功,并给出成功的设备名称,同时转7.2.2.3。否则组态王会在信息窗口提示打开设备失败,认为设备存在问,若是串口设备,此串口下连接的所有设备都不能通信, 若是其他类型设备,则此种设备全部不能通信。 OpenComDevice的参数由用户配置。 7.2.2.3 设备初始化 调用InitialDevice,对设备进行初始化.若InitialDevice返回TRUE,转7.2.2.4.否则组态王在信息提示用户设备初始化失败,同时中止此设备的采集,不影响使用同一驱动的其他设备。 7.2.2.4 变量校验 调用ConvertUserConfigToVar对所有变量进行变量校验。若一个设备使用的所有变量都成功,转7.2.2.5。若某一个设备中有一个变量校验失败,则组态王会在信息窗口提示变量校验无效,同时组态王会中止此设备的采集。 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进行设备尝试恢复,若返回TRUE,则返回7.2.2.6进行正常通信处理。若返回失败组态王会再次调用TryConnect,若仍然返回FALSE,组态王认为设备失败,会中止设备采集一段时间,在定义设备时设置。 7.2.2.8 关闭设备 调用CloseComDevice关闭设备,若CloseComDevice返回FALSE或者迟迟不能完成关闭设备动作,将大大影响组态王的退出速度,甚至可能阻止组态王退出。 8 程序结构 程序包含如下几个主要的类: 驱动工程类 (Cpro): 实现2个接口: IprotocolImp 和 IprotocolImp2。 设备类 (CDev): 实现COM接口, 包括2个类,设备基类和设备子类。 通讯类 (CCom): 实现串口,网卡等的通讯,开发包向导会根据您的设置,自动地产生串口通讯类 (CSerialCom) 或者网络通讯类 (CNetCom), 您也可以根据需要添加USB通讯类(CUSBCom)。 调试信息类 (CDebug): 该类实现各种调试信息在组态王信息窗口中的输出,比如错误信息,接口信息,数据信息等。 帮助函数(CHelper): 提供了一系列您在开发驱动过程中可能会用到的功能函数。 数据桢校验类 (CCheck): 提供了在开发中会遇到的各种校验函数,包括和校验、异或校验、循环冗余校验等。 类的调用与继承关系,如下图: 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 *ppReg, int *pRegNum ) 类型 Public 目的 得到由szDeviceName确定的寄存器的名字和个数。 返回值 成功返回TRUE,否则返回FALSE。 参数 ppReg [out] 返回寄存器信息的指针数组的指针。 pRegNum [out] 返回寄存器的个数。 GetDevices BOOL CDev::GetDevices(LPVOID *ppDevice, int *pDeviceNum) 类型:Public 目的:得到设备的名字和个数。 返回值:成功返回TRUE,否则返回FALSE。 参数:ppDevice [out] 返回设备列表信息的指针。 pDeviceNum:[out] 返回设备的个数。 ConvertUserConfigToVar WORD CDev::ConvertUserConfigToVar( LPVOID lpDbItemItem, LPVOID lpVar) 类型:Public 目的:将用户的配置字符串转换为组态王变量结构 :WORD:如果转换成功则返回0,否则返回非零的错误代码。 返回值 参数 lpDbItem:[in] 指向结构MiniDbItem的指针。 lpVar:[in,out] 指向结构PLCVAR的指针,返回变量就存放在这里。 AddVarToPacket BOOL CDev::AddVarToPacket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket) 类型 Public 目的 确认变量是否能够与一个包里的其他变量一起进行采集,以进行变量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否则返回FALSE。 返回值 BOOL:FALSE表示不能打包,否则能。 参数 lpVar [in] 变量指针 nVarAccessType [in] 读写方式 lpPacket [int] 包指针 ProcessPacket2 BOOL CDev::ProcessPacket2( LPVOID lpPacket ) 类型 Public 目的 根据协议及包状态信息进行相应的处理,例如进行读写处理,如果读成功则把数据写入pPac->varList。(在新接口中调用)。 返回值 BOOL:如果成功,返回TRUE,否则,返回FALSE。 参数 lpPacket [in,out] 包指针。 TryConnect BOOL CDev::TryConnect ( const TCHAR* szDeviceName, int iUnitAddr, LPVOID lpDevAddr ) 类型 Public 目的 与地址为UnitAddr的设备尝试进行通讯,用于故障侦探及恢复尝试。 返回值 尝试通讯成功返回TRUE,否则返回FALSE。 参数 pDeviceName [in] 设备的唯一名字。 nUnitAddr [in] 需要进行故障侦探及恢复尝试的设备的地址。 lpDevAddr [in] 应将此参数转换为结构--- PDEVADDR。此结构详情参阅 DATATYPE.H文件。 备注 当 "ProcessPacket" 失败后, "TryConnect"将被组态王调用2次,如果仍然失败,则该接口将按设定的尝试连接间隔被组态王调用。 StrToDevAddr BOOL CDevBase::StrToDevAddr(const TCHAR* str, LPVOID lpDevAddr) 类型:Public 目的:实现对地址输入的整理,判断用户输入的地址是否合法,并将地址的数值传给组态王,如果必要,也可以将地址以字符串的形式传给组态王。 返回值:成功返回TRUE,否则返回FALSE。 参数 str [in] 用户输入的地址字符串。 lpDevAddr [in,out] 用于保存地址信息的结构。 SetProPtr void CDevBase::SetProPtr(CProject16Pro* pPro) 类型 Public 目的 设置工程类的指针。 返回值 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,否则返回FALSE。 参数 pPac [in,out] 指向PACKET结构的指针。 iLen [out] 发送数据的长度。 iRecLen [out] 需要接收的数据的长度。 iTimes [in] 在一次发送过程中调用的次序。 Transmission BOOL CDev::Transmission (int iLen, int iExpectedLen, int& iRecLen) 类型 Public 目的 通讯处理函数。 返回值 成功返回TRUE,否则返回FALSE。 参数 iLen [in] 数据的长度 iExpectedLen [in,out] 期望接收到数据的长度。 iRecLen [in,out] 实际接收到数据的长度。 GetFirstFrame BOOL CDev::GetFirstFrame (int nbyteRead, int nExpectedLen, BYTE chFrameHead) 类型 Public 目的 获取第一个正确的数据桢。 返回值 成功返回TURE,否则,返回FALSE。 参数 nbyteRead [in] 实际接收到的数据的长度。 iExpectedLen [in] 期望接收到的数据的长度。 chFrameHead [in] 第一个正确数据桢的位置。 PreProcessData BOOL CDev::PreProcessData (PPACKET pPac, int nbyteRead ,int nExpectedLen, int iTimes) 类型 Public 目的 检查接收的数据。 返回值 成功返回TURE,否则,返回FALSE。 参数 pPac [in,out] 包指针。 nbyteRead [in] 实际接收到的数据长度。 iExpectedLen [in] 期望接收到的数据长度。 SendDataToKingView BOOL CDev::SendDataToKingView(PPACKET pPac, int iLen) 类型 Public 目的 向组态王传送数据。 返回值 成功返回TRUE,否则,返回FALSE。 参数 pPac [in,out] 包指针。 iLen [Out] 接收到的数据长度。 8.3 通讯类 (CCom) 实现串口,网卡等的通讯,开发包向导会根据您的设置,自动地产生串口通讯类 (CSerialCom) 或者网络通讯类 (CNetCom), 您也可以根据需要添加USB通讯类 (CUSBCom)。 如下是串口通讯类(CSerialCom)结构: 8.3.1串口通讯类 CSerialCom 属性: DWORD m_dwTimeOut; 通讯超时变量 HANDLE m_hComm; 串口句柄 bool bUseModem; 是否使用MODEM 操作: OpenCom BOOL OpenCom(const ComDevice& InitData) ; 类型 Public 目的 打开串口。 返回值 成功返回TRUE,否则返回FALSE。 参数 pcc [in] ComDevice 结构指针 CloseCom BOOL CloseCom(); 类型 Public 目的 关闭串口 返回值 成功返回TRUE,否则返回FALSE。 参数 Null ReOpenCom BOOL ReOpenCom(); 类型 Public 目的 重新打开串口。 返回值 成功返回TRUE,否则返回FALSE。 参数 Null PhysicalSend BOOL PhysicalSend(BYTE*pbBuf, DWORD dwWriteLen); 类型 Public 目的 向串口发送一数据桢。 返回值 成功返回TRUE,否则返回FALSE。 参数 pbBuf [in] 发送数据缓冲区指针 dwWriteLen [in] 发送数据长度 PhysicalReceive BOOL PhysicalReceive(BYTE*pbBuf,int iStart, int& iBytesRead); 类型 Public 目的 从串口接收数据。 返回值 成功返回TRUE,否则返回FALSE。 参数 pbBuf [in] 接收缓冲区指针 iBytesRead [in] 接收到的数据长度 8.4 调试信息类 (CDebug) 该类实现各种调试信息在组态王信息窗口中的输出,比如错误信息,接口信息,数 据信息等。 目前提供了如下信息输出标志: /IMP_MSG // 输出接口函数 /FUN_MSG // 输出功能函数 /DATA_MSG // 输出发送接收数据 /ERR_MSG // 输出错误信息 /USER_MSG // 输出用户定义信息 /ALL_MSG // 输出所有信息 当用户在设备地址处,输入如上信息,将会在组态王信息窗口中输出相应的信息。 例如,输入 1 /ALL_MSG 在组态王信息窗口中显示: 信息格式: 时间 精确时钟计数 信息 属性: static bool bShowIMPMsg; 输出接口信息标志 static bool bShowERRMsg; 输出错误信息标志 static bool bShowFUNMsg; 输出功能函数标志 static bool bShowDATAMsg; 输出发送接收数据标志 static bool bShowUSERMsg; 输出自定义信息标志 static bool bShowALLMsg; 输出所有信息标志 : OperationsShowImpMessage void CDebug::ShowImpMessage(TCHAR* szMessage) 类型 Public 目的 输出接口信息标志。 返回值 Null 参数 szMessage [in] 显示信息 ShowErroMessage void CDebug::ShowErroMessage(TCHAR* szMessage) 类型 Public 目的 输出错误信息。 返回值 Null 参数 szMessage [in] 显示信息 ShowFunMessage void CDebug::ShowFunMessage(TCHAR* szMessage) 类型 Public 目的 输出功能函数信息。 返回值 Null 参数 szMessage [in] 显示信息 ShowDataMessage void CDebug::ShowDataMessage(TCHAR* szMessage) 类型 Public 目的 输出发送接收数据信息。 返回值 Null 参数 szMessage [in] 显示信息 ShowUserMessage void CDebug::ShowUserMessage(TCHAR* szMessage) 类型 Public 目的 输出自定义信息。 返回值 Null 参数 szMessage [in] 显示信息 8.5 帮助函数类 (CHelper) 提供了一系列您在开发驱动过程中可能会用到的功能函数。 操作: GetWord WORD CHelper::GetWord(BYTE* buf) 类型 Public 目的 从缓冲区中得到整数. 返回值 转换后的整数. 参数 buf [in] 数据缓冲区的指针 GetLong long CHelper::GetLong(BYTE* buf) 类型 Public 目的 从缓冲区中得到长整数。 返回值 转换后的长整数 参数 buf [in] 数据缓冲区的指针 WordToBcd WORD CHelper::WordToBcd(WORD value) 类型 Public 目的 把整数转换BCD码。 返回值 转换后的BCD码 参数 value [in] 要转换的整数. LongToBcd long CHelper::LongToBcd(long value) 类型 Public 目的 把长整数转换BCD码。 返回值 转换后的BCD码 参数 value [in] 要转换的长整数 BcdToWord WORD CHelper::BcdToWord(WORD value) 类型 Public 目的 把BCD码转换整数。 返回值 转换后的整数 参数 value [in] 要转换的BCD码 BcdToLong long CHelper::BcdToLong(long value) 类型 Public 目的 把BCD码转换长整数。 返回值 转换后的长整数 参数 value [in] 要转换的BCD码 SwapWord WORD CHelper::SwapWord(WORD value) 类型 Public 目的 转换整数的高低位字节。 返回值 转换后的长整数 参数 value [in] 要转换的BCD码 SwapLong long CHelper::SwapLong(WORD *value) 类型 Public 目的 转换整数的高低位字节。 返回值 转换后的长整数 参数 value [in] 要转换的BCD码 ByteBufToFloat float CHelper::ByteBufToFloat(BYTE *buf,int mode) 类型 Public 目的 把4个字节的数据按照mode 转换为浮点数FLOAT。 返回值 转换后的浮点数 参数 value [in] 数据缓冲区的指针 mode [in] 数据转换的模式 0 --3210 1 --2301 2 --0123 3 --1032 FloatToByteBuf void CHelper::FloatToByteBuf(BYTE *buf,float data,int mode) 类型 Public 目的 把浮点数FLOAT按照mode 转换为4个字节的数据。 返回值 NA 参数 buf [out] 数据缓冲区的指针. data [in] 要转换的浮点数 mode [in] 数据转换的模式 0 --3210 1 --2301 2 --0123 3 --1032 ByteToASC void CHelper::ByteToASC( BYTE* buf, BYTE data ) 类型 Public 目的 把一个字节的数据转换为两个ASCII码放在buf内。 返回值 NA 参数 buf [out] 数据缓冲区的指针. data [out] 要转换的字节数 ASCToByte BYTE CHelper::ASCToByte( BYTE* buf ) 类型 Public 目的 把缓冲区中的两个ASCII码转换为一个字节数据。 返回值 转换后的字节数据 参数 buf [in] 数据缓冲区的指针 WordToASC void CHelper::WordToASC( BYTE* buf, WORD data ) 类型 Public 目的 把一个字的数据转换为4个ASCII码放在buf内。 返回值 Null 参数 buf [out] 数据缓冲区的指针data [in] 要转换的整数 ASCToWord WORD CHelper::ASCToWord( BYTE* buf ) 类型 Public 目的 把缓冲区中的4个ASCII码转换为一个字数据。 返回值 转换后的整数 参数 buf [in] 数据缓冲区的指针 LongToASC void CHelper::LongToASC(BYTE *buf ,long data) 类型 Public 目的 把一个双字的数据转换为8个ASCII码放在buf内。 返回值 Null 参数 buf [out] 数据缓冲区的指针 data [in] 要转换的长整数 ASCToLong LONG CHelper::ASCToLong(BYTE *buf) 类型 Public 目的 把缓冲区中的8个ASCII码转换为一个双字数据。 返回值 转换后的长整数 参数 buf [in] 数据缓冲区的指针 BCDToASC void CHelper::BCDToASC( BYTE* buf, WORD data ) 类型 Public 目的 把一个字BCD的数据转换为4个ASCII码放在buf内。 返回值 Null 参数 buf [out] 数据缓冲区的指针 data [in] 要转换的整数 ASCToBCD WORD CHelper::ASCToBCD( BYTE* buf ) 类型 Public 目的 把缓冲区中的4个ASCII码转换为一个字BCD数据。 返回值 转换后的整数 参数 buf [in] 数据缓冲区的指针 KvGetTickCount ULONGLONG CHelper::KvGetTickCount() 类型 Public 目的 获得当前的时钟计数 返回值 一个longlong数. 参数 Null KvCoFileTimeNow void CHelper::KvCoFileTimeNow(FILETIME *lpFileTime) 类型 Public 目的 设置时间戳 返回值 Null 参数 lpFileTime [out] FILETIME变量指针 KvGlobalAddAtom STR CHelper::KvGlobalAddAtom(LPCTSTR lpString) 类型 Public 目的 增加全局原子变量。 返回值 一个原子变量 参数 lpString [in] 要增加为原子的字符串 KvGlobalGetAtomName UINT CHelper::KvGlobalGetAtomName(STR pAtom, LPTSTR lpBuffer, int nSize) 类型 Public 目的 获得全局原子对应的字符串。 返回值 字符串的长度 参数 pAtom [in] 原子指针 lpBuffer [out] 缓冲区的长度 nSize [in] 缓冲区大小 KvGlobalDeleteAtom STR CHelper::KvGlobalDeleteAtom(STR pAtom) 类型 Public 目的 删除原子。 返回值 删除的原子变量 参数 pAtom [in] 要删除的原子指针 8.6 数据桢校验类 (CCheck) 提供了在开发中会遇到的各种校验函数,包括和校验、异或校验、循环冗 余校验等。 操作: Xor_Check BYTE CCheck::Xor_Check(BYTE *buf, int nLen) 类型 Public 目的 异或校验。 返回值 一个字节的数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据缓冲区的长度 Sum_Check BYTE CCheck::Sum_Check(BYTE *buf, int nLen) 类型 Public 目的 把缓冲区中的数据按字节计算取8位累加和。 返回值 一个字节数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据长度 LRC_Check BYTE CCheck::LRC_Check(BYTE *buf, int nLen) 类型 Public 目的 把缓冲区中的数据按字节计算累加和取反加1。 返回值 一个字节数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据长度 CRC16_CHECK WORD CCheck::CRC16_CHECK(BYTE *buf, int nLen) 类型 Public 目的 把缓冲区中的数据按字节计算CRC_16(循环冗余校验)。 返回值 一个WORD类型数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据长度 CRC16_CHECK_REVERSE WORD CCheck::CRC16_CHECK_REVERSE(BYTE *buf, int nLen) 类型 Public 目的 反向的16位循环冗余校验。 返回值 一个WORD类型数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据长度 MODBUS_CRC_CHECK WROD CCheck::MODBUS_CRC_CHECK(BYTE *buf, int nLen) 类型 Public 目的 Modbus 协议的循环冗余校验 返回值 一个WORD类型数据 参数 buf [in] 数据缓冲区的指针 nLen [in] 数据长度 9. 错误提示信息码 驱动包含如下的错误提示信息码,这些信息在资源文件“StringResource.dll”中定义,运行时被组态王调用。 关于调用过程,参见函数GetLastError。 (1).常用错误提示信息码 (a). 设备地址 #define ERR_DEVICE_ADDR_FORMAT 11 提示信息: 设备地址格式错,请参阅帮助文档 (b). 寄存器 #define ERR_REGISTER_NAME 12 提示信息: 寄存器名称错误,请参阅帮助文档 #defineERR_REGISTER_DATA类型 13 提示信息: 寄存器数据类型错误,请参阅帮助文档 #defineERR_REGISTER_NO 14 提示信息: 寄存器序号错误,请参阅帮助文档 #defineERR_REGISTER_FORMAT 15 提示信息: 寄存器格式错误,请参阅帮助文档 (2). 详细错误提示信息码 (a). 设备地址 #define ERR_DEVICE_ADDR_NEED_NUM 20 提示信息: 设备地址必须是数字 #define ERR_DEVICE_ADDR_NEED_HEX 21 提示信息: 设备地址必须是十六进制 #define ERR_DEVICE_ADDR_LOWFLOW 22 提示信息: 设备地址太小 #defineERR_DEVICE_ADDR_OVERFLOW 23 提示信息: 设备地址太大 #defineERR_DEVICE_ADDR_FILEPATH 24 提示信息: 设备地址应为文件路径 #defineERR_DEVICE_ADDR_IP_PORT 25 提示信息: 设备地址应为“IP地址:端口号” #defineERR_DEVICE_ADDR_IP 26 提示信息: 设备地址 (IP) 错误 #defineERR_DEVICE_ADDR_DATASOURCE 27 提示信息: 设备地址应为“地址:数据源” #defineERR_DEVICE_ADDR_PASSWORD 28 提示信息: 设备地址应为“地址:密码” #defineERR_DEVICE_ADDR_SPECIAL 29 提示信息: 特殊设备地址格式,请参阅帮文挡 (b). 寄存器通道 #defineERR_REGISTER_SPILTTER_CHAR 40 提示信息: 通道号分隔符应该为'.' #defineERR_REGISTER_CH1 41 提示信息: 寄存器应有一级序号,请参阅帮助文档 #defineERR_REGISTER_CH2 42 提示信息: 寄存器应有二级序号,请参阅帮助文档 #defineERR_REGISTER_CH3 43 提示信息: 寄存器应有三级序号,请参阅帮助文档 #defineERR_REGISTER_CH1_LOWFLOW 44 提示信息: 寄存器1级序号超下限,请参阅帮助文档 #defineERR_REGISTER_CH1_OVERFLOW 45 提示信息: 寄存器1级序号超上限,请参阅帮助文档 #defineERR_REGISTER_CH2_LOWFLOW 46 提示信息: 寄存器2级序号超下限,请参阅帮助文档 #defineERR_REGISTER_CH2_OVERFLOW 47 提示信息: 寄存器2级序号超上限,请参阅帮助文档 #defineERR_REGISTER_CH3_LOWFLOW 48 提示信息: 寄存器3级序号超下限,请参阅帮助文档 #defineERR_REGISTER_CH3_OVERFLOW 49 提示信息: 寄存器3级序号超上限,请参阅帮助文档 (c). 寄存器数据类型 #defineERR_REGISTER_DATA类型_BIT 60 提示信息: 寄存器仅支持BIT数据类型 #defineERR_REGISTER_DATA类型_BYTE 61 提示信息: 寄存器仅支持BYTE数据类型 #defineERR_REGISTER_DATA类型_SHORT 62 提示信息: 寄存器仅支持SHORT数据类型 #defineERR_REGISTER_DATA类型_USHORT 63 提示信息: 寄存器仅支持UINT数据类型 #defineERR_REGISTER_DATA类型_BCD 64 提示信息: 寄存器仅支持BCD数据类型 #defineERR_REGISTER_DATA类型_LONG 65 提示信息: 寄存器仅支持LONG数据类型 #defineERR_REGISTER_DATA类型_LONGBCD66 提示信息: 寄存器仅支持LONGBCD数据类型 #defineERR_REGISTER_DATA类型_FLOAT 67 提示信息: 寄存器仅支持FLOAT数据类型 #defineERR_REGISTER_DATA类型_STRING 68 提示信息: 寄存器仅支持STRING数据类型 (3). 2007年1月份新增设备地址和寄存器提示信息的使用办法 (1). 输入描述: 设备地址越限 提示信息: 设备地址范围越限,请参阅帮助文档 适用范围: 只有一个域的简单地址格式,值越限的情况 错误ID:ERR_ADDR_EXCEED (2). 输入描述: 输入非法的地址或者地址格式错误 提示信息: 设备地址格式错误,请参阅帮助文档 适用范围: 除1以外的其他地址格式错误 错误ID: ERR_ADDR_FORMAT (3). 输入描述: 寄存器名称错误 提示信息: 寄存器名称错误,请从寄存器列表中选择寄存器或参阅帮助文档 使用范围: 所有类型的寄存器 错误ID: ERR_REG_NAME (4). 输入描述: 寄存器通道号越限 提示信息: 寄存器通道号越限,请参阅帮助文档 使用范围: 只用一级通道的简单寄存器,通道号范围越限 错误ID: ERR_REG_CH (5). 输入描述: 寄存器格式错误 提示信息: 寄存器格式错误,请参阅帮助文档 使用范围: 除3、4以外的其他寄存器定义错误 错误ID: ERR_REG_FORMAT (6). 输入描述: 寄存器数据类型错误 提示信息: 寄存器数据类型错误,请参阅帮助文档 使用范围: 所有类型的寄存器 错误ID: ERR_REG_DATATYPE 10.维护设备列表文件 组态王使用设备列表文件“devlst.dat” 来存储设备信息。 (1) 当您使用组态王,新建设备时,会看到如下的设备选择对话框。 这些设备列表信息保存在列表文件Devlst.dat中。 (2) 我们使用设备列表维护工具“Devman.exe”来维护设备列表文件Devlst.dat。 这个工具存储在KingViewDriver目录中。 (3) 如果您想改变列表信息,应将设备列表文件和维护工具放在同一个目录下。 当您打开这个工具时,就出现如下界面: (4) 如果您需要新建一个设备,需要选择“PLC”、“智能仪表”、“智能模块”、“板卡”、“变频器”之一,按“新建”按钮进行添加。如果一个设备已经存在了,您可以按“编辑”按钮进行修改。 (5) 其中描述一项,应填入“串口”、“专用卡”或“网络卡”之一 (6) 协议ID一项,应从Readme.txt中复制,填入此处。 (7) 点击“确定”按钮返回并保存信息 11.交付文件 最后,我们需要提交如下文件到VSS上: Devlst.dat:设备列表文件 XXXX.dll: 驱动文件 XXXX.reg: 注册文件 History.txt:历史记录文件
/
本文档为【组态王驱动程序用户手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索