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

西门子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的实例,这样和多重实例的区别在于,不需要在创建实例时,就绑定嵌套对象,而可以在后期修改,那前面的比喻,就是每个模块可以随便使用各个不同的轴进行控制,而不需要某个模块对应某个轴。

相关文章:

  • codeforces round 949 div2
  • 【Linux】进程2——管理概念,进程概念
  • c++调用动态库LNK2019无法解析的外部符号LNK1120无法解析的外部命令
  • 【C++】植物大战僵尸杂交版自动存档——防闪退存档消失
  • 【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
  • 常见的api:Runtime Object
  • day 37 738.单调递增的数字
  • Springboot引入redis启动报错问题的解决
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • 【教程】如何实现WordPress网站降级(用于解决插件和主题问题)
  • C++STL---stack queue模拟实现
  • 混合关键性系统技术【同构异构】【SMP、AMP、BMP】【嵌入式虚拟化】
  • C语言中typedef的四种用法(附带详细解析!!)
  • 【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
  • 玩转微服务-GateWay
  • hexo+github搭建个人博客
  • 分享的文章《人生如棋》
  • 08.Android之View事件问题
  • chrome扩展demo1-小时钟
  • CSS 三角实现
  • JSONP原理
  • JS字符串转数字方法总结
  • learning koa2.x
  • Vue 2.3、2.4 知识点小结
  • WePY 在小程序性能调优上做出的探究
  • windows下使用nginx调试简介
  • 微服务框架lagom
  • 微服务入门【系列视频课程】
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 学习笔记TF060:图像语音结合,看图说话
  • 异常机制详解
  • 用mpvue开发微信小程序
  • 自制字幕遮挡器
  • 06-01 点餐小程序前台界面搭建
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #git 撤消对文件的更改
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (一) storm的集群安装与配置
  • (一)kafka实战——kafka源码编译启动
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • . NET自动找可写目录
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 材料检测系统崩溃分析
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net和php怎么连接,php和apache之间如何连接
  • /etc/sudoer文件配置简析
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • []常用AT命令解释()
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [8481302]博弈论 斯坦福game theory stanford week 1