基于信捷HMI和西门子S7-1200的TCP通信解析

一、设置 IP 地址

  1. 物理连接
  分别将 HMI 和 S7-1200 连接到交换机的通信网口,电脑端连接到交换机的监控口。

图1.1.1 连接交换机

  2. IP设置
  (1)设置 S7-1200 的 IP 地址为 192.168.0.1
   选择目标 PLC ,右击选择“属性”,打开 PLC 属性配置。

图1.2.1 设备属性配置

  选择“ PROFINET 接口”栏,修改“ IP 协议”中“ IP 地址”。

图1.2.2 配置 IP 地址

  编译后下载到设备,搜索当前节点中目标设备,确认设备后下载。

图1.2.3 搜索设备
图1.2.4 确认下载

  (2)设置 HMI 的 IP 地址为 192.168.0.2
   选择目标工程 ,右击选择“属性”,打开属性配置。

图1.2.5 系统属性配置

  选择“设备”栏 ,选择“以太网设备”,配置本机使用 IP 地址。

图1.2.6 配置本机 IP 地址

  选择“以太网设备”,右击新建目标设备,配置目标设备协议。

图1.2.7 新建目标设备
图1.2.8 配置目标设备协议

  (3)设置电脑以太网接口的 IP 地址为 192.168.0.5

图1.2.9 设置电脑以太网地址

二、软件程序

  1. 西门子 S7-1200
  注:西门子 S7-1200 中元件 I 、 Q 和 M 可以直接正常读写, DB 数据块必须添加和配置后才能正常读写, DB 数据块范围为1到99。
  (1)新增 DB1 到 DB4 四个数据块。

图2.1.1 新增 DB 数据块

  (2)四个数据块中数据配置相同,只使用了前16个 Byte ,以 DB1 为例进行配置。

图2.1.2 配置 DB 块中使用数据

  (3)配置完成后,下载到 S7-1200 后,重新启动后生效。
  2. 信捷 HMI
  (1)按 Byte 读取 I0 ,按 Word 读取 I1 ,按 DWord 读取 I2 。
  (2)按 Byte 读取 Q0 ,按 Word 读取 Q2 ,按 DWord 读取 Q4 。
  (3)按 Byte 读取 M0 ,按 Word 读取 M4 ,按 DWord 读取 M8 。
  (4)按 Byte 读取 DB1-0 ,按 Word 读取 DB1-1 ,按 DWord 读取 DB1-2 。
  (5)按 Byte 读取 DB2-0 ,按 Word 读取 DB2-2 ,按 DWord 读取 DB2-4 。
  (6)按 Byte 读取 DB3-0 ,按 Word 读取 DB3-4 ,按 DWord 读取 DB3-8。
  (7)按 DWord 读取 DB4-0 、 DB4-2 、 DB4-4 、 DB4-6 、 DB4-8 、 DB4-10 和 DB4-12 ,按 Word 读取 DB4-14 。

图2.2.1 信捷 HMI 程序

三、使用 Wireshark 抓包

  1. 启动抓包工程
  在“ Interface List ”中选择“以太网”,点击“ Start ”。

图3.1.1 启动抓包工程

  2. 设置过滤规则
  在“ Filter ”中输入“ ip.addr == 192.168.0.1 ”,只显示与 192.168.0.1 有关的通信包。

图3.2.1 启动抓包工程

四、协议分析

  1、TPKT层
  4个 Byte :Version( 0x03 ) + Reserved( 0x00 ) + Length(2个 Byte ,高字节在前)。
  2、COTP层
  3个 Byte :Length( 0x02 ) + PDU Type( DT Data ,0x0f ) + TPDU number(.000 0000,0x80 )。
  3、COMMUNICATION层
  发包包含头部( Header )和参数( Parameter )两个部分,发包包含头部( Header )、参数( Parameter )和数据( Data )三个部分。
  (1)头部( Header )
  Byte[ 0 ]:协议 ID ,一般指定为 0x32 。
  Byte[ 1 ]:PDU 类型 ,一般有 0x01( Job ,主设备发起请求)、 0x02( Ack ,确认请求)、0x03( Ack_data ,确认数据响应,一般作为确认 0x01 请求)和0x07( USERDATA ,协议的扩展,参数字段包含请求/响应 ID )。
  Byte[ 2 ] - Byte[ 3 ]:冗余数据,一般指定为 0x0000 。
  Byte[ 4 ] - Byte[ 5 ]:协议数据单元的参考 ,通过请求事件增加。
  Byte[ 6 ] - Byte[ 7 ]:参数 Parameter 总长度。
  Byte[ 8 ] - Byte[ 9 ]:数据 Data 的长度,无data部分即为 0x0000 。
  注:以上部分,发包和回包相同,各功能码相同,以下部分只在回包中出现:
  Byte[ 10 ]:错误类型( Error class),一般为 0x00 。
  Byte[ 11 ]:错误代码( Error code),一般为 0x00 。
  (2)参数( Parameter )
  以读取数据( 0x04 )为例,发包:
  Byte[ 10 ]:功能码,读取数据为 0x04,详情见功能码附录。
  Byte[ 11 ]:单元个数( Item count )。
  Byte[ 12 ]:结构标识,代表变量规范,一般为 0x12 。
  Byte[ 13 ]:长度规范,自此往后的长度,一般为 0x0a 。
  Byte[ 14 ]:IDS的地址规范的格式类型,一般为 0x10 ,详情见 IDS 地址规范附录。
  Byte[ 15 ]:数据传输大小,一般为 0x02, 详情见数值传输码附录。
  Byte[ 16 ] - Byte[ 17 ]:数据长度。
  Byte[ 18 ] - Byte[ 19 ]:DB 编号,如果访问的不是 DB 区域为 0x0000 。
  Byte[ 20 ]:数据的区域,详情见数据区域码附录。
  Byte[ 21 ] - Byte[ 23 ]:要读取数据的地址。
  以读取数据( 0x04 )为例,回包:
  Byte[ 12 ]:功能码,读取数据为 0x04,详情见功能码附录。
  Byte[ 13 ]:单元个数( Item count )。
  (3)数据( Data )
  以读取数据( 0x04 )为例,回包:
  Byte[ 14 ]:返回码,一般为 0xff ,详情见返回码附录。
  Byte[ 15 ]:数据传输大小,一般为 0x02, 详情见数值传输码附录。
  Byte[ 16 ] - Byte[ 17 ]:数据长度。
  Byte[ 18 ]:自此开始即为数据,如果数据长度不满足会填充 0x00 。

五、抓包分析

  1. 握手一
  此处不做详细解释,有兴趣的可以自行了解。

图4.1.1 握手一包一
图4.1.2 握手一包二
图4.1.3 握手一包三

  2. 握手二
  此处不做详细解释,有兴趣的可以自行了解。

图4.2.1 握手二包一
图4.2.2 握手二包二

  3. 握手三
  此处不做详细解释,有兴趣的可以自行了解。

图4.3.1 握手三包一
图4.3.2 握手三包二

  4. 数据交互
  (1) 读取请求1
  头部部分: PDU 类型为 0x01 (主设备发起请求),参数部分总长度为98( 0x0062 )个 Byte ,无数据部分。
  参数部分:功能码为 0x04(读取数值),8个单元,每个单元12个 Byte ,前4个 Byte 相同( 0x12 + 0x0A + 0x10 + 0x02 ),其余8个 Byte 含义分别如下:
  1)单元1:00 06 00 00 81 00 00 00
  数据长度为6个 Byte, I 数据区域,起始地址为 0x000000 。
  2)单元2:00 08 00 00 82 00 00 00
  数据长度为8个 Byte, Q 数据区域,起始地址为 0x000000 。
  3)单元3:00 01 00 00 83 00 00 00
  数据长度为1个 Byte, M 数据区域,起始地址为 0x000000 。
  4)单元4:00 08 00 00 83 00 00 20
  数据长度为8个 Byte, M 数据区域,起始地址为 0x000020 。
  5)单元5:00 06 00 01 84 00 00 00
  数据长度为6个 Byte,DB1 数据区域,起始地址为 0x000000 。
  6)单元6:00 08 00 02 84 00 00 00
  数据长度为8个 Byte,DB2 数据区域,起始地址为 0x000000 。
  7)单元7:00 01 00 03 84 00 00 00
  数据长度为1个 Byte,DB3 数据区域,起始地址为 0x000000 。
  8)单元8:00 08 00 03 84 00 00 20
  数据长度为8个 Byte,DB3 数据区域,起始地址为 0x000020 。

图4.4.1 读取请求1

  (2) 读取返回1
  头部部分: PDU 类型为 0x03 (确认数据响应),参数部分总长度为2( 0x0062 )个 Byte ,数据部分总长度80( 0x0050 )。
  参数部分:功能码为 0x04(读取数值),8个单元,一般情况每个单元前2个 Byte 相同(0xff + 0x04,读取成功,按 Byte / Word / DWord 读取,长度按 Bit 计算),其余 Byte 含义分别如下:
  1)单元1:00 30 00 00 00 00 00 00
  数据长度为48( 0x30 )个 Bit ,I0( Byte ) = 0x00 , I1( Word ) = 0x0000, I2( DWord ) = 0x00000000 。
  2)单元2:00 40 00 00 00 00 00 00 00 00
  数据长度为64( 0x40 )个 Bit ,Q0( Byte ) = 0x00 ,Q2( Word ) = 0x0000, Q4( DWord ) = 0x00000000 。
  3)单元3:00 08 00 00
  数据长度为8( 0x8 )个 Bit ,M0( Byte ) = 0x00 。
  4)单元4:00 40 00 00 00 00 00 00 00 00
  数据长度为64( 0x40 )个 Bit ,M4( Word ) = 0x0000, M8( DWord ) = 0x00000000 。
  5)单元5:00 30 00 01 02 03 04 05
  数据长度为48( 0x30 )个 Bit ,DB1.0( Byte ) = 0x00, DB1.1( Word ) = 0x0102, DB1.2( DWord ) = 0x02030405。
  6)单元6:00 40 00 01 02 03 04 05 06 07
  数据长度为64( 0x40 )个 Bit ,DB2.0( Byte ) = 0x00, DB1.2( Word ) = 0x0203, DB2.4( DWord ) = 0x04050607。
  7)单元7:00 08 00 00
  数据长度为8( 0x08 )个 Bit ,DB3.0( Byte ) = 0x00 。
  8)单元8:00 40 04 05 06 07 08 09 0a 0b
  数据长度为64( 0x40 )个 Bit ,DB3.4( Word ) = 0x0405, DB3.8( DWord ) = 0x08090a0b。

图4.4.2 读取返回1

  (3) 读取请求2
  头部部分: PDU 类型为 0x01 (主设备发起请求),参数部分总长度为26
( 0x001a )个 Byte ,无数据部分。
  参数部分:功能码为 0x04(读取数值),2个单元,每个单元12个 Byte ,前4个 Byte 相同( 0x12 + 0x0A + 0x10 + 0x02 ),其余8个 Byte 含义分别如下:
  1)单元1:00 08 00 04 84 00 00 00
  数据长度为8个 Byte, DB4 数据区域,起始地址为 0x000000 。
  2)单元2:00 08 00 04 84 00 00 40
  数据长度为8个 Byte, DB4 数据区域,起始地址为 0x000040 。

图4.4.3 读取请求2

  (4) 读取返回2
  头部部分: PDU 类型为 0x03 (确认数据响应),参数部分总长度为2( 0x0062 )个 Byte ,数据部分总长度24( 0x0018 )。
  参数部分:功能码为 0x04(读取数值),2个单元,一般情况每个单元前2个 Byte 相同(0xff + 0x04,读取成功,按 Byte / Word / DWord 读取,长度按 Bit 计算),其余 Byte 含义分别如下:
  1)单元1:00 40 00 01 02 03 04 05 06 07
  数据长度为64( 0x40 )个 Bit ,DB4.0( DWord ) = 0x00010203, DB4.2( DWord ) = 0x02030405,DB4.4( DWord ) = 0x04050607 。
  2)单元2:00 40 08 09 0a 0b 0c 0d 0e 0f
  数据长度为64( 0x40 )个 Bit ,DB4.6( DWord ) = 0x06070809, DB4.8( DWord ) = 0x08090a0b,DB4.10( DWord ) = 0x0a0b0c0d,DB4.12( DWord ) = 0x0c0d0e0f,DB4.14( Word ) = 0x0e0f 。

图4.4.4 读取返回2

六、附录:功能码

功能码含义
0x00CPU serivces ,CPU服务
0xf0Setup communication ,建立通讯
0x04Read Var ,读取值
0x05Write Var ,写入值
0x1aRequest download ,请求下载
0x1bDownload block ,下载块
0x1cDownload ended ,下载结束
0x1dStart upload ,开始上传
0x1eUpload ,上传
0x1fEnd upload ,上传结束
0x28PI-Service ,程序调用服务
0x29PLC Stop ,关闭 PLC

七、附录:IDS 地址规范码

功能码含义
0x10S7ANY Address data S7-Any pointer-like DB1.DBX10.2
0x13PBC-R_ID R_ID for PBC
0x15ALARM_LOCKFREE Alarm lock/free dataset
0x16ALARM_IND Alarm indication dataset
0x19ALARM_ACK Alarm acknowledge message dataset
0x1aALARM_QUERYREQ Alarm query request dataset
0x1cNOTIFY_IND Notify indication dataset
0xa2DRIVEESANY seen on Drive ES Starter with routing over S7
0xb21200SYM Symbolic address mode of S7-1200
0xb0DBREAD Kind of DB block read, seen only at an S7-400
0x82NCK Sinumerik NCK HMI access

八、附录:数值传输码

功能码含义
0NULL
3BIT bit access ,len is in bits
4BYTE/WORD/DWORD byte/word/dword access ,len is in bits
5INTEGER integer access ,len is in bits
6DINTEGER integer access ,len is in bytes
7REAL real access ,len is in bytes
9OCTET STRING octet string ,len is in bytes

九、附录:数据区域码

HexValue描述
0x03System info of 200 family200系列系统信息
0x05System info of 200 family200系列系统信息
0x06Analog inputs of 200 family200系列模拟量输入
0x07Analog outputs of 200 family200系列模拟量输出
0x80Direct peripheral access( P )直接访问外设
0x81Inputs( I )输入( I )
0x82Outputs( Q )输出( Q )
0x83Flags( M )输出( M )
0x84Data blocks ( DB )数据块( DB )
0x85Instance data blocks( DI )背景数据块( DI )
0x86Local data( L )局部变量( L )
0x87Unknown yet( V )全局变量( V )
0x1cS7 counters( C )S7 计数器( C )
0x1dS7 timers( T )S7 定时器( T )
0x1eIEC counters( 200 family )S7 计数器(200系列)
0x1fIEC timers( 200 family )S7 定时器(200系列)

十、附录:返回码

功能码含义
0x00Reserved ,未定义,预留
0x01Hardware error ,硬件错误
0x03Accessing the object not allowed ,对象不允许访问
0x05Invalid address ,无效地址,所需的地址超出此 PLC 的极限
0x06Data type not supported ,数据类型不支持
0x07Data type inconsistent ,日期类型不一致
0x0aObject does not exist ,对象不存在
0xffSuccess ,成功
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TSEND_C”指令设置并建立 TCP 或 ISO-on-TCP 通信连接。 设置并建立连接后,CPU 会自动保持和监视该连接。 TRCV_C”指令异步执行且具有以下功能: 设置并建立通信连接: "“TRCV_C”设置并建立 TCP 或 ISO-on-TCP 通信连接。 设置并建立连接后,CPU 会自动保持和监视该连接。 参数 CONNECT 中指定的连接描述用于设置通信连接。 要建立连接,参数 CONT 的值必须设置为值“1”。 成功建立连接后,参数 DONE 将被设置为“1”。 CPU 进入 STOP 模式后,将终止现有连接并移除已设置的连接。 要再次设置并建立该连接,需要再次执行“TRCV_C”。 有关可能的通信连接数的信息,请参见 CPU 的技术规格。 通过现有通信连接接收数据: 如果参数 EN_R 的值设置为“1”,则启用数据接收。接收数据(在参数 EN_R 的上升沿)时,参数 CONT 的值必须为 TRUE 才能建立或保持连接。 接收到的数据将输入到接收区中。 根据所用的协议选项,接收区长度通过参数 LEN 指定(如果 LEN <> 0),或者通过参数 DATA 的长度信息来指定(如果 LEN = 0)。 如果在参数 DATA 中使用纯符号值,则 LEN 参数的值必须为“0”。 成功接收数据后,参数 DONE 的信号状态为“1”。 如果数据传送过程中出错,参数 DONE 将设置为“0”。 终止通信连接: 参数 CONT 设置为“0”时,将立即终止通信连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值