常用PLC通讯协议

时间:2021-05-06 22:30:55

三菱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  37

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

后面的数据从右到左依次是:ICF\DA2\SA2\SID各占一个字节默认为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