西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别

2024-06-08 00:28

本文主要是介绍西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先介绍下函数,函数块与数据块这三个概念。


数据块

数据块里可以存储各种类型的参数。有人可能会问,m寄存器不是可以存储布尔值,8位,16位,32位变量吗,为什么要多此一举?因为虽然m寄存器能存储以上变量,但数据块可以更灵活地对变量进行分类,且很多系统自带的函数块,需要背景数据块支持,另外,m寄存器不能存储些特殊的数据类型,如time,string,struct等,而数据块则可以很轻松的定义并使用这些变量。


函数

函数,是可以实现指定功能的模块,但这些模块,没有用来存储数据的背景数据块,所以函数的输入输出都要存储在另外的数据块或者plc寄存器中。


函数块

函数块,相当于带有数据块的函数模块,由于拥有了背景数据块,所以输入输出无需存储在其他数据块中。当使用函数快时,会同时创建一个对应实例的数据块。


打个比喻,例如我们要去自驾游旅行,我们就要带上自己的日常用品,而数据块,就是存储这些日常用品的容器。假设我们是叫的滴滴,那么滴滴就是实现我们从家到目的地的一个函数,但由于车不是我们的,我们需要另外带一个行李箱,这个行李箱,就可以理解为是我们的数据块。但如果我们是开自己的车去自驾,那么我们的行李就可以直接放在车上,而这个车,既能实现运输功能,又能存储我们的日用品,那它就相当于我们的函数块了。


然后,单个实例,多重实例,和参数实例,是针对函数和函数块嵌套的,例如函数里面调用函数块,函数块里面调用函数块等(函数调用函数,由于都没有数据块,所以不存在此问题)。


单个实例 

先说说单个实例,假设创建了一个函数块module1,函数块module10和函数块module11,然后在函数块module1里面调用函数块module10和函数块module11时,如果选择单个实例模式,则会在调用module10module11时,把他们当作一个独立的实例,分别创建各自的背景数据块,而当调用module1时,也会单独创建一个module1的背景数据块。所以当调用一次module1时,会生成三个数据块。

 

所以这种方式,适用于函数块里嵌套的模块是同一个模块的情况下。例如,一个系统只有一个轴,而我创建了一个函数块,调用轴的函数块,移动到不同的地方,那么每移动到一个地方,就要创建一个函数块,但无论创建多少个函数块,调用的都是同一个轴的动作函数块。

此外,如果是函数模块调用函数块模块,则只能选择单个实例模式,因为函数本来没有背景数据块,所以它调用的函数块,只能使用自身的背景数据块来存储参数。


多重实例

所以,使用多重实例的话,只要调用一次module1,就会有一个module10实例,而module10的参数,可以通过"module1_DB".module10_Instance.start来进行设置。还是用回单个实例的例子,如果一个系统有多个轴,而我们针对每个轴的动作,都打包成一个函数块,就可以使用此方式。


参数实例

如图,当使用参数实例形式后,嵌套的函数块会以参数形式输入给module1的实例,这样和多重实例的区别在于,不需要在创建实例时,就绑定嵌套对象,而可以在后期修改,那前面的比喻,就是每个模块可以随便使用各个不同的轴进行控制,而不需要某个模块对应某个轴。

这篇关于西门子PLC学习之数据块的单个实例,多重实例与参数实例间的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040733

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表