西门子工业支持中心,以专业共创价值!
西门子工业支持中心,以专业共创价值!
工作部门:技术论坛 WinCC Panel 及 IPC/PG版区版主
工作职责:自由职业人,从事自动化系统PLC与SCADA系统以及IT系统的设计开发,项目咨询...
技术背景:上海大学机械系本科毕业,上海大学固体力学专业硕士研究生,资深工程师。工...
项目经验:参与多条国外进口生产线引进消化吸收工作, 培养了严谨务实的工程经验和工作...
1118 【万泉河】结构化编程不是设备对象的模块化,而是。。。。
我强调过多次了,烟台方法提供的只是一套完整的系统设计的范本。参加 学习的学员,得到的只不过是一张完美而优雅的大饼。 凡是没有见过的人,都根本想不到大饼啥样子。就像初进入职场的员工,对老板给画的大饼过于美好反而充满质疑一样。然而不同的是,我这里是把这张大饼完完整整的做出来了,让大家品尝的同时,也晓得了大饼真的存在,这个大饼果然是一层又一层那么多层摊出来的。得到了验证之后每个人回家去烙自己的大饼了。
其实太多人无法想象也有情可原,因为我自己,在开始做的时候,也根本没有预想过会是现在的样子,一层又一层摊出来,重叠在一起的千层饼的样子,我自己都觉得惊奇,从来没见过别的人别的行业有这么做过。 所以确信应该是PLC行业首创。
然而,我们在一个项目中所能展现的技术方法是有限的,因为这个项目中压根没有用到嘛!所以,我后来又整理了一些文章,有的发在了公众号和专栏,有的也加到了专著中, 从各个应用方面, 针对各种各种需求给出解决思路。
其中,大部分的问题来自标准化学习营的学员们。 他们在自己各自从事的行业,以及用到的形形色色的产品元件,系统结构中,有一些特殊的要求, 示范项目中学不到,《PLC标准化编程原理与方法》的书也没有。所以就在学员群里和其他的学员们讨论。
有一个问题是一直悬而未决的。是在触摸屏上的模块化化实现。 我们的示范项目是S7-1500+WINCC的, 从外观上看无限接近于一套DCS系统。即上位操作单个设备的时候,是通过弹出式对话框来实现的。
而大量的非标设备通常都是由触摸屏来做上位人机界面的,尤其是许多低端型号的触摸屏,是无法做到弹出窗口的。所以资料中有我们做过的MCGS的资料,但只是用普通的方法,按钮平铺开实现的,并没有实现通用的模块化的窗口化的实现方法。
当然,我给出的解释是,对于非标设备,通常一个触摸屏能控制的对象数量有限,所以即便没有标准化模板,工作量也没多大。学员们倒也欣然接受。也有学员在西门子精致屏中用多路复用的方法,以及在MCGS屏中的高级技能,自行实现了窗口调用。
但总不是很令人满意。主要是实现的过程太复杂,太累。 我自己在项目中做过多路复用,感觉就不是很好,功能没有模块化,不能重复,所以不太满意。
今年上半年,在学习西门子的新版例程LBP的过程中,读到了它有通过在PLC中设立一个公用的数据区,通过PLC逻辑来实现触摸屏中数据多路复用的方法,很是有趣。 也想有机会嫁接到烟台方法架构中来实现。
然而,有一个核心的功能问题没解决,所以就一直悬而未决。 有一天,学员们又在讨论相关问题的时候,我就把问题提出来,大家胡乱讨论了一番,都没有结果。
我当然知道这种问题是问不来答案的。那些口口声声嘲笑烟台方法只是糊弄新手小白的而把自己当做高手的高手如云的群,我压根就没去问他们。
甚至官方论坛也没必要问, 我自己都还不会的问题,又有几个能知道呢!所以直接问了下崔坚:
请问一下,一个FB的2个实例,即2个IDB,优化块,我想把数据从IDBA完整复制到IDBB,有没有什么指令?
崔工第一时间回答是不知道有,因为我问的时间是晚上,他答应我第二天上班后帮查一下,内部同事们交流一下。 第二天给我的回复是没有这个功能。
而我在崔工给我回复不知道后,就又直接问了下在德国的PORTAL研发中心的哥们,也请他可以直接问下核心研发的德国同事。
稍晚后,给我来了回复,说是一组Symbolic move的命令可以。还发来了屏幕照片:
然而,我在V16中没有找到。 发给学员们,大家在V17中找了半天,也都没找到这个指令。 有人甚至去SIOS搜索帮助,也没找到。
我就再去追问哥们,是什么版本。他也有点迷糊了,研发的电脑上版本有点乱,有可能新功能不经意间掺进来了。 所以告诉我有可能是V18的。
那我们就只有等V18正式发行之后了。
然而我就想,既然现成的指令没有, 那把数据拆开打散了能不能实现呢?想了几个晚上,做了一些实验,通过搭建UDT,大致实现了。
就找了个晚上的时间,在学员群中做了一场直播讲座。讲座完成,学员们回去纷纷做实验自己再去实现了。他们实现后会让他们再逐个来做讲座讲解自己的实现过程。
有学员反复看录制的视频,发来个疑问,问我为啥要在原有的FB:NM29上面封装一层,单独做个NM30来实现呢?能不能在NM29里面直接增加代码实现呢?
就引来了这篇文章的题目。
我语音讲解了一下,大致的意思便是,结构化模块化编程的本质不是设备对象的模块化,而是功能的模块化。
比如一条生产线, 你按照顺序1,2,3,4,5,给分成5个单元来设计和编程, 那算不上什么模块化
烟台方法的标准化架构, 要实现的是每一个功能的模块化。 比如一台普通的电机,仅仅实现了手动自动的控制运行功能,但在各行业的应用中会需要增加一些特殊的功能,比如中央声光报警,寿命累积,变频器,正反转,星三角启动,以及本文提到的触摸屏多路复用等等。
我们经常见到一些人在谈到要做标准化的时候,就大谈规划。 大意是只要把所有需要的功能都提前考虑齐全了,都做好了,具体使用的时候只需要打勾,库函数的管脚上每个功能都有个激活的管脚,只需要把这个管脚打勾了,激活了,这个功能就选择激活了。
凡是有这样理论的人,我都可以断定他们不懂标准化和模块化。 如此的做法,有2个弊端:
1, 把所有能想得到的功能都做在库函数里面,会导致库的规模巨大,具体应用中有大量的功能是用不到的,就成了累赘。 然而因为所有功能都混杂在一起,要摘除反而需要一定的调试工作量。
2,这种大而全的思路本身是僵化的,其前提基础是技术工艺都是现成的,目的要求实现方法都是明确的,只需要规划好了做进去即可。 然而忽略了需要一直创新,技术一直需要发展。 如果已经做好了固化了,再有新功能需求怎么办?那就不断再增加,而前面的所谓的规划就全部失效了。 你今天的规划再好,也永远不能涵盖明天的技术发展。
比如我现在用UDT实现的功能,其实并没有完全模块化,对不同的设备类型, 电机, 阀门,都还要单独再编程和增加代码实现。如果将来V18新功能出来后,研究好了,有可能用一个功能模块就能实现所有设备类型通用。 我们总不能一直停留在原地等软机系统提供新功能吧!
我在书中的5.5.1节, 提到了把一个原始的库函数封装一层,首先实现了对原有设备功能的100%的继承而又没有增加任何新功能。 这个封装技能本身非常重要,我都是要求学员们重点掌握的。 而书的读者们也建议重视起来。 这个技能虽然看起来平淡无奇,也没多少难度,然而确实实现模块化设计的基石。 任何功能都可以模块化地添加,也可以模块化地删除减少。
这次的讲座中讲解到的多路复用的实现过程中,再次用到了UID的功能,即在去年底时出过的题目。而我自己在近一年中又有了新的实现方法,在讲座中又花费了一大块时间做了讲解。只不过发现程序还有一些小问题, 等彻底解决之后再拿出来探讨。
总算有一个有价值的讨论。
回复一下,我可以建立多个IDB,超过FB的实际的调用次数, 而多出来的这个,只是为了跟HMI通信等的其它的原因。
所以,你回复中把IDB和FB混淆了。
它们可以不是一回事,也不一一对应。
为啥要复制背景数据块,这种操作我还是第一次见到,没这样的应用经验,如果是需要一模一样的数据,那保证输入一样即可,反正fb内部都是对输入的处理,如果一样的数据出来的结果不同,我要怀疑你FB的一致性 有没有问题。
文章结尾每次都是推荐听讲座,加会员,买课程,看看每次评论区里有人支持你吗?全是批评和质疑。本人戾气还特别重,有本事正面回答人家的问题啊?有人还买了程序,看不懂,哦,一句水平太低,没本事看懂。就这?还有你都要数量还要保密忠实买家怎么不来挺你啊?不会他们不上西门子论坛吧?
想知道为什么大家对你有怨气?狂妄自大,自持清高。
自动化发展这么多年,其实还是一片荒漠。所谓模块化基本上都是在吹牛逼的状态。
不跟你扯啦!我现在较多的精力在对西门子官方库LBP的使用和移植方面。
去参考下:https://mp.wei xin.qq.com/s/cCECz5si1eAX6PG3mqCFzQ
0128 【万泉河】西门子LBP库例程学习培训计划
如果你牛逼呢, 我希望你能直接告诉我LBP你早用的滚瓜烂熟了,早就用在自己工程项目中了。
反正到目前为止,我还没见过谁有成功应用的案例,
我这儿立志把自己作为LBP推广应用第一人呢!
您呢?
不是这样吗?目前的全局库中有60多个库文件,基本包含我们项目组常用的组件,用到其他的组件就到服务器上找找库文件,拿到模板配置一下手动,拖一拖画面,把回原自动流程写一写,当然还有其他的要做,但是基本可以满足调试。
去年10月份来的新人,现在在调一个站,有气缸、伺服、机械手、相机、RFID、螺丝枪、位移传感器。。。。项目人家一样可以做,虽然说磕磕绊绊的,经常需要我们过去看一下,处理一下问题,但是总体来说还是可以的,毕竟是人家第一个项目。
自动化发展了那么多年了,也该到了盖房子堆城市了阶段了吧。你在研究如何把房子盖的快时,人家已经有房子整体搬运技术了,先把房子该起来,哪里用到搬去哪里。
如果各位还处于盖房子阶段,那么是不是你这个全世界范围内首个把面向对象方法完全应用到工控行业的PLC工程师的责任呢
如果是这样, 那PLC编程何其简单,免费的库早就有了,也有个人开发的收费的库。
那么每个工程师就像玩城市游戏一样把房子堆叠成城市即可。
各位也别吹牛逼自己有什么技术贡献。
当然也不要抱怨自己的职业生涯有多苦逼。
搬运工有什么好抱怨的?
这个我和你的理解就不太一样了,我认为指令是砖头,库是房子,程序是城市。库只是将程序封装起来避免造轮子,在特殊的场景内甚至出现调用一个库就是一个完整的程序,比如产品跌落实验台,就一个气缸,按按钮缩回,按钮松开弹出,里面就只调用了一个气缸的库,其他什么也没有。库来自程序,但质量高于程序,一段程序只需要适用当前的环境,而要将其封装成库就需要考虑更多,能写出可使用程序的人很多,但是能写出可使用库的人却人少。我不相信有搞的明白库然而写程序却一般的人
研究好了库,对于新人来说在程序的理解上和写程序的结构上都会有很大的帮助。
你误会了,我说买库不是西门子官方的库,而是人家做项目用的库,实实在在看看人家是怎么控制气缸控制伺服控制组件的。看看人家模板和程序结构是什么样子,学点能实际用到的。没有任何一个人是看完官方手册才做项目的,也没有哪一个项目可以用到手册上所有知识的。还有官方的库就像说明书一样全面而又浅显,是针对所有人的,不是你研究明白官方的东西就了不起,而是官方的东西就是要让所有人都看的懂。
所有说不知所云的,其实说的很对。 很正确。
就是你不知道,你看不懂嘛!
我现在非常需要的是某位跳出来说,我书里写的内容你全懂,然而都是错的,根本不能实现!
或者是我抄的你的,你早就实现了。
通过在PLC中设立一个公用的数据区,通过PLC逻辑来实现触摸屏中数据多路复用的方法
建立一个UDT
定义一个公共数据: PUBLIC_DATA 数据类型为建立的UDT
定义一个数据数组 :DATA[15] 数据类型为建立的UDT
定义两个INT变量:INDEX,INDEX_TMP
IF INDEX<>INDEX_TEMP THEN
PUBLIC_DATA:=DATA[INDEX];
ELSE
DATA[INDEX]:=PUBLIC_DATA;
END_IF;
INDEX_TEMP :=INDEX;
在触摸屏或WINCC中连接PUBLIC_DATA。
INDEX是你点击不同对象时的序号。
这样搞,屡试不爽
那只能说你们还需要好好看了。
垃圾的概念有两种, 一种是内容不够你吃的, 你没吃饱。
二是内容都是重复的,照抄的别人的书上的, 你原本全都会的。
如果是这样, 那也不至于本文的内容都看不懂了。
除此之外, 想不出你们哪来的那么大的怨气了。
@宝冬
其实咱们做的差不多。
多层次的功能分割,只是理念上的。
比如我要传递一个功能的实现方法的时候就可以用二次封装的方法来演示。
而在实际应用中,还是会在1次封装中把多个功能一次性实现的。
理念和实践并不一定需要完全统一。
比较需要反对的是对基类的篡改和破坏。
还有一个比较大的问题是,PLC系统允许的嵌套层数是有限制的, 那么每个设计架构师需要酌情处理,地方超限。
Zane 评 万泉河
今年上半年,在学习西门子的新版例程LBP的过程中,读到了它有通过在PLC中设立一个公用的数据区,通过PLC逻辑来实现触摸屏中数据多路复用的方法,很是有趣。 也想有机会嫁接到烟台方法架构中来实现。
起码领先同行20年以上的烟台大法,今年上半年才有这样的认知,还要炫耀一番,也是无语了。1楼网友就用了15年了,我看论坛内超过20年的也比比皆是。
甚至官方论坛也没必要问, 我自己都还不会的问题,又有几个能知道呢!所以直接问了下崔坚:
请问一下,一个FB的2个实例,即2个IDB,优化块,我想把数据从IDBA完整复制到IDBB,有没有什么指令?
呵呵,我想崔工也是被你这种“天才”的想法搞晕了吧。复制数据就复制数据呗,有必要牵扯整个背景DB呢?真要实现很简单啊,输入同样条件重复调用一次,配不同的背景DB即可,这不是很符合万线圈的做法吗?走道儿走到这儿却不会走路了?问问题是假,借题炒作自己是真吧?!
博途下只要是相同数据类型或结构定义UDT(struct不包括)的数据就可以互相拷贝,DB块相互拷贝属于复杂数据结构的拷贝,必须符合是同一个UDT生成的条件,背景数据块显然不符合要求。
我语音讲解了一下,大致的意思便是,结构化模块化编程的本质不是设备对象的模块化,而是功能的模块化。
比如一条生产线, 你按照顺序1,2,3,4,5,给分成5个单元来设计和编程, 那算不上什么模块化
自动化生产线包括硬件系统与软件系统,结构化模块化也当然涉及硬件与软件系统,而且是相互配合设计的,实现的方式也可以不同。把一条生产线按生产单元来实现软硬件的机构化模块化的设计,在每个单元内按控制元部件再可以实现底一层级的软硬件结构化模块化设计,这已经是很普及的做法了,你说算不上的依据是什么呢?
烟台方法的标准化架构, 要实现的是每一个功能的模块化。 比如一台普通的电机,仅仅实现了手动自动的控制运行功能,但在各行业的应用中会需要增加一些特殊的功能,比如中央声光报警,寿命累积,变频器,正反转,星三角启动,以及本文提到的触摸屏多路复用等等。
我们经常见到一些人在谈到要做标准化的时候,就大谈规划。 大意是只要把所有需要的功能都提前考虑齐全了,都做好了,具体使用的时候只需要打勾,库函数的管脚上每个功能都有个激活的管脚,只需要把这个管脚打勾了,激活了,这个功能就选择激活了。
凡是有这样理论的人,我都可以断定他们不懂标准化和模块化。 如此的做法,有2个弊端:
1, 把所有能想得到的功能都做在库函数里面,会导致库的规模巨大,具体应用中有大量的功能是用不到的,就成了累赘。 然而因为所有功能都混杂在一起,要摘除反而需要一定的调试工作量。
2,这种大而全的思路本身是僵化的,其前提基础是技术工艺都是现成的,目的要求实现方法都是明确的,只需要规划好了做进去即可。 然而忽略了需要一直创新,技术一直需要发展。 如果已经做好了固化了,再有新功能需求怎么办?那就不断再增加,而前面的所谓的规划就全部失效了。 你今天的规划再好,也永远不能涵盖明天的技术发展。
比如我现在用UDT实现的功能,其实并没有完全模块化,对不同的设备类型, 电机, 阀门,都还要单独再编程和增加代码实现。如果将来V18新功能出来后,研究好了,有可能用一个功能模块就能实现所有设备类型通用。 我们总不能一直停留在原地等软机系统提供新功能吧!
呵呵,洋洋洒洒一大篇,看下来却是自相矛盾的意思,不用狡辩,“啊我反对的是工艺功能,我针对的是所有类型的硬件设备”,实际就是换一种形式的大而全而已。
请填写推广理由: