西门子s7-200smart PLC通讯协议(TCP)

西门子s7-200smart PLC通讯协议(TCP)

由于网上找到的大部分指令解析资料都是以1200、300 等为主的指令,并未见到200smart系列,且恰巧项目需要与该plc通讯读写数据。虽然找到一些现有c#的工程代码不过对200smart系列通讯总有些问题,若用opc需要资金成本,故觉定自行开发通讯软件,找时间进行学习指令。

参考文档:
西门子PLC以太网 通讯协议 解析
常用PLC通讯协议
抓包工具 - Wireshark(详细介绍与TCP三次握手数据分析)

主要思路

使用kepwareOPC服务器以及Wireshark网络数据抓包工具实现对s7-200smart PLC通讯指令分析,最终通过软件组合对应指令实现数据读取。

具体实现

先配好OPC服务器,并通过quick client能正确读取到指定内存地址的数据。

根据网上资料显示西门子PLC通讯前需进行两次握手指令,而opc服务器仅在有客户端连接时才会发送指令。故:
1、先启动抓包软件监听与PLC连接的网卡,设置过滤规则只显示TCP协议;
2、启动quick client让opc服务器开始发送指令;
3、关闭quick client,观察抓取到的数据:

注:
本机IP:192.168.1.10 ;PLC:192.168.1.121
抓包软件中通过源IP及目标IP确定指令收发方向,在封包数据中只需观察以下几行数据即可:
西门子s7-200smart PLC通讯协议(TCP)_第1张图片
Wireshark软件将数据包及协议进行明显的标识方便能查看到对应数据。

第一次握手数据

本机发送:(红框)
西门子s7-200smart PLC通讯协议(TCP)_第2张图片
从数据包中可看到上位机发送的指令为

03 00 00 16 11 E0 00 00     00 01 00 C0 01 09 C1 02     02 00 C2 02 02 01   

其中每一位的意义说明如下:
西门子s7-200smart PLC通讯协议(TCP)_第3张图片
s7-200smart只需注意倒数第四项Source TSAP和倒数第一项Destination TSAP,分别代表PLC参数中的localTASP和RemotTASP参数,默认为 0x02000x0201

PLC回复(上图黄框)
西门子s7-200smart PLC通讯协议(TCP)_第4张图片
从图中可看到回复的指令以及每一位对应意义

03 00 00 16 11 D0 00 01    00 08 00 C0 01 09 C1 02     02 00 C2 02 02 01

第二次握手数据

本机发送:
西门子s7-200smart PLC通讯协议(TCP)_第5张图片
每一位对应如上图,对比资料发现第二次握手数据为固定格式。

03 00 00 19 02 F0 80 32     01 00 00 00 38 00 08 00     00 F0 00 00 01 00 01 00     F0

PLC回复:
西门子s7-200smart PLC通讯协议(TCP)_第6张图片
自行对照

03 00 00 1B 02 F0 80 32     03 00 00 00 38 00 08 00     00 00 00 F0 00 00 01 00    01 00 F0

读取数据

本次测试读取PLC M20区一个字节、Q0区一个字、V0区双字;
注:OPC服务器会将多种读取目标组合成一个指令

本机发送:
西门子s7-200smart PLC通讯协议(TCP)_第7张图片
发送的指令为:
西门子s7-200smart PLC通讯协议(TCP)_第8张图片

上图中从0030行中的“03 00 …”开始至结尾,每一位对应上上图。
此处读取的数据长度为十进制的十六进制显示,例如长度1,表示为0x01,长度4,表示为0x04.

该指令中包含三组读取指令,每组以
12 0A 10 02 ...
开头,后面紧跟两个字节为读取的长度,以字节为单位

PLC回复:

西门子s7-200smart PLC通讯协议(TCP)_第9张图片
依然从0030行的“03 00 …”开始至结尾
每一位对应意义如下图:
西门子s7-200smart PLC通讯协议(TCP)_第10张图片
由图中可知三组数据依次为:0x00,0x4000,0x00000000

软件介绍判断时可先判断指令中的成功读取标志:0xff然后截取对应长度的数据即可
此处长度表示为 ( 字节长度 x 8 ) 即位的数量,例如:1 指令中为0x08, 长度2在指令中为 0x10 长度4在指令中为0x20

你可能感兴趣的:(通讯)