专业的编程技术博客社区

网站首页 > 博客文章 正文

西门子S7协议抓包分析并用代码实现(二)

baijin 2024-10-19 02:45:24 博客文章 27 ℃ 0 评论

上一讲我们讲了如何连接S71200PLC,这讲我们分析下如何读取DB。

由于我今天手里没有1200,我安装了Advanced用1500来模拟,大家都知道Advanced可以仿真通讯,关于如何使用Advanced,请查看我发表的上一篇文章《西门子TIAV16仿真器Advanced安装使用避坑》,刚好顺便讲讲1500的连接握手协议。

言归正传,我们首先准备环境,工欲善其事必先利其器嘛。

硬件环境:不好意思,没有啊。

软件环境:Kepserver(或者其他支持S7协议的上位机)、Advanced V3.0、TIAV16、Wireshark抓包工具、VS2019

二、我们开始抓包分析:

电脑IP:192.168.0.241

S7-1500PLCIP:192.168.0.1

1.运行KepServer,我们发现还是三次TCP握手

2.我们主要关注下,COTP,S7COMM报文连接是否一致

3.我们发现COTP报文一致,那说明昨天1200连接的这部分报文是可以公用的。

4.我们发现S7COMM报文一致,那说明昨天的1200连接报文是一致的,全部可以共用

5.我们分析下读DB报文是怎么样的?我们可以发现当读DB2.db0时报文如下

6.多次分析报文看到规律第23(高8位)24(低8位)控制读取长度

7.返回报文为数据01是我们需要的数据,从索引25开始。


8.我们尝试改变这几个字节是否能达到我们的需求,创建读代码

public byte[] ReadDB(int DB, int startByte, int count)
        {
            //通过查看报文获得读取db2.dbx0.0读取1个字节的报文
            byte[] s7Comm = new byte[31]
            {
                0x03,0x00,0x00,0x1f,0x02,0xf0,0x80,0x32,0x01,0x00,0x00,0x00,
                0x00,0x00,0x0e,0x00,0x00,0x04,0x01,0x12,0x0a,0x10,0x02,0x00,
                0x01,0x00,0x02,0x84,0x00,0x00,0x00
            };
            //获得字节数组 先转为ushort类型是为了确定输出字节为2个
            byte[] conutArry = BitConverter.GetBytes((ushort)count);
            //分析报文看到规律第23(高8位)24(低8位)控制读取长度
            s7Comm[23] = conutArry[1];
            s7Comm[24] = conutArry[0];
            //获得字节数组 先转为ushort类型是为了确定输出字节为2个
            byte[] dbArry = BitConverter.GetBytes((ushort)DB);
            //分析报文看到规律第25(高8位)26(低8位)控制要读取的DB号
            s7Comm[25] = dbArry[1];
            s7Comm[26] = dbArry[0];
            byte[] result = new byte[count];
            S7TcpClient.Send(s7Comm);//发送s7报文
            Thread.Sleep(10);//等待10ms给1500CPU反应时间
            byte[] s7Result =new byte[S7TcpClient.Available];
            S7TcpClient.Receive(s7Result);
            for (int i = 0; i < count; i++)
            {
                result[i] = s7Result[25 + i];//从第25字节后是我们需要的报文
            }
            return result;
        }

9.我们尝试一次读240个字节


10.如上图我们已经读成功

下期我们讲如何写DB区,如果对您有帮助,帮忙点个关注感谢

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表