欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.doc

上传人:豆**** 文档编号:17636576 上传时间:2022-05-25 格式:DOC 页数:21 大小:161KB
返回 下载 相关 举报
欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.doc_第1页
第1页 / 共21页
欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.doc_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.doc》由会员分享,可在线阅读,更多相关《欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流欧姆龙PLC全系列HostLink通信协议串口动态链接库DLL.精品文档.一、最新欧姆龙PLC全系列Host Link通信协议串口动态链接库DLL(以下简称DLL),是为满足工业 通信需要,针对工业领域要求上位机对PLC实时采集与控制的组态编程而设计。本DLL是采用 Delphi语言开发的标准串口通讯库,具有以下特点: 1)、实时性、可靠性好,可根据通信数据量自行调整通信时间; 2)、适用于多PLC联网和上位机通信,满足多方面的需要; 3)、函数接口功能全,操作简单; 4)、附加实用转换与读取函数,易于快速开发(VC等非RAD开发环境的开发)

2、; 5)、支持USB、PC扩展卡等扩展串口号; 6)、支持多种操作系统win9x/win2000/winXP; 7)、可在多种编程环境下使用,例如VB、VC、Delphi等开发环境。 二、DLL函数说明 1、打开串口 Function ComOpen (nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall; 参数:nport: 打开串口号,取值为18,代表COM1COM8; BaudRate:波特率,取值为1200、2400、4800、9600、19200、38400 (推荐使用9600或 192

3、00); 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

4、(偶 校验)、停止位1,授权用户=wjun。 2、关闭串口 Function ComClose(nport:longint):longint;stdcall; 参数:nport: 串口号,取值为18,代表COM1COM8; 返回值:长整型,操作成功返回1,否则返回0; 使用举例: ComClose(1) ,关闭打开的COM1口。 3、读取PLC的操作状态这很重要因为Host Link只有在监视或编程状态才可以进行写操 作与强制操作,工控应用中应使用监视状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5、 . . . . . . . . . . . Function ComMS(nport,node:Longint):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; 返回值:长整型,返回值:0:编程、1:运行、2:监视、3:读取错误; 使用举例: ComMS(1,0),由串口1读取0号PLC的操作状态; 4、改变PLC的操作状态 Function ComSC(nport,node,State:longint):Longint;stdcall; 参数: nport: 串口号,取值为18,代

6、表COM1COM8; node: PLC站号或节点号(单元号),取值为031; State:PLC状态参数,取值为0:编程、1:运行、2:监视; 返回值:长整型,操作成功返回1,否则返回0; 5、读取PLC的型号代码 Function ComMM(nport,node:Longint):Pchar;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; 返回值:Pchar(字符串),返回值:Error:表示读取错误 其他见下表: 型号代码 PLC型号 01 C250 02 C500 03 C120 0E C2

7、000 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的通信是否可以有效执行 Function ComTS(nport,node:longint):Longint;stdcall 参数: nport: 串

8、口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; 返回值:长整型,测试成功返回1,否则返回0; 7、PLC存储器数据的读取(IR/SR、LR、HR、AR、DM、T-PV值、T-状态值) Function ComWR(nport,node,address,Count:longint;Order:pchar):Pchar;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册; Count: 读取寄存器个数,

9、T-状态值的读取最大可读一次都120个,其它一次可读30个字的数据; Order:读取各区命令字符见下表: 命令代码 读取区域 RR IR/SR RL LR RH HR RJ AR RD DM RC T-PV值 RG T-状态值 返回值:字符串数据,字符串数据的终止符为; 使用举例: ComWR(1,0,0,4,RR) ,由COM1读取00000003四个寄存器的值,如返回值为 “0001006403E809F0”,则表示0000=0001, 0001=0064,0002=03E8,0003=09F0; 1)、非T区的读取返回值为16进制字符串组,可以将返回值如上四位一组再转换成“0000FF

10、FF” 的整数值; 读字符串序列如: | 0001 | 0064 | 03E8 | 009F | | | IR区 0000 0001 0002 0003 终止符 对T/C区: 2)、如读T-PV值,例ComWR(1,0,0,4,RC) 则返回BCD码组合数据,表示T的PV值(当前值) 读字符串序列如: | 0001 | 01000 | 1000 | 0159 | | | T区 0000 0001 0002 0003 终止符 3)、如读取T/C-状态值,例ComWR(1,0,0,4,RG) 则返回0、1字符串组,表示T/C的完成状态 读字符串序列如: | 1 | 0 | 0 | 1 | | |

11、T区 0000 0001 0002 0003 终止符 8、PLC存储器数据的写入(IR/SR、LR、HR、AR、DM) Function ComWW(nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册; Sendstr:给PLC写入的字符串数据组;IR/SR区一次最多写30个字、LR区、HR区、AR区注意不要超出 地址范围、 DM值区一次最

12、多写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 9、PLC的线圈强制置位(IR、LR、HR、AR、TIM、TIMH、TIML、

13、TMHH、CNT、CNTR) Function ComFBitset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册, Bit: 强制置位字地址的位地址,取值015,TIM、TIMH、TIML、TMHH、CNT、CNTR强制置位时的 取值总是0。 Order:强制置位各区命令字符见下表: 命令代码 强制置位区域 CIO IR/SR LR LR

14、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:

15、longint;Order:pchar):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册; Bit: 强制复位字地址的位地址,取值015;TIM、TIMH、TIML、TMHH、CNT、CNTR强制复位时的 取值总是0。 Order:强制复位各区命令字符见下表: 命令代码 强制复位区域 CIO IR/SR LR LR HR HR AR AR TIM 定时器完成标志 TIMH 高速定时器完成标志 TIML 长定时器完成标志 TMHH

16、特高速定时器完成标志 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: 串

17、口号,取值为18, 代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; 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进制字符串所表示

18、的处理意义参下表: 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 强制置位

19、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: 串口号,取值为18, 代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; 返回值:长整型,操作成功返回1,否则返回0; 使用举例: ComFCancel(1,0),取消PLC中所有

20、被强制置位、复位的单元 注:使用强制命令后PLC程序、写入命令都无法改变被强制的位的状态值,因此在实际工控应用中 建议用写入命令或多线圈强制置位复位命令ComFRSset中的字符串处理码的2:复位、3:置位来操作 置位复位。如果一定要用强制命令,那么在记得使用后用取消强制命令来恢复管理。 由此可以推出下面的置位与复位函数,注意采用置位与复位函数,置位或复位的结果将受PLC程序 输出的影响,推崇置/复位用在输入条件中。 13、PLC的线圈置位(IR、LR、HR、AR、TIM、TIMH、TIML、TMHH、CNT、CNTR) Function ComSet(nport,node,address,B

21、it:longint;Order:pchar):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册, Bit: 置位字地址的位地址,取值015,TIM、TIMH、TIML、TMHH、CNT、CNTR置位时的取值总是0 。 Order:置位各区命令字符见下表: 命令代码 置位区域 CIO IR/SR LR LR HR HR AR AR TIM 定时器完成标志 TIMH 高速定时器完成标志 TIML 长定时器完成标志 TMHH 特高速定时

22、器完成标志 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) Function ComReset(nport,node,address,Bit:longint;Order:pchar):Longint;stdcall; 参数: nport: 串口号,取值为18,代表COM1COM8; node: PLC站

23、号或节点号(单元号),取值为031; address: 寄存器地址,取值请参欧姆龙PLC手册; Bit: 复位字地址的位地址,取值015;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),

24、复位(IR)0.00; ComReset(1,0,0,0,TIM),复位(T)0000。 在本DLL中去除了一些特权操作指令接一些不太容易在现场应用中使用的指令(如果有朋友 认为指令怎么不全而你正好需要的话请注册时与我提出我会将你需要的指令加入。) 三、DLL附加函数说明 1、串口打开状态的读取 Function ComTrue(nport:longint):longint;stdcall; 参数: noprt: 串口号,取值为18,代表COM1COM8; 返回值:长整型,串口打开返回1,否则返回0; 2、整数转换成16进制字符串 (为VC等非RAD开发环境所增设) Function CInt

25、ToHex(Cint,Digits:Longint):Pchar;stdcall; 参数: Cint: 待转换整数,取值为(065535); Digits: 转换的字符串位数,指定位数小于实际位数时按实际输出; 使用举例: CIntToHex(200,2),则返回字符串“C8”; CIntToHex(200,4),则返回字符串“00C8”; CIntToHex(4500,4),则返回字符串“1194”; CIntToHex(4500,3),则返回字符串“1194”,因为“194”不足以表示4500这个数所以按实际输 出字符串“1194”; 为字符串数据的终止符。 3、16进制字符串转换成整数

26、(为VC等非RAD开发环境所增设) Function CHexToInt(CHex:Pchar):Longint;stdcall; 参数: CHex: 待转换字符串,取值为(0000FFFF); 使用举例: CHexToInt(03E8),则返回整数1000; 4、抽取16进制字符串中某个位的值 Function CinBin(CHex:Pchar;Start:longint):longint;stdcall; 参数: CHex: 待转换字符串,取值为(0000FFFF); Start: 抽取的位,取值为(015); 使用举例: CinBin(0F,3),则返回值1; CinBin(0F,4)

27、,则返回值0; CinBin(03E8,6),则返回值1; 读取M8M15组合成的字节值为“FC”时,要读取M10的值时,则调用CinBin(FC,3)返回值1表 示M10的值为1。 5、返回字符串Text左边的Count个字符 (为VC等非RAD开发环境所增设) Function CLeftStr(Text:Pchar;Count:longint):Pchar;stdcall; 参数: Text: 字符串原型; Count: 指定返回左侧字符串个数; 使用举例: CleftStr(123456, 3) = 123; 为字符串数据的终止符。 6、返回字符串Text右边的Count个字符 (为V

28、C等非RAD开发环境所增设) Function CRightStr(Text:Pchar;Count:longint):Pchar;stdcall; 参数: Text: 字符串原型; Count: 指定返回右侧字符串个数 使用举例: CRightStr(123456, 3) = 456; 为字符串数据的终止符。 7、返回字符串Text从Start开始的Count个字符 (为VC等非RAD开发环境所增设) Function CMidStr(Text:Pchar;Start,Count:longint):Pchar;stdcall; 参数: Text: 字符串原型; Start: 指定返回字符串的

29、起始位置; Count: 指定返回字符串个数; 使用举例: CMidStr(123456,2,3) = 234; 为字符串数据的终止符。 8、字符串Substr开始于字符串S的位置 (为VC等非RAD开发环境所增设) Function CinStr(S,Substr:Pchar):Longint;stdcall; 参数: S: 字符串原型; Substr: 查询的字符串; 返回值:长整型; 使用举例: CinStr(1Tfdg23456,2) = 6 DLL中关于传出字符串值的函数都以为字符串函数值终止符。 四、Delphi、VB、VC语言环境的开发使用说明 1、Delphi语言环境开发说明

30、在Delphi环境下将omron.dll、omron.slip(许可文件)复制到应用程序目录下(即将上述文件与编 译后的可执行文件方入同一文件夹内); 在工程文件的主程序窗体(pas)文件中声明: Function ComOpen (nport,BaudRate,DataBits,Parity,StopBits:longint;User:Pchar):longint;stdcall;External omron.dll; Function ComClose(nport:longint):longint;stdcall;Externalomron.dll; Function ComWR(npor

31、t,node,address,Count:longint;Order:pchar):Pchar;stdcall; Externalomron.dll; Function ComWW (nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;Externalomron.dll; Function ComMM(nport,node:Longint):Pchar;stdcall;Externalomron.dll; Function ComMS(nport,node:Longint):Longint;stdcall;Extern

32、alomron.dll; Function ComSC(nport,node,State:longint):Longint;stdcall;Externalomron.dll; Function ComTS(nport,node:longint):Longint;stdcall;Externalomron.dll; Function ComFBitset (nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;Externalomron.dll; Function ComFBitreset (nport,node,address

33、,Bit:longint;Order:pchar):Longint;stdcall;Externalomron.dll; Function ComFRSset (nport,node,address:longint;Sendstr,Order:pchar):Longint;stdcall;Externalomron.dll; Function ComFCancel(nport,node:longint):Longint;stdcall;Externalomron.dll; Function ComSet (nport,node,address,Bit:longint;Order:pchar):

34、Longint;stdcall;Externalomron.dll; Function ComReset (nport,node,address,Bit:longint;Order:pchar):Longint;stdcall;Externalomron.dll; Function ComTrue(nport:longint):longint;stdcall;Externalomron.dll; Function CinBin(CHex:Pchar;Start:longint):longint;stdcall; Externalomron.dll; 其它附加函数Delphi有实用函数,建议用D

35、elphi自带函数,如需使用声明参上例; 声明后可以在程序中使用这些函数,附加函数置中除ComTrue、CinBin外Delphi系统自带有类似功 能函数。通信时必须先使用ComOpen函数打开串口,在串口打开后可以有效操作相关函数,为确保 通信可在程序运行开始时打开串口,程序关闭前关闭串口。应用程序关闭之前请务必将关闭所有 串口,如串口未关闭前关闭系统将抛出异常。确保应用程序在关闭释放前关闭打开的串口。解决 方法,在form的OnDestroy事件中加入如下语句: if ComTrue(1)=1 then ComClose(1); 在Delphi中给中给DLL中的函数传pchar值问题,参考

36、下例: procedure TForm_omron.ButtonDsendClick(Sender: TObject); Var i,k,l:longint; sendText,Order:pchar; sendstr,Orderstr:string; 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

37、: 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个字符串为一个字 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; /写各区值 finally StrDispose(sendText); StrDispose(Order); end; end; end; 建议采用strPCopy():string型转换到Pchar型,straps():Pchar型转换到string型,不推荐使用直 接转换法。 上述可以详细参照DEMO程序。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁