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

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值