西门子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

相关文章

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

python中getsizeof和asizeof的区别小结

《python中getsizeof和asizeof的区别小结》本文详细的介绍了getsizeof和asizeof的区别,这两个函数都用于获取对象的内存占用大小,它们来自不同的库,下面就来详细的介绍一下... 目录sys.getsizeof (python 内置)pympler.asizeof.asizeof