SCADA平臺(tái)驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔_第1頁(yè)
SCADA平臺(tái)驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔_第2頁(yè)
SCADA平臺(tái)驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔_第3頁(yè)
SCADA平臺(tái)驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔_第4頁(yè)
SCADA平臺(tái)驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、信息機(jī)電技術(shù)研究所驅(qū)動(dòng)開(kāi)發(fā)調(diào)試說(shuō)明文檔KingSCADA and KingView岳鵬程2015/4/15驅(qū)動(dòng)程序開(kāi)發(fā)和調(diào)試需要用到的接口、結(jié)構(gòu)體以及函數(shù)的說(shuō)明文檔目錄1. 驅(qū)動(dòng)信息結(jié)構(gòu)22. 接口函數(shù)72.1 接口描述7IProtocolImp:StrToDevAddr7XProtocolImp:GetRegisters7XProtocolImp:ConvertUserConfigToVar8XProtocolImp:AddVarToPacket8XProtocolImp:OpenComDevice8XProtocolImp:OpenComDevice( int nDeviceType, L

2、PVOID lpInitData)8XProtocolImp:InitialDevice9XProtocolImp:ProcessPacket9XProtocolImp:CloseComDevice10XProtocolImp:TryConnect10XProtocolImp:GetLastError10XProtocolImp2:GetTrans11XProtocolImp2:SetTrans11XProtocolImp2:ProcessPacket2112.2 接口函數(shù)的調(diào)用122.2.1 開(kāi)發(fā)環(huán)境122.2.2. 運(yùn)行環(huán)境143 程序結(jié)構(gòu)163.1 驅(qū)動(dòng)工程類(lèi) (CPro)163.2 設(shè)

3、備類(lèi) (CDev)173.3 通訊類(lèi) (CCom)233.3.1串口通訊類(lèi) CSerialCom233.4 調(diào)試信息類(lèi) (CDebug)253.5 幫助函數(shù)類(lèi) (CHelper)283.6 數(shù)據(jù)楨校驗(yàn)類(lèi) (CCheck)354. 錯(cuò)誤提示信息碼371. 驅(qū)動(dòng)信息結(jié)構(gòu)所有的結(jié)構(gòu)都定義在文件“Data類(lèi)型.h”中。_DevAddr該結(jié)構(gòu)定義了設(shè)備地址格式.類(lèi)型def struct _DevAddr                  

4、;               UINT    nDevAddr;           TCHAR   sDevAddrMAX_DEV_LEN; DEVADDR, * PDEVADDR; 成員:sDevAddr: 用戶在組態(tài)王中輸入的原地址格式字符串。nDevAddr:實(shí)際轉(zhuǎn)換后的設(shè)備地址數(shù)字.ComDevi

5、ce這是串口設(shè)置信息的結(jié)構(gòu)體.struct ComDevice                             short nFlag;            WORD  deviceKind;   &

6、#160;    TCHAR  deviceName32;      int   baudRate;         short dataBits;         short stopBits;         short parity;    &

7、#160;      short timeOut;          short failTimes;         short retryInterval;       short isRs232;      ; 成員:nFlag:串口標(biāo)志,目前沒(méi)有用到.DeviceKind

8、:設(shè)備類(lèi)型,'1'代表串口設(shè)備DeviceName:邏輯名稱(chēng) =COM1,COM2.BaudRate:波特率,范圍是從 110到256000。DataBits:數(shù)據(jù)位StopBits:停止位.值描述ONESTOPBIT1 停止位ONE5STOPBITS1.5 停止位TWOSTOPBITS2 停止位Parity :校驗(yàn). 值描述EVENPARITY偶校驗(yàn)MARKPARITY標(biāo)志校驗(yàn)NOPARITY無(wú)校驗(yàn)ODDPARITY奇校驗(yàn)SPACEPARITY空格校驗(yàn) TimeOut:超時(shí),單位是毫秒FailTimes:失敗次數(shù)RetryInterval:嘗試間隔isRs232:通

9、訊模式,'1'代表RS232, '2'代表RS422, '3'代表RS485.PLCVAR該結(jié)構(gòu)定義了用戶變量的屬性.類(lèi)型def struct var                                  &#

10、160;      WORD wVarID;                 WORD wVarType;                 TCHAR szVarName32;          &#

11、160;     short  nDeviceIndex;              short  nUnitNo;                DEVADDR *pDevAddr;          

12、60;   TCHAR   *pszRegName;             short  nRegType;                short  nSubType;          

13、60;    short  nSubType1;               short  nSubType2;              short  nNo;          

14、0;         short  nDataType;                short  nAccessMode;           long   nFrequency;        

15、       long  nTimerCount;                     CWinThread* pComThread;         DDEValue   maxRaw;        &

16、#160;     DDEValue   minRaw;              short      bConvertion;           short      isBad;     &#

17、160;       short      isUnvalid;       PLCVAR, * PPLCVAR;成員:wvarID:變量IDwVarType:變量類(lèi)型,為如下幾種:Bit, byte, int, uint, BCD, long, float, longbcd, stringszVarName:變量名nDeviceIndex:設(shè)備索引nUnitNo:設(shè)備地址單元pDevAddr:設(shè)備地址pszRegN

18、ame:寄存器名稱(chēng)nRegType;寄存器類(lèi)型nSubType:nSubType1:nSubType2:子類(lèi)型,沒(méi)有用到,如在驅(qū)動(dòng)中有其他需要,可以自己定義使用。nNo:寄存器通道nDataType:數(shù)據(jù)類(lèi)型nAccessMode:讀寫(xiě)屬性nFrequency:采集頻率nTimerCount:超時(shí)次數(shù)pComThread:通訊線程maxRaw:最大原始值minRaw:最小原始值PACKET該結(jié)構(gòu)定義了通訊包的屬性  類(lèi)型def struct Packet            

19、;                        short  nDeviceIndex;          short  nUnitNo;           

20、0; DEVADDR * pDevAddr;         TCHAR    * pszDevName;        TCHAR   *pszRegName;          short  nRegType;         

21、0;  short  nSubType;            short  nSubType1;            short  nSubType2;            int    nStartNo;

22、0;          int    nEndNo;            short  nPacketType;         CPtrList varList;        PACKET,* PPACK

23、ET;     成員:nDeviceIndex:設(shè)備索引nUnitNo:設(shè)備地址單元pDevAddr:設(shè)備地址結(jié)構(gòu)指針pszDevName:設(shè)備地址nRegType:寄存器類(lèi)型nSubType:nSubType1:nSubType2:子類(lèi)型,沒(méi)有用到,自己可以使用nStartNo:開(kāi)始通道nEndNo:結(jié)束通道 nPacketType:包讀寫(xiě)類(lèi)型 VarList:變量列表,存儲(chǔ)ID_NO和ID_NO2兩種類(lèi)型變量 ID_NO該結(jié)構(gòu)定義了老的接口的變量類(lèi)型def struct IdNo   

24、60;                   WORD wVarId;         WORD wNo;          WORD wDataType;       BYTE Special4;  

25、     PlcValue  plcValue; ID_NO;成員:wVarId:變量IDwNo:通道wDataType:數(shù)據(jù)類(lèi)型Special:目前沒(méi)有使用plcValue:PLCVAR結(jié)構(gòu)體指針I(yè)D_NO2該結(jié)構(gòu)定義了新的接口的變量類(lèi)型def struct IdNo2                         

26、; WORD wVarId;           WORD wNo;            WORD wDataType;        PlcValue  plcValue;     BYTE Special4;         

27、;WORD wQualities;         FILETIME ftTimeStamps;                   ID_NO2;成員:wVarId:變量ID wNo:通道wDataType:數(shù)據(jù)類(lèi)型Special:目前沒(méi)有用到plcValue:PLCVAR結(jié)構(gòu)體指針wQualities:質(zhì)量戳,0xc0代表GOOD, 0代表BAD.ftT

28、imeStamps:時(shí)間戳,在驅(qū)動(dòng)中一般設(shè)置當(dāng)前的時(shí)間DEVICE_INFO該結(jié)構(gòu)定義了設(shè)備信息類(lèi)型def  struct deviceinfo                     TCHAR  sDeviceName32;DEVICE_INFO;成員:SDeviceName:設(shè)備名稱(chēng),最大允許長(zhǎng)度是32,使用TCHAR字符REG_INFO該結(jié)構(gòu)定義了寄存器信息類(lèi)型def  stru

29、ct reginfo                            TCHAR  sRegName8;         int   nLowIndex;        &#

30、160;  int   nUpperIndex;          WORD  wDataType;           int   nData;         REG_INFO;成員:sRegName:寄存器名稱(chēng)nLowIndex:開(kāi)始通道nUpperIndex:結(jié)束通道2.

31、 接口函數(shù)2.1 接口描述組態(tài)王與驅(qū)動(dòng)交互,包括2個(gè)COM接口: IprotocolImp(老接口) 和 IProtocolImp2(新接口)IProtocolImp:StrToDevAddrXProtocolImp:StrToDevAddr(const TCHAR* str, LPVOID lpDevAddr)類(lèi)型:Public目的:實(shí)現(xiàn)對(duì)地址輸入的整理,判斷用戶輸入的地址是否合法,并將地址的數(shù)值傳給組態(tài)王,如果必要,也可以將地址以字符串的形式傳給組態(tài)王。返回值:成功返回TRUE,否則返回FALSE參數(shù)Str:in 用戶輸入的地址字符串lpDevAddr:in,out 用于保存地址信息的結(jié)構(gòu)

32、XProtocolImp:GetRegistersXProtocolImp:GetRegisters(const TCHAR* szDeviceName,                             LPVOID * ppRegs, int *pRegNum)類(lèi)型:Public目的:得到由szDeviceName確定的寄存器的名字和個(gè)數(shù)

33、返回值;成功返回TRUE,否則返回FALSE參數(shù)szDeviceNamein 設(shè)備的唯一名字ppRegout 返回寄存器信息的指針數(shù)組的指針。如果szDeviceName無(wú)效,則返回NULL。pRegNumout 返回寄存器的個(gè)數(shù),如果szDeviceName無(wú)效,則返回0。 XProtocolImp:ConvertUserConfigToVarXProtocolImp: ConvertUserConfigToVar( LPVOID lpDbItemItem, LPVOID lpVar)類(lèi)型Public目的將用戶的配置字符串轉(zhuǎn)換為組態(tài)王變量結(jié)構(gòu) 返回值WORD:如果轉(zhuǎn)換成功

34、則返回0,否則返回非零的錯(cuò)誤代碼參數(shù)lpDbItemin 指向結(jié)構(gòu)MiniDbItem的指針lpVarin,out 指向結(jié)構(gòu)PLCVAR的指針,返回變量就存放在這里XProtocolImp:AddVarToPacketXProtocolImp: AddVarToPacket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket)類(lèi)型Public目的確認(rèn)變量是否能夠與一個(gè)包里的其他變量一起進(jìn)行采集,以進(jìn)行變量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否則返回FALSE。返回值BOOL:FALSE表示不能打包,否則能 參數(shù)lp

35、Var in  變量指針nVarAccessTypein  讀寫(xiě)方式lpPacketout 包指針 XProtocolImp:OpenComDeviceXProtocolImp:OpenComDevice( int nDeviceType, LPVOID lpInitData)類(lèi)型Public目的初始化通訊設(shè)備如:(串口或板卡等) 返回值BOOL:成功則返回TRUE,否則返回FALSE 參數(shù)nDeviceTypein 設(shè)備類(lèi)型 lpInitDatain 一個(gè)指向COMM_CONFIG結(jié)構(gòu)的指針XProtocolImp:InitialDevice

36、XProtocolImp:InitialDevice(const TCHAR*  pDeviceName, int nUnitAddr, LPVOID lpDevAddr) 類(lèi)型Public 目的初始化設(shè)備,設(shè)置該設(shè)備的初始化狀態(tài) 返回值BOOL:如果szDeviceName有效,則返回TRUE,否則返回FALSE。參數(shù)pDeviceNamein 設(shè)備的唯一名字nUnitAddrin 設(shè)備地址lpDevAddrin  應(yīng)將此參數(shù)轉(zhuǎn)換為結(jié)構(gòu)- PDEVADDR。此結(jié)構(gòu)詳情參閱DATA類(lèi)型.H文件。XProtocolImp:ProcessPacke

37、tXProtocolImp: ProcessPacket(LPVOID lpPacket) 類(lèi)型Public 目的根據(jù)協(xié)議及包狀態(tài)信息進(jìn)行相應(yīng)的處理,例如進(jìn)行讀寫(xiě)處理,如果讀成功則把數(shù)據(jù)寫(xiě)入pPac->varList。 返回值BOOL:如果成功,返回TRUE,否則,返回FALSE。 參數(shù)lpPacketIn, out 包指針 XProtocolImp:CloseComDeviceXProtocolImp:CloseComDevice()類(lèi)型:Public目的:關(guān)閉該通訊設(shè)備返回值BOOL:成功則返回TRUE,否則返回FALSE。參數(shù)Nul

38、l XProtocolImp:TryConnectXProtocolImp:TryConnect(const TCHAR*  pDeviceName, int nUnitAddr, LPVOID lpDevAddr)類(lèi)型:Public目的:與地址為UnitAddr的設(shè)備嘗試進(jìn)行通訊,用于故障偵探及恢復(fù)嘗試。返回值嘗試通訊成功返回TRUE,否則返回FALSE。參數(shù)pDeviceNamein 設(shè)備的唯一名字nUnitAddrin  需要進(jìn)行故障偵探及恢復(fù)嘗試的設(shè)備的地址。lpDevAddrin  應(yīng)將此參數(shù)轉(zhuǎn)換為結(jié)構(gòu)- PDEVADDR。此結(jié)構(gòu)詳情參閱 &#

39、160;  DATA類(lèi)型.H文件。 備注當(dāng) "ProcessPacket" 失敗后, "TryConnect"將被組態(tài)王調(diào)用2次,如果仍然失敗,則該接口將按設(shè)定的嘗試連接間隔被組態(tài)王調(diào)用。 XProtocolImp:GetLastErrorXProtocolImp:GetLastError() 類(lèi)型Public目的返回最近一次的錯(cuò)誤信息。返回值將最近一次的錯(cuò)誤信息。參數(shù)無(wú)XProtocolImp2:GetTransXProtocolImp2:GetTrans( LPVOID* pHcomm) 類(lèi)型Publ

40、ic目的獲取驅(qū)動(dòng)打開(kāi)的設(shè)備句柄,以便其他設(shè)備可以使用此句柄。返回值成功返回TRUE,否則返回FALSE。參數(shù)lpHcommout 接受設(shè)備句柄的指針XProtocolImp2:SetTransXProtocolImp2:SetTrans( LPVOID* pHcomm )類(lèi)型:Public目的:將其他驅(qū)動(dòng)打開(kāi)的設(shè)備句柄傳遞給驅(qū)動(dòng)。返回值:成功返回TRUE,否則返回FALSE。 參數(shù)lpHcommin 其他驅(qū)動(dòng)打開(kāi)的設(shè)備句柄。XProtocolImp2:ProcessPacket2XProtocolImp2: ProcessPacket2(LPVOID lpPacket)類(lèi)型Public目的根據(jù)

41、協(xié)議及包狀態(tài)信息進(jìn)行相應(yīng)的處理,例如進(jìn)行讀寫(xiě)處理,如果讀成功則把數(shù)據(jù)寫(xiě)入pPac->varList。返回值BOOL:如果成功,返回TRUE,否則,返回FALSE。參數(shù)lpPacketin,out 包指針 2.2 接口函數(shù)的調(diào)用2.2.1 開(kāi)發(fā)環(huán)境 新建設(shè)備在向?qū)ы?yè)輸入地址字符串時(shí),程序加載驅(qū)動(dòng),并調(diào)用驅(qū)動(dòng)的StrToDevAddr 當(dāng)向?qū)ы?yè)轉(zhuǎn)向下一頁(yè),也就是點(diǎn)擊下一步時(shí),組態(tài)王會(huì)調(diào)用StrDevToAddr,并將用戶輸入傳遞給驅(qū)動(dòng)。驅(qū)動(dòng)的功能是進(jìn)行地址轉(zhuǎn)換,具體解釋參見(jiàn)StrDevToAddr。  新建變量用戶在變量字典里面點(diǎn)擊新

42、建變量時(shí),會(huì)彈出如下建立變量的對(duì)話框, 若用戶有不是驅(qū)動(dòng)使用域填寫(xiě)有誤或者有相關(guān)的域(包括驅(qū)動(dòng)使用域)沒(méi)有填寫(xiě),組態(tài)王將會(huì)給出相應(yīng)的提示,即組態(tài)王不調(diào)用驅(qū)動(dòng),直接給出錯(cuò)誤提示。當(dāng)用戶點(diǎn)擊連接設(shè)備完成設(shè)備連接或者在設(shè)備組合框中選定設(shè)備時(shí),組態(tài)王會(huì)調(diào)用GetRegisters,組態(tài)王會(huì)將設(shè)備名稱(chēng)傳遞給驅(qū)動(dòng),由驅(qū)動(dòng)返回給組態(tài)王寄存器列表。具體解釋參見(jiàn)GetRegisters。所有用戶必填域填寫(xiě)完畢,切換TAB頁(yè)或者確定變量時(shí),組態(tài)王會(huì)調(diào)用ConvertUserConfigToVar. 由驅(qū)動(dòng)進(jìn)行變量校驗(yàn)。  組態(tài)王會(huì)將驅(qū)動(dòng)域的輸入作為MiniDbItem傳遞給驅(qū)動(dòng),Co

43、nvertUserConfigToVar將結(jié)果返回在組態(tài)王建立的變量PLCVAR中。具體解釋見(jiàn)ConvertUserConfigToVar。  串口設(shè)備測(cè)試 若用戶使用的設(shè)備是串口設(shè)備,可以方便的使用串口設(shè)備測(cè)試工具進(jìn)行測(cè)試.用戶進(jìn)入測(cè)試設(shè)備對(duì)話框,如下圖所示:  當(dāng)用戶進(jìn)入此對(duì)話框時(shí),組態(tài)王立刻調(diào)用GetRegisters獲取設(shè)備可以使用的寄存器列表。當(dāng)用戶點(diǎn)擊添加或者加入變量時(shí),組態(tài)王立刻調(diào)用ConvertUserConfigToVar進(jìn)行變量校驗(yàn)。當(dāng)用戶點(diǎn)擊讀取,組態(tài)王就開(kāi)始變量采集。所有采集步驟與運(yùn)行環(huán)境一致,只是這兒測(cè)試只是測(cè)試一個(gè)設(shè)備,而

44、運(yùn)行環(huán)境采集定義的所有的設(shè)備。 2.2.2. 運(yùn)行環(huán)境 以下步驟為特殊目的時(shí),組態(tài)王對(duì)于每個(gè)設(shè)備都會(huì)調(diào)用一次此函數(shù)。校驗(yàn)設(shè)備地址 調(diào)用StrToDevAddr,對(duì)用戶輸入的地址字符串進(jìn)行轉(zhuǎn)換.若StrToDevAddr返回TRUE,轉(zhuǎn). 否則組態(tài)王提示用戶地址格式不對(duì),同時(shí)中止此設(shè)備的采集,不影響使用同一驅(qū)動(dòng)的其他設(shè)備。  打開(kāi)設(shè)備  調(diào)用OpenComDevice,若是串口設(shè)備,則驅(qū)動(dòng)應(yīng)在此中進(jìn)行串口初始化.若不是串口驅(qū)動(dòng),驅(qū)動(dòng)可以在此中完成一次性的初始化工作。若OpenComDevice返回TRUE,組態(tài)王會(huì)

45、在信息窗口提示打開(kāi)設(shè)備成功,并給出成功的設(shè)備名稱(chēng),同時(shí)轉(zhuǎn)。否則組態(tài)王會(huì)在信息窗口提示打開(kāi)設(shè)備失敗,認(rèn)為設(shè)備存在問(wèn)題,若是串口設(shè)備,此串口下連接的所有設(shè)備都不能通信,若是其他類(lèi)型設(shè)備,則此種設(shè)備全部不能通信。OpenComDevice的參數(shù)由用戶配置。   設(shè)備初始化 調(diào)用InitialDevice,對(duì)設(shè)備進(jìn)行初始化.若InitialDevice返回TRUE,轉(zhuǎn).否則組態(tài)王在信息提示用戶設(shè)備初始化失敗,同時(shí)中止此設(shè)備的采集,不影響使用同一驅(qū)動(dòng)的其他設(shè)備。  變量校驗(yàn)調(diào)用ConvertUserConfi

46、gToVar對(duì)所有變量進(jìn)行變量校驗(yàn)。若一個(gè)設(shè)備使用的所有變量都成功,轉(zhuǎn)。若某一個(gè)設(shè)備中有一個(gè)變量校驗(yàn)失敗,則組態(tài)王會(huì)在信息窗口提示變量校驗(yàn)無(wú)效,同時(shí)組態(tài)王會(huì)中止此設(shè)備的采集。  變量打包調(diào)用AddVarToPacket對(duì)變量進(jìn)行打包處理.對(duì)于屬于同一驅(qū)動(dòng)的所有變量進(jìn)行打包處理,當(dāng)所有變量打包完成,。  設(shè)備通信調(diào)用ProcessPacket2進(jìn)行設(shè)備通信,若返回TRUE,則釋放中建立的PACKET,同時(shí)進(jìn)行下一個(gè)PACKET處理.當(dāng)按照刷新頻率全部處理完畢,轉(zhuǎn)重新打包通信.若返回FALSE,

47、則轉(zhuǎn)。  嘗試恢復(fù)設(shè)備通信調(diào)用TryConnect進(jìn)行設(shè)備嘗試恢復(fù),若返回TRUE,則返回進(jìn)行正常通信處理。若返回失敗組態(tài)王會(huì)再次調(diào)用TryConnect,若仍然返回FALSE,組態(tài)王認(rèn)為設(shè)備失敗,會(huì)中止設(shè)備采集一段時(shí)間,在定義設(shè)備時(shí)設(shè)置。  關(guān)閉設(shè)備調(diào)用CloseComDevice關(guān)閉設(shè)備,若CloseComDevice返回FALSE或者遲遲不能完成關(guān)閉設(shè)備動(dòng)作,將大大影響組態(tài)王的退出速度,甚至可能阻止組態(tài)王退出。 3 程序結(jié)構(gòu)程序包含如下幾個(gè)主要的類(lèi):驅(qū)動(dòng)工程類(lèi) (Cpro): 實(shí)現(xiàn)2個(gè)接口: Iprot

48、ocolImp 和 IprotocolImp2。 設(shè)備類(lèi) (CDev):實(shí)現(xiàn)COM接口, 包括2個(gè)類(lèi),設(shè)備基類(lèi)和設(shè)備子類(lèi)。 通訊類(lèi) (CCom):實(shí)現(xiàn)串口,網(wǎng)卡等的通訊,開(kāi)發(fā)包向?qū)?huì)根據(jù)您的設(shè)置,自動(dòng)地產(chǎn)生串口通訊類(lèi) (CSerialCom) 或者網(wǎng)絡(luò)通訊類(lèi) (CNetCom), 您也可以根據(jù)需要添加USB通訊類(lèi)(CUSBCom)。 調(diào)試信息類(lèi) (CDebug):該類(lèi)實(shí)現(xiàn)各種調(diào)試信息在組態(tài)王信息窗口中的輸出,比如錯(cuò)誤信息,接口信息,數(shù)據(jù)信息等。   幫助函數(shù)(CHelper):提供了一系列您在開(kāi)發(fā)驅(qū)動(dòng)過(guò)程中可能會(huì)用到的功能函數(shù)。 數(shù)據(jù)

49、楨校驗(yàn)類(lèi) (CCheck):提供了在開(kāi)發(fā)中會(huì)遇到的各種校驗(yàn)函數(shù),包括和校驗(yàn)、異或校驗(yàn)、循環(huán)冗余校驗(yàn)等。 類(lèi)的調(diào)用與繼承關(guān)系,如下圖:3.1 驅(qū)動(dòng)工程類(lèi) (CPro)該類(lèi)實(shí)現(xiàn)2個(gè)接口: IprotocolImp 和 IprotocolImp2。關(guān)于接口函數(shù)目的,見(jiàn)“7.1” 節(jié)。 3.2 設(shè)備類(lèi) (CDev)實(shí)現(xiàn)COM接口,包含2個(gè)類(lèi),設(shè)備基類(lèi)(CDevBase)和設(shè)備子類(lèi)(CDev)。類(lèi)CDevBase是所有設(shè)備子類(lèi)的父類(lèi)。屬性:m_szDevKind:設(shè)備類(lèi)型.m_pSerialCom:串口通訊類(lèi)指針m_pCheck:校驗(yàn)類(lèi)指針m_pPro:工程類(lèi)指針操作:GetRegi

50、stersBOOL CDev:GetRegisters( LPVOID *ppReg, int *pRegNum )類(lèi)型Public目的得到由szDeviceName確定的寄存器的名字和個(gè)數(shù)。返回值成功返回TRUE,否則返回FALSE。參數(shù)ppRegout 返回寄存器信息的指針數(shù)組的指針。pRegNumout 返回寄存器的個(gè)數(shù)。GetDevicesBOOL CDev:GetDevices(LPVOID *ppDevice, int *pDeviceNum)類(lèi)型:Public目的:得到設(shè)備的名字和個(gè)數(shù)。返回值:成功返回TRUE,否則返回FALSE。參數(shù):ppDeviceout 返回設(shè)備列表信息的

51、指針。pDeviceNum:out 返回設(shè)備的個(gè)數(shù)。ConvertUserConfigToVarWORD CDev:ConvertUserConfigToVar( LPVOID lpDbItemItem, LPVOID lpVar) 類(lèi)型:Public目的:將用戶的配置字符串轉(zhuǎn)換為組態(tài)王變量結(jié)構(gòu) 返回值:WORD:如果轉(zhuǎn)換成功則返回0,否則返回非零的錯(cuò)誤代碼。參數(shù)lpDbItem:in  指向結(jié)構(gòu)MiniDbItem的指針。lpVar:in,out 指向結(jié)構(gòu)PLCVAR的指針,返回變量就存放在這里。AddVarToPacketBOOL CDev:AddVarToP

52、acket( LPVOID lpVar, int nVarAccessType, LPVOID lpPacket)類(lèi)型Public目的確認(rèn)變量是否能夠與一個(gè)包里的其他變量一起進(jìn)行采集,以進(jìn)行變量的打包, 如果可以加入,返回TRUE并修改包的起止地址;否則返回FALSE。返回值BOOL:FALSE表示不能打包,否則能。參數(shù)lpVar in  變量指針nVarAccessTypein  讀寫(xiě)方式lpPacketint 包指針ProcessPacket2BOOL CDev:ProcessPacket2( LPVOID lpPacket )類(lèi)型Public目的根據(jù)協(xié)議及包狀態(tài)信息進(jìn)

53、行相應(yīng)的處理,例如進(jìn)行讀寫(xiě)處理,如果讀成功則把數(shù)據(jù)寫(xiě)入pPac->varList。(在新接口中調(diào)用)。返回值BOOL:如果成功,返回TRUE,否則,返回FALSE。參數(shù)lpPacketin,out 包指針。TryConnectBOOL CDev:TryConnect ( const TCHAR*  szDeviceName, int iUnitAddr, LPVOID lpDevAddr )類(lèi)型Public 目的與地址為UnitAddr的設(shè)備嘗試進(jìn)行通訊,用于故障偵探及恢復(fù)嘗試。返回值嘗試通訊成功返回TRUE,否則返回FALSE。參數(shù)pDeviceNamein 設(shè)備的

54、唯一名字。nUnitAddrin  需要進(jìn)行故障偵探及恢復(fù)嘗試的設(shè)備的地址。lpDevAddrin  應(yīng)將此參數(shù)轉(zhuǎn)換為結(jié)構(gòu)- PDEVADDR。此結(jié)構(gòu)詳情參閱 DATATYPE.H文件。備注當(dāng) "ProcessPacket" 失敗后, "TryConnect"將被組態(tài)王調(diào)用2次,如果仍然失敗,則該接口將按設(shè)定的嘗試連接間隔被組態(tài)王調(diào)用。StrToDevAddrBOOL CDevBase:StrToDevAddr(const TCHAR* str, LPVOID lpDevAddr)類(lèi)型:Public目的:實(shí)現(xiàn)對(duì)地址輸入的整理,判斷用戶

55、輸入的地址是否合法,并將地址的數(shù)值傳給組態(tài)王,如果必要,也可以將地址以字符串的形式傳給組態(tài)王。返回值:成功返回TRUE,否則返回FALSE。參數(shù)strin 用戶輸入的地址字符串。lpDevAddrin,out 用于保存地址信息的結(jié)構(gòu)。SetProPtrvoid CDevBase:SetProPtr(CProject16Pro* pPro)類(lèi)型Public目的設(shè)置工程類(lèi)的指針。 返回值Null參數(shù)pProin 工程類(lèi)的指針。GetSendTimesint CDevName1:GetSendTimes(PPACKET  pPac)類(lèi)型Public目的獲取與設(shè)備一次交互的次數(shù)。返回值一個(gè)整

56、型數(shù)據(jù)。參數(shù)pPacin,out 包指針GetSendStringBOOL CDev:GetSendString(PPACKET pPac,int& iLen, int& iRecLen, int iTimes) 類(lèi)型Public目的根據(jù)協(xié)議組合成發(fā)送楨。返回值成功返回TRUE,否則返回FALSE。參數(shù)pPacin,out 指向PACKET結(jié)構(gòu)的指針。iLenout 發(fā)送數(shù)據(jù)的長(zhǎng)度。iRecLenout 需要接收的數(shù)據(jù)的長(zhǎng)度。iTimesin 在一次發(fā)送過(guò)程中調(diào)用的次序。TransmissionBOOL CDev:Transmission (int iLen, int

57、 iExpectedLen, int& iRecLen)類(lèi)型Public目的通訊處理函數(shù)。返回值成功返回TRUE,否則返回FALSE。參數(shù)iLenin 數(shù)據(jù)的長(zhǎng)度iExpectedLenin,out 期望接收到數(shù)據(jù)的長(zhǎng)度。iRecLenin,out 實(shí)際接收到數(shù)據(jù)的長(zhǎng)度。GetFirstFrameBOOL CDev:GetFirstFrame (int nbyteRead, int nExpectedLen, BYTE chFrameHead)類(lèi)型Public目的獲取第一個(gè)正確的數(shù)據(jù)楨。返回值成功返回TURE,否則,返回FALSE。參數(shù)nbyteReadin  實(shí)際接收到的數(shù)

58、據(jù)的長(zhǎng)度。iExpectedLenin   期望接收到的數(shù)據(jù)的長(zhǎng)度。chFrameHeadin   第一個(gè)正確數(shù)據(jù)楨的位置。PreProcessDataBOOL CDev:PreProcessData (PPACKET pPac, int nbyteRead ,int nExpectedLen, int iTimes)類(lèi)型Public目的檢查接收的數(shù)據(jù)。返回值成功返回TURE,否則,返回FALSE。參數(shù)pPacin,out 包指針。nbyteReadin 實(shí)際接收到的數(shù)據(jù)長(zhǎng)度。iExpectedLenin 期望接收到的數(shù)據(jù)長(zhǎng)度。SendDataToKingViewBOOL

59、CDev:SendDataToKingView(PPACKET pPac, int iLen)類(lèi)型Public目的向組態(tài)王傳送數(shù)據(jù)。返回值成功返回TRUE,否則,返回FALSE。參數(shù)pPacin,out 包指針。iLenOut 接收到的數(shù)據(jù)長(zhǎng)度。3.3 通訊類(lèi) (CCom)實(shí)現(xiàn)串口,網(wǎng)卡等的通訊,開(kāi)發(fā)包向?qū)?huì)根據(jù)您的設(shè)置,自動(dòng)地產(chǎn)生串口通訊類(lèi) (CSerialCom) 或者網(wǎng)絡(luò)通訊類(lèi) (CNetCom), 您也可以根據(jù)需要添加USB通訊類(lèi)(CUSBCom)。 如下是串口通訊類(lèi)(CSerialCom)結(jié)構(gòu): 3.3.1串口通訊類(lèi) CSerialCom 屬性:DWOR

60、D m_dwTimeOut;通訊超時(shí)變量HANDLE m_hComm;串口句柄bool bUseModem;是否使用MODEM操作:OpenComBOOL OpenCom(const ComDevice& InitData) ;類(lèi)型Public目的打開(kāi)串口。返回值成功返回TRUE,否則返回FALSE。參數(shù)pccin ComDevice 結(jié)構(gòu)指針CloseComBOOL CloseCom();類(lèi)型Public目的關(guān)閉串口返回值成功返回TRUE,否則返回FALSE。參數(shù)NullReOpenComBOOL ReOpenCom();類(lèi)型Public目的重新打開(kāi)串口。返回值成功返回TRUE,否則

61、返回FALSE。參數(shù)NullPhysicalSendBOOL PhysicalSend(BYTE*pbBuf, DWORD dwWriteLen);類(lèi)型Public目的向串口發(fā)送一數(shù)據(jù)楨。返回值成功返回TRUE,否則返回FALSE。參數(shù)pbBufin 發(fā)送數(shù)據(jù)緩沖區(qū)指針dwWriteLenin 發(fā)送數(shù)據(jù)長(zhǎng)度PhysicalReceiveBOOL PhysicalReceive(BYTE*pbBuf,int iStart, int& iBytesRead);類(lèi)型Public目的從串口接收數(shù)據(jù)。返回值成功返回TRUE,否則返回FALSE。 參數(shù)pbBufin 接收緩沖區(qū)指針iBy

62、tesReadin 接收到的數(shù)據(jù)長(zhǎng)度3.4 調(diào)試信息類(lèi) (CDebug)該類(lèi)實(shí)現(xiàn)各種調(diào)試信息在組態(tài)王信息窗口中的輸出,比如錯(cuò)誤信息,接口信息,數(shù)據(jù)信息等。目前提供了如下信息輸出標(biāo)志:/IMP_MSG    / 輸出接口函數(shù)/FUN_MSG    / 輸出功能函數(shù)/DATA_MSG   / 輸出發(fā)送接收數(shù)據(jù)/ERR_MSG    / 輸出錯(cuò)誤信息/USER_MSG   / 輸出用戶定義信息/ALL_MSG    / 輸出所有信息當(dāng)用戶在設(shè)備地址處,

63、輸入如上信息,將會(huì)在組態(tài)王信息窗口中輸出相應(yīng)的信息。例如,輸入 1 /ALL_MSG    在組態(tài)王信息窗口中顯示:信息格式:時(shí)間                   精確時(shí)鐘計(jì)數(shù)     信息 屬性:static bool bShowIMPMsg;    輸出接口信息標(biāo)志static bool bShowE

64、RRMsg;輸出錯(cuò)誤信息標(biāo)志static bool bShowFUNMsg;    輸出功能函數(shù)標(biāo)志static bool bShowDATAMsg;   輸出發(fā)送接收數(shù)據(jù)標(biāo)志static bool bShowUSERMsg;輸出自定義信息標(biāo)志static bool bShowALLMsg;輸出所有信息標(biāo)志Operations:ShowImpMessagevoid CDebug:ShowImpMessage(TCHAR* szMessage)類(lèi)型Public目的輸出接口信息標(biāo)志。返回值Null參數(shù)szMessage  in 

65、  顯示信息ShowErroMessagevoid CDebug:ShowErroMessage(TCHAR* szMessage)類(lèi)型Public目的輸出錯(cuò)誤信息。返回值Null參數(shù)szMessage  in   顯示信息ShowFunMessagevoid CDebug:ShowFunMessage(TCHAR* szMessage)類(lèi)型Public目的輸出功能函數(shù)信息。返回值Null參數(shù)szMessage in   顯示信息ShowDataMessagevoid CDebug:ShowDataMessage(TCHAR* szM

66、essage)類(lèi)型Public目的輸出發(fā)送接收數(shù)據(jù)信息。返回值Null參數(shù)szMessage in   顯示信息ShowUserMessagevoid CDebug:ShowUserMessage(TCHAR* szMessage)類(lèi)型Public目的輸出自定義信息。返回值Null參數(shù)szMessage in   顯示信息3.5 幫助函數(shù)類(lèi) (CHelper)提供了一系列您在開(kāi)發(fā)驅(qū)動(dòng)過(guò)程中可能會(huì)用到的功能函數(shù)。 操作:GetWordWORD CHelper:GetWord(BYTE* buf)類(lèi)型Public目的從緩沖區(qū)中得到整數(shù).返回值轉(zhuǎn)換后

67、的整數(shù).參數(shù)buf in   數(shù)據(jù)緩沖區(qū)的指針GetLonglong CHelper:GetLong(BYTE* buf)類(lèi)型Public 目的從緩沖區(qū)中得到長(zhǎng)整數(shù)。返回值轉(zhuǎn)換后的長(zhǎng)整數(shù) 參數(shù)buf in   數(shù)據(jù)緩沖區(qū)的指針WordToBcdWORD CHelper:WordToBcd(WORD value)類(lèi)型Public目的把整數(shù)轉(zhuǎn)換BCD碼。返回值轉(zhuǎn)換后的BCD碼參數(shù)value in   要轉(zhuǎn)換的整數(shù).LongToBcdlong CHelper:LongToBcd(long value)類(lèi)型Public目的把長(zhǎng)整數(shù)轉(zhuǎn)

68、換BCD碼。返回值轉(zhuǎn)換后的BCD碼參數(shù)value in 要轉(zhuǎn)換的長(zhǎng)整數(shù)BcdToWordWORD CHelper:BcdToWord(WORD value)類(lèi)型Public目的把BCD碼轉(zhuǎn)換整數(shù)。返回值轉(zhuǎn)換后的整數(shù)參數(shù)value in    要轉(zhuǎn)換的BCD碼BcdToLonglong CHelper:BcdToLong(long value)類(lèi)型Public目的把BCD碼轉(zhuǎn)換長(zhǎng)整數(shù)。返回值轉(zhuǎn)換后的長(zhǎng)整數(shù)參數(shù)value in   要轉(zhuǎn)換的BCD碼SwapWordWORD CHelper:SwapWord(WORD value)類(lèi)型Public目的

69、轉(zhuǎn)換整數(shù)的高低位字節(jié)。返回值轉(zhuǎn)換后的長(zhǎng)整數(shù)參數(shù)value in  要轉(zhuǎn)換的BCD碼 SwapLonglong CHelper:SwapLong(WORD *value)類(lèi)型Public目的轉(zhuǎn)換整數(shù)的高低位字節(jié)。返回值轉(zhuǎn)換后的長(zhǎng)整數(shù)參數(shù)value in  要轉(zhuǎn)換的BCD碼ByteBufToFloatfloat CHelper:ByteBufToFloat(BYTE *buf,int mode)類(lèi)型Public目的把4個(gè)字節(jié)的數(shù)據(jù)按照mode 轉(zhuǎn)換為浮點(diǎn)數(shù)FLOAT。返回值轉(zhuǎn)換后的浮點(diǎn)數(shù)參數(shù)value in  數(shù)據(jù)緩沖區(qū)的指針mode in  數(shù)據(jù)轉(zhuǎn)換的模式 0 -32101 -23012 -01233 -1032FloatToByteBufvoid CHelper:FloatToByteBuf(BYTE *buf,float data,int mode)類(lèi)型Public目的把浮點(diǎn)數(shù)FLOAT按照mode 轉(zhuǎn)換為4個(gè)字節(jié)的數(shù)據(jù)。返回值NA 參數(shù)buf  out   數(shù)據(jù)緩沖區(qū)的指針.d

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論