欧姆龙PLC HostLink通讯调试心得

[复制链接]
查看2 | 回复0 | 2020-3-17 17:51:54 | 显示全部楼层 |阅读模式
欧姆龙HostLink通讯心得,个人心得,仅供参考。

PLC HOSTLINK的通讯收发:

帧格式:
一次交换中传输的命令或应答数据称为一帧,一帧最多包含131个数据字符


发送帧格式:
起始符+节点号+识别码+正文+校验码+中止符
=@+地址(1个字节)+FA+000000000(9个0)+FINS指令(2个字节)+正文+FCS校验码(1个字节)+*+CR
1)FA为识别号,可为"FA","RD","WD"...,RD只能用来读,WD只能用来写,前两种属于HostLink,FA既能读也能写,属于HostLink FINS串口,格式不一样
2)FA后5位为等待时间,默认0*10ms
3)后面的数据依次从右到左依次为:ICF\DA2\SA2\SID各占一个自己默认为0

应答帧格式:
起始符+节点号+识别码+异常码+正文+校验码+中止符

常用的异常码:
0  - 正常完成
1  - PLC在运行方式下不能执行
2  - PLC在监控方式下不能执行
4  - 地址超出区域
0B - 编码模式下不能执行命令
13 - FCS校验出错
14 - 格式错误
15 - 入口号数据错误
16 - 命令不支持
18 - 帧长度错误
19 - 不可执行
20 - 不能识别远程IO单元
23 - 用户存储区写保护
A3 - 由于数据传送中FCS错误而中止
A4 - 由于数据传送中格式错误而中止
A5 - 由于数据传输中入口号数据错误而中止
A6 - 由于数据传送中帧长错误而中止

FCS校验计算:
FCS校验是两个ASCII字符,从帧开始到校验码之前的所有数据执行"异或"操作的结果
例:
读取00号机DM000数据去命令
@ 00     RD     0000 0001 56 * CR
  节点号 识别码 正文      校验码
FCS计算方式:
ASCII码          高4位       低4位
@         40     0100        0000
                        XOR
0         30     0011        0000
                        XOR
1         31     0011        0001
                        XOR
R         52     0101        0010
                        XOR
D         44     0100        0100
.         .      .           .
.         .      .           .
.         .      .           .
1         31     0011        0001
----------------------------------
计算结果         0101        0111
ASCII字符        5           6


存储区代码:
IO区      :B0
IO区字节位:30
W区       :B1
W区字节位 :31
HR区      :B2
HR区      :32
DM区      :82
DM区字节位:02


(1)存储区写命令(FINS指令):0102
格式:
  FINS指令(2个字节)+正文+FCS校验码(1个字节)+*+CR
= 0102 + 存储区代码(1字节) + 开始地址(3字节) + 字节个数(2字节) + 数据值(根据个数来,是个数的2倍) + FCS校验码(1字节) + * +CR
例:
PLC地址为0,W210寄存器写入0x0388
PLC发送:
@ 00 FA000000000 B1 00D200 0001 0388 73 * CR
PLC接收:
@ 00 FA0040000000 0102 0000 40 * CR
0102后面跟着的0000代表写入成功


(2)存储区读命令(FINS指令):0101
格式:
  FINS指令(2个字节)+正文+FCS校验码(1个字节)+*+CR
= 0101 + 存储区代码(1字节) + 开始地址(3字节) + 字节个数(2字节) + FCS校验码(1字节) + * +CR
例:
PLC地址为0,读W210寄存器的值,向PLC发送
PLC发送:
@ 00 FA000000000 0101 B1 00D200 0001 73 * CR
PLC接收:
@ 00 FA0040000000 0101 0000 0388 40 * CR
0101后面跟的0000代表读取成功,
W210=0x0388


(3)强制置位(SET/写1)和复位(RESET/写0)命令(FINS指令):2301
  FINS指令(2个字节)+正文+FCS校验码(1个字节)+*+CR
= 2301 + 字节数量(2字节) + 置位/复位命令字(2字节) + 存储区代码(1字节) + 字节地址(3字节) + * +CR
置位/复位命令字:
0000 - 强制复位
0001 - 强制置位
8000 -
8001 -
FFFF - 接触强制

例1:
PLC地址为0,强制W212.01=On
PLLC发送:
@ 00 FA000000000 2301 0001 0001 31 00D401 04  * CR
PLC回应:
@ 00 FA0040000000 2301 0000 43 * CR
2301后面跟的0000代表读取成功

例2:
强制W212.01=OFF
PLC发送:
@ 00 FA000000000 2301 0001 0000 31 00D401 05 * CR
PLC回应:
@ 00 FA0040000000 2301 0000 43 * CR

例3:
接触强制:
PLC发送:
@ 00 FA000000000 2301 0001 FFFF 31 00D401 05 *CR
PLC回应:
@ 00 FA0040000000 2301 0000 43 * CR




C-Code收发:
(和上面的基本上一样)

命令格式(上位机→PLC)
起始符  节点号  命令符   操作内容   校验符  结束符
起始符:@
节点号:PLC单元号0-31
命令符:发送命令的目的
操作内容:命令符操作的参数
校验符:FCS校验(异或运算),与上面相同
结束符:*CR

响应格式(PLC→上位机)
起始符  节点号  命令符  状态符  操作内容   校验符  结束符
起始符:@
节点号:PLC单元号0-31
命令符:发送命令的目的
状态符:显示响应的结果(正确或异常)
操作内容:返回的响应数据
校验符:FCS校验(异或运算),与上面相同
结束符:*CR

实例:
1)读取PLC内存
读取PLC内从0通道中数据值
命令帧(上位机→PLC)
@       00      RD      0000             0001      57      2A0D(*CR)
起始符  节点号  命令符  起始地址         数据长度  校验码  结束符
(1字节) (1字节) (2字节) (2字节,10进制)   (2字节)   (1字节) (2字节)

响应帧(PLC→上位机)
@       00      RD      00      0001               57      2A0D(*CR)
起始符  节点号  命令符  状态符  数据               校验码  结束符
(1字节) (1字节) (2字节) (1字节) (2字节*数据长度)   (1字节) (2字节)

2)写值给PLC内存
写数据至PLC内存D1通道中
命令帧(上位机→PLC)
@       00      WD      0001             ABCD                    56      2A0D(*CR)
起始符  节点号  命令符  起始地址         写的数据                校验码  结束符
(1字节) (1字节) (2字节) (2字节,10进制)   (写入个数=写的数据/4)   (1字节) (2字节)

响应帧(PLC→上位机)
@       00      WD      00       53      2A0D(*CR)
起始符  节点号  命令符  状态符   校验码  结束符
(1字节) (1字节) (2字节) (1字节)  (1字节) (2字节)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则