当前位置: 首页 > news >正文

labview解析S7协议

本文章借鉴了博主一杯清酒邀明月和加油小林哥和听风的内容,作为学习笔记。

前面用了labview连接PLC的三种方式,一是通过VIPM上安装的S7.COM进行通讯,二是通过胡工科技的hsl进行通讯,三是通过OPC进行通讯。这里介绍通过TCP协议来手搓S7协议与西门子的plc进行通信。

S7Communication是西门子专有的协议,是西门子S7通讯协议簇里面的一种。

S7通讯协议是西门子S7系列PLC内部集成的一种通讯协议,是S7系列PLC的精髓所在。他是一种运行在传输层之上的,经过特殊优化的通讯协议,其信息传输可以基于MPI网络,PROFIBUS网络或者以太网

S7在TCP连接上后还需要进行两次握手

S7协议的TCP/IP实现依赖于面向块的ISO传输服务。S7协议被封装在TPK和ISO-COTP协议中,这使得PDU能够通过TCP传送。

第一次握手

当PDU类型为0x0E的时候报文格式为

TPKT协议结构

COTP连接包的结构

第一次握手发送返回字节格式

支持PUD类型

参数代码TPDU-SIZE

对应到labview中在建立连接时进行两次握手操作,第一次握手操作,对应可以看到相应的指令集对应上表中的指令说明。和平常的tcp通讯一样,只需要发送相应的指令集即可。

第二次握手发送返回字节格式

ROSCTR类型

同样第二次握手也同上次一样,发送相应的指令集。

数据读取/写入报文发送返回字节格式

S7协议的地址是按照位来运算的,因此需要地址值乘以8。地址的三个范围为0x000000~0x08FFFF。比如M30000,实际地址就是30000*8=240000,然后转化为三个字节。

240000=0x03A980,对应三个字节 03,A9,80比如DB21234.40000其中DB号为21234为0x52F2,,DB编号对应两个字节52 ,F2,偏移量40000乘以8就是320000,也就是0x04E200,对应三个字节 04,E2,00。

写入数据,更改相应功能码,编写要写入的数据。

读取数据

故障代码

PUT和GET指令TABLE参数的错误代码:

功能码

区域类型

SyntaxID类型

PLC区域类型块

CPU的地址区

http://www.dtcms.com/a/313839.html

相关文章:

  • Neo4j 社区版 Mac 安装教程
  • Django集成图片验证码功能:基于django-simple-captcha实现
  • 数据结构----排序
  • EdgeView for macOS:解决图像管理痛点的利器
  • c# 属性操作(2)
  • PyCharm代码规范与代码格式化插件安装与使用:pylint和autopep8
  • javacc学习笔记 01、JavaCC本地安装与测试
  • C++-异常
  • Go语言实战案例:编写一个简易聊天室服务端
  • 从零开始的云计算生活——项目实战
  • 【Pytorch✨】LSTM04 l理解长期记忆和短期记忆
  • 计算机视觉(1)-图像采集设备选型全景表(工业 + 医疗 + 车载)
  • 编程算法:技术创新与业务增长的核心驱动力
  • 【Spring AI快速上手 (一)】ChatModel与ChatCilent构建对话
  • Rust:如何开发32位的DLL动态库
  • 单向链表(补充)与linux虚拟机网络配置
  • JS--获取事件的子元素与父元素
  • ZooKeeper 深度实践:从原理到 Spring Boot 全栈落地
  • 【unitrix】 7.1 二进制位加法(bit_add.rs)
  • 哪些第三方 Crate 可以直接用?
  • Mac桌面仿制项目--让ai一句话生成的
  • Qt 使用QtXlsx库处理Excel文件
  • Druid学习笔记 01、快速了解Druid中SqlParser实现
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:General Purpose I/O (GPIO)通用输入 / 输出
  • Linux文件权限管理全解
  • Java Getter 与 C# Getter 比较
  • WPF中引用其他元素各种方法
  • AUTOSAR AR-Explorer正式发布
  • C语言的数组与字符串
  • 从物理扇区到路径访问:Linux文件抽象的全景解析