欧姆龙plc指令详解 w9.00 为什么无法复位

欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL - OMRON PLC论坛 - 中国工控网论坛 - 中国自动化领域权威论坛
商务管理平台
专业频道:
工控商务&|
所在位置: --
中国工控网搜索:
&自动化调查
&企业中心论坛热点
&自动化企业招聘
&自动化求职信息
&登陆:密码:&&&&
OMRON PLC论坛分类&&
发表人:wjun7610
发表时间: 17:49:00
&本栏论题:
欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL& [9530]
&&&&&div style="display:none"&fiogf49gjkf0d&/div&一、最新欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL(以下简称DLL),是为满足工业&&&
通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL是采用&&&
Delphi语言开发的标准串口通讯库,具有以下特点:&&&
1)、实时性、可靠性好,可根据通信数据量自行调整通信时间;&&&
2)、适用于多PLC联网和上位机通信,满足多方面的需要;&&&
3)、函数接口功能全,操作简单;&&&
4)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);&&&
5)、支持USB、PC扩展卡等扩展串口号;&&&
6)、支持多种操作系统win9x/win2000/winXP;&&&
7)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。&&&
二、DLL函数说明&&&
1、打开串口&&&
Function ComOpen&&&
(nport,BaudRate,DataBits,Parity,StopBits:User:Pchar):&&&
参数:nport: 打开串口号,取值为1~8,代表COM1~COM8;&&&
BaudRate:波特率,取值为、、1 (推荐使用9600或&&&
19200);&&&
DataBits:数据位,取值为5、6、7、8(推荐使用7或8);&&&
校验位,取值为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,,1,'wjun') , 打开COM1口,并设定波特率=9600、数据位=7、校验位=E(偶&&&
校验)、停止位=1,授权用户='wjun'。&&&
2、关闭串口&&&
Function ComClose(nport:longint):&&&
参数:nport: 串口号,取值为1~8,代表COM1~COM8;&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
使用举例:&&&
ComClose(1) ,关闭打开的COM1口。&&&
3、读取PLC的操作状态----{这很重要因为Host Link只有在监视或编程状态才可以进行写操&&&
作与强制操作,工控应用中应使用监视状态}&&&
. . . . . . . . . . . . . . . . . . . . . . . . . . . . &&&
. . . . . . . . . . . . . . . . . .&&&
Function ComMS(nport,node:Longint):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
返回值:长整型,返回值:0:编程、1:运行、2:监视、3:读取错误;&&&
使用举例:&&&
ComMS(1,0),由串口1读取0号PLC的操作状态;&&&
4、改变PLC的操作状态&&&
Function ComSC(nport,node,State:longint):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
State:PLC状态参数,取值为0:编程、1:运行、2:监视;&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
5、读取PLC的型号代码&&&
Function ComMM(nport,node:Longint):P&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
返回值:Pchar(字符串),返回值:"Error":表示读取错误&&&
其他见下表:&&&
PLC型号&&&
C2000H/CQM1/CPM2A/CPM2C/CPM1/CPM1A/SRM1(-V2)&&&
C20H/C28H/C40H/C200H/C200HS&&&
CVM1-CPU01-E&&&
CVM1-CPU11-E&&&
CVM1-CPU21-E&&&
所有字符串返回值都以"@"为字符串数据终止符,有效字符串为"@"之前的所有字符串组;&&&
6、测试PC与PLC的通信是否可以有效执行&&&
Function ComTS(nport,node:longint):Lstdcall&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
返回值:长整型,测试成功返回1,否则返回0;&&&
7、PLC存储器数据的读取(IR/SR、LR、HR、AR、DM、T-PV值、T-状态值)&&&
Function ComWR(nport,node,address,Count:Order:pchar):P&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册;&&&
Count: 读取寄存器个数,T-状态值的读取最大可读一次都120个,其它一次可读30个字的数据;&&&
Order:读取各区命令字符见下表:&&&
读取区域&&&
T-状态值 &&&
返回值:字符串数据,字符串数据的终止符为"@";&&&
使用举例:&&&
ComWR(1,0,0,4,'RR') ,由COM1读取四个寄存器的值,如返回值为&&&
“E809F0@”,则表示, 02=03E8,;&&&
1)、非T区的读取返回值为16进制字符串组,可以将返回值如上四位一组再转换成“0000~FFFF”&&&
的整数值;&&&
---------- ----
读字符串序列如:
| 0001 | 0064 | 03E8 | 009F | | @ | &&&
---------- ----
对T/C区:&&&
2)、如读T-PV值,例ComWR(1,0,0,4,'RC') 则返回BCD码组合数据,表示T的PV值(当前值)&&&
---------- ----
读字符串序列如:
| 0001 | 01000 | 1000 | 0159 | | @ | &&&
---------- ----
--- &&&
3)、如读取T/C-状态值,例ComWR(1,0,0,4,'RG') 则返回0、1字符串组,表示T/C的完成状态&&&
------------- ---&&&
读字符串序列如:
| | @ | &&&
------------- --- &&&
8、PLC存储器数据的写入(IR/SR、LR、HR、AR、DM)&&&
Function ComWW(nport,node,address:Sendstr,Order:pchar):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册;&&&
Sendstr:给PLC写入的字符串数据组;IR/SR区一次最多写30个字、LR区、HR区、AR区注意不要超出&&&
地址范围、&&&
DM值区一次最多写29个字。&&&
Order:写入各区命令字符见下表:&&&
写入区域&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
使用举例:ComWW(1,0,0,'E8009F','WR'),由串口1预置值0号PLC的IR区的0000=1,&&&
02==159。&&&
写入值为16进制字符串组&&&
写字符串序列如:
| 0001 | 0064 | 03E8 | 009F | &&&
---------- ----
9、PLC的线圈强制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) &&&
Function ComFBitset(nport,node,address,Bit:Order:pchar):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册,&&&
Bit: 强制置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位时的&&&
取值总是0。&&&
Order:强制置位各区命令字符见下表:&&&
强制置位区域&&&
定时器完成标志&&&
高速定时器完成标志&&&
长定时器完成标志&&&
特高速定时器完成标志&&&
计数器完成标志&&&
可逆定时器完成标志&&&
返回值:长整型,操作成功返回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) &&&
Function ComFBitreset(nport,node,address,Bit:Order:pchar):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册;&&&
Bit: 强制复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR强制复位时的&&&
取值总是0。&&&
Order:强制复位各区命令字符见下表:&&&
强制复位区域&&&
定时器完成标志&&&
高速定时器完成标志&&&
长定时器完成标志&&&
特高速定时器完成标志&&&
计数器完成标志&&&
可逆定时器完成标志&&&
返回值:长整型,操作成功返回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)&&&
Function ComFRSset(nport,node,address:Sendstr,Order:pchar):L&&&
nport: 串口号,取值为1~8, 代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册;&&&
给多线圈写入的值,该值为16进制字符串组成的16个字符串依下表次排列,TIM、TIMH&&&
、TIML、TMHH、CNT、CNTR强制置位复位时仅第15位是有效的其它将被忽略。&&&
---------- - ---------- - -------&&&
字符串序列:
| 0 | 2 | 3 | 5 | 4 | 8| 2 | 5 | 3 | 0 | 2 | 8 | 0 | 2 | 3 | 5 &&&
---------- - ---------- - -------&&&
16进制字符串所表示的处理意义参下表:&&&
0:不改变位状态&&&
4:强制复位&&&
5:强制置位&&&
8:取消强制置位/复位&&&
Order:强制置位复位各区命令字符见下表:&&&
复位区域&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
使用举例:&&&
ComFRSset(1,0,0,'0235','CIO'),DLL将给(IR)0000按下表动作:&&&
不改变位状态
强制复位&&&
取消强制置位/复位&&&
强制置位&&&
不改变位状态&&&
取消强制置位/复位&&&
不改变位状态 &&&
12、取消所有被强制置位、复位、及多位强制置复位的强制状态&&&
Function ComFCancel(nport,node:longint):L
nport: 串口号,取值为1~8, 代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
使用举例:&&&
ComFCancel(1,0),取消PLC中所有被强制置位、复位的单元&&&
注:使用强制命令后PLC程序、写入命令都无法改变被强制的位的状态值,因此在实际工控应用中&&&
建议用写入命令或多线圈强制置位复位命令ComFRSset中的字符串处理码的2:复位、3:置位来操作&&&
置位复位。如果一定要用强制命令,那么在记得使用后用取消强制命令来恢复管理。&&&
由此可以推出下面的置位与复位函数,注意采用置位与复位函数,置位或复位的结果将受PLC程序&&&
输出的影响,推崇置/复位用在输入条件中。&&&
13、PLC的线圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) &&&
Function ComSet(nport,node,address,Bit:Order:pchar):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册,&&&
Bit: 置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位时的取值总是0&&&
Order:置位各区命令字符见下表:&&&
置位区域&&&
定时器完成标志&&&
高速定时器完成标志&&&
长定时器完成标志&&&
特高速定时器完成标志&&&
计数器完成标志&&&
可逆定时器完成标志&&&
返回值:长整型,操作成功返回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) &&&
Function ComReset(nport,node,address,Bit:Order:pchar):L&&&
nport: 串口号,取值为1~8,代表COM1~COM8;&&&
node: PLC站号或节点号(单元号),取值为0~31;&&&
address: 寄存器地址,取值请参欧姆龙PLC手册;&&&
Bit: 复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR复位时的取值总是0&&&
Order:复位各区命令字符见下表:&&&
复位区域&&&
定时器完成标志&&&
高速定时器完成标志&&&
长定时器完成标志&&&
特高速定时器完成标志&&&
计数器完成标志&&&
可逆定时器完成标志&&&
返回值:长整型,操作成功返回1,否则返回0;&&&
使用举例:&&&
ComReset(1,0,0,0,'CIO'),复位(IR)0.00;&&&
ComReset(1,0,0,0,'TIM'),复位(T)0000。&&&
在本DLL中去除了一些特权操作指令接一些不太容易在现场应用中使用的指令(如果有朋友&&&
认为指令怎么不全而你正好需要的话请注册时与我提出我会将你需要的指令加入。)&&&
三、DLL附加函数说明&&&
1、串口打开状态的读取&&&
Function ComTrue(nport:longint):&&&
noprt: 串口号,取值为1~8,代表COM1~COM8;&&&
返回值:长整型,串口打开返回1,否则返回0;&&&
2、整数转换成16进制字符串 (为VC等非RAD开发环境所增设)&&&
Function CIntToHex(Cint,Digits:Longint):P&&&
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开发环境所增设)&&&
Function CHexToInt(CHex:Pchar):L&&&
CHex: 待转换字符串,取值为(0000~FFFF);&&&
使用举例:&&&
CHexToInt(‘03E8’),则返回整数1000;&&&
4、抽取16进制字符串中某个位的值&&&
Function CinBin(CHex:PStart:longint):&&&
CHex: 待转换字符串,取值为(0000~FFFF);&&&
Start: 抽取的位,取值为(0~15);&&&
使用举例:&&&
CinBin(‘0F’,3),则返回值1;&&&
CinBin(‘0F’,4),则返回值0;&&&
CinBin(‘03E8’,6),则返回值1;&&&
读取M8~M15组合成的字节值为“FC”时,要读取M10的值时,则调用CinBin(‘FC’,3)返回值1表&&&
示M10的值为1。&&&
5、返回字符串Text左边的Count个字符
(为VC等非RAD开发环境所增设)&&&
Function CLeftStr(Text:PCount:longint):P&&&
Text: 字符串原型;&&&
Count: 指定返回左侧字符串个数;&&&
使用举例:&&&
CleftStr('123456', 3) = '123@';&&&
"@"为字符串数据的终止符。&&&
6、返回字符串Text右边的Count个字符
(为VC等非RAD开发环境所增设)&&&
Function CRightStr(Text:PCount:longint):P&&&
Text: 字符串原型;&&&
Count: 指定返回右侧字符串个数&&&
使用举例:&&&
CRightStr('123456', 3) = '456@';&&&
"@"为字符串数据的终止符。&&&
7、返回字符串Text从Start开始的Count个字符 (为VC等非RAD开发环境所增设)&&&
Function CMidStr(Text:PStart,Count:longint):P&&&
Text: 字符串原型;&&&
Start: 指定返回字符串的起始位置;&&&
Count: 指定返回字符串个数;&&&
使用举例:&&&
CMidStr(',3) = '234@';&&&
"@"为字符串数据的终止符。&&&
8、字符串Substr开始于字符串S的位置 (为VC等非RAD开发环境所增设)&&&
Function CinStr(S,Substr:Pchar):L&&&
S: 字符串原型;&&&
Substr: 查询的字符串;&&&
返回值:长整型;&&&
使用举例:&&&
CinStr('1Tfdg23456','2') = 6&&&
DLL中关于传出字符串值的函数都以"@"为字符串函数值终止符。&&&
四、Delphi、VB、VC语言环境的开发使用说明&&&
1、Delphi语言环境开发说明&&&
在Delphi环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编&&&
译后的可执行文件方入同一文件夹内);&&&
在工程文件的主程序窗体(pas)文件中声明:&&&
Function ComOpen&&&
(nport,BaudRate,DataBits,Parity,StopBits:User:Pchar):External&&&
'omron.dll';&&&
Function ComClose(nport:longint):External'omron.dll';&&&
Function ComWR(nport,node,address,Count:Order:pchar):P &&&
External'omron.dll';&&&
Function ComWW&&&
(nport,node,address:Sendstr,Order:pchar):LExternal'omron.dll';&&&
Function ComMM(nport,node:Longint):PExternal'omron.dll';&&&
Function ComMS(nport,node:Longint):LExternal'omron.dll';&&&
Function ComSC(nport,node,State:longint):LExternal'omron.dll';&&&
Function ComTS(nport,node:longint):LExternal'omron.dll';&&&
Function ComFBitset&&&
(nport,node,address,Bit:Order:pchar):LExternal'omron.dll';&&&
Function ComFBitreset&&&
(nport,node,address,Bit:Order:pchar):LExternal'omron.dll';&&&
Function ComFRSset&&&
(nport,node,address:Sendstr,Order:pchar):LExternal'omron.dll';&&&
Function ComFCancel(nport,node:longint):LExternal'omron.dll';&&&
Function ComSet&&&
(nport,node,address,Bit:Order:pchar):LExternal'omron.dll';&&&
Function ComReset&&&
(nport,node,address,Bit:Order:pchar):LExternal'omron.dll';&&&
Function ComTrue(nport:longint):External'omron.dll';&&&
Function CinBin(CHex:PStart:longint): External'omron.dll';&&&
其它附加函数Delphi有实用函数,建议用Delphi自带函数,如需使用声明参上例;&&&
声明后可以在程序中使用这些函数,附加函数置中除ComTrue、CinBin外Delphi系统自带有类似功&&&
能函数。通信时必须先使用ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为确保&&&
通信可在程序运行开始时打开串口,程序关闭前关闭串口。应用程序关闭之前请务必将关闭所有&&&
串口,如串口未关闭前关闭系统将抛出异常。确保应用程序在关闭释放前关闭打开的串口。解决&&&
方法,在form的OnDestroy事件中加入如下语句:&&&
if ComTrue(1)=1 then ComClose(1);&&&
在Delphi中给中给DLL中的函数传pchar值问题,参考下例:&&&
procedure TForm_omron.ButtonDsendClick(Sender: TObject);&&&
sendText,Order:&&&
sendstr,Orderstr:&&&
i:=strtoint(Rightstr(Comboxcom.Text,1));&&&
if (SendEdit.Enabled) and (comTrue(i)=1) then&&&
k:=strtoint(DaddressW.Text);&&&
case ComDwrite.ItemIndex of&&&
0: Orderstr:='WR';&&&
1: Orderstr:='WL';&&&
2: Orderstr:='WH';&&&
3: Orderstr:='WJ';&&&
4: Orderstr:='WD';&&&
l:=length(SendEdit.Text) div 4;&&&
l:=l*4;&&&
sendstr:=leftstr(SendEdit.Text,l);
//以字为单位多余省略,4个字符串为一个字&&&
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:=F
//写各区值&&&
finally&&&
StrDispose(sendText);&&&
StrDispose(Order);&&&
建议采用strPCopy():string型转换到Pchar型,straps():Pchar型转换到string型,不推荐使用直&&&
接转换法。&&&
上述可以详细参照DEMO程序。&&&
2、VB语言环境开发说明&&&
在VB环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译&&&
后的可执行文件方入同一文件夹内);&&&
在工程文件中声明:&&&
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 String) As Long&&&
Private Declare Function ComClose Lib "omron.dll" (ByVal nport As Long) As Long&&&
Private Declare Function ComWR Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long,ByVal address As Long, ByVal Count As Long, ByVal Order As String) As String&&&
Private Declare Function ComWW Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long, ByVal address As Long, ByVal Sendstr As String, ByVal Order As String) As Long&&&
Private Declare Function ComMM Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long) As String&&&
Private Declare Function ComMS Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long) As Long&&&
Private Declare Function ComSC Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long, ByVal State As Long) As Long&&&
Private Declare Function ComTS Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long) As Long&&&
Private Declare Function ComFBitset Lib "omron.dll" (ByVal nport As Long, ByVal node &&&
As Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long&&&
Private Declare Function ComFBitreset Lib "omron.dll" (ByVal nport As Long, ByVal &&&
node As Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As &&&
Private Declare Function ComFRSset Lib "omron.dll" (ByVal nport As Long, ByVal node &&&
As Long, ByVal address As Long, ByVal Sendstr As String, ByVal Order As String) As &&&
Private Declare Function ComFCancel Lib "omron.dll" (ByVal nport As Long, ByVal node &&&
As Long) As Long&&&
Private Declare Function ComSet Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long&&&
Private Declare Function ComReset Lib "omron.dll" (ByVal nport As Long, ByVal node As &&&
Long, ByVal address As Long, ByVal Bit as Long, ByVal Order As String) As Long&&&
Private Declare Function ComTrue Lib "omron.dll" (ByVal nport As Long) As Long&&&
Private Declare Function CinBin Lib "omron.dll" (ByVal Chex As String, ByVal Start As &&&
Long) As Long&&&
其它附加函数VB有实用函数,建议用VB自带函数,如需使用声明参上例;&&&
做完上述声明后,便可以在程序中使用相关函数了。本DLL是串口通信库,通信时必须先使用&&&
ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为保证通信可以在程序运行开始时&&&
打开串口,程序关闭前关闭串口。在应用程序关闭之前请务必将关闭所有串口,如您的程序串口&&&
未关闭前被关闭系统将抛出异常。当出现这样的异常请更改您的程序,确保应用程序在关闭释放&&&
前关闭打开的串口。&&&
解决方法,在form的Unload事件中加入如下例:&&&
If ComTrue(1)=1 then&&&
ComClose(1)&&&
End if &&&
为确保Unload事件有效执行程序中应使用“End”语句,而尽量使用“Unload”语句释放所有窗体&&&
,因使用“End”语句系统不会执行正常的窗体释放等事件而直接退出程序,如程序中有form1,&&&
form2两个窗体,则使用下面语句:&&&
VB会在所有窗体关闭后释放所有占用资源。&&&
上述可以详细参照DEMO程序。&&&
3、VC语言环境开发说明&&&
在VC环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编译&&&
后的可执行文件方入同一文件夹内);&&&
在工程主文件cpp中声明一个句柄:&&&
HINSTANCE m_&&&
用来标识导入的动态链接库。&&&
1)、导入动态链接库,如例所示:&&&
m_handle =:: LoadLibrary("omron.dll");&&&
2)、按下例说明声明相关各个函数:&&&
typedef long (CALLBACK* pOpen)(long nport, long BaudRate, long DataBits, long Parity, &&&
long StopBits, char* User);&&&
typedef long (CALLBACK* pClose)(long nport);&&&
typedef char* (CALLBACK* pWR)(long nport,long node, long address, long Count, char* &&&
Order);&&&
typedef long (CALLBACK* pWW)(long nport,long node, long address, char* Sendstr, char* &&&
Order);&&&
typedef char* (CALLBACK* pMM)(long nport,long node);&&&
typedef long (CALLBACK* pMS)(long nport,long node);&&&
typedef long (CALLBACK* pSC)(long nport,long node, long State);&&&
typedef long (CALLBACK* pTS)(long nport,long node);&&&
typedef long (CALLBACK* pFset)(long nport,long node, long address, long Bit, char* &&&
Order);&&&
typedef long (CALLBACK* pFReset)(long nport,long node, long address, long Bit, char* &&&
Order);&&&
typedef long (CALLBACK* pFRSset)(long nport,long node, long address, char* Sendstr, &&&
char* Order);&&&
typedef long (CALLBACK* pFCancel)(long nport,long node);&&&
typedef long (CALLBACK* pset)(long nport,long node, long address, long Bit, char* &&&
Order);&&&
typedef long (CALLBACK* pReset)(long nport,long node, long address, long Bit, char* &&&
Order);&&&
typedef long (CALLBACK* pTrue)(long nport);&&&
typedef long (CALLBACK* pBin)( char* Chex, long Start);&&&
typedef char* (CALLBACK* pIntHex)(long Cint,long Digits);&&&
typedef long (CALLBACK* pHexInt)( char* CHex);&&&
typedef char* (CALLBACK* pLeft)( char* Text, long Count);&&&
typedef char* (CALLBACK* pRight)( char* Text, long Count);&&&
typedef char* (CALLBACK* pMid)( char* Text, long
Start, long Count);&&&
typedef long (CALLBACK* pinstr)( char* S, char* Substr);&&&
3)、声明并建立动态链接库中的函数与新函数名的对应关系,如下:&&&
pOpen CMOpen = (pOpen)GetProcAddress(m_handle,"ComOpen");&&&
pClose CMClose = (pClose)GetProcAddress(m_handle,"ComClose");&&&
pWR CMWR = (pWR)GetProcAddress(m_handle,"ComWR");&&&
pWW CMWW = (pWW)GetProcAddress(m_handle,"ComWW");&&&
pMM CMMM = (pMM)GetProcAddress(m_handle,"ComMM");&&&
pMS CMMS = (pMS)GetProcAddress(m_handle,"ComMS");&&&
pSC CMSC = (pSC)GetProcAddress(m_handle,"ComSC");&&&
pTS CMTS = (pTS)GetProcAddress(m_handle,"ComTS");&&&
pFset CMFset = (pFset)GetProcAddress(m_handle,"ComFBitset");&&&
pFReset CMFReset = (pFReset)GetProcAddress(m_handle,"ComFBitreset");&&&
pFRSset CMFRSset = (pFRSset)GetProcAddress(m_handle,"ComFRSset");&&&
pFCancel CMFCancel = (pFCancel)GetProcAddress(m_handle,"ComFCancel");&&&
pset CMSet = (pset)GetProcAddress(m_handle,"ComSet");&&&
pReset CMReset = (pReset)GetProcAddress(m_handle,"ComReset");&&&
pTrue CMTrue = (pTrue)GetProcAddress(m_handle," ComTrue");&&&
pIntHex CMIntHex = (pIntHex)GetProcAddress(m_handle," CIntToHex");&&&
pHexInt CMHexInt = (pHexInt)GetProcAddress(m_handle," CHexToInt");&&&
pBin CMBin = (pBin)GetProcAddress(m_handle," CinBin");&&&
pLeft CMLeft = (pLeft)GetProcAddress(m_handle," CLeftStr");&&&
pRight CMRight = (pRight)GetProcAddress(m_handle," CRightStr");&&&
pMid CMMid= (pMid)GetProcAddress(m_handle," CMidStr");&&&
pinstr CMinstr=(pinstr)GetProcAddress(m_handle," CinStr");&&&
注:双引号中为动态链接库中的函数名。&&&
4)、接下来就可以自由使用动态链接库中的函数了,如:&&&
CMOpen(参数略);&&&
CMClose(参数略);&&&
CMWR(参数略);&&&
CMWW(参数略);&&&
CMMM(参数略);&&&
CMMS(参数略);&&&
CMSC(参数略);&&&
CMTS(参数略);&&&
CMFset(参数略);&&&
CMFReset(参数略);&&&
CMFRSset(参数略);&&&
CMFCancel(参数略);&&&
CMSet(参数略);&&&
CMReset(参数略);&&&
CMTrue(参数略);&&&
CMIntHex(参数略);&&&
CMHexInt(参数略);&&&
CMBin(参数略);&&&
CMLeft(参数略);&&&
CMRight(参数略);&&&
CMMid(参数略);&&&
CMinstr(参数略);&&&
注:函数中用到了char*型参数,这里介绍下char*与Cstring的相互转换的函数:&&&
1)char*-&CString&&&
str.Format("%s",sz);
//可以用此函数将读取得值转成字符串&&&
2) CString -& char*&&&
char* sz = str.GetBuffer(0);//可将字符串转成char*给函数赋值&&&
5)、当不再需要使用DLL时记得关闭串口及释放动态链接库,如:&&&
关闭串口&&&
if CMTrue(1)==1 then&&&
CMClose(1);&&&
6)、释放DLL&&&
FreeLibrary(m_handle);&&&
注:对于各位使用VC及其他开发环境的朋友,我表示歉意因为我不太使用这类软件所以就不再写&&&
DEMO程序了,VC的参照上述声明我做过测试是可以使用你的,其他开发环境我没有测试不能保证&&&
您可以使用。&&&
DEMO中默认的PLC站号(单元号或称节点号)=0;&&&
wjun7610&&&
Email: .cn&&&
淘宝店:&&&
以下是关于《欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL》论题的回复(共3篇)
回复人:cn18show 
&回复时间: 11:04:00
&&&&送钱了,送钱了,易展成立五周年,50万大派送!官方网址:
回复人:xz00321 
&回复时间: 15:23:00
&&&&学习了
回复人:S柏豪 
&回复时间: 12:06:00
&&&&学习了
如果要回复本栏论题,请首先中国工控网
?如果你已经是中国工控网成员,请直接登录。
?如果你还不是中国工控网成员,请首先注册,注册为免费!
&&&&&&&&&&&
&&&&&&&&&&&
&&自动化资料下载
&&自动化产品
&&&中国工控网()&版权所有&豫ICP备号
管理员信箱:&&服务热线:&&办公电话:9&&传真:8
洛阳博德工控自动化技术有限公司
中国&&&&洛阳

我要回帖

更多关于 欧姆龙plc编程软件 的文章

 

随机推荐