常用PLC通讯协议
Posted zsvc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用PLC通讯协议相关的知识,希望对你有一定的参考价值。
三菱FX系列PLC通讯测试
发送帧(Hex):
起始(STX) |
02 |
命令(CMD) |
30 |
首地址(ADDRESS) |
30 30 41 30 |
位数(BYTES) |
30 31 |
终止(ETX) |
03 |
校验和(SUM) |
36 35 |
SUM = CMD + ADDRESS + BYTES +ETX
校验和计算:30+30+30+41+30+30+31+03=165 累加和超过两位取低两位65
发→◇02 30 30 30 41 30 30 31 03 36 35 □从Y0开始读取一个BYTE Y7-Y0
收←◆02 33 46 03 37 43
接收帧(Hex):
起始(STX) |
02 |
数值(DATA) |
33 46 |
终止(ETX) |
03 |
校验和(SUM) |
37 43 |
接收帧解析:“33”查ASCII表示十六进制“3”即“0011”此时继电器Y5、Y4开
“46”查ASCII表示十六进制“F”即“1111”此时继电器Y3、Y2、Y1、Y0开,如下表所示:
Y7 |
Y6 |
Y5 |
Y4 |
Y3 |
Y2 |
Y1 |
Y0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
向D123开始的两个存储器中写入1234,ABCD
[17:18:38.339]发→◇02 31 31 30 46 36 30 34 33 34 31 32 43 44 41 42 03 34 39 □
[17:18:38.370]收←◆06
ACK (06H) 接受正确
NAK (15H) 接受错误
[17:18:38.339]发→◇02 31 31 30 46 36 30 34 33 34 31 32 43 44 41 42 03 34 39 □
[17:18:38.370]收←◆06
[17:19:32.687]发→◇02 30 31 30 46 36 30 34 33 34 03 37 34 □
[17:19:32.725]收←◆02 33 34 31 32 43 44 41 42 03 44 37 此时读取的数据即写入的数据1234,ABCD
附表:
命令 |
命令码 |
目标设备 |
读出软设备状态值 |
0 |
X,Y,M,S,T,C,D |
向PLC软设备写入值 |
1 |
X,Y,M,S,T,C,D |
置位 |
7 |
X,Y,M,S,T,C |
复位 |
8 |
X,Y,M,S,T,C |
参考链接:https://blog.csdn.net/caodunchao/article/details/51564484?locationNum=12&fps=1
欧姆龙CP1E、CP1H系列PLC通讯测试
发送帧:
目的:读取输出端当前状态
[16:13:37.509]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 35 30 30 30 30 30 31 30 37 2A 0D □
起始 |
40 |
@ |
PLC地址(默认为00) |
30 30 |
0 0 |
头编码 |
46 41 |
F A |
等待时间 |
30 |
0*10ms |
ICF |
30 30 |
0 0 |
DA2 |
30 30 |
0 0 |
SA2 |
30 30 |
0 0 |
SID |
30 30 |
0 0 |
命令码 |
30 31 30 31 |
0 1 0 1(读) |
功能码 |
42 30 |
B 0 |
存储器编号 |
30 30 36 35 |
0 0 6 5 |
存储器位 |
30 30 |
0 0 |
读取长度 |
30 30 30 31 |
0 0 0 1 |
FCS校验 |
30 7 |
0 7 |
结束 |
2A 0D |
* CR |
HostLink通讯协议的数据,由4部分组成。
1. 头代码
2. FINS命令
3. 异或校验
4. 结束码
以下的数据用于串口调试工具下发给PLC,所以以下由上述的1、2部分组成
头代码:红色 FINS命令:蓝色
@00FA0000000000101B00064000001
红色部分数据分析:
@后的1-2位,为PLC地址,默认PLC地址为0,可设定0--31
@后的FA为头编码,可为”FA” “RD” “WR”
@后的第5位为等待时间,默认为0*10ms
后面的数据从右到左依次是:ICFDA2SA2SID各占一个字节默认为00
读取CIO100一个字
@00FA0000000000101B00064000001
FCS校验计算方法:参与计算的数据(起始(含)-读取长度(含))
示例:0101 EOR 0010 = 0111
高四位异或计算为0100 EOR 0011 EOR 0011…EOR 0011 EOR 0011 = 0000 30
低四位异或计算为0000 EOR 0000 EOR 0000…EOR 0000 EOR 0001 = 0111 37
读取:0101 写入:0102
功能码B0:指定相应寄存器类型 (详见附表1)
006400: 0064为存储器的编号(16进制的0064为10进制的100)
0064后的00为存储器的位(HEX 00)
0001:读取1个字
接收帧解析:
CIO101H 第7、4通1001 0000 读出39 30
[16:13:37.566]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 30 39 30 34 41 2A 0D
起始 |
40 |
@ |
PLC地址(默认为00) |
30 30 |
0 0 |
头编码 |
46 41 |
F A |
|
30 30 |
0 0 |
ICF |
34 30 |
4 0 |
DA2 |
30 30 |
0 0 |
SA2 |
30 30 |
0 0 |
SID |
30 30 |
0 0 |
命令码 |
30 31 30 31 |
0 1 0 1(读) |
FINS response code |
30 30 |
0 0 |
|
30 30 |
0 0 |
|
30 30 |
0 0 |
Data |
39 30 |
9 0 |
FCS校验 |
34 41 |
4 A |
结束 |
2A 0D |
* CR |
附表:
存储区名称 |
数据类型 |
CP系列代码(十六进制) |
CIO |
BIT |
30 |
WR |
31 |
|
HR |
32 |
|
AR |
33 |
|
CIO |
WORD |
B0 |
WR |
B1 |
|
HR |
B2 |
其他注解:
注:232端口接线问题:2、 3、 5(GND)、 6(5V)
读CIO 101CH4位
发40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 35 30 30 30 30 30 31 30 37 2A 0D
字符串格式:@00FA00000000000101B0006500000107*CR(归位键)
36 35 (0x65=101)
CIO101H 第7、4通1001 0000 读出39 30
[16:13:37.509]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 35 30 30 30 30 30 31 30 37 2A 0D □
[16:13:37.566]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 30 39 30 34 41 2A 0D
CIO100H 全断0000 0000 读出30 30
[16:12:10.591]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 34 30 30 30 30 30 31 30 36 2A 0D □
[16:12:10.636]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 30 30 30 34 33 2A 0D
CIO 103 第五位通0010 0000读出32 30
[16:20:32.089]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 37 30 30 30 30 30 31 30 35 2A 0D □
[16:20:32.143]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 30 32 30 34 31 2A 0D
CIO 000 输入1 、2、 7、 9 、10 读出36 38 36
0110 1000 0110
[16:26:06.569]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 30 30 30 30 30 30 30 31 30 34 2A 0D □
[16:26:06.621]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 36 38 36 34 42 2A 0D
CIO 001 输入3读出 30 38
0000 1000
[16:29:32.560]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 30 31 30 30 30 30 30 31 30 35 2A 0D □
[16:29:32.622]收←◆40 30 30 46 41 30 30 34 30 30 30 30 30 30 30 30 31 30 31 30 30 30 30 30 30 30 38 34 42 2A 0D
注:串口参数设置可能因用户需求不同而不固定,参数需现场实际采集
参考链接:https://blog.csdn.net/gongyejishuhulian/article/details/79718339
西门子S7通讯协议测试(基于tcp):
第一次握手报文:
03 00 00 16 11 E0 00 00 00 01 00 C1 02 10 00 C2 02 03 01 C0 01 0A
第一次握手返回:
03 00 00 16 11 D0 00 01 00 05 00 C0 01 0A C1 02 10 00 C2 02 03 01
第二次握手报文:
03 00 00 19 02 F0 80 32 01 00 00 CC C1 00 08 00 00 F0 00 00 01 00 01 03 C0
第二次握手返回:
03 00 00 1B 02 F0 80 32 03 00 00 CC C1 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0
读取数据:
03 00 00 43 02 F0 80 32 01 00 00 00 05 00 32 00 00 04 04 12 0A 10 02 00 02 00 00 81 00 00 00 12 0A 10 02 00 01 00 00 82 00 00 00 12 0A 10 02 00 01 00 00 83 00 00 00 12 0A 10 02 00 08 00 01 84 00 00 00
03 00 00 43 02 F0 80 32 01 00 00 00 05 00 32 00 00 04 04 固定的
12 0A 10 02 固定长度,地址前缀
00 02 读取数据byte个数:2(16位)
00 00 数据块编号
81 获取PLC输入状态标识符
00 00 00数据地址偏移量
12 0A 10 02 固定长度,地址前缀
00 01 读取数据byte个数:1(8位)
00 00 数据块编号
82 获取PLC输出状态标识符
00 00 00数据地址偏移量
12 0A 10 02 00 01 00 00 83 00 00 00 12 0A 10 02 00 08 00 01 84 00 00 00
作用不详,备用
收到数据格式(举例说明):
03 00 00 33 02 F0 80 32 03 00 00 00 05 00 02 00 1E 00 00 04 04
FF 04 00 10 40 02 FF 04 00 08 00 00 FF 04 00 08 00 00 FF 04 00 40 00 00 00 00 00 00 00 00
03 00 00 33 02 F0 80 32 03 00 00 00 05 00 02 00 1E 00 00 04 04 固定的
FF 04 00 返回数据前缀
10 有效位数:16(bit)
40 04相当于二进制 0100 0000 0000 0010 意思是A的端口6和B的端口1位高电平,其余为低电平
FF 04 00 08 00 00
FF 04 00 返回数据前缀
08 有效位数:8(bit)(由于s7-200smart系列只有8个输入口)
02 相当于二进制 0000 0010 即输出口1为高电平其余为低电平
FF 04 00 08 00 00 FF 04 00 40 00 00 00 00 00 00 00 00
未知,备用
台达PLC通讯测试
端口设置9600 ,7 ,1 ,EVEN(232端口)
发送帧解析:
[15:51:58.175]发→◇3A 30 31 30 32 30 35 30 30 30 30 30 38 46 30 0D 0A □
起始码 |
3A |
: |
通讯地址 |
30 31 |
0 1 |
命令码 |
30 32 |
0 2 |
读取数据起始地址 |
30 35 30 30 |
0 5 0 0 |
读取数据长度 |
30 30 30 38 |
0 0 0 8 |
LRC校验码 |
46 30 |
F 0 |
结束码 |
0D 0A |
CR LF |
LRC校验码计算:01+02+05+08=16 (0001 0000取反:1110 1111 再加1:1111 0000)
接收帧解析:输出0 1 2 5 7 ,有效数据41,37实为A(1010)、7(0111)
[15:51:58.229]收←◆3A 30 31 30 32 30 31 41 37 35 35 0D 0A
起始码 |
3A |
: |
通讯地址 |
30 31 |
0 1 |
命令码 |
30 32 |
0 2 |
字节数 |
30 31 |
0 1 |
数据 |
41 37 |
A 7 |
LRC校验码 |
35 35 |
5 5 |
结束码 |
0D 0A |
CR LF |
读取输出端状态:(地址:0500)
读取输入端状态:(地址:0400)
示例:
[08:41:56.922]发→◇3A 30 31 30 32 30 34 30 30 30 30 30 38 46 31 0D 0A □
[08:41:56.956]收←◆3A 30 31 30 32 30 31 31 32 45 41 0D 0A(1、 4输入)
附表:
命令码 |
功能 |
作用范围 |
01 |
读线圈状态 |
S,Y,M,T,C |
02 |
读输入状态 |
S,X,Y,M,T,C |
03 |
读寄存器值 |
T,C,D |
05 |
设定单一线圈 |
S,Y,M,T,C |
06 |
预设单一寄存器 |
T,C,D |
15 |
设定多个线圈 |
S,Y,M,T,C |
16 |
预设多个寄存器 |
T,C,D |
17 |
状态、机种报告 |
None |
台达PLC装置地址
装置 |
范围 |
有效范围 |
地址 |
S |
000-255 |
000-127 |
0000-00FF |
S |
246-511 |
0100-01FF |
|
S |
512-767 |
0200-02FF |
|
S |
768-1023 |
0300-03FF |
|
X |
000-377(8进制) |
000-177(8进制) |
0400-04FF |
Y |
000-377(8进制) |
000-177(8进制) |
0500-05FF |
T |
000-255 |
000-127 |
0600-06FF |
M |
000-255 |
0000-1279 |
0800-08FF |
M |
256-511 |
0900-09FF |
|
M |
512-767 |
0A00-0AFF |
|
M |
768-1023 |
0B00-0BFF |
|
M |
1024-1279 |
0C00-0CFF |
|
C |
000-255 |
000-127 232-255 |
0E00-0EFF |
D |
000-255 |
000-599
100-1143 |
1000-10FF |
D |
256-511 |
1100-11FF |
|
D |
512-767 |
1200-12FF |
|
D |
768-1023 |
1300-13FF |
|
D |
1024-1279 |
1400-14FF |
参考链接:http://www.docin.com/p-687084617.html
以上是关于常用PLC通讯协议的主要内容,如果未能解决你的问题,请参考以下文章