西门子S7报文解析

2023-11-14

1.报文的基本格式

1.1 第1和第2个字节是:固定报文头03 00,这里我们就用到三种报文: a.初始化 b. 读 c.写,都是这种格式;

1.2 第3和第4个字节是:整个报文的长度;

       其它部分就是各种报文的个性化处理了;

       下面分析大量报文的案例进行规律分析,为了便于对照,每种都用1200 和300 两种对照demo显示:

 

2.初始化报文

初始化报文分两个交互:

2.1 交互一
西门子1200:
PC发出报文 ( [A18]=0x01 =CPUSlot)
03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 01(cpuslot) C0 01 09
PLC回复报文( B[10]=0x06 可能 是西门子的小型号 B[22]=0x01=CPUSlot)
03 00 00 16 11 D0 00 01 00 06 00 C0 01 09 C1 02  01 00 C2 02 01 01 (cpuslot)

 

 

西门子300:
PC发出报文 ( A[18]=0x02 =CPUSlot)
03 00 00 16 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 02(cpuslot) C0 01 09
PLC回复报文 (B[10]=0x04 可能 是西门子的小型号 B[22]=0x0=CPUSlot)
03 00 00 16 11 D0 00 01 00 04 00 C0 01 09 C1 02  01 00 C2 02 01 02

 

opc 对 1200 和 300 不用配置的不同点,就一个地方:前者 CPUSlot = 1 ,后者CPUSlot = 2;
所以可以摸索规律是:
a.pc发起第一个初始化报文的时候,第18个字节标识了CPUSlot ;
b.plc回复报文和读取报文长度一样都是22个字节长度;
c.plc回复报文的最后一个字节也是CPUSlot ,这个可以用来校验;
d. plc回复的第10个字节一个是06,一个是04,这个好像是小型号的区别;
细节摸索下来:1200该字节是06,314是04,315是03;咱写程序的时候,就不要考虑这个来校验了;

 

2.2交互二
PC发出报文
03 00 00 19 02 F0 80 32 01 00 00 FF FF 00 08 00 00 F0 00 00 01 00 01 07 80
PLC回复报文
03 00 00 1B 02 F0 80 32 03 00 00 FF FF 00 08 00 00 00 00 F0 00 00 01 00 01 00 F0
第二个初始化报文交互,通过1200 和314,315的对比,发现居然完全没有任何区别;
所以我们可以把这个交互完全固话;
到此,整个初始化处理就算结束了,正常在设计架构的时候,可以这么实现:
在ClentSocket的onConnect(即正常连接上)的瞬间,pc给plc发起第一个初始请求,得到回复后(为了简单,就仅仅判断长度为22即可);
立刻发起第二个固定的初始话请求,得到长度为24的报文后,就通过一个布尔变量通知整个系统可以正常读写;

 

3.读操作

 

读demo1:

西门子1200: 读取DB10, count=17 ,offset=19

PC发出报文

(A[3]~A[4]=0x001F=31=读取报文总长度, A[12]~A[13]=0x001C=序列号,A[24]~A[25]=0x0011=17=读取请求count;

A[26]~A[27]=0x000A=10=DB10, A[28]=0x84=读取的数据类型为DB块,A[29]~A[31]=0x000098=152=19*8=读取偏移量offset(bit为单位) )

03 00 00 1F 02 F0 80 32 01 00 00 00 1C 00 0E 00 00 04 01 12 0A 10 02 00 11 00 0A 84 00 00 98 

PLC回复报文

(B[3]~B[4]=0x002A=42=回复报文总长度, B[12]~B[13]=0x001C=序列号,B[16]~B[17]=0x0015=21=读取请求count(17)+4

B[24]~B[25]=0x0088=17*8=请求数据长度(bit为单位), B[26]~最后=数据值)

03 00 00 2A 02 F0 80 32 03 00 00 00 1C 00 02 00 15 00 00 04 01 FF 04 00 88 13 14 15 16 17 00 00 00 00 00 00 00 00 00 00 00 00

 

读demo2: 

西门子1200: 读取DB11, count=17 ,offset=19

<

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

西门子S7报文解析 的相关文章

随机推荐

  • 李宏毅 深度学习作业3 CNN

    通过CNN卷积神经网络对食物图片进行分类 训练集与验证集中图片格式为 类别 编号 jpg Import 需要的套件 import os import numpy as np import cv2 import torch import to
  • mysql aio与并发执行线程_mysql 原理 ~ 线程与IO

    一 简介 今天来聊聊具体的线程和IO 二 具体线程与作用 1 master thread mysql的主要工作触发线程 1 redo and binlog日志 2 合并插入缓冲 3 脏页的刷新 4 undo页回收 5 产生一个ckp点 2
  • 从Python到计算机视觉:入门指南

    Python一直是计算机科学领域中最受欢迎的语言之一 它不仅易于学习和使用 而且具有广泛的应用领域 尤其是计算机视觉方面 本文将为读者提供一份详细的入门指南 帮助初学者了解Python和计算机视觉的基础知识和应用 安装Python 要开始使
  • 数据结构进阶

    并查集 朴素版 const int N 1e5 10 int p N 返回x的祖宗节点 int find int x 只有根节点才会有p x x if p x x p x find p x return p x 初始化 void init
  • 咋搭建域控服务器,Active Directory虚拟机搭建域控服务器环境

    前言 还是和上一章一样 痛苦过后还是记录下给后来人提供便利为妙 虚拟机选择 建议Hyper V或者VMware 系统选择 建议WIindows Server 2003及以上 我这里是使用VMware Workstation Pro Wind
  • Android适配刘海屏沉浸式状态栏的一些坑

    在国内做Android开发真的不容易 国内的深度定制 安卓 总能时不时的给你来几个 惊喜 起因 18年简直是刘海元年 所有手机都在跟风刘海屏 甚至每个厂商还有自己的一套适配规范 我的初始需求很简单 就是做一个全屏显示的页面 一般情况下只需要
  • 一个人如何才能成功

    最近看了很多书 听了很多讲座 给我的感触很深 让我想了很多 联想的老总柳传志 GE的前任老总 还有松下幸之助他们为什么会成功 他们有什么不同常人的地方呢 听了华人讲师陈安之的讲座 触动了我得内心深处 他也是一个普通人 在他成功之前他也遇到很
  • 手工装配Visual Studio 2010(vc_runtime_x86)

    1 之前遇到一个问题 c cli的程序部署在服务器上面 程序运行后没有反应就退出了 日志管理器中记录两个错误信息分别如下 1 gt Faulting application 5gameserver 1 exe version 0 0 0 0
  • c++ 常见编译错误

    1 redefinition of class previous definition of class 表示重复定义了类 一般说来是因为在你进行该类定义的头文件中没有使用 ifndef define和 endif来进行保护 如果你确定你在
  • 利用PPT、Excel实现抽题

    利用PPT Excel实现随机抽题 教程 附文件 不管是在公司 还是学校 PPT Excel已经成为不可缺少的一种工具 在各种活动中 有很多场合需要利用PPT实现随机抽题 本文将为你详细 详细 详细的教你如何使用PPT Excel实现随机抽
  • eclipse检测是否连接mysql数据库

    eclipse检测是否连接上数据库 1 先找到Data Source Explorer 2 找到Database connection 并new找到自己的要连接的数据库 3 next 如果没有值则点击添加 4 忽略红叉 并移除自带的包 添加
  • 简单明了操作——ESP8266 NodeMCU驱动TFT LCD液晶屏(制作透明小电视前奏)

    简单明了操作 ESP8266 NodeMCU驱动TFT LCD液晶屏 制作透明小电视前奏 前言 准备材料 esp8266 NodeMCU 串口WiFi模块 1 44inch SPI Arduino Module Black SKU MAR1
  • C语言进阶:动态内存管理

    目录 1 为什么存在动态内存分配 2 动态内存函数的介绍 2 1 malloc和free 2 2 calloc 2 3 realloc 3 常见的动态内存错误 3 1 对NULL指针的解引用操作 3 2 对动态开辟空间的越界访问 3 3 对
  • MongoDB和MySQL性能测试及其结果分析

    MongoDB和MySQL性能测试及其结果分析 2011 02 23 11 18 洪小军 博客园 字号 T T 编者用四组数据的查询和插入操作说明MongoDB HandlerSocket和MySQL在QPS CPU IO三种情况下性能的差
  • Error updating database. Cause:java.sql.SQLException: Lock wait timeout exceeded; try 清除数据库执行时间较长的任务

    SELECT FROM information schema PROCESSLIST WHERE TIME gt 1000 AND USER dimsusr ORDER BY TIME DESC kill id Error updating
  • 测试工程师如何进行需求评审

    需求文档是测试过程的重要输入之一 测试工程师根据需求文档进行测试活动 包括测试方案的制定 测试设备的准备 测试环境的搭建以及测试用例的设计 需求文档的质量直接影响到测试工作效率 在一个成熟的软件开发过程中 测试工程师需要尽早地进入项目对需求
  • 投资人和创业者如何相处 听听几位大佬观点

    在8月14日的以太Bit大会上 源码资本创始人曹毅 清流资本董事总经理王梦秋 华创资本合伙人吴海燕 明势资本创始人黄明明 零一创投合伙人吴运龙坐在了一起 讨论起投资人的生存法则 以及和创业者的合作关系 投资人能为创业者做什么 曹毅 我觉得我
  • sklearn中的特征工程(过滤法、嵌入法和包装法)

    特征工程的第一步 理解业务 如果特征比较少且容易理解 我们可以自行判断特征的取舍 如前面的泰坦尼克号数据集 但是 在真正的数据应用领域 比如金融 医疗 电商 我们的数据不可能像泰坦尼克号数据的特征这样少 这样明显 那如果遇见极端情况 我们无
  • 我的2022年度总结

    随着Apple Store越来越成熟 以及越来越多的开发者和公司希望在该平台上投放自己的产品 iOS APP上架成为许多开发者和公司普遍关注的话题 最近发现有款开发工具非常好用 特意去找了一个工具的成长历程 最早的版本 发现此款工具从202
  • 西门子S7报文解析

    1 报文的基本格式 1 1 第1和第2个字节是 固定报文头03 00 这里我们就用到三种报文 a 初始化 b 读 c 写 都是这种格式 1 2 第3和第4个字节是 整个报文的长度 其它部分就是各种报文的个性化处理了 下面分析大量报文的案例进