Profinet协议解析-过程数据

2023-05-16

 

        新的一篇文章,开始讲下一个点——过程数据。过程数据,顾名思义,就是一直循环传输的数据,在整个过程中不间断的传输,其每次传输的时间称为同步周期。这点类似于Ethercat中的PDO数据,而下下篇将要讲到的非周期数据和Ehtercat的SDO通道相似,或许各种不同的协议在形式上或者服务模式下是高度相似的。

       过程数据,在整个链路上循环传输,每一台从站都与主站之间有着相关的交互连接,当网络中存在多个从站,可想而知,数据量将会是庞大的,数据量就像路上的汽车,有限的带宽是马路,过多的汽车就像早高峰那样,必然引起堵车,同样的网络中也会阻塞,或者导致网络负载过高。对此,我们国家比较喜欢建高架,变着花样的增大马路容量。而在现成的工业网络中是很难实现的,那意味着不兼容,意味着高成本。所以Profinet,采用减小单个数据包实现,保持马路容量不变,减小汽车体积。减少的东西并不是直接删掉了,如果这样就没有存在的意义了,就像大客车从50座减小为2座,那还搞什么运营不是?Profinet的实现其实与TCP相似,都是对通信的双方进行握手,然后保存双方最初交换的信息,后面可以循环传送数据了,也就是基本都是PZD的数据,都是干货,如图1所示。这是一种以空间换带宽,这种握手数据必将占用主站内存,所以有限的内存小,主站匹配的从站都是固定的,当然不是唯一因素。

图1 RT过程数据

 

       讲到过程数据就不得不提一下全同步,过程数据的两种传输模式。从字面意思就是,IRT比RT传输的更稳定,时序处理更可靠。提到这里必然会看到下面图2,这是经典的一张描述PROFINET网络层次,这张图有点不全,缺少了IRT,IRT在2 RT并列,是属于链路层的一种,中间和RT一样,直接跨到应用层,不经过网络层,会话层,表示层,尽可能提高传输效率。为了保证IRT专用车道,在芯片的硬件层面需要开辟独立的数据通道,以保证其不受其他数据的影响,RT和普通以太网数据包共用传输通道带宽。

图2 PROFINET结构图

 

           下面就IRT模式下的过程数据传输做一下帧的分析。之前提到过,过程数据的传输为了减少不必要的传递数据,所以在最初的时候需要进行握手—建立连接,然后双方互通Input和Output数据结构,供后续识别。这里就牵扯到AR(Application Relation)和CR(Commucation Relation),如果有机会再讲一下这部分知识点,它应该属于PLC启动过程中的必要内容,首先确定AR,CR的内容就跟着确定了,包括连接建立的超时处理,AR确定方式,CR传输过程的等都放到《PLC启动过程》一文中,前提是我有机会写这篇。

      

图3 Connect帧

 

       如图3所示,找到最初的建立连接的地方,这个帧的抓取最简单的情况就是PLC上电的时候抓取,过程中我尝试制造断线等都不会再重建,理论上重新下载组态也会重建这个连接。把294帧数据展开,如图4所示,内容有点长,这里就直接看到重点的地方,我们只看InputCR。再Input CR中有两个API,一个为0x0,另一个是0x3a00。API是AP的标识,AP(Application Process)是一个完整的应用过程划分的每一小块的标识。一个应用过程涉及众多设备和功能,所以划分的应用过程分布在不同的设备上,遍布网络。AP-0是缺省的,用于编制应用过程,这个用做设备管理。其他的AP号是由Profidrive行规进行分配。在每一个AP下面会有Slot和SubSlot,大家习惯的成为“槽”和“子槽”,(ps:我一直不习惯这么叫,太难听),在API-0下带着的也是缺省的槽号。0号槽下面的0x8000~0x8002,属于专用子槽,能且仅能出现在哎0号API下,作为接口出现,0x80xx定义IP地址和DNS名称,用于设备远程访问调用。0x XX00~02是表示端口的,最大可以表示到255号。

图4 InputCR

 

        接着API 0,下面就是API-0x3a00,这里的API由行规定义,其中PROfidrive强制为0x3A00。Profidrive定义了运动控制相关内容,当然也包括IO等。所以在这个API下定义的就是我们的报文。槽1,子槽1用于基本参数访问通道,如图7所示,为GSD文件中的定义。 子槽3是特定报文。知道了具体意义,下一步就是分析报文内容,在一连串的数据中要想找到对应的内容就离不开Offset,偏移量指示其距离原始点的位置。结合图4,图5,图6,我这里画出如下表所示。

 

表1 过程帧字段结构

API

Identify

Slot

Subslot

Offset

Properties

Length

0

2

0

1

0

0

0

0

3

0

0x8000

1

0

0

0

4

0

0x8001

2

0

0

0

5

0

0x8002

3

0

0

0x3A00

0xFFFF

1

1

4

0

0

0x3A00

0x1389

1

2

5

0

0

0x3A00

0x69

1

3

6

3

20

0x3A00

0x69

1

3

27

IOCS

 

图5  API:0的展开

 

图6 API:0x3a00展开

 

图7 GSD基本参数通道定义

 

 

 

      

        如表1所示,我们获得了在建立连接时,其Input CR的内容,从表中可以看到各通道的偏移量。这里按如图8所示,通过Wireshark抓取的一帧数据。因为用的抓包工具,这里看到的时广播地址回给PLC的,可以先忽略。如表2为过程数据的帧结构,上面洋洋洒洒的写了五六页,仅仅针对于C_SDU字段的内容解读。根据图8的数据,Type =0x8892,Frame ID= 0x0100,0x0100是专门用于RT_CLASS3的帧ID,所以也可以确认这是一帧IRT帧。接着都是数据0x80,这个用于对长度为0的确认标识,有效报文的值为0340 0000 0000 3010 11CF 0000 0000 075A 0000 0000,后面接着又是其他数据。

 

表2 过程数据帧结构

DST

SRC

VLAN

Type

Frame ID

C_SDU

APDU

  

图8 IRT帧数据

    

        以上就是过程数据的解析过程,这里忽略了IOCS和IOPS,大家有兴趣可以看一下,主要用作数据可用性的确认(Good or Bad),在PLC 300/400常见,现在博图封装了功能块,很多都隐藏到里面判断,所以无需知道这两个意思也可以看到数据传输状态,披着羊皮的狼而已。欢迎评论区共同交流。附:遥远的星星 https://blog.csdn.net/zh_666888/

 

2020-12-27

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

Profinet协议解析-过程数据 的相关文章

  • ContentResolver.query详解

    1 查询手机的联系人 public void getContacts ContentResolver contentResolver 61 this getContentResolver Cursor cursor 61 contentRe
  • [ROS] 安装Gazebo 使用Gazebo 实现摄像头仿真 雷达仿真 Kinect仿真

    目录 安装Gazebo 1 添加源 2 安装gazebo 使用Gazepo 实现摄像头仿真 1 工作空间与功能包的创建 2 xff09 Gazebo配置文件 3 车体urdf建模与控制程序 4 launch文件 5 执行launch文件运行
  • jni开发-GetMethodID与CallObjectMethod的坑

    在java层中声明一个方法用于创建一个audiotrack xff0c 在C层中调用这个方法并获取audiotrack对象 先看下面的代码 xff1a SuPlayer java public AudioTrack createAudioT
  • 基于电信行业的AIOps应用与实践

    欢迎关注 程序杂货铺 公众号 xff0c 里面有精彩内容 xff0c 欢迎大家收看 1 摘要 xff1a 在大型互联网架构中 xff0c 为提升平台的计算能力及资源利用率 xff0c 普遍采用分布式技术 然而使用分布式技术也会带来一些潜在问
  • 关于解耦的理解

    在程序设计过程中 xff0c 最头痛的不是逻辑的编写过程 xff0c 更不是算法的设计 xff0c 最头痛的是如何设计出一个容易维护 xff0c 扩展性好的东西 而耦合问题是最令人烦躁的 xff0c 它的存在很多人发现不了 xff0c 所以
  • OFFICER: A general optimization framework for OpenFlow rule allocation and endpoint policy enforceme

    OFFICER gt 转发规则放置问题 gt 什么是规则放置问题 xff1f 一组规则如何放置到容量有限的交换机上 xff0c 以满足上层应用的策略 xff08 ACL 流转发 xff09 规则用来匹配流 xff0c 其action是策略的
  • 不带头节点的单链表如何头插(多图易懂)

    文章目录 缘起带头节点的头插不带头节点的头插错误的代码为什么错误如何修改返回新的头指针二级指针 缘起 本文想说的是单向非循环链表的头插 单向非循环链表 xff0c 可以是带头节点的 xff0c 也可以是不带头节点的 对于前者 xff0c 代
  • C语言中的匿名结构体

    在 C 的 C11 标准中 xff0c 添加了匿名结构和匿名联合 匿名联合 结构也称为未命名联合 结构 xff0c 由于没有名称 xff0c 因此不会创建它们的直接对象 xff08 或变量 xff09 xff0c 通常我们在嵌套结构或联合中
  • FreeRTOS 的命名规则

    文章目录 变量函数宏定义结语 如果是刚接触 FreeRTOS xff0c 看到它的命名 xff0c 简直是匪夷所思 xff0c 犹如天书 所以 xff0c 还是有必要了解它的命名规则 变量 uint32 t 定义的变量都加上前缀 ul u
  • sizeof 的结果取决于什么

    本文讨论的是 C 语言中的一个运算符 xff1a sizeof 注意 xff0c 是运算符 xff0c 不是函数 sizeof 的结果是在编译时就可以确定的 xff0c 于是有人认为 xff0c sizeof 的结果取决于编译器 这样说也对
  • Typora 页内跳转的语法

    页内跳转一般有 2 种情况 xff1a 跳转到某个标题处跳转到正文的某个地方 跳转到标题 跳转到标题的语法比较简单 xff0c 举个例子 我是一个标题 跳转到指定标题 我是一个标题 效果 xff1a 按住ctrl xff0c 鼠标点击第 6
  • Linux 0.11 实验环境搭建

    如果想学习Linux 0 11 xff0c 实验环境是必不可少的 最好是能编译 xff0c 能运行 xff0c 能调试 如今大家都是用64位的Linux操作系统 xff0c 而且是高版本的GCC xff08 4 0以上 xff09 xff0
  • ORA-7445(kgskhighthreshold)错误

    10 2 0 4 RAC 环境的ASM 实例出现这个ORA 7445 错误 64 more 64 错误信息为 xff1a Fri Dec 3 19 49 49 2010 Errors in file opt app oracle admin
  • 详解8259A

    详解8259A 可编程中断控制器 可编程中断控制器 xff08 PIC Programmable Interrupt Controller 是微机系统中管理设备中断请求的管理者 当PIC向处理器的INT引脚发出一个中断信号时 xff0c 处
  • 故障解决:error while loading shared libraries: libncurses.so.5

    故障解决 xff1a error while loading shared libraries libncurses so 5 问题的提出 在我准备调试 Linux 0 11 内核的时候 xff0c 出现了如下故障 xff08 真奇怪 xf
  • 故障解决:端口已被占用 1080

    更新记录 版本时间修订内容1 02018 3 28增加了方案二1 12019 8 9增加了方案三 问题的提出 实验环境 xff1a Win7 64bit 也许你会碰到以下错误 xff1a 本文给出2种解决方案 方案一 既然说端口已被占用 x
  • git cherry-pick 详解 —— Git 学习笔记 18

    git cherry pick 详解 初识 git cherry pick xff08 拣选 xff09 拣选会提取某次提交的补丁 xff0c 之后尝试将其重新应用到当前分支上 这种方式在你只想引入特性分支中的某个提交时很有用 假设你的项目
  • 问题解决: SSR 的 1080 端口被占用

    问题解决 xff1a SSR 的 1080 端口被占用 在我的博客 故障解决 xff1a 端口已被占用 1080 中已经讨论了一些方法 xff0c 但也不是每次都能成功 对于 SSR xff0c 我们完全可以换一种思路 xff1a 既然 1
  • USB开发简述

    由于工作需要 xff0c 接触了USB xff0c 经过这两三周的学习 xff0c 我只想说一句 xff0c 我们USB说简单也简单 xff0c 说复杂也有那么多知识 xff01 这怎么说呢 xff1f 简单 xff1a 无非就那几个结构体
  • 基于PX4六旋翼无人机百米悬停定点降落

随机推荐

  • 手把手教你实现ROS Melodic+Realsense D435i

    硬件配置 xff1a HP ProDesk 480 G6 MT 系统内存 xff1a 8G 处理器 xff1a Intel i7 8700 CPU 操作系统 xff1a Ubuntu 18 04 相机配置 xff1a Intel Reals
  • pixhawk调试过程中QGC报错显示问题及解决方案汇总

    1 室内环境下解锁无人机 xff0c 报错 xff1a Not arming geofence RTL requiers valid home 解决 xff1a 去掉安全设置里面的地理围栏 xff0c 否则只能在有GPS的环境下解锁
  • pixhawk4连接PX4 Flow光流传感器调试过程记录

    主控型号 Pixhawk4 光流型号 PX4 FLow V1 3 地面站 QGroundControl 1 拔掉PX4 Flow连接Pixhawk4的连接线 用USB连接PX4 Flow 打开QGC地面站 烧写固件 烧写完成后就可以在QGC
  • 使用Xshell连接Ubuntu主机失败

    1 问题 在将一台Ubuntu系统的电脑作为服务器 xff0c 使用Xshell连接时 xff0c 发生如下错误 此时使用ping工具检查是否能够ping通 说明能够连接上 xff0c 但是不能使用Xshell进行远程操作 2 解决方法 首
  • P900数传参数配置

    端口定义 xff1a xff08 从左往右 xff09 GND RX TX 5V 调试软件 xff1a X CTU 启动调试 xff1a 按住数传板上SW2 xff0c 同时按住SW1 xff0c 然后松开SW2 xff0c 再松开SW1
  • 利用ROS实现PX4 offboard板外控制

    基于ROS Melodic xff0c 以px4开发者手册实例程序为例 xff0c 实现gazebo下无人机起飞两米悬停 xff0c 具体操作分为三步 xff1a 1 创建工作空间 xff0c 建立offboard包 2 构建mavros
  • Jetson TX2开发板配置Intel T265环境的必要解决方式

    在Jetson TX2配置T265相关依赖时会发生错误 xff0c 因此需要提前对相关参数进行设置 xff0c 主要要将网络设置里面的相关参数改成下图的配置 xff1a
  • pixhawk日志ulg格式转matlab数据csv格式

    1 windows下打开Anconda Prompt xff0c 执行pip install pyulog安装pyulog包 2 在日志文件所在文件夹下执行ulog2csv 文件名 ulg即可生成相关的csv文件
  • 悲催的秋招之路

    个人情况 双非工科硕 民办本 专科起点 基础不行 专业知识不扎实 无技术无论文无项目 投递记录 企业名称 投递时间 岗位1 岗位2 岗位3 岗位4 国电南自 2021 5 19 嵌入式软件研发工程师 民生银行 2021 5 26 金融科技方
  • Matlab读取EXCEL文本中的数据并绘制二维三维曲线图脚本

    Matlab读取EXCEL文本中的数据并绘制二维三维曲线图需要将EXCEL保存为CSV格式 xff0c 然后取数据成矩阵进行处理 转CSV的方式 xff1a pixhawk日志ulg格式转matlab数据csv格式 1 导入文件 span
  • 零基础教会你用github创建个人博客网站

    1 创建账号 进入github网站 xff0c 在网站首页右上角进行用户注册 2 填写相关信息 按照提示填写相关信息完成用户注册 3 搭建个人博客库 进入个人主页 xff0c 在右上角选择 43 好 xff0c 进入 new reposit
  • SV2-4G移动终端使用配置与使用

    一 硬件连接 1接位置天线 xff0c 2接方向天线 xff0c 3接4G天线 xff0c 4接GPS配置专用线 xff0c 5接4G配置专用线 二 运行状态识别 1处为指示灯 xff08 运行 SIM卡 网络 电源 xff09 xff0c
  • yapi插件开发及安装的一些备注

    yapi官方文档有些缺失 xff0c 这里做一下补充 xff0c 官方文档地址 xff1a https hellosean1025 github io yapi documents redev html 插件开发需要调试 xff0c 这个需
  • VSCode修改编辑器(代码窗口)背景色

    VSCode 的背景色是放在主题里面定义的 xff0c 所以在vscode的设置中无法修改到编辑器也就是代码窗口的背景色 xff0c 对应想要自定义编辑器背景的同志们来说 xff0c 可以通过修改主题文件来实现 xff0c 操作起来也并不复
  • ros下tcp通信的过程

    ros框架下的tcp通信的过程 博主在编写一个需要通过wifi传输两个整数和一个状态的问题中 xff0c 通过构建ros xff08 Ubuntu16 04 框架下的tcp c 43 43 通信过程解决了问题 一 ros串口通信的实现 首先
  • Ecos操作系統查看进程信息

    由于最近公司用到了ecos操作系统 xff0c 所以简单的了解了一下这个RTOS xff0c 其相关的社区资源较少 xff0c 国内基本不用 xff0c 这里结合手册整理了一部分的内容 本文章主要两部分 xff0c 一是建立基本的测试进程
  • 在vmware上运行ecos

    目前关于在vmware虚拟机上运行ecos的文章应该是有 xff0c 我会放到文章最后面的资源链接 xff0c 所以写这篇文章的目的有两点 xff0c 一是补充原有文章的不足 xff0c 在实际操作中遇到的困难 二是提供其中相关的资源链接
  • PROFINET协议解析-DCP

    目录 一 设置 Set xff08 请求 xff09 二 设置Set xff08 应答 xff09 三 识别 Identify xff08 请求 xff09 四 识别 Identify xff08 应答 xff09 DCP全称Discove
  • PROFINET协议-DCP实践

    这里就上篇文章 Profinet协议解析 DCP 内容进行实践 xff0c 通过实验验证各操作的准确性 xff0c 并且也介绍一些基本的通信分析方法 xff0c 不必使用昂贵的抓包工具 xff08 某东200左右 xff09 xff0c 使
  • Profinet协议解析-过程数据

    新的一篇文章 xff0c 开始讲下一个点 过程数据 过程数据 xff0c 顾名思义 xff0c 就是一直循环传输的数据 xff0c 在整个过程中不间断的传输 xff0c 其每次传输的时间称为同步周期 这点类似于Ethercat中的PDO数据