由于网上找到的大部分指令解析资料都是以1200、300 等为主的指令,并未见到200smart系列且恰巧项目需要与该plcs7的通讯方法读写数据。虽然找到一些现有c#的工程代码不过对200smart系列s7的通讯方法总有些问题若用opc需要资金成本,故觉定自行開发s7的通讯方法软件找时间进行学习指令。
使用kepwareOPC服务器以及Wireshark网络数据抓包工具实现对s7-200smart PLCs7的通讯方法指令分析最终通过软件组合对应指令實现数据读取。
先配好OPC服务器并通过quick client能正确读取到指定内存地址的数据。
根据网上资料显示西门子PLCs7的通讯方法前需进行两次握手指令洏opc服务器仅在有客户端连接时才会发送指令。故:
1、先启动抓包软件监听与PLC连接的网卡设置过滤规则只显示TCP协议;
抓包软件中通过源IP及目标IP确定指令收发方向,在封包数据中只需观察以下几行数据即可:
Wireshark软件将数据包及协议进行明显的标识方便能查看到对应数据
从数据包中可看到上位机发送的指令为
PLC回复(上图黄框)
从图中可看到回复的指令以及每一位对应意义
每一位对应如上图,对比资料发现第二次握手数据为固定格式
本次测试读取PLC M20区一个字节、Q0区一个字、V0区双字;
注:OPC服务器会将多种读取目标组合成一个指令
上图中从0030行中的“03 00 …”开始至结尾,每一位对应上上图
此处读取的数据长度为十进制的十六进制显示,例如长度1表示为0x01,长度4表示为0x04.
该指令中包含三组讀取指令,每组以
12 0A 10 02 ...
开头后面紧跟两个字节为读取的长度,以字节为单位
依然从0030行的“03 00 …”开始至结尾
每一位对应意义如下图:
由图中可知三组数据依次为:0x00,0x00000
软件介绍判断时可先判断指令中的成功读取标志:0xff然后截取对应长度的数据即可
此处长度表示为 ( 字节长度 x 8 ) 即位的数量例如:1 指令中为0x08, 长度2在指令中为 0x10 长度4在指令中为0x20