西门子S7协议实现

采用java的方式实现西门子S7协议


<dependency>
    <groupId>com.github.xingshuangs</groupId>
    <artifactId>iot-communication</artifactId>
    <version>1.4.4</version>
</dependency>

网络模型

层数

OSI层

S7协议

第 7 层

应用层

S7 协议 S7  Communication

第 6 层

表示层

S7 协议( COTP )

第 5 层

会话层

S7 协议( TPKT )

第 4 层

传输层

Transmission  Control Protocol

第 3 层

网络层

IP

第 2 层

数据链路层

Ethernet

第 1 层

物理层

Ethernet

S7协议数据结构

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据

S7协议TCP/IP实现依赖于面向块的ISO传输服务,S7协议包含在TPKTISO-COTP协议中,允许PDU(协议数据单元)通过TCP承载。
ISO overTCP通信定义在RFC1006中,ISO-COTP定义在RFC2126其是基于ISO 8073协议(RFC905)。该结构如下图。

java通过opc ua获取plc数据 java读取plc数据_数据_02

TPKT结构

TPKT 共占 4 个字节

java通过opc ua获取plc数据 java读取plc数据_数据_03

字节序数

字节大小

英文名

中文含义

示例

0

1

Version

版本号

0x03

1

1

Reserved

预留

0x00

2-3

2

Length

长度

0x0016

length,2byte,包括后面负载payload和这三部分在内的总长度

COTP结构

COTP分两种,连接型的COTP和数据型的COTP

COTP连接 共占 18 个字节

java通过opc ua获取plc数据 java读取plc数据_数据_04

字节序数

字节大小

英文名

中文含义

示例

0

1

Length

长度(但并不包含length这个字段)

0x11

1

1

PDU Type

PDU类型(CRConnect Request 连接请求)

  • 0xE0,连接请求
  • 0xD0,连接确认
  • 0x80,断开请求
  • 0xC0,断开确认
  • 0x50,拒绝
  • 0xF0,数据

2-3

2

Destination reference

目标引用,用来唯一标识目标

0x10

4-5

2

Source reference

源的引用

0x0001

6

1

Class前4位

Extended formates倒数第2位

No explicit flow control最后一位

  • 前四位标识class,也就是标识类别
  • 倒数第二位对应Extended formats,是否使用拓展样式
  • 倒数第一位对应No explicit flow control,是否有明确的指定流控制

0x00

7

1

Parameter code:tpdu-size

参数代码**TPDU-Size

0xC0

8

1

Parameter length

参数长度

0x01

9

1

TPDU size

TPDU**大小

0x0A

10

1

Parameter code: src-tsap

参数代码**SRC-TASP

0xC1

11

1

Parameter length

参数长度

0x02

12-13

2

source TSAP

SourceTSAP/Rack

0x0201

14

1

Parameter code: dst-tsap

参数代码**DST-TASP

0xC2

15

1

Parameter length

参数长度

0x02

16-17

2

destination Tsap

DestinationTSAP / Slot

0x0201

 

COTP数据 共占 3 个字节

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_05

字节序数

字节大小

英文名

中文含义

示例

0

1

Length

长度(但并不包含length这个字段)

0x11

1

1

PDU Type

PDU类型(CRConnect Request 连接请求)

0xF0,数据

2

1

Destination reference

首位:是否最后一个数据

后7位: TPDU**编号

0x10

S7协议的工作流程

  1. client与server 通过socket和标准的TCP的方式建立连接
  2. client发送COTP,请求连接PLC,报文中包含Source TSAP和Destination TSAP,从而标识出CPU的机架号和槽号
  3. PLC返回COTP,确认连接,报文中包含Source TSAP和Destination TSAP,此时server确定client与哪个CPU进行通讯
  4. client发送S7 Communication给server,报文中包含Setup communication,即通讯请求,包含PDU的长度
  5. server返回S7 Communication给client,报文的ROSCTR为ACK_DATA,有确认的意思,包含PDU的长度
  6. client与server发送交换数据的报文,仍以S7 Communication完成

备注:2-5的步骤中,2与3完成数据传输前连接的功能,4与5则完成连接之后的通讯请求,如果绕过通讯请求的建立,在有TCP时就进行数据交换,服务器一般会直接断连

S7 PDU结构

S7协议是面向功能/命令的,意味着传输由S7请求和响应组成(极少数例外)。在连接建立期间协商并行传输的数量和PDU的最大长度。

S7 PDU由三个主要部分组成:

头(Header):包含长度信息,PDU参考和消息类型常量

参数(Parameters):内容和结构根据PDU的消息功能类型而各有不同

数据(Data):该数据是一个可选字段来携带数据,例如写入的数值,存储器值,块代码等。

1、头(Header)

头长度为10-12个字节,请求头为10个字节,响应头为12个字节,响应消息包含两个额外的错误代码字节。除此之外,请求头格式在所有PDU中是一致的。

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_06

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_07

REQ-HEADER(请求头,发送数据头)共占 10 个字节

字节序数

字节大小

英文名

中文含义

示例

0

1

Protocol Id

协议id

0x32(常量)

1

1

ROSCTR/MSG Type

pdu(协议数据单元(Protocol Data Unit))的类型

0x01-job

0x02-ack

0x03-ack-data

0x07-Userdata

2-3

2

Redundancy Identification

保留

0x0000

4-5

2

Protocol Data Unit Reference

|pdu的参考–由主站生成,每次新传输递增(大端)

0x000C

6-7

2

Parameter length

参数的长度(大端)

0x0002

8-9

2

Data length

数据的长度(大端)

0x0006

 

ACK-HEADER(头,响应头,多两个字节)共占 12 个字节

字节序数

字节大小

英文名

中文含义

示例

0

1

Protocol Id

协议id

0x32(常量)

1

1

ROSCTR/MSG Type

pdu(协议数据单元(Protocol Data Unit))的类型

0x01-job

0x02-ack

0x03-ack-data

0x07-Userdata

2-3

2

Redundancy Identification

保留

0x0000

4-5

2

Protocol Data Unit Reference

|pdu的参考–由主站生成,每次新传输递增(大端)

0x000C

6-7

2

Parameter length

参数的长度(大端)

0x0002

8-9

2

Data length

数据的长度(大端)

0x0006

10

1

Error Class

错误类型(具体内容在其他中)

0x00

11

1

Error Code

错误码(具体内容在其他中)

0x00

 

Message Type (消息类型 ROSCTR/MSG Type)

Message Type: 消息的一般类型(有时称为ROSCTR类型),消息的其余部分在很大程度上取决于Message Type和功能代码。

含义

0x01-job

主设备通过job向从设备发出“干活”的命令,具体是读取数据还是写数据由parameter决定

0x02-ack

确认 确认有没有数据字段

0x03-ack-data

从设备回应主设备的job

0x07-Userdata

原始协议的扩展,参数字段包含请求/响应id,(用于编程/调试,SZL读取,安全功能,时间设置,循环读取…)

 

2、参数(Parameter)

Parameter参数取决于 Message Type和功能代码,不同功能码的消息结构不同。这里分析仅针对Message Type为:

  1. 0x01- Job Request:主站发送的请求(例如读/写存储器,读/写块,启动/停止设备,通信设置)
  2. 0x03- Ack-Data:带有可选数据字段的确认,包含对作业请求的回复

JobAck Data消息的parameter都是以功能代码开头,其余字段的结构取决于此值。

java通过opc ua获取plc数据 java读取plc数据_Data_08

 

Job Request/Ack-Data function codes功能码

参数码

参数功能

参数含义

0x00

CPU services

CPU服务

0x04

Read Variable

读变量

0x05

Write Variable

写变量

0x1A

Request download

开始下载

0x1B

Download block

下载阻塞

0x1C

Download ended

下载结束

0x1D

Start upload

开始上传

0x1E

Upload

上传

0x1F

End upload

结束上传

0x28

PLC Control

控制PLC

0x29

PLC Stop

停止PLC

0xF0

Setup communication

设置通信

 

2.1 设置通信 0xF0

在可以交换任何其他消息之前,在每个会话开始时会发送该消息对(Job 和Ack Data)。它用于协商Ack队列的大小和最大PDU长度,双方都声明其支持的值。Ack队列的长度决定了可以在没有确认的情况下同时启动的并行作业的数量。PDU和队列长度字段都是大端。

Parameter(设置通信 0xF0) 共占 8 个字节

java通过opc ua获取plc数据 java读取plc数据_字节序_09

字节序数

字节大小

英文名

中文含义

示例

0

1

Function code

功能代码

0xF0

1

1

Reserved

预留

0x00

2-3

2

Max AmQ Caller

Ack队列的大小(主叫)(大端)

0x0001

4-5

2

Max AmQ Callee

Ack队列的大小(被叫)(大端)

0x0001

6-7

2

PDU length

PDU长度(大端)

0x03C0

 

2.2 读/写变量 0x04/0x05

通过指定变量的存储区域,地址(偏移量)及其大小或类型来执行数据读取和写入操作
注意:读只要填充parameter即可,写除了parameter外还需要填充data部分的数据

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_10

Parameter(读0x04) 共占 不定至少2 个字节

这两个字节不可重复

字节序数

字节大小

英文名

中文含义

示例

是否重复

0

1

Function code

功能代码

0x04

不可重复

1

1

Item Count

Request Item结构的数量

0x01

不可重复

后面部分可重复

字节序数

字节大小

英文名

中文含义

示例

是否重复

2

1

Variable Specification type

变量规范,对于读/写消息,它总是具有值0x12

0x12

可重复

3

1

Length of following address specification

其余部分的长度规范

0x0A

可重复

4

1

Syntax ID

寻址模式和项结构其余部分的格式,它具有任意类型寻址的常量值0x10

0x10

可重复

5

1

Transport size / Variable Type

变量的类型和长度BIT,BYTE,WORD,DWORD,COUNTER

0x02

可重复

6-7

2

Length / Count

读取长度

0x0004

可重复

8-9

2

DB number

即 DB 编号,如果访问的不是DB区域,此处为0x0000

0x0000

可重复

10

1

Area

存储区类型DB存储区

0x84

可重复

11-13

3

Address

开始字节,字节地址,位于开始字节地址address3个字节,从第4位开始计数,

位地址,位于开始字节地址address3个字节的最后3

0x000000

可重复

 

存储区域

存储区名

存储区简称

含义

Merker

M

任意标记变量或标志寄存器驻留在这里

Data Block

DB

DB区域是存储设备不同功能所需数据的最常见位置,这些数据块编号为地址的一部分

Input

I

数字和模拟输入模块值,映射到存储器

Output

Q

类似的存储器映射输出

Counter

C

PLC程序使用的不同计数器的[C]值

Timer

T

PLC程序使用的不同定时器的[T]值

本地数据[L]

L

本地数据

外设访问[P]

P

外设访问

 

Syntax ID 寻址模式和项结构其余部分的格式

地址

名称

含义

0x10

S7ANY

Address data S7-Any pointer-like DB1.DBX10.2

0x13

PBC-R_ID

R_ID for PBC

0x15

ALARM_LOCKFREE

Alarm lock/free dataset

0x16

ALARM_IND

Alarm indication dataset

0x19

ALARM_ACK

Alarm acknowledge message dataset

0x1a

ALARM_QUERYREQ

Alarm query request dataset

0x1c

NOTIFY_IND

Notify indication dataset

0xa2

DRIVEESANY

seen on Drive ES Starter with routing over S7

0xb2

1200SYM

Symbolic address mode of S7-1200

0xb0

DBREAD

Kind of DB block read, seen only at an S7-400

0x82

NCK

Sinumerik NCK HMI access

 

Transport size (variable Type) in Item data,请求的数据项类型


含义

0x01

BIT

0x02

BYTE

0x03

CHAR

0x04

WORD

0x05

INT

0x06

DWORD

0x07

DINT

0x08

REAL

0x09

DATE

0x0A

TOD

0x0B

TIME

0x0C

S5TIME

0x0F

DATE AND TIME

0x1C

COUNTER

0x1D

TIMER

0x1E

IEC TIMER

0x1F

IEC COUNTER

0x20

HS COUNTER

 

Area 数据的区域

16进制值

名称

含义

0x03

System info of 200 family

200系列系统信息

0x05

System flags of 200 family

200系列系统标志

0x06

Analog inputs of 200 family

200系列模拟量输入

0x07

Analog outputs of 200 family

200系统模式量输出

0x80

Direct peripheral access

直接访问外设

0x81

Inputs (I)

输入(I)

0x82

Outputs (Q)

输出(Q)

0x83

Flags (M)

内部标志(M)

0x84

Data blocks (DB)

数据块(DB)

0x85

Instance data blocks (DI)

背景数据块(DI)

0x86

Local data (L)

局部变量(L)

0x87

Unknown yet (V)

全局变量(V)

0x1C

S7 counters (C)

S7计数器(C)

0x1D

S7 timers (T)

S7定时器(T)

0x1E

IEC counters (200 family)

IEC计数器(200系列)

0x1F

IEC timers (200 family)

IEC定时器(200系列)

 

2.3 控制PLC 0x28

Parameter(控制PLC 0x28) 共占 不定 个字节

字节序数

字节大小

英文名

中文含义

示例

0

1

Function code

功能代码

0x28

1-7

7

Reserved

未知字节

0x000000000000fd

8-9

2

Parameter block Length

参数块长度

0x0000

不定

不定

Parameter block

参数块内容

10

1

String length

字符串长度

0x09

不定

不定

PI Service

程序调用服务(ASCII码)

P_PROGRAM

0x505F50524F4752414D

PLC控制消息用于在从属设备上执行不同的命令,以修改其执行/内存状态。此类命令用于启动或停止PLC控制程序的执行,激活或删除设备上的程序块,或将其配置保存到永久存储器中。这些消息的结构相当简单,将在不讨论确切细节的情况下对其进行解释。

ob - PLC Control消息由两个主要部分组成,即被调用方法的ASCII名称参数(也被编码为ASCII字符串)。方法名的结构与块传输部分中引入的文件名类似。参数取决于方法类型,可以将其视为方法类型的参数。 Ack Data消息仅包含PLC Control功能代码。

一些示例函数名称及其相关参数:

  • _INSE:激活设备上下载的块,参数是块的名称(例如OB1)。
  • _DELE:从设备的文件系统中删除一个块,该参数也是块的名称。
  • P_PROGRAM:设置设备的运行状态(启动,停止,mem重置)。它在没有参数的情况下发送以启动设备,但是停止plc程序使用不同的功能代码(参见下一节)。
  • _GARB:压缩PLC内存。
  • _MODU:将ram复制到rom,该参数包含文件系统标识符(A/E/P)。

 

热启动

热启动请求

java通过opc ua获取plc数据 java读取plc数据_Data_11

热启动响应

java通过opc ua获取plc数据 java读取plc数据_Data_12

 

冷启动

冷启动请求

java通过opc ua获取plc数据 java读取plc数据_字节序_13

冷启动响应

java通过opc ua获取plc数据 java读取plc数据_数据_14

 

2.4 停止PLC 0x29

Parameter(停止PLC 0x29) 共占 不定 个字节

字节序数

字节大小

英文名

中文含义

示例

0

1

Function code

功能代码

0x29

1-5

5

Reserved

未知字节

0x0000000000

6

1

Length part

参数块长度

0x09

不定

不定

PI Service

程序调用服务(ASCII码)

P_PROGRAM

0x505F505524F4752414D

停止PLC请求

java通过opc ua获取plc数据 java读取plc数据_数据_15

停止PLC响应

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_16

 

3、数据(Data)

这里的数据有两种,数据项DataItem和返回项ReturnItem,两种都可以重复,数据项(DataItem)占多个字节,返回项(ReturnItem)只有一个字节;

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_10

数据格式 Return Item,1个字节

字节序数

字节大小

英文名

中文含义

示例

0

1

Error code

错误码

0x00

数据格式 Data Item,多个字节

注意事项:数据项总字节数若为奇数,则需要补充1个字节,使其保持为偶数字节数

字节序数

字节大小

英文名

中文含义

示例

0

1

Error code

错误码

0x00

1

1

Variable Type

数据类型

0x04

2-3

2

Count

长度

0x0000

不定

不定

data

参数块内容

 

Error Code

字节

英文名

中文含义

0x00

Reserved

未定义,预留

0x01

Hardware error

硬件错误

0x03

Accessing the object not allowed

对象不允许访问

0x05

Invalid address

无效地址,所需的地址超出此PLC的极限

0x07

Data type inconsistent

日期类型不一致

0x0a

Object does not exist

对象不存在

0xff

Success

成功

 

Transport size in data Transport size (variable Type)变量的类型和长度,返回的数据类型


名称

含义

0x00

NULL

0x03

BIT

bit access, len is in bits

0x04

BYTE/WORD/DWORD

byte/word/dword access, len is in bits

0x05

INTEGER

integer access, len is in bits

0x06

DINTEGER

integer access, len is in bytes

0x07

REAL

real access, len is in bytes

0x09

OCTET STRING

octet string, len is in bytes

 

4、示例

读取数据 0x04

发送

java通过opc ua获取plc数据 java读取plc数据_java通过opc ua获取plc数据_18

返回

java通过opc ua获取plc数据 java读取plc数据_字节序_19

 

写入数据 0x05

发送

java通过opc ua获取plc数据 java读取plc数据_数据_20

返回

java通过opc ua获取plc数据 java读取plc数据_数据_21


 

其他

Header Error Class

含义

0x00

No error

0x81

Application relationship error

0x82

Object definition error

0x83

No ressources available error

0x84

Error on service processing

0x85

Error on supplies

0x87

Access error

 

错误码具体含义


含义

0x0000

没有错误

0x0110

块号无效

0x0111

请求长度无效

0x0112

参数无效

0x0113

块类型无效

0x0114

找不到块

0x0115

块已存在

0x0116

块被写保护

0x0117

块/操作系统更新太大

0x0118

块号无效

0x0119

输入的密码不正确

0x011A

PG资源错误

0x011B

PLC资源错误

0x011C

协议错误

0x011D

块太多(与模块相关的限制)

0x011E

不再与数据库建立连接,或者S7DOS句柄无效

0x011F

结果缓冲区太小

0x0120

块结束列表

0x0140

可用内存不足

0x0141

由于缺少资源,无法处理作业

0x8001

当块处于当前状态时,无法执行请求的服务

0x8003

S7协议错误:传输块时发生错误

0x8100

应用程序,一般错误:远程模块未知的服务

0x8104

未在模块上实现此服务或报告了帧错误

0x8204

对象的类型规范不一致

0x8205

复制的块已存在且未链接

0x8301

模块上的内存空间或工作内存不足,或者指定的存储介质不可访问

0x8302

可用资源太少或处理器资源不可用

0x8304

无法进一步并行上传。存在资源瓶颈

0x8305

功能不可用

0x8306

工作内存不足(用于复制,链接,加载AWP)

0x8307

保持性工作记忆不够(用于复制,链接,加载AWP)

0x8401

S7协议错误:无效的服务序列(例如,加载或上载块)

0x8402

由于寻址对象的状态,服务无法执行

0x8404

S7协议:无法执行该功能

0x8405

远程块处于DISABLE状态(CFB)。该功能无法执行

0x8500

S7协议错误:帧错误

0x8503

来自模块的警报:服务过早取消

0x8701

寻址通信伙伴上的对象时出错(例如,区域长度错误)

0x8702

模块不支持所请求的服务

0x8703

拒绝访问对象

0x8704

访问错误:对象已损坏

0xD001

协议错误:非法的作业号

0xD002

参数错误:非法的作业变体

0xD003

参数错误:模块不支持调试功能

0xD004

参数错误:作业状态非法

0xD005

参数错误:作业终止非法

0xD006

参数错误:非法链路断开ID

0xD007

参数错误:缓冲区元素数量非法

0xD008

参数错误:扫描速率非法

0xD009

参数错误:执行次数非法

0xD00A

参数错误:非法触发事件

0xD00B

参数错误:非法触发条件

0xD011

调用环境路径中的参数错误:块不存在

0xD012

参数错误:块中的地址错误

0xD014

参数错误:正在删除/覆盖块

0xD015

参数错误:标签地址非法

0xD016

参数错误:由于用户程序错误,无法测试作业

0xD017

参数错误:非法触发号

0xD025

参数错误:路径无效

0xD026

参数错误:非法访问类型

0xD027

参数错误:不允许此数据块数

0xD031

内部协议错误

0xD032

参数错误:结果缓冲区长度错误

0xD033

协议错误:作业长度错误

0xD03F

编码错误:参数部分出错(例如,保留字节不等于0)

0xD041

数据错误:非法状态列表ID

0xD042

数据错误:标签地址非法

0xD043

数据错误:找不到引用的作业,检查作业数据

0xD044

数据错误:标签值非法,检查作业数据

0xD045

数据错误:HOLD中不允许退出ODIS控制

0xD046

数据错误:运行时测量期间非法测量阶段

0xD047

数据错误:“读取作业列表”中的非法层次结构

0xD048

数据错误:“删除作业”中的非法删除ID

0xD049

“替换作业”中的替换ID无效

0xD04A

执行'程序状态'时出错

0xD05F

编码错误:数据部分出错(例如,保留字节不等于0,...)

0xD061

资源错误:没有作业的内存空间

0xD062

资源错误:作业列表已满

0xD063

资源错误:触发事件占用

0xD064

资源错误:没有足够的内存空间用于一个结果缓冲区元素

0xD065

资源错误:没有足够的内存空间用于多个结果缓冲区元素

0xD066

资源错误:可用于运行时测量的计时器被另一个作业占用

0xD067

资源错误:“修改标记”作业过多(特别是多处理器操作)

0xD081

当前模式下不允许使用的功能

0xD082

模式错误:无法退出HOLD模式

0xD0A1

当前保护级别不允许使用的功能

0xD0A2

目前无法运行,因为正在运行的函数会修改内存

0xD0A3

I / O上活动的“修改标记”作业太多(特别是多处理器操作)

0xD0A4

'强制'已经建立

0xD0A5

找不到引用的作业

0xD0A6

无法禁用/启用作业

0xD0A7

无法删除作业,例如因为当前正在读取作业

0xD0A8

无法替换作业,例如因为当前正在读取或删除作业

0xD0A9

无法读取作业,例如因为当前正在删除作业

0xD0AA

处理操作超出时间限制

0xD0AB

进程操作中的作业参数无效

0xD0AC

进程操作中的作业数据无效

0xD0AD

已设置操作模式

0xD0AE

作业是通过不同的连接设置的,只能通过此连接进行处理

0xD0C1

访问标签时至少检测到一个错误

0xD0C2

切换到STOP / HOLD模式

0xD0C3

访问标记时至少检测到一个错误。模式更改为STOP / HOLD

0xD0C4

运行时测量期间超时

0xD0C5

块堆栈的显示不一致,因为块被删除/重新加载

0xD0C6

作业已被删除,因为它所引用的作业已被删除

0xD0C7

由于退出了STOP模式,因此作业被自动删除

0xD0C8

由于测试作业和正在运行的程序之间不一致,“块状态”中止

0xD0C9

通过复位OB90退出状态区域

0xD0CA

通过在退出前重置OB90并访问错误读取标签退出状态范围

0xD0CB

外设输出的输出禁用再次激活

0xD0CC

调试功能的数据量受时间限制

0xD201

块名称中的语法错误

0xD202

函数参数中的语法错误

0xD205

RAM中已存在链接块:无法进行条件复制

0xD206

EPROM中已存在链接块:无法进行条件复制

0xD208

超出模块的最大复制(未链接)块数

0xD209

(至少)模块上找不到给定块之一

0xD20A

超出了可以与一个作业链接的最大块数

0xD20B

超出了一个作业可以删除的最大块数

0xD20C

OB无法复制,因为关联的优先级不存在

0xD20D

SDB无法解释(例如,未知数)

0xD20E

没有(进一步)阻止可用

0xD20F

超出模块特定的最大块大小

0xD210

块号无效

0xD212

标头属性不正确(与运行时相关)

0xD213

SDB太多。请注意对正在使用的模块的限制

0xD216

无效的用户程序 - 重置模块

0xD217

不允许在模块属性中指定的保护级别

0xD218

属性不正确(主动/被动)

0xD219

块长度不正确(例如,第一部分或整个块的长度不正确)

0xD21A

本地数据长度不正确或写保护错误

0xD21B

模块无法压缩或压缩早期中断

0xD21D

传输的动态项目数据量是非法的

0xD21E

无法为模块(例如FM,CP)分配参数。系统数据无法链接

0xD220

编程语言无效。请注意对正在使用的模块的限制

0xD221

连接或路由的系统数据无效

0xD222

全局数据定义的系统数据包含无效参数

0xD223

通信功能块的实例数据块错误或超出最大背景数据块数

0xD224

SCAN系统数据块包含无效参数

0xD225

DP系统数据块包含无效参数

0xD226

块中发生结构错误

0xD230

块中发生结构错误

0xD231

至少有一个已加载的OB无法复制,因为关联的优先级不存在

0xD232

加载块的至少一个块编号是非法的

0xD234

块在指定的内存介质或作业中存在两次

0xD235

该块包含不正确的校验和

0xD236

该块不包含校验和

0xD237

您将要加载块两次,即CPU上已存在具有相同时间戳的块

0xD238

指定的块中至少有一个不是DB

0xD239

至少有一个指定的DB在装载存储器中不可用作链接变量

0xD23A

至少有一个指定的DB与复制和链接的变体有很大不同

0xD240

违反了协调规则

0xD241

当前保护级别不允许该功能

0xD242

处理F块时的保护冲突

0xD250

更新和模块ID或版本不匹配

0xD251

操作系统组件序列不正确

0xD252

校验和错误

0xD253

没有可用的可执行加载程序; 只能使用存储卡进行更新

0xD254

操作系统中的存储错误

0xD280

在S7-300 CPU中编译块时出错

0xD2A1

块上的另一个块功能或触发器处于活动状态

0xD2A2

块上的触发器处于活动状态。首先完成调试功能

0xD2A3

块未激活(链接),块被占用或块当前被标记为删除

0xD2A4

该块已被另一个块函数处理

0xD2A6

无法同时保存和更改用户程序

0xD2A7

块具有“未链接”属性或未处理

0xD2A8

激活的调试功能阻止将参数分配给CPU

0xD2A9

正在为CPU分配新参数

0xD2AA

当前正在为模块分配新参数

0xD2AB

当前正在更改动态配置限制

0xD2AC

正在运行的激活或取消激活分配(SFC 12)暂时阻止R-KiR过程

0xD2B0

在RUN(CiR)中配置时发生错误

0xD2C0

已超出最大工艺对象数

0xD2C1

模块上已存在相同的技术数据块

0xD2C2

无法下载用户程序或下载硬件配置

0xD401

信息功能不可用

0xD402

信息功能不可用

0xD403

服务已登录/注销(诊断/ PMC)

0xD404

达到的最大节点数。不再需要登录诊断/ PMC

0xD405

不支持服务或函数参数中的语法错误

0xD406

当前不可用的必需信息

0xD407

发生诊断错误

0xD408

更新已中止

0xD409

DP总线错误

0xD601

函数参数中的语法错误

0xD602

输入的密码不正确

0xD603

连接已合法化

0xD604

已启用连接

0xD605

由于密码不存在,因此无法进行合法化

0xD801

至少有一个标记地址无效

0xD802

指定的作业不存在

0xD803

非法的工作状态

0xD804

非法循环时间(非法时基或多个)

0xD805

不能再设置循环读取作业

0xD806

引用的作业处于无法执行请求的功能的状态

0xD807

功能因过载而中止,这意味着执行读取周期所需的时间比设置的扫描周期时间长

0xDC01

日期和/或时间无效

0xE201

CPU已经是主设备

0xE202

由于闪存模块中的用户程序不同,无法进行连接和更新

0xE203

由于固件不同,无法连接和更新

0xE204

由于内存配置不同,无法连接和更新

0xE205

由于同步错误导致连接/更新中止

0xE206

由于协调违规而拒绝连接/更新

0xEF01

S7协议错误:ID2错误; 工作中只允许00H

0xEF02

S7协议错误:ID2错误; 资源集不存在