发表于:2008/6/29 11:19:00
#0楼
DEMO中默认的PLC站号(单元号或称节点号)=0;
一、最新欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL(以下简称DLL),是为满足工业通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL是采用Delphi语言开发的标准串口通讯库,具有以下特点:
1)、实时性、可靠性好,可根据通信数据量自行调整通信时间;
2)、适用于多PLC联网和上位机通信,满足多方面的需要;
3)、函数接口功能全,操作简单;
4)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发);
5)、支持USB、PC扩展卡等扩展串口号;
6)、支持多种操作系统win9x/win2000/winXP;
7)、可以通过函数设定通讯超时等待时间;
8)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。
二、DLL函数说明
1、打开串口
Function ComOpen(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(Even)、2(Odd)、3(Mark)、4(Space)、5(None),注括号里是校验位的英文缩写;
StopBits:停止位,取值为1(1)、2(2)、3(1.5),注括号里是实际的停止位位数
User:DLL授权用户名;
返回值:长整型,操作成功返回“1”或“2”;1表示注册授权用户,2表示用户未注册;
操作不成功返回为“0”时的原因:1)、串口不存在或被占用; 2)、DLL授权注册不正确。
注:本DLL用户不注册除了下面说明的功能限制外没有其他限制,未注册用户请使用特定用户名:wangjun。
注册用户功能上无任何限制,且将得到永久的软件使用和更新升级服务;
使用举例:
ComOpen(1,9600,7,1,1,'wangjun') , 打开COM1口,并设定波特率=9600、数据位=7、校验位=E(偶校验)、停止位=1,授权用户='wangjun'。
2、关闭串口
Function ComClose(nport:longint):longint;stdcall;
参数:nport: 串口号,取值为1~8,代表COM1~COM8;
返回值:长整型,操作成功返回1,否则返回0;
使用举例:
ComClose(1) ,关闭打开的COM1口。
3、读取PLC的操作状态----{这很重要因为Host Link只有在监视或编程状态才可以进行写操作与强制操作,工控应用中应使用监视状态} . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Function ComMS(nport,node:Longint):Longint;stdcall;
参数:
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):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
State:PLC状态参数,取值为0:编程、1:运行、2:监视;
返回值:长整型,操作成功返回1,否则返回0;
未注册用户可以使用本功能。
5、读取PLC的型号代码
Function ComMM(nport,node:Longint):Pchar;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为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
所有字符串返回值都以"@"为字符串数据终止符,有效字符串为"@"之前的所有字符串组;
上表有些新的型号没有列出但,欧姆龙PLC已经做了兼容处理所以你也可以读出新PLC的型号代码,读出后你可以自行将之加入上表。
该功能只有注册用户可以使用。
6、测试PC与PLC的通信是否可以有效执行
Function ComTS(nport,node:longint):Longint;stdcall
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
返回值:长整型,测试成功返回1,否则返回0;
未注册用户可以使用本功能。
IR/SR区是指的PLC的输入、输出寄存器地址区,其他见各函数说明或PLC地址分配功能表(地址分配参见各型号PLC的操作手册)。
7、PLC存储器数据的读取(IR/SR、LR、HR、AR、DM、T-PV值、T-状态值)
Function ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册;
Count: 读取寄存器个数,T-状态值的读取最大可读一次都120个,其它一次可读30个字的数据;
Order:读取各区命令字符见下表:
命令代码 读取区域
"RR" IR/SR
"RL" LR
"RH" HR
"RJ" AR
"RD" DM
"RC" T/C-PV值
"RG" T/C-状态值
返回值:字符串数据,字符串数据的终止符为"@";
使用举例:
ComWR(1,0,0,4,'RR') ,由COM1读取0000~0003四个寄存器的值,如返回值为“0001006403E809F0@”,则表示0000=0001,
0001=0064,0002=03E8,0003=09F0;
未注册用户只能读取"RR"--IR/SR和"RD"--DM区的最多前5地址区数据。
1)、非T区的读取返回值为16进制字符串组,可以将返回值如上四位一组再转换成“0000~FFFF”的整数值;
---------- ---- ---
读字符串序列如: | 0001 | 0064 | 03E8 | 009F | | @ |
---------- ---- ---
IR区 0000 0001 0002 0003 终止符
对T/C区:
2)、如读T/C-PV值,例ComWR(1,0,0,4,'RC') 则返回BCD码组合数据,表示T/C的PV值(当前值)
---------- ---- ---
读字符串序列如: | 0001 | 01000 | 1000 | 0159 | | @ |
---------- ---- ---
T/C区 0000 0001 0002 0003 终止符
3)、如读取T/C-状态值,例ComWR(1,0,0,4,'RG') 则返回0、1字符串组,表示T/C的完成状态
------------- ---
读字符串序列如: | 1 | 0 | 0 | 1 | | @ |
------------- ---
T/C区 0000 0001 0002 0003 终止符
8、PLC存储器数据的写入(IR/SR、LR、HR、AR、DM)
Function ComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册;
Sendstr:给PLC写入的字符串数据组;IR/SR区一次最多写30个字、LR区、HR区、AR区注意不要超出地址范围、
DM值区一次最多写29个字。
Order:写入各区命令字符见下表:
命令代码 写入区域
"WR" IR/SR
"WL" LR
"WH" HR
"WJ" AR
"WD" DM
返回值:长整型,操作成功返回1,否则返回0;
使用举例:ComWW(1,0,0,'0001006403E8009F','WR'),由串口1预置值0号PLC的IR区的0000=1,0001=100,0002=1000,0003=159。
写入值为16进制字符串组
写字符串序列如: | 0001 | 0064 | 03E8 | 009F |
---------- ----
IR区 0000 0001 0002 0003
未注册用户只能写入"WR"--IR/SR和"WD"--DM区的最多前2地址区数据。
9、PLC的线圈强制置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册,
Bit: 强制置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位时的取值总是0。
Order:强制置位各区命令字符见下表:
命令代码 强制置位区域
"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)
Function ComFBitreset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册;
Bit: 强制复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR强制复位时的取值总是0。
Order:强制复位各区命令字符见下表:
命令代码 强制复位区域
"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)
Function ComFRSset(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8, 代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册;
sendstr: 给多线圈写入的值,该值为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 |
---------- - ---------- - ---------
bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
16进制字符串所表示的处理意义参下表:
0:不改变位状态
2:复位
3:置位
4:强制复位
5:强制置位
8:取消强制置位/复位
Order:强制置位复位各区命令字符见下表:
命令代码 复位区域
"CIO" IR/SR
"LR" LR
"HR" HR
"AR" AR
返回值:长整型,操作成功返回1,否则返回0;
使用举例:
ComFRSset(1,0,0,'0235482530280235','CIO'),DLL将给(IR)0000按下表动作:
0.15 0 不改变位状态
0.14 2 复位
0.13 3 置位
0.12 5 强制置位
0.11 4 强制复位
0.10 8 取消强制置位/复位
0.09 2 复位
0.08 5 强制置位
0.07 3 置位
0.06 0 不改变位状态
0.05 2 复位
0.04 8 取消强制置位/复位
0.03 0 不改变位状态
0.02 2 复位
0.01 3 置位
0.00 5 强制置位
该功能只有注册用户可以使用。
12、取消所有被强制置位、复位、及多位强制置复位的强制状态
Function ComFCancel(nport,node:longint):Longint;stdcall;
参数:
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:longint;Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册,
Bit: 置位字地址的位地址,取值0~15,TIM、TIMH、TIML、TMHH、CNT、CNTR置位时的取值总是0。
Order:置位各区命令字符见下表:
命令代码 置位区域
"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。
未注册用户可以可以使用"CIO"命令码对IR/SR区的首个地址区操作即0000.0~0000.15进行置位操作。
14、PLC的线圈复位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR)
Function ComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;
参数:
nport: 串口号,取值为1~8,代表COM1~COM8;
node: PLC站号或节点号(单元号),取值为0~31;
address: 寄存器地址,取值请参欧姆龙PLC手册;
Bit: 复位字地址的位地址,取值0~15;TIM、TIMH、TIML、TMHH、CNT、CNTR复位时的取值总是0。
Order:复位各区命令字符见下表:
命令代码 复位区域
"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。
未注册用户可以可以使用"CIO"命令码对IR/SR区的首个地址区操作即0000.0~0000.15进行复位操作。
在本DLL中去除了一些特权操作指令接一些不太容易在现场应用中使用的指令(如果有朋友
认为指令怎么不全而你正好需要的话请注册时与我提出我会将你需要的指令加入。)
三、DLL附加函数说明
1、串口打开状态的读取
Function ComTrue(nport:longint):longint;stdcall;
参数:
noprt: 串口号,取值为1~8,代表COM1~COM8;
返回值:长整型,串口打开返回1,否则返回0;
2、PC喇叭的报警过程函数;
Function MyBeep(SoundHz:longint):longint;stdcall;
参数:SoundHz:长整型;
返回值:长整型,操作成功返回“1”,否则返回“0”。
使用举例:
MyBeep(2000); 按2000的频率发出报警声。
3、Function SetDelayNum(Delay:longint):longint;stdcall; //设定延时等待时间 8~80
参数:Delay整数推荐值8~80.
返回值:设置正确时返回1,错误时返回0。
超时参数的设定函数,该函数在VB中的声明方法如下。
Private Declare Function SetDelayNum Lib "omron.dll" (ByVal Delay As Long) As Long
VB中的调用:
1、Call SetDelayNum(32)
2、Dim SetI as long //这种方法设置正确时返回1,错误时返回0。
SetI = SetDelayNum(32)
调用参数的值与时间的参考(不同配置的计算机略有不同)
SetDelayNum(64) 1000ms
SetDelayNum(32) 500ms
SetDelayNum(16) 250ms
SetDelayNum(8) 125ms
请根据你的程序串口通讯数据量来设定这个值,DLL中的初始值为32,数据量大适当增加这个值。
其他附加函数省略
DLL中关于传出字符串值的函数都以"@"为字符串函数值终止符。
四、Delphi、VB、VC语言环境的开发使用说明 (略)
注:对于各位使用VC及其他开发环境的朋友,我表示歉意因为我不太使用这类软件所以就不再写DEMO程序了,VC的参照上述声明我做过测试是可以使用你的,其他开发环境我没有测试不能保证您可以使用。
作者: wjun7610
QQ: 157610979
Email: wjun7610@yahoo.com.cn
淘宝店:http://shop34821629.taobao.com