Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[网关开发] 西门子 S7 通信协议概述1

[网关开发] 西门子 S7 通信协议概述1

作者头像
科控物联
发布于 2023-09-01 00:08:04
发布于 2023-09-01 00:08:04
93900
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

如果 S7 是一辆汽车,它可能看起来像这样:

据我所知,S7协议没有公开的文档,但是有一些值得注意的项目可以帮助处理它。Davide Nardella创建了一个出色的开源通信库Snap7,它实现了基本的通信场景。该库附带了有关 S7 协议基本结构的大量文档。另一个伟大的项目是Thomas W.的S7 Wireshark剖析器,它涵盖了大部分协议,其源代码包含一长串协议常量。在我使用西门子设备的这些年里,这些对我来说是无价的。由于没有官方文档,因此在涉及S7协议时不存在官方术语。在本文档的其余部分,我尽量遵守上述项目中使用的术语。

1. 西门子通信场景

在介绍更多技术细节之前,我想简要介绍一下基本的西门子通信影院。当我谈论“S7协议”时,我指的是以太网S7通信,主要用于将PLC连接到(I)PC站(PG / PC - PLC通信)。这不应与西门子设备使用的不同现场总线协议混淆,例如MPI,Profibus,IE和Profinet(这是一种基于以太网的协议,用于将PLC连接到IO模块,而不是设备的管理协议)。

大多数情况下,西门子通信遵循传统的主-从或客户端-服务器模型,其中PC(主/客户端)向现场设备(/服务器)发送S7请求。这些请求用于从设备查询或向设备发送数据或发出某些命令。当PLC可以作为通信主机时,有一些例外,使用FB14 / FB15,设备可以向其他设备发起GETPUT请求。

在S400系列中,实现了所谓的循环数据I / O功能,这类似于传统的发布者 - 订阅者模型。PC可以订阅某些事件,而不是PLC定期将请求的数据推送到网络。还有一个合作伙伴或对等模型,当主动合作伙伴请求连接并调用块发送,同时被动合作伙伴调用块接收方法时。

有关 S7 通信的一般概述的更多信息,请参阅西门子 Simatic Net 和 Snap7 文档。

2. S7 PDU

S7 协议 TCP/IP 实现依赖于面向块的 ISO 传输服务。S7协议包装在TPKTISO-COTP协议中,允许PDU(协议数据单元)通过TCP传输。TCP 通信上的 ISO 在 RFC1006 中定义,ISO-COTP 在基于 ISO 2126 协议 (RFC8073) 的 RFC905 中定义。下图显示了此结构。

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

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

  • 标头:包含长度信息、PDU 引用和消息类型常量
  • 参数:内容和结构因PDU的消息和功能类型而异
  • 数据:如果有的话,携带数据是一个可选字段,例如内存值、块代码、固件数据......等。

2.1 标题

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

Fields:

协议 ID:[1b] 协议常量始终设置为 0x32

消息类型:[1b] 消息的一般类型(有时称为 ROSCTR 类型)

  • 0x01作业请求:由主站发送的请求(例如读/写存储器、读/写块、启动/停止设备、设置通信)
  • 0x02-Ack:由没有数据字段的从站发送的简单确认(我从未见过S300 / S400设备发送)
  • 0x03-Ack-Data:带有可选数据字段的确认,包含对作业请求的回复
  • 0x07-Userdata:原始协议的扩展,参数字段包含请求/响应ID,(用于编程/调试,SZL读取,安全功能,时间设置,循环读取。
  • 保留:[2b] 始终设置为 0x0000(但可能被忽略)
  • PDU参考:[2b]由主站生成,随着每次新传输而递增,用于链接响应他们的请求,小端序(注意:这是WinCC,Step7和其他西门子程序的行为,它可能是随机生成的,PLC只是将其复制到回复中)
  • 参数长度:[2b] 参数字段的长度,大端序
  • 数据长度:[2b] 数据字段的长度,大端序
  • (错误类):[1b] 仅存在于 Ack-Data 消息中,可能的错误常量列在常量中.txt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
# Most of this is extracted from s7comm 
# wireshark dissector plugin sources 
# created by Thomas Wiens <th.wiens[AT]gmx.de>
# Date: 2016-15-03
# Author: Gyorgy Miru
# Version: 0.2
##

#Protocol ID:
0x32 - Protocol ID

#Message Types:
0x01 - Job Request
0x02 - Ack
0x03 - Ack-Data
0x07 - Userdata

#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

#Header Error Codes: (Further refines error)

#Parameter Error Codes:
0x0000 - No error
0x0110 - Invalid block type number
0x0112 - Invalid parameter
0x011A - PG ressource error
0x011B - PLC ressource error
0x011C - Protocol error
0x011F - User buffer too short
0x0141 - Request error
0x01C0 - Version mismatch
0x01F0 - Not implemented
0x8001 - L7 invalid CPU state
0x8500 - L7 PDU size error
0xD401 - L7 invalid SZL ID
0xD402 - L7 invalid index
0xD403 - L7 DGS Connection already announced
0xD404 - L7 Max user NB
0xD405 - L7 DGS function parameter syntax error
0xD406 - L7 no info
0xD601 - L7 PRT function parameter syntax error
0xD801 - L7 invalid variable address
0xD802 - L7 unknown request
0xD803 - L7 invalid request status

#Return value of item response
0x00 - Reserved
0x01 - Hardware fault
0x03 - Accessing the object not allowed
0x05 - Address out of range
0x06 - Data type not supported
0x07 - Data type inconsistent
0x0a - Object does not exist
0xff - Success

#Job Request/Ack-Data function codes
0x00 - CPU services
0xF0 - Setup communication
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
0x29 - PLC Stop

#Memory Areas
0x03 - System info of S200 family
0x05 - System flags of S200 family
0x06 - Analog inputs of S200 family
0x07 - Analog outputs of S200 family
0x1C - S7 counters (C)
0x1D - S7 timers (T)
0x1E - IEC counters (200 family)
0x1F - IEC timers (200 family)
0x80 - Direct peripheral access (P)
0x81 - Inputs (I)
0x82 - Outputs (Q)
0x83 - Flags (M) (Merker)
0x84 - Data blocks (DB)
0x85 - Instance data blocks (DI)
0x86 - Local data (L)
0x87 - Unknown yet (V)

#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

#Variable ddressing mode
0x10 - S7-Any pointer (regular addressing) memory+variable length+offset
0xa2 - Drive-ES-Any seen on Drive ES Starter with routing over S7
0xb2 - S1200/S1500? Symbolic addressing mode
0xb0 - Special DB addressing for S400 (subitem read/write)

#Transport size in data
0x00 - NULL
0x03 - BIT
0x04 - BYTE/WORD/DWORD
0x05 - INTEGER
0x07 - REAL
0x09 - OCTET STRING

#Block type constants
'08' - OB
'0A' - DB
'0B' - SDB
'0C' - FC
'0D' - SFC
'0E' - FB
'0F' - SFB

#Sub block types
0x08 - OB
0x0a - DB
0x0b - SDB
0x0c - FC
0x0d - SFC
0x0e - FB
0x0f - SFB

#Block security mode
0 - None
3 - Kow How Protect

#Block Language
0x00 - Not defined
0x01 - AWL
0x02 - KOP
0x03 - FUP
0x04 - SCL
0x05 - DB
0x06 - GRAPH
0x07 - SDB
0x08 - CPU-DB DB was created from Plc programm (CREAT_DB)
0x11 - SDB (after overall reset) another SDB, don't know what it means, in SDB 1 and SDB 2, uncertain
0x12 - SDB (Routing) another SDB, in SDB 999 and SDB 1000 (routing information), uncertain
0x29 - ENCRYPT  block is encrypted (encoded?) with S7-Block-Privacy

#Userdata transmission type
0x0 - Push cyclic data push by the PLC
0x4 - Request by the master
0x8 - Response by the slave

#Userdata last PDU
0x00 - Yes
0x01 - No

#Userdata Functions
0x1 - Programmer commands
0x2 - Cyclic data
0x3 - Block functions
0x4 - CPU functions
0x5 - Security
0x7 - Time functions

#Variable table type of data
0x14 - Request
0x04 - Response

#VAT area and length type
0x01 - MB
0x02 - MW
0x03 - MD
0x11 - IB
0x12 - IW
0x13 - ID
0x21 - QB
0x22 - QW
0x23 - QD
0x31 - PIB
0x32 - PIW
0x33 - PID
0x71 - DBB
0x72 - DBW
0x73 - DBD
0x54 - TIMER
0x64 - COUNTER

#Userdata programmer subfunctions
0x01 - Request diag data (Type 1)
0x02 - VarTab
0x0c - Erase
0x0e - Read diag data
0x0f - Remove diag data
0x10 - Forces
0x13 - Request diag data (Type2)

#Userdata cyclic data subfunctions
0x01 - Memory
0x04 - Unsubscribe

#Userdata block subfunctions
0x01 - List blocks
0x02 - List blocks of type
0x03 - Get block info

#Userdata CPU subfunctions
0x01 - Read SZL
0x02 - Message service
0x03 - Transition to stop
0x0b - Alarm was acknowledged in HMI/SCADA 1
0x0c - Alarm was acknowledged in HMI/SCADA 2
0x11 - PLC is indicating a ALARM message
0x13 - HMI/SCADA initiating ALARM subscription


#Userdata security subfunctions
0x01 - PLC password

#Userdata time subfunctions
0x01 - Read clock
0x02 - Set clock
0x03 - Read clock (following)
0x04 - Set clock

#Flags for LID access
0x2 - Encapsulated LID
0x3 - Encapsulated Index
0x4 - Obtain by LID
0x5 - Obtain by Index
0x6 - Part Start Address
0x7 - Part Length

#TIA 1200 area names
0x8a0e - DB
0x0000 - IQMCT
0x50 - Inputs (I)
0x51 - Outputs (Q)
0x52 - Flags (M)
0x53 - Counter (C)
0x54 - Timer (T)
  • (错误代码):[1b] 仅存在于 Ack-Data 消息中,可能的错误常量列在常量中.txt
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
# Most of this is extracted from s7comm 
# wireshark dissector plugin sources 
# created by Thomas Wiens <th.wiens[AT]gmx.de>
# Date: 2016-15-03
# Author: Gyorgy Miru
# Version: 0.2
##

#Protocol ID:
0x32 - Protocol ID

#Message Types:
0x01 - Job Request
0x02 - Ack
0x03 - Ack-Data
0x07 - Userdata

#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

#Header Error Codes: (Further refines error)

#Parameter Error Codes:
0x0000 - No error
0x0110 - Invalid block type number
0x0112 - Invalid parameter
0x011A - PG ressource error
0x011B - PLC ressource error
0x011C - Protocol error
0x011F - User buffer too short
0x0141 - Request error
0x01C0 - Version mismatch
0x01F0 - Not implemented
0x8001 - L7 invalid CPU state
0x8500 - L7 PDU size error
0xD401 - L7 invalid SZL ID
0xD402 - L7 invalid index
0xD403 - L7 DGS Connection already announced
0xD404 - L7 Max user NB
0xD405 - L7 DGS function parameter syntax error
0xD406 - L7 no info
0xD601 - L7 PRT function parameter syntax error
0xD801 - L7 invalid variable address
0xD802 - L7 unknown request
0xD803 - L7 invalid request status

#Return value of item response
0x00 - Reserved
0x01 - Hardware fault
0x03 - Accessing the object not allowed
0x05 - Address out of range
0x06 - Data type not supported
0x07 - Data type inconsistent
0x0a - Object does not exist
0xff - Success

#Job Request/Ack-Data function codes
0x00 - CPU services
0xF0 - Setup communication
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
0x29 - PLC Stop

#Memory Areas
0x03 - System info of S200 family
0x05 - System flags of S200 family
0x06 - Analog inputs of S200 family
0x07 - Analog outputs of S200 family
0x1C - S7 counters (C)
0x1D - S7 timers (T)
0x1E - IEC counters (200 family)
0x1F - IEC timers (200 family)
0x80 - Direct peripheral access (P)
0x81 - Inputs (I)
0x82 - Outputs (Q)
0x83 - Flags (M) (Merker)
0x84 - Data blocks (DB)
0x85 - Instance data blocks (DI)
0x86 - Local data (L)
0x87 - Unknown yet (V)

#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

#Variable ddressing mode
0x10 - S7-Any pointer (regular addressing) memory+variable length+offset
0xa2 - Drive-ES-Any seen on Drive ES Starter with routing over S7
0xb2 - S1200/S1500? Symbolic addressing mode
0xb0 - Special DB addressing for S400 (subitem read/write)

#Transport size in data
0x00 - NULL
0x03 - BIT
0x04 - BYTE/WORD/DWORD
0x05 - INTEGER
0x07 - REAL
0x09 - OCTET STRING

#Block type constants
'08' - OB
'0A' - DB
'0B' - SDB
'0C' - FC
'0D' - SFC
'0E' - FB
'0F' - SFB

#Sub block types
0x08 - OB
0x0a - DB
0x0b - SDB
0x0c - FC
0x0d - SFC
0x0e - FB
0x0f - SFB

#Block security mode
0 - None
3 - Kow How Protect

#Block Language
0x00 - Not defined
0x01 - AWL
0x02 - KOP
0x03 - FUP
0x04 - SCL
0x05 - DB
0x06 - GRAPH
0x07 - SDB
0x08 - CPU-DB DB was created from Plc programm (CREAT_DB)
0x11 - SDB (after overall reset) another SDB, don't know what it means, in SDB 1 and SDB 2, uncertain
0x12 - SDB (Routing) another SDB, in SDB 999 and SDB 1000 (routing information), uncertain
0x29 - ENCRYPT  block is encrypted (encoded?) with S7-Block-Privacy

#Userdata transmission type
0x0 - Push cyclic data push by the PLC
0x4 - Request by the master
0x8 - Response by the slave

#Userdata last PDU
0x00 - Yes
0x01 - No

#Userdata Functions
0x1 - Programmer commands
0x2 - Cyclic data
0x3 - Block functions
0x4 - CPU functions
0x5 - Security
0x7 - Time functions

#Variable table type of data
0x14 - Request
0x04 - Response

#VAT area and length type
0x01 - MB
0x02 - MW
0x03 - MD
0x11 - IB
0x12 - IW
0x13 - ID
0x21 - QB
0x22 - QW
0x23 - QD
0x31 - PIB
0x32 - PIW
0x33 - PID
0x71 - DBB
0x72 - DBW
0x73 - DBD
0x54 - TIMER
0x64 - COUNTER

#Userdata programmer subfunctions
0x01 - Request diag data (Type 1)
0x02 - VarTab
0x0c - Erase
0x0e - Read diag data
0x0f - Remove diag data
0x10 - Forces
0x13 - Request diag data (Type2)

#Userdata cyclic data subfunctions
0x01 - Memory
0x04 - Unsubscribe

#Userdata block subfunctions
0x01 - List blocks
0x02 - List blocks of type
0x03 - Get block info

#Userdata CPU subfunctions
0x01 - Read SZL
0x02 - Message service
0x03 - Transition to stop
0x0b - Alarm was acknowledged in HMI/SCADA 1
0x0c - Alarm was acknowledged in HMI/SCADA 2
0x11 - PLC is indicating a ALARM message
0x13 - HMI/SCADA initiating ALARM subscription


#Userdata security subfunctions
0x01 - PLC password

#Userdata time subfunctions
0x01 - Read clock
0x02 - Set clock
0x03 - Read clock (following)
0x04 - Set clock

#Flags for LID access
0x2 - Encapsulated LID
0x3 - Encapsulated Index
0x4 - Obtain by LID
0x5 - Obtain by Index
0x6 - Part Start Address
0x7 - Part Length

#TIA 1200 area names
0x8a0e - DB
0x0000 - IQMCT
0x50 - Inputs (I)
0x51 - Outputs (Q)
0x52 - Flags (M)
0x53 - Counter (C)
0x54 - Timer (T)

消息的其余部分在很大程度上取决于消息类型和函数代码,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##
# Most of this is extracted from s7comm 
# wireshark dissector plugin sources 
# created by Thomas Wiens <th.wiens[AT]gmx.de>
# Date: 2016-15-03
# Author: Gyorgy Miru
# Version: 0.2
##

#Protocol ID:
0x32 - Protocol ID

#Message Types:
0x01 - Job Request
0x02 - Ack
0x03 - Ack-Data
0x07 - Userdata

#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

#Header Error Codes: (Further refines error)

#Parameter Error Codes:
0x0000 - No error
0x0110 - Invalid block type number
0x0112 - Invalid parameter
0x011A - PG ressource error
0x011B - PLC ressource error
0x011C - Protocol error
0x011F - User buffer too short
0x0141 - Request error
0x01C0 - Version mismatch
0x01F0 - Not implemented
0x8001 - L7 invalid CPU state
0x8500 - L7 PDU size error
0xD401 - L7 invalid SZL ID
0xD402 - L7 invalid index
0xD403 - L7 DGS Connection already announced
0xD404 - L7 Max user NB
0xD405 - L7 DGS function parameter syntax error
0xD406 - L7 no info
0xD601 - L7 PRT function parameter syntax error
0xD801 - L7 invalid variable address
0xD802 - L7 unknown request
0xD803 - L7 invalid request status

#Return value of item response
0x00 - Reserved
0x01 - Hardware fault
0x03 - Accessing the object not allowed
0x05 - Address out of range
0x06 - Data type not supported
0x07 - Data type inconsistent
0x0a - Object does not exist
0xff - Success

#Job Request/Ack-Data function codes
0x00 - CPU services
0xF0 - Setup communication
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
0x29 - PLC Stop

#Memory Areas
0x03 - System info of S200 family
0x05 - System flags of S200 family
0x06 - Analog inputs of S200 family
0x07 - Analog outputs of S200 family
0x1C - S7 counters (C)
0x1D - S7 timers (T)
0x1E - IEC counters (200 family)
0x1F - IEC timers (200 family)
0x80 - Direct peripheral access (P)
0x81 - Inputs (I)
0x82 - Outputs (Q)
0x83 - Flags (M) (Merker)
0x84 - Data blocks (DB)
0x85 - Instance data blocks (DI)
0x86 - Local data (L)
0x87 - Unknown yet (V)

#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

#Variable ddressing mode
0x10 - S7-Any pointer (regular addressing) memory+variable length+offset
0xa2 - Drive-ES-Any seen on Drive ES Starter with routing over S7
0xb2 - S1200/S1500? Symbolic addressing mode
0xb0 - Special DB addressing for S400 (subitem read/write)

#Transport size in data
0x00 - NULL
0x03 - BIT
0x04 - BYTE/WORD/DWORD
0x05 - INTEGER
0x07 - REAL
0x09 - OCTET STRING

#Block type constants
'08' - OB
'0A' - DB
'0B' - SDB
'0C' - FC
'0D' - SFC
'0E' - FB
'0F' - SFB

#Sub block types
0x08 - OB
0x0a - DB
0x0b - SDB
0x0c - FC
0x0d - SFC
0x0e - FB
0x0f - SFB

#Block security mode
0 - None
3 - Kow How Protect

#Block Language
0x00 - Not defined
0x01 - AWL
0x02 - KOP
0x03 - FUP
0x04 - SCL
0x05 - DB
0x06 - GRAPH
0x07 - SDB
0x08 - CPU-DB DB was created from Plc programm (CREAT_DB)
0x11 - SDB (after overall reset) another SDB, don't know what it means, in SDB 1 and SDB 2, uncertain
0x12 - SDB (Routing) another SDB, in SDB 999 and SDB 1000 (routing information), uncertain
0x29 - ENCRYPT  block is encrypted (encoded?) with S7-Block-Privacy

#Userdata transmission type
0x0 - Push cyclic data push by the PLC
0x4 - Request by the master
0x8 - Response by the slave

#Userdata last PDU
0x00 - Yes
0x01 - No

#Userdata Functions
0x1 - Programmer commands
0x2 - Cyclic data
0x3 - Block functions
0x4 - CPU functions
0x5 - Security
0x7 - Time functions

#Variable table type of data
0x14 - Request
0x04 - Response

#VAT area and length type
0x01 - MB
0x02 - MW
0x03 - MD
0x11 - IB
0x12 - IW
0x13 - ID
0x21 - QB
0x22 - QW
0x23 - QD
0x31 - PIB
0x32 - PIW
0x33 - PID
0x71 - DBB
0x72 - DBW
0x73 - DBD
0x54 - TIMER
0x64 - COUNTER

#Userdata programmer subfunctions
0x01 - Request diag data (Type 1)
0x02 - VarTab
0x0c - Erase
0x0e - Read diag data
0x0f - Remove diag data
0x10 - Forces
0x13 - Request diag data (Type2)

#Userdata cyclic data subfunctions
0x01 - Memory
0x04 - Unsubscribe

#Userdata block subfunctions
0x01 - List blocks
0x02 - List blocks of type
0x03 - Get block info

#Userdata CPU subfunctions
0x01 - Read SZL
0x02 - Message service
0x03 - Transition to stop
0x0b - Alarm was acknowledged in HMI/SCADA 1
0x0c - Alarm was acknowledged in HMI/SCADA 2
0x11 - PLC is indicating a ALARM message
0x13 - HMI/SCADA initiating ALARM subscription


#Userdata security subfunctions
0x01 - PLC password

#Userdata time subfunctions
0x01 - Read clock
0x02 - Set clock
0x03 - Read clock (following)
0x04 - Set clock

#Flags for LID access
0x2 - Encapsulated LID
0x3 - Encapsulated Index
0x4 - Obtain by LID
0x5 - Obtain by Index
0x6 - Part Start Address
0x7 - Part Length

#TIA 1200 area names
0x8a0e - DB
0x0000 - IQMCT
0x50 - Inputs (I)
0x51 - Outputs (Q)
0x52 - Flags (M)
0x53 - Counter (C)
0x54 - Timer (T)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
S7Comm报文详解
S7协议是西门子公司为其S7系列PLC(可编程逻辑控制器)通信而设计的一种专用协议。S7协议主要用于西门子PLC之间的通信,以及PLC与其他设备的通信。该协议支持多种通信方式,如MPI(多点接口)、PROFIBUS和Industrial Ethernet等。S7协议的报文结构相对复杂,可分为多个层次。
杜衡老师
2024/03/28
5210
S7Comm报文详解
[ffffffff0x] 工控协议:S7COMM协议分析(下)
在上一篇文章中,我们介绍了S7Comm协议的S7Comm Header和Job 和 Ack_Data机制。本篇文章,我们将继续介绍S7Comm协议的Userdata 协议拓展并结合pcap流量包实际分析。
r0fus0d
2021/01/18
1.8K0
[ffffffff0x] 工控协议:S7COMM协议分析(下)
[网关开发] 西门子 S7 通信协议概述2
S7 PDU 的结构和通用协议标头在上一部分进行了说明。但是,参数标头特定于消息类型,对于作业和 Ack 数据消息,它以函数代码开头。其余字段的结构取决于此值。此函数代码确定消息的用途,并作为进一步讨论的基础。
科控物联
2023/09/01
1.7K0
[网关开发] 西门子 S7 通信协议概述2
ESP32开发之旅——RC522模块的使用
​ 射频识别RFID(Radio Frequency Identification)是一种无线数据传输系统,用于在标签和读取器设备之间传输数据,而RC522模块则是用于读取和写入RFID卡和标签,该模块的工作频率为13.56MHz。
全栈程序员站长
2022/09/14
2K0
[ffffffff0x] 工控协议:S7COMM协议分析(上)
在上一篇文章中,我们通过模拟器环境实现了S7-300的启停实验。本次文章,我们将详细介绍S7comm协议的S7Comm Header和Job 和 Ack_Data机制并抓包分析其请求和相应报文。
r0fus0d
2021/01/18
4.2K0
[ffffffff0x] 工控协议:S7COMM协议分析(上)
手把手教你手撸通讯协议(一) S7协议解析
当网卡接收到来自外部调解好的电平信号,网卡将电信号转化为数据缓存到网卡缓存区,然后通过DMA协议将数据同步到内存区域中,CPU直接访问内存,将网卡的数据进行截取,并将截取好的数据发送到应用程序进行拆包解析。
剑指工控
2022/03/11
4.3K0
手把手教你手撸通讯协议(一) S7协议解析
hostbyte=DID_XXX driverbyte=DRIVER_XXXX 错误查询
1. hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
PedroQin
2020/02/12
9.1K0
欧姆龙通信协议 FINS 2.0
欧姆龙全球制造用于工业和制造业的机器。FINS用于通过网络控制其中一些机器。FINS以太网协议基于OSI模型:
天钧
2020/07/03
3.4K0
欧姆龙通信协议 FINS 2.0
C++ 中文周刊 2025-01-12 第175期
另外这个大哥写了个json库很快。和glaze有一拼 https://github.com/RealTimeChris/Jsonifier/
王很水
2025/02/04
900
C++ 中文周刊 2025-01-12 第175期
Modbus TCP 入门学习[通俗易懂]
记录下我入门学习的过程,供日后回看,文字部分多是转载他人blog,有注明来源地址;实验部分为真实测试结果。
全栈程序员站长
2022/11/17
2.2K0
Modbus TCP 入门学习[通俗易懂]
Python Scrapy 爬虫框架 | 3、利用 Scrapy 爬取博客文章详细信息
在之前的文章中,会发现如果直接使用爬取命令,终端会回显很多调试信息,这样输出的内容就会显得很乱,所以就可以使用下面的命令:
TeamsSix
2019/12/30
7890
西门子S7comm-plus通信过程及重放攻击分析
西门子PLC广泛应用于工业控制系统。本文主要利用手上S7-1200 V3.0.2 固件版本的PLC和TIA13等环境进行S7comm-plus加密协议初步分析及防重放攻击分析,本文章只做交流学习使用,禁止应用于非法用途,欢迎各路大神进行交流,共同学习进步。
FB客服
2019/12/27
2.1K0
西门子S7comm-plus通信过程及重放攻击分析
【MODBUS】Modbus-TCP数据帧
PDU:协议数据单元,Modbus PDU(protocol data unit)
帐篷Li-物联网布道师
2024/03/19
5410
【MODBUS】Modbus-TCP数据帧
工业以太网杂谈(二)
上一节和大家分享了WireShark对Modbus TCP/IP的解析(点击查看),本节和大家来聊一聊西门子工业以太网,谈到西门子工业以太网,我认为有些工程师还是比较混淆,会很简单的认为西门子工业以太网就是ProfiNet,其实不然,西门子工业以太网包含如下几种:
剑指工控
2022/11/14
1.3K0
工业以太网杂谈(二)
怎么自己定义一个串口通讯协议?(内附案例分析)
对于串口,我们知道不管是RS232还是RS485、RS422这些典型的串口标准通讯协议,只是定义了部分物理层,对于数据链路层等基本没有涉及,这也就体现了串口协议的灵活性,没有统一的标准,需要使用者自己来定义合适的数据协议来传输自己的数据。
IT大咖说
2021/06/15
7.4K0
怎么自己定义一个串口通讯协议?(内附案例分析)
【愚公系列】2023年05月 攻防世界-MOBILE(LoopCrypto)
Objection是一款移动设备运行时漏洞利用工具,该工具由Frida驱动,可以帮助研究人员访问移动端应用程序,并在无需越狱或root操作的情况下对移动端应用程序的安全进行评估检查。
愚公搬代码
2023/05/03
6210
【愚公系列】2023年05月 攻防世界-MOBILE(LoopCrypto)
【测试】python 模拟snmp-se
如下脚本,模拟windows和linux上的snmp-agent,返回数据给snmp请求者。
py3study
2020/01/10
1.2K0
Gameboy游戏开发-精灵入门
上一节课我们展示了一个最简单的人物在屏幕内移动的例子,但人物移动时并没有配合的动画,这次我们来个高级版本的。在GB内我们管所有移动的物体都叫做精灵(Sprite)。组成精灵的瓦块(Tile)是一个8x8的像素组合。每个瓦块是一堆0或1位的组合,如果手工画这个肯定会疯掉。我们可以使用Gameboy Tile Designer(以下简称gbtd)来进行瓦块的绘画。
海哥@开发
2022/04/06
5070
Gameboy游戏开发-精灵入门
44.Linux君正X1000-添加st7789v显示
由于板子LCD旧屏是ili9335型号的,旧屏有时候会断货,如果断货则使用一个st7789v型号的LCD
诺谦
2018/08/31
1.7K0
44.Linux君正X1000-添加st7789v显示
C/C++ 实现ShellCode编写与提取
简单来说,shell code 的核心就是把代码写成 “与地址无关” 的风格,让它不论是在什么环境下都可以被执行,此段代码可实现C++开发shellcode代码,并提取出其中的机器码的作用。
王 瑞
2022/12/28
5840
C/C++ 实现ShellCode编写与提取
相关推荐
S7Comm报文详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验