白骨精是名著《西游记》里的人物,生性狡滑,是要害人的,据说“吃一口唐僧肉就能长生不老”的说法,就是出自它口,为什么说好处“长生不老”,当然是因为这么说才能打动人心,自古就是“清酒红人面,黄金动人心”,要是说“吃一口唐僧肉就能长个大毒瘤”肯定就没有人再会去惦记唐长老了,这也是《西游记》里宣传战线上一个影响深远的重大“发明”,也可见舆论工作的重要性。
pascal语言之父、编程泰斗、发明“结构化程序设计”理论的祖师爷Niklaus Wirth
,凭借一个公式于1984年获得“图灵奖”,“算法+数据结构=程序”(Algorithm +Data Structures=Programs)

真正的新概念的发明提出,改变了人们的思维模式,对后世产生了深远且巨大的影响。
白骨精是擅变的,是会让情况变复杂的,是蛊惑人心的,是不易分辨的。
PLC程序中的“白骨精”又在哪儿?

以上图中的简图为例,程序设计中的低级的“白骨精”存在于三个地方,数据、接口、FB/FC内部的实现。
数据要支持变化,传闻江湖的“数据驱动编程”是尽量编写处理数据的固定代码,支持数据的变化,就像是“白骨精”,任它再变化,它也是妖精,前面发的主贴DI信号采取了数组方式,正应此点;数据是依赖接口的,接口就像是一道门,有固定的尺寸要求,数据不匹配的话,你就不能通过,接口不是凭空而来,接口是由FB/FC外部的数据决定的;你要通过什么样的数据,我就开什么样的门;FB/FC内部的实现又是由接口决定的,你放进来什么样的数据,我就采取什么样的措施。
既然”白骨精“要变化,我们就要有定力、有眼力,不要受其影响,又要分辨是非。
变化不可避免,孙猴子用金箍棒在地上画了个圈,让长老不要出来,可是长老不听话,终是惹下是非,想起一张漫画,开始孩子坐在小车里哭闹不止,奶奶手里的线球扔在地上,正站在那里无计可施;后面就是奶奶坐进了小车,安心的织毛衣,而调皮的小孩正在小车外面高兴的玩耍,于是,天下太平。
与其让长老画地为牢,不如让”白骨精“坐进圈里。
把”白骨精“放在哪里?放在FB/FC内部?不妥,钻进肚子内,则成了心腹大患,岂止是要吃肉,恐怕连骨头都嚼碎了;放在接口?也不妥,拦腰而束,如那江面上的铁链横锁,上下都被其掣肘;还是放在”数据“里比较让人放心。
《西游记》中白骨精变化了三次,三这个数字很神奇,总是有很多说法和它紧密相连,如三生有幸,事不过三,酒过三巡,三心二意,三五成行,说三道四;这里我们就不说三了,我们直接道四;四也是神奇的数字,神奇在哪里,心理学家研究发现,说是人一次只能记住四项事物,神奇吧?
是不是也可以不要脸地”发明“一下新”理论“规定一下FB/FC的管脚数量,最多不得超过4个?或者可以放点水,给它加减两个的余地,最多不得超过6个?!六六大顺嘛,吉利。
在固定住管脚个数之后,那么人就只能多动点心思去好好组织数据形式了。前人说,数据比编程逻辑更容易驾驭,那么为了让代码更简洁些,不如让数据更复杂些,谁让这是个数据为王的时代呢。


面对上图中这么多的管脚,就问你怕不怕?
即然这么多东西都是必需的,降管脚数量,就得派得力干将出马了,下面有请PLC Data Type及其一众小弟结构化数据类型出场。传说洪武大帝大杀功臣时,太子朱标极力阻拦,洪武大怒,找来一根长满剌儿的荆棘条,让太子握住,太子说这扎手啊老爹,老朱是个狠人儿,听罢一把握住,顺势用力一撸,然后就剩下一根光棍儿,递给太子说,儿啊,你爹不是想杀人,你爹这是在给你去剌儿啊。

前面的主贴里的接口设计使用了array[*] of,原本是直接FB中input下使用array的,后面因为传值副本的原因,改为了FC,FC会不会感谢我没把它干掉?至于FB的input、output为什么不支持array[*] of,相信有些人暂时还没完全弄明白,简单地很,过年你要请客,在家里准备吃饭的房间,你准备了一个十人间,可忽啦啦地来了二十个吃饭的人,咋办? FB的实例数据块(背景数据块)要为接口参数开辟存储空间,需要你告诉它开辟多大的空间,而array[*] of 则是个未知数,这空间怎么开辟?
FB/FC的接口要尽量简洁,数量呢要损之又损,把它搞得像西施一样,恰恰好。
FB/FC的内部实现呢,通常不会经常性的修改,如果需要添加/减少数据数量,还需要修改接口和实现的话,那真的是个大灾难;毕竟,把修改接口和内部实现的权限开放给最终用户,是件风险极高的事情,而这也有违封装的初衷。
年前无雪,大年初三的,却下了雨,可惜又雨太小,实在是浪不起来,只好在这里敲打一番,写写小作文,聊作消遣。