一、最新歐姆龍PLC全系列Host bbbb通信協(xié)議串口動(dòng)態(tài)鏈接庫(kù)DLL(以下簡(jiǎn)稱DLL),是為滿足工業(yè)
通信需要,針對(duì)工業(yè)領(lǐng)域要求上位機(jī)對(duì)PLC實(shí)時(shí)采集與控制的組態(tài)編程而設(shè)計(jì)。本DLL是采用
Delphi語(yǔ)言開(kāi)發(fā)的標(biāo)準(zhǔn)串口通訊庫(kù),具有以下特點(diǎn):
1)、實(shí)時(shí)性、可靠性好,可根據(jù)通信數(shù)據(jù)量自行調(diào)整通信時(shí)間;
2)、適用于多PLC聯(lián)網(wǎng)和上位機(jī)通信,滿足多方面的需要;
3)、函數(shù)接口功能全,操作簡(jiǎn)單;
4)、附加實(shí)用轉(zhuǎn)換與讀取函數(shù),易于快速開(kāi)發(fā)(VC等非RAD開(kāi)發(fā)環(huán)境的開(kāi)發(fā));
5)、支持USB、PC擴(kuò)展卡等擴(kuò)展串口號(hào);
6)、支持多種操作系統(tǒng)win9x/win2000/winXP;
7)、可在多種編程環(huán)境下使用,例如VB、VC、Delphi等開(kāi)發(fā)環(huán)境。二、DLL函數(shù)說(shuō)明
1、打開(kāi)串口
Function ComOpen(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;
參數(shù):nport: 打開(kāi)串口號(hào),取值為1~8,代表COM1~COM8;
BaudRate:波特率,取值為1200、2400、4800、9600、19200、38400 (推薦使用9600或19200);
DataBits:數(shù)據(jù)位,取值為5、6、7、8(推薦使用7或8);
Parity: 校驗(yàn)位,取值為1(E)、2(O)、3(M)、4(S)、5(N),注括號(hào)里是校驗(yàn)位的英文縮寫;
StopBits:停止位,取值為1(1)、2(2)、3(1.5),注括號(hào)里是實(shí)際的停止位位數(shù)
User:DLL授權(quán)用戶名;
返回值:長(zhǎng)整型,操作成功返回1,否則返回0;打開(kāi)串口不成功即返回0時(shí)的原因:1)、串口不存在或被占用; 2)、DLL試用過(guò)期; 3)、DLL授權(quán)注冊(cè)不正確。
使用舉例:
ComOpen(1,9600,7,1,1,'wjun') , 打開(kāi)COM1口,并設(shè)定波特率=9600、數(shù)據(jù)位=7、校驗(yàn)位=E(偶校驗(yàn))、停止位=1,授權(quán)用戶='wjun'。
2、關(guān)閉串口
Function ComClose(nport:longint):longint;stdcall;
參數(shù):nport: 串口號(hào),取值為1~8,代表COM1~COM8;
返回值:長(zhǎng)整型,操作成功返回1,否則返回0;使用舉例:
ComClose(1) ,關(guān)閉打開(kāi)的COM1口。3、讀取PLC的操作狀態(tài)----{這很重要因?yàn)镠ost bbbb只有在監(jiān)視或編程狀態(tài)才可以進(jìn)行寫操
作與強(qiáng)制操作,工控應(yīng)用中應(yīng)使用監(jiān)視狀態(tài)}
. . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . .
Function ComMS(nport,node:Longint):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
返回值:長(zhǎng)整型,返回值:0:編程、1:運(yùn)行、2:監(jiān)視、3:讀取錯(cuò)誤;使用舉例:
ComMS(1,0),由串口1讀取0號(hào)PLC的操作狀態(tài);4、改變PLC的操作狀態(tài)
Function ComSC(nport,node,State:longint):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
State:PLC狀態(tài)參數(shù),取值為0:編程、1:運(yùn)行、2:監(jiān)視;
返回值:長(zhǎng)整型,操作成功返回1,否則返回0;5、讀取PLC的型號(hào)代碼
Function ComMM(nport,node:Longint):Pchar;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
返回值:Pchar(字符串),返回值:"Error":表示讀取錯(cuò)誤其他見(jiàn)下表:
型號(hào)代碼 PLC型號(hào)
"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所有字符串返回值都以"@"為字符串?dāng)?shù)據(jù)終止符,有效字符串為"@"之前的所有字符串組;
6、測(cè)試PC與PLC的通信是否可以有效執(zhí)行
Function ComTS(nport,node:longint):Longint;stdcall
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
返回值:長(zhǎng)整型,測(cè)試成功返回1,否則返回0;7、PLC存儲(chǔ)器數(shù)據(jù)的讀取(IR/SR、LR、HR、AR、DM、T-PV值、T-狀態(tài)值)
Function ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè);
Count: 讀取寄存器個(gè)數(shù),T-狀態(tài)值的讀取最大可讀一次都120個(gè),其它一次可讀30個(gè)字的數(shù)據(jù);Order:讀取各區(qū)命令字符見(jiàn)下表:
命令代碼 讀取區(qū)域
"RR" IR/SR
"RL" LR
"RH" HR
"RJ" AR
"RD" DM
"RC" T-PV值
"RG" T-狀態(tài)值返回值:字符串?dāng)?shù)據(jù),字符串?dāng)?shù)據(jù)的終止符為"@";
使用舉例:
ComWR(1,0,0,4,'RR') ,由COM1讀取0000~0003四個(gè)寄存器的值,如返回值為“0001006403E809F0@”,則表示0000=0001, 0001=0064,0002=03E8,0003=09F0;
1)、非T區(qū)的讀取返回值為16進(jìn)制字符串組,可以將返回值如上四位一組再轉(zhuǎn)換成“0000~FFFF”
的整數(shù)值;
---------- ---- ---
讀字符串序列如: | 0001 | 0064 | 03E8 | 009F | | @ |
---------- ---- ---
IR區(qū) 0000 0001 0002 0003 終止符對(duì)T/C區(qū):
2)、如讀T-PV值,例ComWR(1,0,0,4,'RC') 則返回BCD碼組合數(shù)據(jù),表示T的PV值(當(dāng)前值)
---------- ---- ---
讀字符串序列如: | 0001 | 01000 | 1000 | 0159 | | @ |
---------- ---- ---
T區(qū) 0000 0001 0002 0003 終止符3)、如讀取T/C-狀態(tài)值,例ComWR(1,0,0,4,'RG') 則返回0、1字符串組,表示T/C的完成狀態(tài)
------------- ---
讀字符串序列如: | 1 | 0 | 0 | 1 | | @ |
------------- ---
T區(qū) 0000 0001 0002 0003 終止符
8、PLC存儲(chǔ)器數(shù)據(jù)的寫入(IR/SR、LR、HR、AR、DM)
Function ComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè);
Sendstr:給PLC寫入的字符串?dāng)?shù)據(jù)組;IR/SR區(qū)一次最多寫30個(gè)字、LR區(qū)、HR區(qū)、AR區(qū)注意不要超出地址范圍、
DM值區(qū)一次最多寫29個(gè)字。Order:寫入各區(qū)命令字符見(jiàn)下表:
命令代碼 寫入?yún)^(qū)域
"WR" IR/SR
"WL" LR
"WH" HR
"WJ" AR
"WD" DM返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:ComWW(1,0,0,'0001006403E8009F','WR'),由串口1預(yù)置值0號(hào)PLC的IR區(qū)的0000=1,
0001=100,0002=1000,0003=159。
寫入值為16進(jìn)制字符串組
寫字符串序列如: | 0001 | 0064 | 03E8 | 009F |
---------- ----
IR區(qū) 0000 0001 0002 0003
9、PLC的線圈強(qiáng)制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè),
Bit: 強(qiáng)制置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR強(qiáng)制置位時(shí)的取值總是0。
Order:強(qiáng)制置位各區(qū)命令字符見(jiàn)下表:
命令代碼 強(qiáng)制置位區(qū)域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR
"TIM" 定時(shí)器完成標(biāo)志
"TIMH" 高速定時(shí)器完成標(biāo)志
"TIML" 長(zhǎng)定時(shí)器完成標(biāo)志
"TMHH" 特高速定時(shí)器完成標(biāo)志
"CNT" 計(jì)數(shù)器完成標(biāo)志
"CNTR" 可逆定時(shí)器完成標(biāo)志返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:
ComFBitset(1,0,0,0,'CIO'),強(qiáng)制置位(IR)0.00;
ComFBitset(1,0,0,0,'TIM'),強(qiáng)制置位(T)0000。10、PLC的線圈強(qiáng)制復(fù)位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè);
Bit: 強(qiáng)制復(fù)位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR強(qiáng)制復(fù)位時(shí)的取值總是0。
Order:強(qiáng)制復(fù)位各區(qū)命令字符見(jiàn)下表:
命令代碼 強(qiáng)制復(fù)位區(qū)域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR
"TIM" 定時(shí)器完成標(biāo)志
"TIMH" 高速定時(shí)器完成標(biāo)志
"TIML" 長(zhǎng)定時(shí)器完成標(biāo)志
"TMHH" 特高速定時(shí)器完成標(biāo)志
"CNT" 計(jì)數(shù)器完成標(biāo)志
"CNTR" 可逆定時(shí)器完成標(biāo)志返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:
ComFBitreset(1,0,0,0,'CIO'),強(qiáng)制復(fù)位(IR)0.00;
ComFBitreset(1,0,0,0,'TIM'),強(qiáng)制復(fù)位(T)0000。11、PLC的多線圈強(qiáng)制置位復(fù)位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8, 代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè);
sendstr: 給多線圈寫入的值,該值為16進(jìn)制字符串組成的16個(gè)字符串依下表次排列,TIM、TIMH、TIML、TMHH、CNT、CNTR強(qiáng)制置位復(fù)位時(shí)僅第15位是有效的其它將被忽略。
---------- - ---------- - -------
--
字符串序列: | 0 | 2 | 3 | 5 | 4 | 8| 2 | 5 | 3 | 0 | 2 | 8 | 0 | 2 | 3 | 5|
---------- - ---------- - ---------
bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 016進(jìn)制字符串所表示的處理意義參下表:
0:不改變位狀態(tài)
2:復(fù)位
3:置位
4:強(qiáng)制復(fù)位
5:強(qiáng)制置位
8:取消強(qiáng)制置位/復(fù)位Order:強(qiáng)制置位復(fù)位各區(qū)命令字符見(jiàn)下表:
命令代碼 復(fù)位區(qū)域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:
ComFRSset(1,0,0,'0235482530280235','CIO'),DLL將給(IR)0000按下表動(dòng)作:0.15 0 不改變位狀態(tài)
0.14 2 復(fù)位
0.13 3 置位
0.12 5 強(qiáng)制置位
0.11 4 強(qiáng)制復(fù)位
0.10 8 取消強(qiáng)制置位/復(fù)位
0.09 2 復(fù)位
0.08 5 強(qiáng)制置位
0.07 3 置位
0.06 0 不改變位狀態(tài)
0.05 2 復(fù)位
0.04 8 取消強(qiáng)制置位/復(fù)位
0.03 0 不改變位狀態(tài)
0.02 2 復(fù)位
0.01 3 置位
0.00 5 強(qiáng)制置位12、取消所有被強(qiáng)制置位、復(fù)位、及多位強(qiáng)制置復(fù)位的強(qiáng)制狀態(tài)
Function ComFCancel(nport,node:longint):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8, 代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
返回值:長(zhǎng)整型,操作成功返回1,否則返回0;使用舉例:
ComFCancel(1,0),取消PLC中所有被強(qiáng)制置位、復(fù)位的單元
注:使用強(qiáng)制命令后PLC程序、寫入命令都無(wú)法改變被強(qiáng)制的位的狀態(tài)值,因此在實(shí)際工控應(yīng)用中建議用寫入命令或多線圈強(qiáng)制置位復(fù)位命令ComFRSset中的字符串處理碼的2:復(fù)位、3:置位來(lái)操作
置位復(fù)位。如果一定要用強(qiáng)制命令,那么在記得使用后用取消強(qiáng)制命令來(lái)恢復(fù)管理。
由此可以推出下面的置位與復(fù)位函數(shù),注意采用置位與復(fù)位函數(shù),置位或復(fù)位的結(jié)果將受PLC程序
輸出的影響,推崇置/復(fù)位用在輸入條件中。
13、PLC的線圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè),
Bit: 置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位時(shí)的取值總是0。
Order:置位各區(qū)命令字符見(jiàn)下表:
命令代碼 置位區(qū)域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR
"TIM" 定時(shí)器完成標(biāo)志
"TIMH" 高速定時(shí)器完成標(biāo)志
"TIML" 長(zhǎng)定時(shí)器完成標(biāo)志
"TMHH" 特高速定時(shí)器完成標(biāo)志
"CNT" 計(jì)數(shù)器完成標(biāo)志
"CNTR" 可逆定時(shí)器完成標(biāo)志返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:
ComSet(1,0,0,0,'CIO'),置位(IR)0.00;
ComSet(1,0,0,0,'TIM'),置位(T)0000。14、PLC的線圈復(fù)位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
參數(shù):
nport: 串口號(hào),取值為1~8,代表COM1~COM8;
node: PLC站號(hào)或節(jié)點(diǎn)號(hào)(單元號(hào)),取值為0~31;
address: 寄存器地址,取值請(qǐng)參歐姆龍PLC手冊(cè);
Bit: 復(fù)位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR復(fù)位時(shí)的取值總是0。
Order:復(fù)位各區(qū)命令字符見(jiàn)下表:
命令代碼 復(fù)位區(qū)域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR
"TIM" 定時(shí)器完成標(biāo)志
"TIMH" 高速定時(shí)器完成標(biāo)志
"TIML" 長(zhǎng)定時(shí)器完成標(biāo)志
"TMHH" 特高速定時(shí)器完成標(biāo)志
"CNT" 計(jì)數(shù)器完成標(biāo)志
"CNTR" 可逆定時(shí)器完成標(biāo)志返回值:長(zhǎng)整型,操作成功返回1,否則返回0;
使用舉例:
ComReset(1,0,0,0,'CIO'),復(fù)位(IR)0.00;
ComReset(1,0,0,0,'TIM'),復(fù)位(T)0000。在本DLL中去除了一些特權(quán)操作指令接一些不太容易在現(xiàn)場(chǎng)應(yīng)用中使用的指令(如果有朋友
認(rèn)為指令怎么不全而你正好需要的話請(qǐng)注冊(cè)時(shí)與我提出我會(huì)將你需要的指令加入。)三、DLL附加函數(shù)說(shuō)明
1、串口打開(kāi)狀態(tài)的讀取
Function ComTrue(nport:longint):longint;stdcall;
參數(shù):
noprt: 串口號(hào),取值為1~8,代表COM1~COM8;
返回值:長(zhǎng)整型,串口打開(kāi)返回1,否則返回0;2、整數(shù)轉(zhuǎn)換成16進(jìn)制字符串 (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CIntToHex(Cint,Digits:Longint):Pchar;stdcall;
參數(shù):
Cint: 待轉(zhuǎn)換整數(shù),取值為(0~65535);
Digits: 轉(zhuǎn)換的字符串位數(shù),指定位數(shù)小于實(shí)際位數(shù)時(shí)按實(shí)際輸出;使用舉例:
CIntToHex(200,2),則返回字符串“C8@”;
CIntToHex(200,4),則返回字符串“00C8@”;
CIntToHex(4500,4),則返回字符串“1194@”;
CIntToHex(4500,3),則返回字符串“1194@”,因?yàn)椤?94”不足以表示4500這個(gè)數(shù)所以按實(shí)際輸出字符串“1194@”;
"@"為字符串?dāng)?shù)據(jù)的終止符。
3、16進(jìn)制字符串轉(zhuǎn)換成整數(shù) (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CHexToInt(CHex:Pchar):Longint;stdcall;
參數(shù):
CHex: 待轉(zhuǎn)換字符串,取值為(0000~FFFF);
使用舉例:
CHexToInt(‘03E8’),則返回整數(shù)1000;4、抽取16進(jìn)制字符串中某個(gè)位的值
Function CinBin(CHex:Pchar;Start:longint):longint;stdcall;
參數(shù):
CHex: 待轉(zhuǎn)換字符串,取值為(0000~FFFF);
Start: 抽取的位,取值為(0~15);
使用舉例:
CinBin(‘0F’,3),則返回值1;
CinBin(‘0F’,4),則返回值0;
CinBin(‘03E8’,6),則返回值1;
讀取M8~M15組合成的字節(jié)值為“FC”時(shí),要讀取M10的值時(shí),則調(diào)用CinBin(‘FC’,3)返回值1表示M10的值為1。
5、返回字符串Text左邊的Count個(gè)字符 (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CLeftStr(Text:Pchar;Count:longint):Pchar;stdcall;
參數(shù):
Text: 字符串原型;
Count: 指定返回左側(cè)字符串個(gè)數(shù);使用舉例:
CleftStr('123456', 3) = '123@';"@"為字符串?dāng)?shù)據(jù)的終止符。
6、返回字符串Text右邊的Count個(gè)字符 (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CRightStr(Text:Pchar;Count:longint):Pchar;stdcall;
參數(shù):
Text: 字符串原型;
Count: 指定返回右側(cè)字符串個(gè)數(shù)
使用舉例:
CRightStr('123456', 3) = '456@';"@"為字符串?dāng)?shù)據(jù)的終止符。
7、返回字符串Text從Start開(kāi)始的Count個(gè)字符 (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall;
參數(shù):
Text: 字符串原型;
Start: 指定返回字符串的起始位置;
Count: 指定返回字符串個(gè)數(shù);
使用舉例:
CMidStr('123456',2,3) = '234@';"@"為字符串?dāng)?shù)據(jù)的終止符。
8、字符串Substr開(kāi)始于字符串S的位置 (為VC等非RAD開(kāi)發(fā)環(huán)境所增設(shè))
Function CinStr(S,Substr:Pchar):Longint;stdcall;
參數(shù):
S: 字符串原型;
Substr: 查詢的字符串;
返回值:長(zhǎng)整型;使用舉例:
CinStr('1Tfdg23456','2') = 6DLL中關(guān)于傳出字符串值的函數(shù)都以"@"為字符串函數(shù)值終止符。
四、Delphi、VB、VC語(yǔ)言環(huán)境的開(kāi)發(fā)使用說(shuō)明
1、Delphi語(yǔ)言環(huán)境開(kāi)發(fā)說(shuō)明
在Delphi環(huán)境下將omron.dll、omron.slip(許可文件)復(fù)制到應(yīng)用程序目錄下(即將上述文件與編
譯后的可執(zhí)行文件方入同一文件夾內(nèi));
在工程文件的主程序窗體(pas)文件中聲明:
Function ComOpen
(nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;External
'omron.dll';
Function ComClose(nport:longint):longint;stdcall;External'omron.dll';
Function ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;External'omron.dll';
Function ComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';
Function ComMM(nport,node:Longint):Pchar;stdcall;External'omron.dll';
Function ComMS(nport,node:Longint):Longint;stdcall;External'omron.dll';
Function ComSC(nport,node,State:longint):Longint;stdcall;External'omron.dll';
Function ComTS(nport,node:longint):Longint;stdcall;External'omron.dll';
Function ComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';
Function ComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';
Function ComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;External'omron.dll';
Function ComFCancel(nport,node:longint):Longint;stdcall;External'omron.dll';
Function ComSet(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';
Function ComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;External'omron.dll';
Function ComTrue(nport:longint):longint;stdcall;External'omron.dll';
Function CinBin(CHex:Pchar;Start:longint):longint;stdcall; External'omron.dll';其它附加函數(shù)Delphi有實(shí)用函數(shù),建議用Delphi自帶函數(shù),如需使用聲明參上例;
聲明后可以在程序中使用這些函數(shù),附加函數(shù)置中除ComTrue、CinBin外Delphi系統(tǒng)自帶有類似功
能函數(shù)。通信時(shí)必須先使用ComOpen函數(shù)打開(kāi)串口,在串口打開(kāi)后可以有效操作相關(guān)函數(shù),為確保
通信可在程序運(yùn)行開(kāi)始時(shí)打開(kāi)串口,程序關(guān)閉前關(guān)閉串口。應(yīng)用程序關(guān)閉之前請(qǐng)務(wù)必將關(guān)閉所有
串口,如串口未關(guān)閉前關(guān)閉系統(tǒng)將拋出異常。確保應(yīng)用程序在關(guān)閉釋放前關(guān)閉打開(kāi)的串口。解決
方法,在bbbb的OnDestroy事件中加入如下語(yǔ)句:
if ComTrue(1)=1 then ComClose(1);
在Delphi中給中給DLL中的函數(shù)傳pchar值問(wèn)題,參考下例:
procedure Tbbbb_omron.ButtonDsendClick(Sender: Tbbbbbb);
Var
i,k,l:longint;
sendText,Order:pchar;
sendstr,Orderstr:bbbbbb;
begin
i:=strtoint(Rightstr(Comboxcom.Text,1));
if (SendEdit.Enabled) and (comTrue(i)=1) then
begin
k:=strtoint(DaddressW.Text);
case ComDwrite.ItemIndex of
0: Orderstr:='WR';
1: Orderstr:='WL';
2: Orderstr:='WH';
3: Orderstr:='WJ';
4: Orderstr:='WD';
end;
l:=length(SendEdit.Text) div 4;
l:=l*4;
sendstr:=leftstr(SendEdit.Text,l); //以字為單位多余省略,4個(gè)字符串為一個(gè)字
try
sendText:=strAlloc(200);
sendText:=strPCopy(sendText,sendstr);
Order:=strAlloc(4);
Order:=strPCopy(Order,Orderstr);
if ComWW(i,0,k,SendText,Order)=1 then SendEdit.Enabled:=False; //寫各區(qū)值
finally
StrDispose(sendText);
StrDispose(Order);
end;
end;
end;
建議采用strPCopy():bbbbbb型轉(zhuǎn)換到Pchar型,straps():Pchar型轉(zhuǎn)換到bbbbbb型,不推薦使用直接轉(zhuǎn)換法。
上述可以詳細(xì)參照DEMO程序。
2、VB語(yǔ)言環(huán)境開(kāi)發(fā)說(shuō)明在VB環(huán)境下將omron.dll、omron.slip(許可文件)復(fù)制到應(yīng)用程序目錄下(即將上述文件與編譯
后的可執(zhí)行文件方入同一文件夾內(nèi));
在工程文件中聲明:
Private Declare Function ComOpen Lib "omron.dll" (ByVal nport As Long, ByVal BaudRate
As Long,ByVal DataBits As Long,ByVal Parity As Long,ByVal StopBits As Long,ByVal User
As bbbbbb) As Long
Private Declare Function ComClose Lib "omron.dll" (ByVal nport As Long) As Long










