【S7协议解析】

news/2024/11/22 14:37:40/

在这里插入图片描述

目录

    • S7协议解析
      • 前言:框架介绍
      • 1、0xF0建立通信(Setup communication)
      • 2、解析userdata 包 (我是根据我抓的包顺序进行解析所以第二个就是到这个了)
      • 3、0x04 读数据操作(Read Var)
      • 4、0x05写入值 Write Var
      • 5、0x1a请求下载Request download
        • 头部都一样 不贴图了
      • 6、0x1b下载块Download block
      • 7、0x1c 下载结束Download ended
      • 8、0x1d开始上传 Start upload
      • 9、0x1e 上传 Upload
      • 10、0x1f 上传结束 End upload*
      • 11、0x28 程序调用服务 PI-Service
      • 12、0x29 关闭PLC PLC Stop
      • 13、userdata协议扩展 (因为太多了 比较类似的就不做介绍了)
      • 附录一:错误码具体含义
      • 附录二:程序服务调用名称

S7协议解析

前言:框架介绍

在这里插入图片描述

其中,第1~4层会由计算机自己完成(底层驱动程序);
第5层TPKT,应用程数据传输协议,介于TCP和COTP协议之间;这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁;
第6层COTP,COTP 是 OSI 7层协议定义的位于TCP之上的协议。COTP 以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;
第7层,S7 communication,这一层和用户数据相关,对PLC数据的读取报文在这里完成;
西门子通信为在TCP执行三次握手后,还需要发送两次连接验证,在两次连接验证之后,才进行真正的数据交互。

在这里插入图片描述

三次握手
在这里插入图片描述

四次挥手

在这里插入图片描述

1、TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);
2、COTP的作用是定义了数据传输的基本单位(在S7Comm中 PDU TYPE:DT data); 

TPKT的结构

0 (Unsigned integer, 1 byte): Version,版本信息。1 (Unsigned integer, 1 byte): Reserved,保留(值为0x00)。2-3 (Unsigned integer, 2 bytes): Length,TPKT、COTP、S7三层协议的总长度,也就是TCP的payload的长度。

在这里插入图片描述

COTP协议分为两种形态

COTP连接包(COTP Connection Packet) 例如连接时两次验证分别为请求和响应

在这里插入图片描述

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为17 bytes。1 (Unsigned integer, 1 byte): PDU typ,类型有:0x1: ED Expedited Data,加急数据0x2: EA Expedited Data Acknowledgement,加急数据确认0x4: UD,用户数据0x5: RJ Reject,拒绝0x6: AK Data Acknowledgement,数据确认0x7: ER TPDU Error,TPDU错误0x8: DR Disconnect Request,断开请求0xC: DC Disconnect Confirm,断开确认0xD: CC Connect Confirm,连接确认0xE: CR Connect Request,连接请求0xF: DT Data,数据传输2~3 (Unsigned integer, 2 bytes): Destination reference.4~5 (Unsigned integer, 2 bytes): Source reference.6 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。7~? (length-7 bytes, 一般为11 bytes): Parameter,参数。一般参数包含Parameter code(Unsigned integer, 1 byte)、Parameter length(Unsigned integer, 1 byte)、Parameter data三部分。

**COTP功能包(COTP Fuction Packet)建立两次COTP验证之后 **

在这里插入图片描述

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为2 bytes。
1 (Unsigned integer, 1 byte): PDU type,类型有:0x1: ED Expedited Data,加急数据0x2: EA Expedited Data Acknowledgement,加急数据确认0x4: UD,用户数据0x5: RJ Reject,拒绝0x6: AK Data Acknowledgement,数据确认0x7: ER TPDU Error,TPDU错误0x8: DR Disconnect Request,断开请求0xC: DC Disconnect Confirm,断开确认0xD: CC Connect Confirm,连接确认0xE: CR Connect Request,连接请求0xF: DT Data,数据传输2 (1 byte): opt,其中包括Extended formats、No explicit flow control,值都是Boolean类型。

重点是看S7comm这一层

功能码附录:
0x00	CPU services	CPU服务
0xf0	Setup communication	建立通信
0x04	Read Var	    读取值
0x05	Write Var	    写入值
0x1a	Request download	请求下载
0x1b	Download block	下载块
0x1c	Download ended	下载结束
0x1d	Start upload	开始上传
0x1e	Upload	上传
0x1f	End upload	    上传结束
0x28	PI-Service	    程序调用服务
0x29	PLC Stop	    关闭PLC

S7协议一般具有三层 header、parameter、data 根据事先功能不同,协议结构会有所不同

头(Header):包含长度信息,PDU(协议数据单元)参考和消息类型常量参数(Parameters):内容和结构根据PDU的消息和功能类型而有很大差异数据(Data):该数据是一个可选字段来携带数据,例如存储器值,块代码,固件数据等

1、0xF0建立通信(Setup communication)

发送包

在这里插入图片描述

在这里插入图片描述

Byte[0] 32 为 协议ID   一般指定为0x32
Byte[1] 01 为 PDU类型  一般有0x01 Job 主设备发起请求 0x02 Ack 确认响应 0x03 Ack_data 确认数据响应,一般作为确认0x01的请求
0x07 USERDATA	 协议的扩展,参数字段包含请求/响应ID 
Byte[2]Byte[3] 00 00冗余数据,通常为0×0000
Byte[4]Byte[5] 3e 02(十进制为15874)协议数据单元的参考、通过请求事件增加
Byte[6]Byte[7] 00 08参数的总长度 也就是parameter的长度
Byte[8]Byte[9] 00 00数据的长度、也就是data部分数据的长度 如果无即为0

在这里插入图片描述

Byte[0] f0 为PDU的类型 也就是功能码
Byte[1] 00 冗余数据,通常为0×0000
Byte[2] Byte[3]  job呼唤
Byte[4] Byte[5]  job呼叫
Byte[6] Byte[7]  协商的PDU长度(480)

回包

在这里插入图片描述

在这里插入图片描述

红框内的与发送的一样不做描述了Byte[10] 00 为错误类型0x00	No error	没有错误0x81	Application relationship	应用关系0x82	Object definition	对象定义0x83	No resources available	没有可用资源0x84	Error on service processing	服务处理中错误0x85	Error on supplies	请求错误0x87	Access error	访问错误Byte[11] 00 为错误码文章最后会附录一下全部错误码 (很长不贴在这里了)

在这里插入图片描述

Byte[0] f0 为PDU的类型 也就是功能码
Byte[1] 00 冗余数据,通常为0×0000
Byte[2] Byte[3]  确认job
Byte[4] Byte[5]  确认job
Byte[6] Byte[7]  协商的PDU长度

2、解析userdata 包 (我是根据我抓的包顺序进行解析所以第二个就是到这个了)

在这里插入图片描述

Header头地方与其他都较为一致 可自行对比 不在描述了

重点是Parameter这个地方

在这里插入图片描述

Byte[0] Byte[1] Byte[2] 00 01 12 参数头部信息
Byte[3] 04 为之后的数据个数
Byte[4] 11 对应的是Request 也就是请求的意思
Byte[5] 44 这个因为wireshark 帮我们解析了8位 前四位 0100 对应的就是Request请求
说明PDU是从主机请求设备的 后四位0100 对应的是所属类型也就是CPU功能
Byte[6] 01 前面44是规定了大的方向 这个01就是具体要干什么了 图中01就是read szl
在这里解释一下szl 是什么ssl缩写是系统状态 S7协议是德国西门子的 德国状态的是Z开头的所以 缩写为 szl 
Byte[7] 字面意思 由主机指定顺序

Data部分

在这里插入图片描述

Byte[0] ff 返回码 
Byte[1] 09 指的数据类型,通常有bit、byte等
Byte[2]Byte[3] 00 04 后面数据的个数

SZL部分

在这里插入图片描述

前四位为操作的对象是什么 0000 为CPU 1100为cp 1000为fm 0100为im
中间0000 0000 0000 0000是wireshark解析错了 按照官方的应该为前四位后八位 
表明的是局部列表的序号 我们只需要关注最后两位就行(0x00)下面是各类的序号图

在这里插入图片描述

回包

在这里插入图片描述

Header头部不做描述了 与之前都相同的自己对比就可以

在这里插入图片描述

00 01 12 与发包一致
08  长度
12  对应的Response 回应请求
84  前四位1000 对应的就是 Response  后四位 0100就是要读CPU
01  读系统状态SZL 
00  主机指定顺序
00  数据的编号
00字译 最后一个数据单元
00错误码  错误码回头我都会附录到后面

Data部分

在这里插入图片描述

FF 返回码
09  指的数据类型,通常有bit、byte等
00 e8 后面数据个数
SZL-ID 和 Index 跟发包是一样的不做介绍了
00 02   是一个数据占用多少bytes
00 70   转换为10进制为112 代表了有112个SZL_data_tree

在这里插入图片描述

后面的PDU就不在分析了都是做读取相关类的相关信息、只不过是指定的局部列表不同、index不同罢了

3、0x04 读数据操作(Read Var)

在这里插入图片描述

Header头部 与之前都一样的不再描述了

在这里插入图片描述

Parameter 参数部分

在这里插入图片描述

Byte[0] 04功能码Byte[1]  01代表了Item的个数 为1 即为 一个

Item部分

在这里插入图片描述

Byte[0] 12 结构标识通常都为0x12,代表变量规范Byte[1] 0a长度规范、自此往后的长度Byte[2] 10  IDS的地址规范的格式类型 常见值如下表0x10	S7ANY	Address data S7-Any pointer-like DB1.DBX10.20x13	PBC-R_ID	R_ID for PBC0x15	ALARM_LOCKFREE	Alarm lock/free dataset0x16	ALARM_IND	Alarm indication dataset0x19	ALARM_ACK	Alarm acknowledge message dataset0x1a	ALARM_QUERYREQ	Alarm query request dataset0x1c  	NOTIFY_IND	Notify indication dataset0xa2	DRIVEESANY	seen on Drive ES Starter with routing over S70xb2	1200SYM	Symbolic address mode of S7-12000xb0	DBREAD	Kind of DB block read, seen only at an S7-4000x82	NCK	Sinumerik NCK HMI accessByte[3] 02 为数据传输的大小、常见值如下表
Hex|值|描述| :----- | :----- | :----- || 0| NULL || 3 | BIT | bit access, len is in bits| 4 | BYTE/WORD/DWORD | byte/word/dword access, len is in bits| 5 | INTEGER | integer access, len is in bits| 6 | DINTEGER | integer access, len is in bytes| 7 | REAL | real access, len is in bytes| 9 | OCTET STRING | octet string, len is in bytes
Byte[4]Byte[5] 00 01 即数据的长度
Byte[6]byte[7] 00 01  即 DB 编号,如果访问的不是DB区域,此处为0x0000
Byte[8] 84 即数据的区域 常用的如下表

在这里插入图片描述

Byte[9] Byte[10]Byte[11] 数据的地址

图示整体解析一下

在这里插入图片描述

回包

在这里插入图片描述

Header部分

在这里插入图片描述

除了红框内的其他都与发包一致Error class 即错误类型Error code 即具体错误码 这两个在上面已经介绍了都有哪些错误类型,没有错误即0x00**

Parameter部分

在这里插入图片描述

Byte[0] 04 功能码 
Byte[1] 01 代表一个Item

Data部分

在这里插入图片描述

Byte[0[ FF 为返回码 返回码如下0x00	Reserved	未定义,预留0x01	Hardware error	硬件错误0x03	Accessing the object not allowed	对象不允许访问0x05	Invalid address	无效地址,所需的地址超出此PLC的极限0x06	Data type not supported	数据类型不支持0x07	Data type inconsistent	日期类型不一致0x0a	Object does not exist	对象不存在0xff	    Success	成功Byte[1] 04  为数据传输大小 data数据传输大小值如下0	NULL3	BIT	bit access, len is in bits4	BYTE/WORD/DWORD	byte/word/dword access, len is in bits5	INTEGER	integer access, len is in bits6	DINTEGER	integer access, len is in bytes7	REAL	real access, len is in bytes9	OCTET STRING	octet string, len is in bytesByte[2]Byte[3]为data数据的长度Byte[4]  即数据有时候会有填充数据 即在byte [4]之后、如果数据长度不满足length的话会填充0x00

列如 byte[2]byte[3] 的长度值为3 就会在byte[4]后填充 两个0x00

在这里插入图片描述

4、0x05写入值 Write Var

发包

在这里插入图片描述

Header 都与读取值一样的 就不在说了

Parameter也一样 再说一次吧

在这里插入图片描述

根据读取值对比写入值只比它多了个data部分

在这里插入图片描述

Byte[0]  00 返回码 未定义就为00
Byte[1]  04 数据传输的大小
Byte[2]Byte[3] 数据的长度
Byte[4] 数据

回包

在这里插入图片描述

Header部分和parameter部分都一样

data部分

在这里插入图片描述

Byte[0] FF 即为返回码 上面介绍有返回码的类型 FF标识向0x000000地址写入成功

5、0x1a请求下载Request download

发包

在这里插入图片描述

头部都一样 不贴图了

Byte[0]  1a 功能码
Byte[1]  00 即功能状态,包含错误是否发生、是否使用另一个检索块/文件来请求的更多数据网络状态
Byte[2] Byte[3] 01 00没什么意义
Byte[4] 到 Byte[7] 没什么意义 一般都为0x00000000
Byte[8] 09为文件名的长度
Byte[9]到 Byte[17] 为文件名

在这里插入图片描述

Byte[0] 5f 文件标识符
Byte[1] Byte[2] 30 41 块类型 s7有8中不同的块类型
0x3041	DB, ASCII为'0A',数据块	DB是用于存储用户数据的数据区域,除了指定给一个功能块的数据,还可以定义可以被任何块使用的共享数据
Byte[3] 到Byte[7] 30 30 30 30 31 即请求的块编号
Byte[8] 50 即请求目标的文件系统,有三种
P(Passive (copied, but not chained) module):被动文件系统
A (Active embedded module):主动文件系统
B (Active as well as passive module):既主既被文件系统种
Byte[9] 0d 参数第二部分的长度、即为接下来数据的长度
Byte[10] 31即加载mem之前的未知字符
Byte[11] 到 Byte[16]  即装载长度
Byte[17] 到 Byte[22]  即 MC7 代码长度整个意思就是请求下载(请求的标识是 5f 、请求的块类型是 DB 块的编号是0001 、目标块文件系统是P、所以文件名为_0A00001P,用于将DB1复制到被动文件系统或从被动文件系统复制。)

回包

在这里插入图片描述

头部不用说了 参数部分只回复了1a 代表确认请求了 确认请求之后就会进行下载块(功能码为:1b)

6、0x1b下载块Download block

发包

在这里插入图片描述

红框内都一样(其他的也都一样) 从length开始加深一下吧
Byte[0] 09 表示之后的数据长度
Byte[1] 5f  文件标识符
Byte[2] 30 41 块类型
Byte[3] 30 30 30 30 31 块编号
Byte[4] 50 请求目标的文件系统

回包

在这里插入图片描述

与发包相比较只多了个data部分 介绍data部分就行了

在这里插入图片描述

Byte[0] Byte[1] 00 de data数据内容的长度
Byte[2] Byte[3] 00 fb 未知字节
Byte[4]到尾 都是数据内容  

7、0x1c 下载结束Download ended

发包

在这里插入图片描述

与0x1a和0x1b都一样 少了装载长度和MC7长度 意思就是结束下载了 这里就不做描述了

回包

在这里插入图片描述

也很简单 参数部分只回复了个1c 就是下载结束的意思了

8、0x1d开始上传 Start upload

发包

在这里插入图片描述

可以看到,开始上传的结构和请求下载 的前部分结构一致,如上图所示的内容,其实就是告诉 PLC 一个文件名,文件标识是_ (Complete Module),块类型为0B(SDB),块的编号为00000,
目标块的文件系统是A (Active embedded module),所以文件名为_0B00000A,基本与请求下载都一样 Fliename就是文件名长度UploadID即为会话ID的意思

回包

在这里插入图片描述

Byte[0] 1d功能码 Byte[1] 00 功能状态 
Byte[2] Byte[3] 01 00 即即blockcontrol中的所有未知字节
Byte[4] Byte[7] 会话ID
Byte[8] 即自此之后的数据长度
Byte[9]到尾 完整上传快的长度(以字节为单位)、可以拆分为多个PDU

9、0x1e 上传 Upload

发包

在这里插入图片描述

这个就不做介绍了 UploadID与1d 回应的ID 是对照的

在这里插入图片描述

如之前的一样、不做介绍了。Length,数据内容长度。Unknown byte(s) in blockcontrol,未知字节。Data,数据。

10、0x1f 上传结束 End upload*

发包

在这里插入图片描述

都一样 不描述了 其中只是多了个错误代码 Errorcode

回包

在这里插入图片描述

只回复了个1f 是上传结束了

11、0x28 程序调用服务 PI-Service

发包

在这里插入图片描述

Byte[0] 28功能码
Byte[1]到byte[7] 00 00 00 00 00 00 fd 未知字节
Byte[8]byte[9] 00 02 Parameter block的 长度
Byte[10]byte[11] 45 50 即参数块
Byte[12] 05 即PI程序调用服务名的数据长度
Byte[13]到尾 5f 4d 4f 44 55为程序调用服务名 
(常用的我贴到最后吧 贴这里太长了 搜附录二 错误码搜附录一)

回包

在这里插入图片描述

Header头不讲,parameter只回复了0x28 就是说明确认请求成功

12、0x29 关闭PLC PLC Stop

这个跟之前的都一样、我再整体的图示一下吧,不一个字节一个字节说了

发包

在这里插入图片描述

回包

在这里插入图片描述

13、userdata协议扩展 (因为太多了 比较类似的就不做介绍了)

时间设置 **(**包含读时间 写时间)

读时间的发包

在这里插入图片描述

可以看出 基本与读SZL状态是一样的 我在整体标记一下吧

在这里插入图片描述

回包

Parameter

在这里插入图片描述

Data

在这里插入图片描述

写时间

发包

在这里插入图片描述

与读时间是一样的 只不过data部分是在发包阶段

回包

在这里插入图片描述

也都一样,只是返回码不一样

0x0a Object does not exist 对象不存在

其他的也都大差不差 自己比对一下就OK了

附录一:错误码具体含义

0x0000没有错误
0x0110块号无效
0x0111请求长度无效
0x0112参数无效
0x0113块类型无效
0x0114找不到块
0x0115块已存在
0x0116块被写保护
0x0117块/操作系统更新太大
0x0118块号无效
0x0119输入的密码不正确
0x011APG资源错误
0x011BPLC资源错误
0x011C协议错误
0x011D块太多(与模块相关的限制)
0x011E不再与数据库建立连接,或者S7DOS句柄无效
0x011F结果缓冲区太小
0x0120块结束列表
0x0140可用内存不足
0x0141由于缺少资源,无法处理作业
0x8001当块处于当前状态时,无法执行请求的服务
0x8003S7协议错误:传输块时发生错误
0x8100应用程序,一般错误:远程模块未知的服务
0x8104未在模块上实现此服务或报告了帧错误
0x8204对象的类型规范不一致
0x8205复制的块已存在且未链接
0x8301模块上的内存空间或工作内存不足,或者指定的存储介质不可访问
0x8302可用资源太少或处理器资源不可用
0x8304无法进一步并行上传。存在资源瓶颈
0x8305功能不可用
0x8306工作内存不足(用于复制,链接,加载AWP)
0x8307保持性工作记忆不够(用于复制,链接,加载AWP)
0x8401S7协议错误:无效的服务序列(例如,加载或上载块)
0x8402由于寻址对象的状态,服务无法执行
0x8404S7协议:无法执行该功能
0x8405远程块处于DISABLE状态(CFB)。该功能无法执行
0x8500S7协议错误:帧错误
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目前无法运行,因为正在运行的函数会修改内存
0xD0A3I / 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函数参数中的语法错误
0xD205RAM中已存在链接块:无法进行条件复制
0xD206EPROM中已存在链接块:无法进行条件复制
0xD208超出模块的最大复制(未链接)块数
0xD209(至少)模块上找不到给定块之一
0xD20A超出了可以与一个作业链接的最大块数
0xD20B超出了一个作业可以删除的最大块数
0xD20COB无法复制,因为关联的优先级不存在
0xD20DSDB无法解释(例如,未知数)
0xD20E没有(进一步)阻止可用
0xD20F超出模块特定的最大块大小
0xD210块号无效
0xD212标头属性不正确(与运行时相关)
0xD213SDB太多。请注意对正在使用的模块的限制
0xD216无效的用户程序 - 重置模块
0xD217不允许在模块属性中指定的保护级别
0xD218属性不正确(主动/被动)
0xD219块长度不正确(例如,第一部分或整个块的长度不正确)
0xD21A本地数据长度不正确或写保护错误
0xD21B模块无法压缩或压缩早期中断
0xD21D传输的动态项目数据量是非法的
0xD21E无法为模块(例如FM,CP)分配参数。系统数据无法链接
0xD220编程语言无效。请注意对正在使用的模块的限制
0xD221连接或路由的系统数据无效
0xD222全局数据定义的系统数据包含无效参数
0xD223通信功能块的实例数据块错误或超出最大背景数据块数
0xD224SCAN系统数据块包含无效参数
0xD225DP系统数据块包含无效参数
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更新已中止
0xD409DP总线错误
0xD601函数参数中的语法错误
0xD602输入的密码不正确
0xD603连接已合法化
0xD604已启用连接
0xD605由于密码不存在,因此无法进行合法化
0xD801至少有一个标记地址无效
0xD802指定的作业不存在
0xD803非法的工作状态
0xD804非法循环时间(非法时基或多个)
0xD805不能再设置循环读取作业
0xD806引用的作业处于无法执行请求的功能的状态
0xD807功能因过载而中止,这意味着执行读取周期所需的时间比设置的扫描周期时间长
0xDC01日期和/或时间无效
0xE201CPU已经是主设备
0xE202由于闪存模块中的用户程序不同,无法进行连接和更新
0xE203由于固件不同,无法连接和更新
0xE204由于内存配置不同,无法连接和更新
0xE205由于同步错误导致连接/更新中止
0xE206由于协调违规而拒绝连接/更新
0xEF01S7协议错误:ID2错误; 工作中只允许00H
0xEF02S7协议错误:ID2错误; 资源集不存在

附录二:程序服务调用名称

服务名称 | 值(描述)

| :----- | :-----|| UNKNOWN | PI-Service目前不详| _INSE | PI-Service _INSE(激活PLC模块)| _DELE | PI-Service _DELE(从PLC的被动文件系统中删除模块)| P_PROGRAM | PI-Service P_PROGRAM(PLC启动/停止)| _MODU | PI-Service _MODU(PLC Copy Ram to Rom)| _GARB | PI-Service _GARB(压缩PLC内存)| _NLOGIN | PI-Service _NLOGIN(登录)| _N_LOGOUT | PI-Service _N_LOGOUT(退出)| _N_CANCEL | PI-Service _N_CANCEL(取消NC报警)| _N_DASAVE | PI-Service _N_DASAVE(用于将数据从SRAM复制到FLASH的PI-Service)| _N_DIGIOF P| I-Service _N_DIGIOF(关闭数字化)| _N_DIGION | PI-Service _N_DIGION(打开数字化)| _NDZERO | PI-Service _NDZERO(设置所有D nos。对于函数无效\“唯一D号。\”)| _N_ENDEXT | PI-Service _N_ENDEXT()| _N_F_OPER | PI-Service _N_F_OPER(以只读方式打开文件)| _N_OST_OF | PI-Service _N_OST_OF(Overstore OFF)| _N_OST_ON | PI-Service _N_OST_ON(Overstore ON)| _NSCALE | PI-Service _NSCALE(测量单位设置(公制< - > INCH))| _N_SETUFR | PI-Service _N_SETUFR(激活用户帧)| _N_STRTLK | PI-Service _N_STRTLK(设置全局启动禁用)| _N_STRTUL | PI-Service _N_STRTUL(重置全局启动禁用)| _N_TMRASS | PI-Service _N_TMRASS(重置活动状态)| _N_F_DELE | PI-Service _N_F_DELE(删除文件)| _N_EXTERN | PI-Service _N_EXTERN(选择外部程序执行)| _N_EXTMOD | PI-Service _N_EXTMOD(选择外部程序执行)| _N_F_DELR | PI-Service _N_F_DELR(即使没有访问权限也删除文件)| _N_F_XFER | PI-Service _N_F_XFER(选择要上传的文件)| _NLOCKE | PI-Service _NLOCKE(锁定活动文件以进行编辑)| _N_SELECT| PI-Service _N_SELECT(选择要执行的程序)| _N_SRTEXT | PI-Service _N_SRTEXT(文件正在/ _N_EXT_DIR中标记)| _N_F_CLOS | PI-Service _N_F_CLOS(关闭文件)| _N_F_OPEN| PI-Service _N_F_OPEN(打开文件)| _N_F_SEEK| PI-Service _N_F_SEEK(定位文件搜索指针)| _N_ASUP | PI-Service _N_ASUP (分配中断)| _N_CHEKDM | PI-Service _N_CHEKDM(对D号码启动唯一性检查)| _N_CHKDNO | PI-Service _N_CHKDNO(检查工具是否具有唯一的D编号)| _N_CONFIG | PI-Service _N_CONFIG(重新配置机器数据)| _N_CRCEDN | PI-Service _N_CRCEDN(通过指定边数来创建切削刃)| _N_DELECE | PI-Service _N_DELECE(删除最前沿)| _N_CREACE | PI-Service _N_CREACE(创造最前沿)| _N_CREATO| PI-Service _N_CREATO(创建工具)| _N_DELETO| PI-Service _N_DELETO(删除工具)| _N_CRTOCE| PI-Service _N_CRTOCE(生成具有指定边数的工具)| _N_DELVAR | PI-Service _N_DELVAR(删除数据块)| _N_F_COPY| PI-Service _N_F_COPY(复制NCK中的文件)| _N_F_DMDA | PI-Service _N_F_DMDA(删除MDA内存)| _N_F_PROT | PI-Service _N_F_PROT(为文件指定保护级别)| _N_F_RENA | PI-Service _N_F_RENA(重命名文件)| _N_FINDBL | PI-Service _N_FINDBL(激活搜索)| _N_IBN_SS | PI-Service _N_IBN_SS(设置设置开关)| _N_MMCSEM | PI-Service _N_MMCSEM(MMC-Semaphore)| _N_NCKMOD | PI-Service _N_NCKMOD(正在设置NCK工作的模式)| _N_NEWPWD | PI-Service _N_NEWPWD(新密码)| _N_SEL_BL | PI-Service _N_SEL_BL(选择新块)| _N_SETTST | PI-Service _N_SETTST(激活替换工具组的工具)| _N_TMAWCO | PI-Service _N_TMAWCO(在一个杂志中设置有效磨损组)| _N_TMCRTC| PI-Service _N_TMCRTC(创建具有指定边数的工具)| _N_TMCRTO | PI-Service _N_TMCRTO(在工具管理中创建工具)| _N_TMFDPL | PI-Service _N_TMFDPL(搜索空白处加载)| _N_TMFPBP | PI-Service _N_TMFPBP(搜索空位)| _N_TMGETT | PI-Service _N_TMGETT(使用Duplono确定特定工具ID的T编号)| _N_TMMVTL| PI-Service _N_TMMVTL(加载或卸载工具)| _N_TMPCIT| PI-Service _N_TMPCIT(设置计件器的增量值)| _N_TMPOSM | PI-Service _N_TMPOSM(定位杂志或工具)| _N_TRESMO | PI-Service _N_TRESMO(重置监控值)| _N_TSEARC| PI-Service _N_TSEARC(通过搜索屏幕进行复杂搜索)

http://www.ppmy.cn/news/307223.html

相关文章

西门子S7-200或Smart200编程指令讲解——时钟与网络

上一讲我们讲了位逻辑指令&#xff0c;那个是基本的入门指令&#xff0c;这一节我们将会讲解全部的西门子200指令. 1.时钟指令 时钟指令分别为读实时时钟和设置实时时钟 &#xff0c;如图1-1 1. EN是指令使能&#xff0c;为1指令才有效&#xff1b; 2. T是时间缓冲区&#xff0…

S7-PLCSIM Advanced V4.0安装步骤和使用入门

S7-PLCSIM Advanced V4.0安装步骤和使用入门 如下图所示,大家可以在官网上下载安装包, 在安装包中点击“Start.exe”开始安装,如下图所示,如果这时弹出窗口提示需要重启电脑,这里选择“No”, 然后按照下面步骤删除注册表其中的一项,然后再次点击安装即可, 删除上…

S7-1200和S7-1500位逻辑指令

---| |---&#xff1a;常开触点 常开触点的激活取决于相关操作数的信号状态。当操作数的信号状态为“1”时&#xff0c;常开触点将关闭&#xff0c;同时输出的信号状态置位为输入的信号状态。当操作数的信号状态为“0”时&#xff0c;不会激活常开触点&#xff0c;同时该指令输…

西门子S7-1200组态PROFINET

1、首先参照官方给的帮助文档&#xff0c;里面有各种情况下的处理方式和组态教程S7-1200PROFINET通信 2、如果要组态第三方的 PROFINET gateway&#xff0c;比如PROFINET转RS485网关&#xff0c;就需要按照如下的方法进行操作 以sibotech的TS-181为例 通用串口&#xff08;两…

S7-1200PLC与MCGS触摸屏通讯

一、西门子1200PLC 1、以TIA V15为例&#xff0c;创建工程并组态完成&#xff0c;设置PLC的IP。在”防护与安全”—“连接机制”—勾选“允许来自远程对象的PUT/GET通讯访问” 2、创建一个与触摸屏通讯的数据块&#xff0c;以DB2为例&#xff1b;并取消“优化块访问”。 3、在…

西门子PLC的S7协议报文解析说明

我们以S7的1500系列来查看握手和读取、写入【字Word或者位Bit】命令报文 以下报文不做说明时都是十六进制字节。 西门子PLC需要连接成功后发送两次握手命令方可进行读写通信。 西门子PLC的S7协议的头由四个字节组成.。 第一个字节数固定为03,第二个字节数固定为00 第三个字…

西门子S7-1200使用PN口总线控制V90伺服

目录 1、项目拓扑图 2、新建测试工程。 3、V90伺服的GSD文件安装。 4、设备组态。 5、插入轴模块。 6、伺服设置。 7、调试。 8、PLC程序对轴控制 1、项目拓扑图 PN口&#xff0c;即西门子ProfiNet网口。测试使用S7-1200系列的1211C控制器。项目拓扑图如下&#xff1a…

[已解决] 7001 is not configured as a cluster node. // CLUSTERDOWN Hash slot not served redis集群错误总结

7001 is not configured as a cluster node. 原因: vim redis-.conf 时cluster-enabled yes 前面有#(注释状态) CLUSTERDOWN Hash slot not served 原因: