ERTEC200P-2 PROFINET设备完全开发手册(5-1)

news2025/6/19 1:01:35

5.1 非周期通讯

非周期通讯,顾名思义,表示这种通讯并不是在每个通讯周期都要进行的通讯,也叫做异步通讯或者非实时通讯。非周期通讯访问的数据叫做数据记录(record data)。一般情况下,以下三个名词表示的是一个意思

  • 非周期通讯
  • 异步通讯
  • 读写数据记录

这类通讯都是由控制器(PLC)发起,分为读数据记录操作和写数据记录操作。非周期通讯的功能一般有

  1. 模块的初始化配置参数 - 例如:模拟量通道的选择(0-10V或4-20ma),网关的配置(串口波特率,modbus地址),这些参数定义在GSDML文件中,可以由用户在项目组态时配置。配置的值在设备建立连接时由控制器写入到设备数据记录中。
  2. 模块的运行或诊断参数 - 例如:变频器的输出功率,功率限幅或者诊断缓冲,这些参数通过控制器的控制程序不定期读取或写入,完成特定的控制工艺。
  3. PROFINET协议定义的标准数据记录 - 这类数据的操作由协议栈实现,并不需要额外的开发
  • 配置通讯接口相关的参数(例如IRT参数)(index = 0x8030)
  • 设备的识别维护信息例如(I&M
  • ModuleDiffBlock

PROFINET协议定义的部分标准数据记录

数据记录的寻址由以下参数指定

  • API (0: 标准API 1 ... 0xFFFF 行规定义)
  • slot (0 ... 0x7FFF)
  • subslot (1 ... 0x7FFF)
  • index ( 0..0x7FFF用户定义 ,8000 ... 0xAFFF, 0xB000 ... 0xBFFF 行规定义)

举例来说,设备的slot 1, subslot 1 是一个模拟量输入模块,我们可以定义一个参数控制通道的选择(0-10V或4-20ma),index为0x0008。控制器可以通过(API =0,slot = 1,subslot = 1,index = 0x0008)去读写这个参数。

协议栈中实现了一个示例数据记录的操作,在GSDML文件中定义的64Bytes数字量输入中

<!-- ================================== -->
<!--         64 byte digital input      -->
<!--   (param-rec, support PROFIenergy) -->
<!-- ================================== -->
<ModuleItem ID="ID_Mod_11" ModuleIdentNumber="0x00000030">
<ModuleInfo>…</ModuleInfo>
  <VirtualSubmoduleList>
   <VirtualSubmoduleItem … >
    <IOData>…</IOData>
    <RecordDataList>
        <ParameterRecordDataItem Index="1" Length="4" TransferSequence="0">
        <Name TextId="T_general_parameter"/>
        <Const Data="0x30,0x01,0x56,0x78" ByteOffset="0"/>
        </ParameterRecordDataItem>
     </RecordDataList>
     <ModuleInfo>…</ModuleInfo>
     <PROFIenergy ProfileVersion="V1.1" EntityClass="Class3">…</PROFIenergy>
    </VirtualSubmoduleItem>
  </VirtualSubmoduleList>
</ModuleItem>

我们可以看到模块“64 bytes 输入“<RecordDataList></RecordDataList>定义了一个index=1 长度为4字节的数据记录,这里的参数是一组固定值"0x30,0x01,0x56,0x78"。也可以改变格式成为用户输入,这样在TIA Portal中就可以项目组态中配置这个参数了,具体的实现方式会在下一章中介绍。同理,模块“64 bytes 输出“也定义了一个index=1 长度为4字节的数据记录,参数值固定"0x31,0x01,0x56,0x78"

协议栈中,数据记录的读写操作分别对应PnUsr_cbf_rec_readPnUsr_cbf_rec_write这两个回调函数。在PnUsr_cbf_rec_write中

...

根据传入的index执行不同的配置功能。index=1时,协议栈只是将接收的配置参数打印到串口终端。配置参数在设备建立连接时由PLC写入到设备数据记录中,在串口终端我们可以看到GSDML定义的数值已经写入到设备中。

 

 两个打印信息分别对应 Slot 1的 “64 bytes 输入“和Slot 2的” 64 bytes 输出“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu下常用命令(嵌入式)

开发环境: ubuntu-14.04.1-desktop-i386 VMware-workstation-full-10.0.2-1744117.1398244508.exe lsb_release -a 查看ubuntu版本 ctrlalta 打开控制台 du -sh 文件/文件夹 查看文件或文件夹的大小 su 或 su root 都是切换到root账户 su 普通用户 切换到普…

CSS2023年面试题汇总~~~~持续更新中!!!!

文章目录1.元素水平垂直居中的方法有哪些&#xff1f;2.flex布局3.position定位4.display:none与visibility:hidden的区别1.元素水平垂直居中的方法有哪些&#xff1f; 利用定位margin:auto利用定位margin:负值利用定位transformtable布局flex布局grid布局 其中2&#xff0c;…

风电的Weibull分布及光电的Beta分布组合研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

二、线程的Thread 类及常见方法【2/12】【多线程】

线程的Thread 类及常见方法2. Thread 类及常见方法2.1 Thread 的常见构造方法2.2 Thread 的几个常见属性2.3 启动一个线程-start()★★★start和run的区别★★★run不会创建线程 是在原来的基础上 执行代码start 创建线程&#xff0c;在新的线程 执行代码2.4 中断一个线程★★★…

常见面试题之Redis篇

1.1.Redis与Memcache的区别&#xff1f; redis支持更丰富的数据类型&#xff08;支持更复杂的应用场景&#xff09;&#xff1a;Redis不仅仅支持简单的k/v类型的数据&#xff0c;同时还提供list&#xff0c;set&#xff0c;zset&#xff0c;hash等数据结构的存储。memcache支持…

Open Inventor 2023.1 Crack

发行说明 Open Inventor 2023.1&#xff08;次要版本&#xff09; 文档于 2023 年 4 月发布。 此版本中包含的增强功能和新功能&#xff1a; Open Inventor 10 版本编号更改体积可视化 单一分辨率的体绘制着色器中与裁剪和 ROI 相关的新功能MeshVizXLM 在 C 中扩展的剪辑线提…

拟牛顿法:python代码实现

文章目录拟牛顿法待优化实例scipy工具包实现BFGS自编Python实现BFGS拟牛顿法 在梯度类算法原理&#xff1a;最速下降法、牛顿法和拟牛顿法中&#xff0c;介绍了梯度类算法求解优化问题的设计思路&#xff0c;并以最速下降法、牛顿法和拟牛顿法为例&#xff0c;描述了具体的算法…

3.9、互斥锁(互斥量)

3.9、互斥锁&#xff08;互斥量&#xff09;1.互斥锁&#xff08;互斥量&#xff09;的介绍2. 互斥量相关操作函数3.互斥量函数的使用介绍①pthread_mutex_init②pthread_mutex_destroy③pthread_mutex_lock④pthread_mutex_trylock⑤pthread_mutex_unlock3.利用互斥锁实现线程…

计讯物联双网口工业路由器TR321助力货轮冷链监测解决方案高质量落地

政策背景 国务院办公厅印发我国冷链物联流域第一份五年规划——《“十四五”冷链物流发展规划》&#xff08;以下简称“规划”&#xff09;。《规划》聚焦冷链物流体系、冷链运输、冷链物流服务、冷链物流创新及冷链物流监管体系等方面&#xff0c;对冷链物流的全流程、全环节…

Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so)

本文首发于 Ficow Shen’s Blog&#xff0c;原文地址&#xff1a; Ficow 的 AI 平台快速上手指南(ChatGPT, NewBing, ChatGLM-6B, cursor.so)。 内容概览 前言OpenAI —— ChatGPT微软 —— NewBing智谱AI —— ChatGLM-6BAI生成代码 —— cursor.so总结 前言 现在各种AI工具大…

虚拟机网络配置

点击【编辑虚拟机设置】&#xff0c;点击【网络适配器】&#xff0c;选择【桥接模式】 选择好之后退回主页&#xff0c;点击【编辑】&#xff0c;选择【虚拟网络编辑器】 添加一个【VMnet8】的网络名称 点击【开启虚拟机】 输入账户密码&#xff0c;输入【cd /etc/sysconfig/ne…

springcloud——gateway功能拓展

目录 1.获取用户真实IP 2.统一跨域配置 3.redis令牌桶算法限流 1.获取用户真实IP 在我们的日常业务中&#xff0c;我们时常需要获取用户的IP地址&#xff0c;作登录日志、访问限制等相关操作。 而在我们的开发架构中&#xff0c;一般我们将服务分为多个微服务&#xff0c;…

熟练了Flex布局之后,该学学Grid布局了

介绍 CSS Gird布局也叫二维网格布局系统&#xff0c;可用于布局页面主要的区域布局或小型组件。网格是一组相交的水平线和垂直线&#xff0c;它定义了网格的列和行。我们可以指定将网格元素放置在与这些行和列相关的位置上。 一维布局 和 二维布局 像流布局和Flex布局&#…

Windows10系统安装perl命令

文章目录1&#xff0c;下载ActivePerl 5.28&#xff08;基于Windows 10系统&#xff09;&#xff1a;1.1&#xff0c;Perl 主页: https://www.perl.org/get.html1.2&#xff0c;选择windows1.3&#xff0c;选择Binaries---activeperla版本1.3&#xff0c;直接选择windows 5.36版…

【观察】神州数码高质量发展背后,是技术创新“叠加效应”的释放

毫无疑问&#xff0c;在百年变局和世纪疫情的双重影响下&#xff0c;整个2022年科技行业的增速都在放缓&#xff0c;更对身处其中的科技企业的业务连续性和成长性提出了更高的考验。尽管如此&#xff0c;神州数码&#xff08;000034.SZ&#xff09;仍然交出了一份令市场亮眼的成…

【iOS逆向与安全】使用ollvm混淆你的源码

前言 当你在研究别人源码的时候&#xff0c;是不是期望着别人代码没有进行任何的防护和混淆。这时的你&#xff0c;是不是应该考虑一下自己代码的安全.本篇文章将告诉你&#xff0c;如何使用ollvm来混淆iOS端的代码【此文为入门贴&#xff0c;大佬请绕道】。 一、目标 编译o…

【MybatisPlus快速入门】—— 拓展入门

逻辑删除 前面我们完成了基本的增删改查操作&#xff0c;但是对于删除操作来说&#xff0c;我们思考一个问题&#xff0c;在实际开发中我们真的会将数据完成从数据库中删除掉么&#xff1f;很多情况下我们是需要保留要删除的数据用来总结统计的&#xff0c;所以我们是不能将数…

从零学习SDK(5)SDK文档的学习和参考

要想充分利用SDK的优势&#xff0c;仅仅下载和安装SDK是不够的&#xff0c;还需要学习和参考SDK提供的文档和资源。文档和资源是SDK的重要组成部分&#xff0c;它们可以帮助开发者掌握SDK的基本概念、结构、用法、限制和最佳实践&#xff0c;以及解决常见的问题和错误。 查找…

(数字图像处理MATLAB+Python)第三章图像基本运算-第二节:图像代数运算

文章目录一&#xff1a;图像算数运算&#xff08;1&#xff09;加法运算A&#xff1a;概述B&#xff1a;程序&#xff08;2&#xff09;减法运算A&#xff1a;概述B&#xff1a;程序&#xff08;3&#xff09;乘法运算A&#xff1a;概述B&#xff1a;程序&#xff08;4&#xf…

C++模板基础(九)

完美转发与 lambda 表达式模板 void f(int& input) {std::cout << "void f(int& input)\t" << input << \n; }void f(int&& input) {std::cout << "void f(int&& input)\t" << input << \n;…