西门子PLC协议-S7COMM

文章目录

  • 西门子PLC协议-S7COMM
    • 简述
    • 认识S7
      • 连接过程
      • PDU
    • 消息头
    • 消息参数(Parameter )
    • 数据内容
      • any-type
    • 协议对接
    • 附件

简述

前段事件对接西门子设备,是一台盾构机控制PLC(programmable logic controllers)设备,目的是为了获取盾构机中运行的数据状态,有必要是可以通过数据状态来发送预警推送。这里简单的介绍S7COMM协议和他的通讯方法,可以结合附页中的wireshark抓的包来学习。

认识S7

S7是一个基于TCP/IP的应用层协议,不能的单纯的使用Socket来进行通讯。以下是网络模型:

OSI layer Protocol
7 Application Layer S7 communication
6 Presentation Layer S7 communication
5 Session Layer S7 communication
4 Transport Layer ISO-on-TCP (RFC 1006)
3 Network Layer IP
2 Data Link Layer Ethernet
1 Physical Layer Ethernet

连接过程

1、连接PLC 端口 102

2、连接ISO层

3、建立S7通信

PDU

主要的协议数据内容在PDU(Protocol Data Unit)中,S7 PDU由三个部分组成:

  • Header:长度信息,pdu相关和消息类型常量
  • Parameters:根据消息头,内容和结构都有所不同
  • Data:数据内容

消息头

消息头一般时10-12字节,可能还会携带两个额外的错误码字节

  • protocol ID(1byte): 协议参量,通常时 0x32
  • MSG Type(1byte): 消息类型
    • 0x01:工作请求(Job Request),主要是由服务器请求,写/读内存,开启/停止设备,配置会话
    • 0x02:确认(Ack),主要是由设备请求,不携带数据
    • 0x03:响应数据(Ack-Data),响应0x01的请求
    • 0x07:自定义数据(Userdata),扩展协议类型
  • Reserved(2bytes):保留字,0x0000
  • PDU Ref(2bytes):响应序号,可以递增,设备复制回复,用于响应请求内容,小端
  • Parameter Length(2bytes):大端(低位优先),参数长度
  • Data Length(2bytes):大端,数据区域长度
  • (Error Class)(1byte):错误类,只会出现在响应参数后边
  • (Error code)(1byte):错误码,只会出现在响应参数后边

消息参数(Parameter )

Parameter 数据参数内容大致相同,不同的是请求项中的内容

  • Function Code(1byte):0x04读,0x05写
  • Item Count(1byte):请求结构的数量
  • Request Item:请求数据项

数据内容

数据内容格式根据寻址方式来改变,不同的寻址方式有不同的结构内容,结构如下:

  • Function Code(1byte):0x04读,0x05写
  • Item Count(1byte):请求结构的数量
  • Request Item:请求数据项

寻址方式有以下三种方式:

  • any-type:这是默认的寻址模式,用于查询任意变量。为每个寻址变量指定了所有三个参数(area、address、type)。
  • db-type:特殊的DB区域值
  • symbolic-addressing:特殊标志地址

这里简单只介绍any-type方式

any-type

以下是请求和数据项(Data Item

Request Item

  • Specification Type(1byte):0x12
  • Length(1byte):剩下项的长度
  • Syntax ID(1byte):决定寻址方式,0x10表示any-type
  • Variable Type(1byte):数据类型(REAL, BIT, BYTE, WORD, DWORD, COUNTER,Timer)
  • Count(2bytes):可以使用单个项结构选择类似变量的整个数组。这些变量必须具有相同的类型,并且在内存中必须是连续的,而count字段决定了这个数组的大小。对于单个变量的读或写,它被设置为1。
  • DB Number(2bytes):
  • Area(1byte):内存区域常量,可以在附页里查询到
  • Address(3bytes):地址,例如 DBX40.3 计算 40 * 8 + 3 = 323 十六进制:0x000143

响应的Data Item数据项:

  • Error Code(1byte):错误码
  • Variable Type and Count(1byte 2byte):变量类型和计算,与Request Item一样
  • Data:len(variable) * count

小编但是使用过Netty直接发起S7协议请求,但是失败了,如果有能实现的可以下边评论,一起讨论。

协议对接

我这里对接是直接使用一个大佬的开源项目,

s7connector

https://github.com/s7connector/s7connector

简单的使用方法在gay里面也有说明

s7Connector.read(DaveArea.DB, areaNumber, bytes, offset);

参数说明:

  • 参数一:读取方式,一般默认是DB区域块
  • 参数二:区域块编号
  • 参数三:区域数据类型大小,int 2字节,real 4字节
  • 参数四:区域偏移量

举例子:

# DB40_DBD72.0
s7Connector.read(DaveArea.DB, 40, 4, 72);

附件

建立连接例子

读取例子

西门子PLC协议-S7COMM相关推荐

  1. 西门子PLC协议网关

    物通博联西门子PLC协议网关即wtblnet iot Gateway,是一款支持单网口/两网口/五网口,支持4G/3G/WIFI/PPPOE/WAN有线网络,内嵌工业控制协议,支持远程自定义配置.远程 ...

  2. 西门子PLC远程监控与数据采集方案

    一.远程监控西门子PLC的意义: 随着物联网的快速发展,通过手机微信小程序或PC终端对设备系统的控制单元西门子PLC的运行进行远程预警监控的技术已经非常成熟.基于手机微信小程序或PC终端的西门子PLC ...

  3. s7 200 java_java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...

    本文将使用一个gitHub开源的组件技术来读写西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 gi ...

  4. C#上位机 西门子PLC通信 S7NET协议

    C#上位机 西门子PLC通信 S7NET协议 1,西门子PLC网口通信,可通信S7-200smart,S7-1200,S7-1500. 2,例子简单易懂,自己写的程序,可提供部分 3,现场实测有效. ...

  5. C#使用西门子S7 协议读写PLC DB块

    教大家使用C#如何方便快速的读写西门子DB块的值,实现上位机跟plc进行通讯的流程 使用的西门子PLC型号,S7 1200 1.Nuget 安装s7 驱动包 2.西门子plc定义一个db块,这个是我们 ...

  6. Modbus 协议从站开发通信西门子 PLC

    文章目录 1. Modbus 协议 1.1 传输模式:单工模式.全双工模式.半双工模式 1.2 广播模式.单播模式 1.3 Modbus 通信模式:ASCII.RTU 1.4 基本数据类型 2. 功能 ...

  7. 西门子PLC的S7协议报文解析说明

    我们以S7的1500系列来查看握手和读取.写入[字Word或者位Bit]命令报文 以下报文不做说明时都是十六进制字节. 西门子PLC需要连接成功后发送两次握手命令方可进行读写通信. 西门子PLC的S7 ...

  8. 实现Modbus设备转Profinet IO协议接西门子PLC的解决方案

    1 功能需求 在一些项目中,需要把modbus协议的设备数据发送给Profinet IO协议的西门子PLC,两者协议不匹配,不能把两个设备直接连接起来. 2 功能实现 不同协议设备之间的互联互通,主要 ...

  9. 应用场景五: 西门子PLC通过Modbus协议连接DCS系统

    应用描述: 西门子PLC(S7200/300/400/200SMART)通过桥接器可以支持ModbusRTU串口和ModbusTCP以太网(有线和无线WIFI同时支持)两种通讯方式连接DCS系统,不需 ...

最新文章

  1. 《用Python进行自然语言处理》第 4 章 编写结构化程序
  2. 实战Nginx与PHP(FastCGI)的安装、配置与优化
  3. UA MATH564 概率论 QE练习题2
  4. 附近的人 php,php 附近的人
  5. mongodb带认证的副本集搭建
  6. ARP攻击网络上不去,可以进行mac地址绑定
  7. BGP——AS—PATH正则表达式(实列讲解+配置)
  8. ubuntu编译运行xv6
  9. php 表单提交渲染问题,如何解决php表单提交的数据丢失的问题
  10. 信息安全实训——神奇的木马
  11. 4173: 数学 欧拉函数 思路题
  12. vb 复制 剪贴板 html,VB.NET中调用系统的剪贴板完成数据的复制和粘贴
  13. 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树
  14. 小白记录——识别RNA编辑位点
  15. 数字图像处理--冈萨雷斯第4版--第一章 绪论
  16. 分享新手电商(淘宝、拼多多、楚楚街)上货经验
  17. 鸿蒙时代的人物有哪些,鸿蒙时代四大创世神兽,龙都是它们的后代,麒麟都排不上号...
  18. Spring Boot整合OpenOffice实现Word、Excel、PPT在线预览
  19. 赋值具有的非单一 rhs 维度多于非单一下标数怎么办
  20. PS快速调出天蓝色清新外景

热门文章

  1. 前端 - 面试题总汇
  2. Word中MathType公式乱码问题解决办法
  3. 牛投客- 股票与股权投资的区别是什么?
  4. mysql 地理位置查询
  5. python怎么画地图空间分异图_基于地形梯度的赣南地区生态系统服务价值对人为干扰的空间响应...
  6. [转]邓不利多所理解的预言
  7. 战斗机机动动作分类与模型
  8. 中国医药零售行业发展机遇与营销前景模式咨询报告2022版
  9. 非平衡电桥电阻计算_【2019年整理】用非平衡电桥测量电阻
  10. Android getDimensionPixelSize, 代码中设置字体大小,读xml配置。