一、 说明

欧姆龙包括网口和串口两种通讯方式

协议为:Fins-tcp


《omron驱动》该驱动通讯方式为串口或网口

实现了各种数据块的读,但未实现写。

驱动名称:bin/drivers/omrondriver/ omrondriver.exe

二、 驱动配置

在驱动中,增加一个名称和模块名称均为omrondriver的驱动。

三、 设备配置

在驱动omrondriver下增加一个设备,如ormon1

CJ2M等具有网络,进行网口配置

CP1E等具有串口,进行串口配置

四、 变量配置

增加变量所需要配置的属性

变量名称:按照项目规范设计的字符串

设备:选择刚刚配置的设备

周期:根据需要而定,缺省为1秒

可控制:使能

用户点表的地址,

五、 模拟

安装官方CX-Simulator,CX-Programer,可以模拟数据。

CX-Programer先建立一个工程把工程

CX-Simulator也建立一个工程,然后点击Connect

CX-Programer:PLC/在线工作,然后自动连接到CX-Simulator。然后通过左侧树的内存查看寄存器和修改值。然后在线/传送到PLC命令传送到PLC。

注意:测试是,不能让CX-Simulator Run起来,否则会将PLC中数据都置0,导致无法修改数据进行测试。PLC/操作模式应该处于调试状态,不要点击“运行”,否则会强制清空数据。


五、 FINS-TCP协议分析

参考:http://blog.sina.com.cn/s/blog_539cee190102wr4t.html

一,握手命令

1、客户端向服务器发送命令00000000。这个命令长20字节,分成5组4字节。分别是:
头(FINS) + 长度(Hex0C) + 命令(00000000)+ 错误码(00000000) + 客户机节点地址。
46494E53是FINS的ASCII码值,即命令头。
在发送区输入:
46 49 4E 53 00 00 00 0C 00 00 00 00 00 00 00 00 00 00 00 05

头(FINS:46 49 4E 53) + 长度(Hex0C,20字节) + 命令(00 00 00 00)+ 错误码(00 00 00 00) + 客户机节点地址(00 00 00 05,电脑IP地址192.168.0.05的最后一段hex)。


2、这个是服务器端(PLC)向客户端(电脑)发送: 

46 49 4E 53 00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 05 00 00 00 20

头(FINS: 46 49 4E 53)+ 长度(24字节-8头,Hex10: 00 00 00 10) + 命令(00 00 00 01) + 错误码 (00 00 00 00)+ 客户机节点地址 (00 00 00 05)+ 服务器地址(00 00 00 20)
上面的命令错误代码为0,客户端ip地址05已被服务器32(hex20)成功记录。
如果发生错误,服务器回应的命令会包含错误码,连接断开,端口立刻关闭。当连接建立之后,不要再次发送这个命令,否则服务器会返回03错误码,即不支持的命令。全部的错误代码如下:
十六进制错误码   含义
00000000           正常
00000001           头不是‘FINS’ (ASCII code)。
00000002           数据太长。
00000003           不支持的命令。
00000020           所有的连接被占用。
00000021           制定的节点已经连接。
00000022           未被指定的IP地址试图访问一个被保护的节点。
00000023           客户端FINS节点地址超范围。
00000024           相同的FINS节点地址已经被使用。
00000025           所有可用的节点地址都已使用。

二、FINS帧发送命令
如果向服务器发送FINS帧,就要用到这个命令。由于FINS帧长度是12-2012,因此命令长度可变,
头(FINS)+长度+命令(00000002)+错误码+FINS帧。

FINS命令帧内容可参考欧姆龙OMRON PLC之HostLink通讯协议-FINS命令W字/位操作篇,里面有存储区代码和操作代码的内容。
http://blog.sina.com.cn/hulx
例2-1、读DM0开始的2个通道:
发送:
    46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 80 00 02 00 20 00 00 05 00 FF 01 01 82 00 00 00 00 02

头(46 49 4E 53)+负载长度(26字节,00 00 00 1A)+命令(00 00 00 02:读)+错误码(00 00 00 00)+??(80 00 02 00)+目标地址(20 00)+原地址(00 05)+??(00 FF)+读操作(01 01)+DM存储区代码(82)+起始地址(00 00 00)+数量(02)
20000005:20是目标地址,05是源地址;
00FF0101 :0101是读操作;
82000000:82是DM存储区代码,000000是起始地址;
0002:是数量。


返回:
 46 49 4E 53 00 00 00 1A 00 00 00 02 00 00 00 00 C0 00 02 00 05 00 00 20 00 FF 01 01 00 00 12 34 56 78
 头(46 49 4E 53)+负载长度(26字节,00 00 00 1A)+命令(00 00 00 02:读)+错误码(00 00 00 00)+??(C0 00 02 00)+目标地址(05 00)+原地址(00 20 )+??(00 FF )+读操作(01 01)+操作结果(00 00 )+D0的Hex值(12 34)+数量(56 78
00001234:0000代表操作成功,1234是读回的第一个字,即D0=Hex1234, 5678:D1=Hex5678

例2-2、W210寄存器写入Hex0388:
发送:
   46494E53 0000001C 00000002 00000000 80000200 20000005 00FF0102 B100D200 00010388
20000005:20是目标地址,05是源地址;
00FF0102:0102是写操作代码;
B100D200:B1是W字代码,00D2是起始地址,Hex00D2=212,;
00010388:是写入数量,0388是写入首个内容;

回应:
   46494E53 00000016 00000002 00000000 C0000200 05000020 00FF0102 0000
0102后面紧跟的0000代表写入成功。
http://blog.sina.com.cn/hulx
例2-3、W210寄存器读取:
发送:
   46494E53 0000001A 00000002 00000000 80000200 20000005 00FF0101 B100D200 0001
20000005:20是目标地址,05是源地址;
00FF0101:0101是读操作代码;
B100D200:B1是W字代码,00D2是起始地址,Hex00D2=212,;
0001:是读取数量。
http://blog.sina.com.cn/hulx
回应:
   46494E53 00000018 00000002 00000000 C0000200 05000020 00FF0101 00000388
0102后面紧跟的0000代表读取成功,W210=Hex0388
http://blog.sina.com.cn/hulx
例2-4、强制W212.01=On:
发送:
   46494E53 0000001C 00000002 00000000 80000200 20000005 00FF2301  00010001 3100D401
20000005:20是目标地址,05是源地址;
00FF2301:2301是强制操作代码;
00010001:前面的0001是数量,后面的0001代表强制置位操作;
3100D401:31是W位代码,00D401是起始地址,Hex00D4.01=212.01。
http://blog.sina.com.cn/hulx
回应:
   46494E53 00000016 00000002 00000000 C0000200 05000020 00FF2301  0000
2301后面紧跟的0000表示操作成功。


例2-5、强制W212.01=Off:
发送:
   46494E53 0000001C 00000002 00000000 80000200 20000005 00FF2301  00010000 3100D401
20000005:20是目标地址,05是源地址;
00FF2301:2301是强制操作代码;
00010000:0001是数量,0000代表强制复位操作;
3100D401:31是W位代码,00D401是起始地址,Hex00D4.01=212.01。
回应:
   46494E53 00000016 00000002 00000000 C0000200 05000020 00FF2301  0000
2301后面紧跟的0000表示操作成功。
http://blog.sina.com.cn/hulx
例2-6、取消W212.01强制:
发送:
   46494E53 0000001C 00000002 00000000 80000200 20000005 00FF2301  0001FFFF 3100D401
20000005:20是目标地址,05是源地址;
00FF2301:2301是强制操作代码;
0001FFFF:0001是数量,FFFF代表取消强制操作;
3100D401:31是W位代码,00D401是起始地址,Hex00D4.01=212.01。
http://blog.sina.com.cn/hulxhttp://blog.sina.com.cn/hulx
回应:
   46494E53 00000016 00000002 00000000 C0000200 05000020 00FF2301  0000
2301后面紧跟的0000表示操作成功。
注意在CX-Programmer查看窗口中W212.01的值0后面的(强制)字样不见了,表示已经成功地取消了强制。


五、 FINS-UDP协议分析