回复:分享一个分布式的功能块,涉及到一种新的编程思想

已锁定

Zane

版主 西门子1847工业学习平台

  • 帖子

    21059
  • 精华

    399
  • 被关注

    1484

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2023-07-22 15:43:03

15楼

展开查看
以下是引用牛逼之人必有牛逼之处在2023-07-18 15:50:21的发言 >5楼

假设一种场景而已。

比如报警排序,你需要区分报警设备的报警先后顺序,每当设备报警时需要入栈,处理后出栈。

比如多工位夹具的先入先出处理,每一个家具一个功能块,每一个块内置一个排队块,他们能够得知自己所在的栈位,而无需单独写一个外置的功能块来协调多个夹具的先后关系。


以下是引用Zane在2023-07-18 15:05:23的发言 >4楼:请说明一下,100台设...

引用4楼详细内容:

请说明一下,100台设备在程序里的存在是何种形式?


这100台设备为什么一定要排队?

以下是引用牛逼之人必有牛逼之处在2023-07-18 13:06:42的发言 >2楼:我却没有见到过有人...

引用2楼详细内容:

我却没有见到过有人编写一个块,这个快只能控制一个设备,但是通过多次调用这个块,并使用数组连接起来,于是可以像搭积木一样,形成可以控制任意数量设备的大功能块。

---------------------------------------------------------------------------------------------------------------

这个实现起来并不难,300、400的年代就可以实现。


--------------------------------------------------------------------------------------------------------


只要使用功能块都是可以实现的,但我要说的是,每一个功能块都是同样的,且任意一个实例与其他所有实例都存在连锁关系。

就拿排队块来说。

栈位1到栈位100,调用100个实例,如果栈位1功能块出栈,那么栈位2-100的功能块的栈位输出都会减一。

如果有功能块入栈,且它入栈得到的栈位是50,那么原来的栈位为50的功能块会变成51,原来的51变成52......

一般实现这些功能,以往都喜欢做成一个功能块,然后所有的连锁、输出都在这个功能块中,但是往往存在弊端。

比如需求变为101个,又该如何?重新写逻辑关系?调试?修复bug?

为什么不能写成一个块,这个块只能提供一个栈位输出,当需要两个栈位时,调用两个实例,则提供两个栈位输出,需要100个栈位则调用100个实例......

这些功能块之间只需要一个简单的数组:Array[0..1] of Int 负责连接成为整体,它能够传递这些块之间的连锁关系、信息。

值得一说的是,即使你调用六万个实例,依然可以使用Array[0..1] of Int 将他们连接,它不会因为你调用的实例多了,数组的元素也需要增加,永远是Array[0..1] of Int。


甚至,你还能够将这些栈位分为两组,使用同一个数组连接。


通过这样,我们可以把这个功能块放在一个fb内,组成一个大功能块,也可以打散。



比如,当我们有一百台设备,他们需要进行排队,于是我们可以将一个排队块集成在设备功能块内,只需在inout定义一个Array[0..1] of Int数组,连接起来之后,这些设备之间就能够自动形成队列,即使你突然增加一台设备,也无需重新考虑逻辑,直接增加一个排队块的实例即可。





以下是引用Zane在2023-07-18 08:20:52的发言 >1楼:我却没有见到过有...

引用1楼详细内容:

我却没有见到过有人编写一个块,这个快只能控制一个设备,但是通过多次调用这个块,并使用数组连接起来,于是可以像搭积木一样,形成可以控制任意数量设备的大功能块。

---------------------------------------------------------------------------------------------------------------

这个实现起来并不难,300、400的年代就可以实现。




还有,最简单的入栈出栈功能块,我见到的也是一个块,但是这个块的栈位总是有限的,但完全可以编写一个块,这个块只能提供一个栈位,通过多次调用并使用同一个数组连接,于是可以提供任意多的栈位。

------------------------------------------------------------------------------------------------------------

数组数组,组就是集中在一起,无论是逻辑上的或者是物理上的,楼主分散集中的想法够新颖,是不是能再仔细说说呢?

比如报警排序,你需要区分报警设备的报警先后顺序,每当设备报警时需要入栈,处理后出栈。

--------------------------------------------------------------------------------------------------------

你靠PLC扫描来实现吗?    建议你先学习一下SOE.



比如多工位夹具的先入先出处理,每一个家具一个功能块,每一个块内置一个排队块,他们能够得知自己所在的栈位,而无需单独写一个外置的功能块来协调多个夹具的先后关系。

----------------------------------------------------------------------------------------------------------

FIFO不是已经排好队了吗?还要排队?怎么排?

就算是排队应用,就是一个链表记录的添加与删除。是不是每个夹具功能块都要带这点代码,我看未必。

Zane 注册自动化系统工程师 Always save before download
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10578条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。