歐姆龍PLC全系列Host Link通信協(xié)議串口動態(tài)鏈接庫DLL_第1頁
歐姆龍PLC全系列Host Link通信協(xié)議串口動態(tài)鏈接庫DLL_第2頁
歐姆龍PLC全系列Host Link通信協(xié)議串口動態(tài)鏈接庫DLL_第3頁
歐姆龍PLC全系列Host Link通信協(xié)議串口動態(tài)鏈接庫DLL_第4頁
歐姆龍PLC全系列Host Link通信協(xié)議串口動態(tài)鏈接庫DLL_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、最新歐姆龍PLC全系列HostLink通信協(xié)議串口動態(tài)鏈接庫DLL(以下簡稱DLL),是為滿足工業(yè)通信需要,針對工業(yè)領域要求上位機對PLC實時采集與控制的組態(tài)編程而設計。本DLL是采用Delphi語言開發(fā)的標準串口通訊庫,具有以下特點:、實時性、可靠性好,可根據通信數據量自行調整通信時間;、適用于多PLC聯(lián)網和上位機通信,滿足多方面的需要;、函數接口功能全,操作簡單;、附加實用轉換與讀取函數,易于快速開發(fā)(VC等非RAD開發(fā)環(huán)境的開發(fā));、支持USB、PC擴展卡等擴展串口號;、支持多種操作系統(tǒng)win9x/win2000/winXP;、可在多種編程環(huán)境下使用,例如VB、VC、Delphi等開發(fā)環(huán)境。二、DLL函數說明1、打開串口FunctionComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;參數:nport:打開串口號,取值為1?8,代表COM1?COM8;BaudRate:波特率,取值為1200、2400、4800、9600、19200、38400(推薦使用9600或19200);DataBits:數據位,取值為5、6、7、8(推薦使用7或8);Parity:校驗位,取值為1(E)、2(O)、3(M)、4(S)、5(N),注括號里是校驗位的英文縮寫;StopBits:停止位,取值為1(1)、2(2)、3(1.5),注括號里是實際的停止位位數User:DLL授權用戶名;返回值:長整型,操作成功返回1,否則返回0;打開串口不成功即返回0時的原因:1)、串口不存在或被占用;2)、DLL試用過期;3)、DLL授權注冊不正確。使用舉例:ComOpen(1,9600,7,1,1,'wjun'),打開COM1口,并設定波特率=9600、數據位=7、校驗位=E(偶校驗)、停止位=1,授權用戶='wjun'。2、關閉串口FunctionComClose(nport:longint):longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComClose(l),關閉打開的COM1口。3、讀取PLC的操作狀態(tài){這很重要因為HostLink只有在監(jiān)視或編程狀態(tài)才可以進行寫操作與強制操作,工控應用中應使用監(jiān)視狀態(tài)}FunctionComMS(nport,node:Longint):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;返回值:長整型,返回值:0:編程、1:運行、2:監(jiān)視、3:讀取錯誤;使用舉例:ComMS(1,0),由串口1讀取0號PLC的操作狀態(tài);4、改變PLC的操作狀態(tài)FunctionComSC(nport,node,State:longint):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;State:PLC狀態(tài)參數,取值為0:編程、1:運行、2:監(jiān)視;返回值:長整型,操作成功返回1,否則返回0;5、讀取PLC的型號代碼FunctionComMM(nport,node:Longint):Pchar;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;返回值:Pchar(字符串),返回值:"Error":表示讀取錯誤其他見下表:型號代碼PLC型號"01"C250"02"C500"03"C120"0E"C2000"10"C1000H"11"C2000H/CQM1/CPM2A/CPM2C/CPM1/CPM1A/SRM1(-V2)"12"C20H/C28H/C40H/C200H/C200HS"20"CV500"21"CV1000"22"CV2000"30"CP1H"40"CVM1-CPU01-E"41"CVM1-CPU11-E"42"CVM1-CPU21-E所有字符串返回值都以"@"為字符串數據終止符,有效字符串為"@"之前的所有字符串組;6、測試PC與PLC的通信是否可以有效執(zhí)行FunctionComTS(nport,node:longint):Longint;stdcall參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;返回值:長整型,測試成功返回1,否則返回0;7、PLC存儲器數據的讀取(IR/SR、LR、HR、AR、DM、T-PV值、T-狀態(tài)值)FunctionComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊;Count:讀取寄存器個數,T-狀態(tài)值的讀取最大可讀一次都120個,其它一次可讀30個字的數據;Order:讀取各區(qū)命令字符見下表:命令代碼讀取區(qū)域"RR"IR/SR"RL"LR"RH"HR"RJ"AR"RD"DM"RC"T-PV值"RG"T狀態(tài)值返回值:字符串數據,字符串數據的終止符為”@”;使用舉例:ComWR(1,0,0,4,'RR'),由COM1讀取0000?0003四個寄存器的值,如返回值為“0001006403E809F0@”,則表示0000=0001,0001=0064,0002=03E8,0003=09F0;1)、非T區(qū)的讀取返回值為16進制字符串組,可以將返回值如上四位一組再轉換成“0000?FFFF”的整數值;讀字符串序列如:I0001I0064I03E8I009FII@IIR區(qū)0000000100020003終止符對T/C區(qū):2)、如讀T-PV值,例ComWR(1,0,0,4,'RC')則返回BCD碼組合數據,表示T的PV值(當前值)讀字符串序列如:I0001I01000I1000I0159II@IT區(qū)0000000100020003終止符3)、如讀取T/C-狀態(tài)值,例ComWR(1,0,0,4,'RG')則返回0、1字符串組,表示T/C的完成狀態(tài)讀字符串序列如:I1I0I0I1II@IT區(qū)0000000100020003終止符8、PLC存儲器數據的寫入(1R/SR、LR、HR、AR、DM)FunctionComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊;Sendstr:給PLC寫入的字符串數據組;IR/SR區(qū)一次最多寫30個字、LR區(qū)、HR區(qū)、AR區(qū)注意不要超出地址范圍、DM值區(qū)一次最多寫29個字。Order:寫入各區(qū)命令字符見下表:命令代碼寫入區(qū)域"WR"IR/SR"WL"LR"WH"HR"WJ"AR"WD"DM返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComWW(1,0,0,'0001006403E8009F','WR'),由串口1預置值0號PLC的IR區(qū)的0000=1,0001=100,0002=1000,0003=159。寫入值為16進制字符串組寫字符串序列如:|0001|0064|03E8|009F|IR區(qū)00000001000200039、PLC的線圈強制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊,Bit:強制置位字地址的位地址,取值0?15,TIM、TIMH、TIML、TMHH、CNT、CNTR強制置位時的取值總是0。Order:強制置位各區(qū)命令字符見下表:命令代碼強制置位區(qū)域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定時器完成標志"TIMH"高速定時器完成標志"TIML"長定時器完成標志"TMHH"特高速定時器完成標志"CNT"計數器完成標志"CNTR"可逆定時器完成標志返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComFBitset(1,0,0,0,'CIO'),強制置位(IR)0.00;ComFBitset(1,0,0,0,'TIM'),強制置位(T)0000。10、PLC的線圈強制復位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊;Bit:強制復位字地址的位地址,取值0?15;TIM、TIMH、TIML、TMHH、CNT、CNTR強制復位時的取值總是0。Order:強制復位各區(qū)命令字符見下表:命令代碼強制復位區(qū)域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定時器完成標志"TIMH"高速定時器完成標志"TIML"長定時器完成標志"TMHH"特高速定時器完成標志"CNT"計數器完成標志"CNTR"可逆定時器完成標志返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComFBitreset(1,0,0,0,'CIO'),強制復位(IR)0.00;ComFBitreset(1,0,0,0,'TIM'),強制復位(T)0000。11、PLC的多線圈強制置位復位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊;sendstr:給多線圈寫入的值,該值為16進制字符串組成的16個字符串依下表次排列,TIM、TIMH、TIML、TMHH、CNT、CNTR強制置位復位時僅第15位是有效的其它將被忽略。字符串序列:|0|2I3I5I4I812I5I3I0I2I8I0I2I3I5Ibit151413121110987654321016進制字符串所表示的處理意義參下表:0:不改變位狀態(tài)2:復位3:置位4:強制復位5:強制置位8:取消強制置位/復位Order:強制置位復位各區(qū)命令字符見下表:命令代碼復位區(qū)域"CIO"IR/SR"LR"LR"HR"HR"AR"AR返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComFRSset(1,0,0,'0235482530280235','CIO'),DLL將給(IR)0000按下表動作:0.150不改變位狀態(tài)0.142復位0.133置位0.125強制置位0.114強制復位0.108取消強制置位/復位0.092復位0.085強制置位0.073置位0.060不改變位狀態(tài)0.052復位0.048取消強制置位/復位0.030不改變位狀態(tài)0.022復位0.013置位0.005強制置位12、取消所有被強制置位、復位、及多位強制置復位的強制狀態(tài)FunctionComFCancel(nport,node:longint):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComFCancel(1,0),取消PLC中所有被強制置位、復位的單元注:使用強制命令后PLC程序、寫入命令都無法改變被強制的位的狀態(tài)值,因此在實際工控應用中建議用寫入命令或多線圈強制置位復位命令ComFRSset中的字符串處理碼的2:復位、3:置位來操作置位復位。如果一定要用強制命令,那么在記得使用后用取消強制命令來恢復管理。由此可以推出下面的置位與復位函數,注意采用置位與復位函數,置位或復位的結果將受PLC程序輸出的影響,推崇置/復位用在輸入條件中。13、PLC的線圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊,Bit:置位字地址的位地址,取值0?15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位時的取值總是0Order:置位各區(qū)命令字符見下表:命令代碼置位區(qū)域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定時器完成標志"TIMH"高速定時器完成標志"TIML"長定時器完成標志"TMHH"特高速定時器完成標志"CNT"計數器完成標志"CNTR"可逆定時器完成標志返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComSet(1,0,0,0,'CIO'),置位(IR)0.00;ComSet(1,0,0,0,'TIM'),置位(T)0000。14、PLC的線圈復位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)FunctionComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;參數:nport:串口號,取值為1?8,代表COM1?COM8;node:PLC站號或節(jié)點號(單元號),取值為0?31;address:寄存器地址,取值請參歐姆龍PLC手冊;Bit:復位字地址的位地址,取值0?15;TIM、TIMH、TIML、TMHH、CNT、CNTR復位時的取值總是0Order:復位各區(qū)命令字符見下表:命令代碼復位區(qū)域"CIO"IR/SR"LR"LR"HR"HR"AR"AR"TIM"定時器完成標志"TIMH"高速定時器完成標志"TIML"長定時器完成標志"TMHH"特高速定時器完成標志"CNT"計數器完成標志"CNTR"可逆定時器完成標志返回值:長整型,操作成功返回1,否則返回0;使用舉例:ComReset(1,0,0,0,'CIO'),復位(IR)0.00;ComReset(1,0,0,0,'TIM'),復位(T)0000。在本DLL中去除了一些特權操作指令接一些不太容易在現(xiàn)場應用中使用的指令(如果有朋友認為指令怎么不全而你正好需要的話請注冊時與我提出我會將你需要的指令加入。)三、DLL附加函數說明1、串口打開狀態(tài)的讀取FunctionComTrue(nport:longint):longint;stdcall;參數:noprt:串口號,取值為1?8,代表COM1?COM8;返回值:長整型,串口打開返回1,否則返回0;2、整數轉換成16進制字符串(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCIntToHex(Cint,Digits:Longint):Pchar;stdcall;參數:Cint:待轉換整數,取值為(0?65535);Digits:轉換的字符串位數,指定位數小于實際位數時按實際輸出;使用舉例:CIntToHex(200,2),則返回字符串“C8@”CIntToHex(200,4),則返回字符串“00C8@”CIntToHex(4500,4),則返回字符串“1194@”CIntToHex(4500,3),則返回字符串“1194@”,因為“194”不足以表示4500這個數所以按實際輸出字符串“1194@”"@”為字符串數據的終止符。3、16進制字符串轉換成整數(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCHexToInt(CHex:Pchar):Longint;stdcall;參數:CHex:待轉換字符串,取值為(0000?FFFF);使用舉例:CHexToInt(?03E8'),則返回整數1000;4、抽取16進制字符串中某個位的值FunctionCinBin(CHex:Pchar;Start:longint):longint;stdcall;參數:CHex:待轉換字符串,取值為(0000?FFFF);Start:抽取的位,取值為(0?15);使用舉例:CinBin(?0F',3),則返回值1;CinBin(?0F',4),則返回值0;CinBin('03E8',6),則返回值1;讀取M8?M15組合成的字節(jié)值為“FC”時,要讀取M10的值時,則調用CinBin(?FC',3)返回值1表示M10的值為1。5、返回字符串Text左邊的Count個字符(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;參數:Text:字符串原型;Count:指定返回左側字符串個數;使用舉例:CleftStr('123456',3)='123@';"@”為字符串數據的終止符。6、返回字符串Text右邊的Count個字符(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCRightStr(Text:Pchar;Count:longint):Pchar;stdcall;參數:Text:字符串原型;Count:指定返回右側字符串個數使用舉例:CRightStr('123456',3)='456@';"@”為字符串數據的終止符。7、返回字符串Text從Start開始的Count個字符(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;參數:Text:字符串原型;Start:指定返回字符串的起始位置;Count:指定返回字符串個數;使用舉例:CMidStr('123456',2,3)='234@';"@”為字符串數據的終止符。8、字符串Substr開始于字符串S的位置(為VC等非RAD開發(fā)環(huán)境所增設)FunctionCinStr(S,Substr:Pchar):Longint;stdcall;參數:S:字符串原型;Substr:查詢的字符串;返回值:長整型;使用舉例:CinStr('1Tfdg23456','2')=6DLL中關于傳出字符串值的函數都以"@”為字符串函數值終止符。四、Delphi、VB、VC語言環(huán)境的開發(fā)使用說明1、Delphi語言環(huán)境開發(fā)說明在Delphi環(huán)境下將omron.dll、omron.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件夾內);在工程文件的主程序窗體(pas)文件中聲明:FunctionComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;External'omron.dll';FunctionComClose(nport:longint):longint;stdcall;External'omron.dll';FunctionComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;External'omron.dll';FunctionComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';FunctionComMM(nport,node:Longint):Pchar;stdcall;External'omron.dll';FunctionComMS(nport,node:Longint):Longint;stdcall;External'omron.dll';FunctionComSC(nport,node,State:longint):Longint;stdcall;External'omron.dll';FunctionComTS(nport,node:longint):Longint;stdcall;External'omron.dll';FunctionComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';FunctionComFCancel(nport,node:longint):Longint;stdcall;External'omron.dll';FunctionComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';FunctionComTrue(nport:longint):longint;stdcall;External'omron.dll';FunctionCinBin(CHex:Pchar;Start:longint):longint;stdcall;External'omron.dll';其它附加函數Delphi有實用函數,建議用Delphi自帶函數,如需使用聲明參上例;聲明后可以在程序中使用這些函數,附加函數置中除ComTrue、CinBin外Delphi系統(tǒng)自帶有類似功能函數。通信時必須先使用ComOpen函數打開串口,在串口打開后可以有效操作相關函數,為確保通信可在程序運行開始時打開串口,程序關閉前關閉串口。應用程序關閉之前請務必將關閉所有串口,如串口未關閉前關閉系統(tǒng)將拋出異常。確保應用程序在關閉釋放前關閉打開的串口。解決方法,在form的OnDestroy事件中加入如下語句:ifComTrue(1)=1thenComClose(1);在Delphi中給中給DLL中的函數傳pchar值問題,參考下例:procedureTForm_omron.ButtonDsendClick(Sender:TObject);Vari,k,l:longint;sendText,Order:pchar;sendstr,Orderstr:string;begini:=strtoint(Rightstr(Comboxcom.Text,1));if(SendEdit.Enabled)and(comTrue(i)=1)thenbegink:=strtoint(DaddressW.Text);caseComDwrite.Itemlndexof0:Orderstr:='WR';1:Orderstr:='WL';2:Orderstr:='WH';3:Orderstr:='WJ';4:Orderstr:='WD';end;l:=length(SendEdit.Text)div4;l:=l*4;sendstr:=leftstr(SendEdit.Text,l);//以字為單位多余省略,4個字符串為一個字trysendText:=strAlloc(200);sendText:=strPCopy(sendText,sendstr);Order:=strAlloc(4);Order:=strPCopy(Order,Orderstr);ifComWW(i,0,k,SendText,Order)=1thenSendEdit.Enabled:=False;/寫各區(qū)值finallyStrDispose(sendText);StrDispose(Order);end;end;end;建議采用strPCopy():string型轉換到Pchar型,straps():Pchar型轉換到string型,不推薦使用直接轉換法。上述可以詳細參照DEMO程序。2、VB語言環(huán)境開發(fā)說明在VB環(huán)境下將omron.dll、omron.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件夾內);在工程文件中聲明:PrivateDeclareFunctionComOpenLib"omron.dll"(ByValnportAsLong,ByValBaudRateAsLong,ByValDataBitsAsLong,ByValParityAsLong,ByValStopBitsAsLong,ByValUserAsString)AsLongPrivateDeclareFunctionComCloseLib"omron.dll"(ByValnportAsLong)AsLongPrivateDeclareFunctionComWRLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValCountAsLong,ByValOrderAsString)AsStringPrivateDeclareFunctionComWWLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValSendstrAsString,ByValOrderAsString)AsLongPrivateDeclareFunctionComMMLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsStringPrivateDeclareFunctionComMSLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComSCLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValStateAsLong)AsLongPrivateDeclareFunctionComTSLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComFBitsetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComFBitresetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComFRSsetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValSendstrAsString,ByValOrderAsString)AsLongPrivateDeclareFunctionComFCancelLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong)AsLongPrivateDeclareFunctionComSetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComResetLib"omron.dll"(ByValnportAsLong,ByValnodeAsLong,ByValaddressAsLong,ByValBitasLong,ByValOrderAsString)AsLongPrivateDeclareFunctionComTrueLib"omron.dll"(ByValnportAsLong)AsLongPrivateDeclareFunctionCinBinLib"omron.dll"(ByValChexAsString,ByValStartAsLong)AsLong其它附加函數VB有實用函數,建議用VB自帶函數,如需使用聲明參上例;做完上述聲明后,便可以在程序中使用相關函數了。本DLL是串口通信庫,通信時必須先使用ComOpen函數打開串口,在串口打開后可以有效操作相關函數,為保證通信可以在程序運行開始時打開串口,程序關閉前關閉串口。在應用程序關閉之前請務必將關閉所有串口,如您的程序串口未關閉前被關閉系統(tǒng)將拋出異常。當出現(xiàn)這樣的異常請更改您的程序,確保應用程序在關閉釋放前關閉打開的串口。解決方法,在form的Unload事件中加入如下例:IfComTrue(1)=1thenComClose(1)Endif為確保Unload事件有效執(zhí)行程序中應使用“End”語句,而盡量使用“Unload”語句釋放所有窗體,因使用“End”語句系統(tǒng)不會執(zhí)行正常的窗體釋放等事件而直接退出程序,如程序中有form1,form2兩個窗體,則使用下面語句:Unloadform1Unloadform2VB會在所有窗體關閉后釋放所有占用資源。上述可以詳細參照DEMO程序。3、VC語言環(huán)境開發(fā)說明在VC環(huán)境下將omron.dll、omron.slip(許可文件)復制到應用程序目錄下(即將上述文件與編譯后的可執(zhí)行文件方入同一文件夾內);在工程主文件cpp中聲明一個句柄:HINSTANCEm_handle;用來標識導入的動態(tài)鏈接庫。、導入動態(tài)鏈接庫,如例所示:m_handle=::LoadLibrary("omron.dll");、按下例說明聲明相關各個函數:typedeflong(CALLBACK*pOpen)(longnport,longBaudRate,longDataBits,longParity,longStopBits,char*User);typedeflong(CALLBACK*pClose)(longnport);typedefchar*(CALLBACK*pWR)(longnport,longnode,longaddress,longCount,char*Order);typedeflong(CALLBACK*pWW)(longnport,longnode,longaddress,char*Sendstr,char*Order);typedefchar*(CALLBACK*pMM)(longnport,longnode);typedeflong(CALLBACK*pMS)(longnport,longnode);typedeflong(CALLBACK*pSC)(longnport,longnode,longState);typedeflong(CALLBACK*pTS)(longnport,longnode);typedeflong(CALLBACK*pFset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pFReset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pFRSset)(longnport,longnode,longaddress,char*Sendstr,char*Order);typedeflong(CALLBACK*pFCancel)(longnport,longnode);typedeflong(CALLBACK*pset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pReset)(longnport,longnode,longaddress,longBit,char*Order);typedeflong(CALLBACK*pTrue)(longnport);typedeflong(CALLBACK*pBin)(char*Chex,longStart);typedefchar*(CALLBACK*pIntHex)(longCint,longDigits);typedeflong(CALLBACK*pHexInt)(char*CHex);typedefchar*(CALLBACK*pLeft)(char*Text,longCount);typedefchar*(CALLBACK*pRight)(char*Text,longCount);typedefchar*(CALLBACK*pMid)(char*Text,longStart,longCount);typedeflong(CALLBACK*pinstr)(char*S,char*Substr);、聲明并建立動態(tài)鏈接庫中的函數與新函數名的對應關系,如下:pOpenCMOpen=(pOpen)GetProcAddress(m_handle,"ComOpen");pCloseCMClose=(pClose)GetProcAddress(m_handle,"ComClose");pWRCMWR=(pWR)GetProcAddress(m_handle,"ComWR");pWWCMWW=(pWW)GetProcAddress(m_handle,"ComWW");pMMCMMM=(pMM)GetProcAddress(m_handle,"ComMM");pMSCMMS=

溫馨提示

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

評論

0/150

提交評論