终于抵不过市场的压力,遵从于市场,用SMART200做了一把标准化的项目。
本来呢,去年我辛辛苦苦几个月,用标准化的方法,搭建了一套全新的S7-1500的系统项目模板,指望着后面的项目做起来能轻松些呢!
可后来,合作方提出, 一些小单机的系统, 要用SMART 200+昆仑通态触摸屏来做。我不同意, 那就用S7-1200好了。 我原本S7-1500下做的程序块, 只要稍微一点点改动,就可以用到S7-1200中。他们原本也同意了,有几个项目也是用S7-1200做了。但后来一些实在低端的项目,就顶不住了。同行都是用SMART来做的, 我们如果非要坚持用S7-1200,那成本就比竞争对手高出来一大截,而整个设备原本利润都很微薄,就很难跟竞争对手比了。
所以,迫不得已,还是要按照旧的配置,用SMART 200来做。我原本对这个事也不算太重视。以前做S7-200的时候,就知道可以有库的功能。所以就对学生说,你就按照我1500的框架结构,在200里面照猫画虎做一遍吧!我实在是累了,重新另起炉灶,另做一套标准库太累心。
学生在做的过程中,陆陆续续跟我提过一些问题,告诉在S7-200中实现不了。当时我觉得也很正常的,没怎么放在心上,低端PLC比高端PLC性能差是方方面面的,当然不能指望和新的1500一样的实现高效的标准化,既然不能实现完全标准化,那就酌情,部分程度的标准化吧,能在将来的项目中实现复用,提高编程效率就行。
后来,设计做完,项目实施到一半的时候,我把程序要来看了看。甚至还为此专门安装的SMARTPLC的编程软件。
打开程序,看了不到5分钟,就完全晕了。铺了一个浩大的场面,做了一套复杂的程序,但本质上,还是非标的。非但用了大量的全局变量和定时器不说,为了实现电机阀门等专用块的重复调用,还增加了一批INOUT的垃圾管脚,设备块调用的时候,还要为这些管教分配不相冲突的V区。
总的来说,与我的预期相差甚远,甚至大相径庭啊。说明了2个问题,一个是对我的标准化的理念理解远远不够。虽然跟着我完整做完了一套 S7-1500的项目,我在过程中也把理念,界限,原则都给明确了,但到自己实际操练,仍然露出了短板。二是,低端PLC要实现标准化程序确实难度大。需要对PLC系统,计算机原理有足够的熟悉,基本功要足够扎实,有足够多的手段来处理遇到的复杂问题,实现标准化应用的需求。
所以,在2018年我提出标准化编程的理念后,有一大批长期专门擅长玩低端PLC的老鸟,对我发出了挑战,嘲讽我是饱汉子不知饿汉子饥,玩高级货不差钱,不晓得不适应低端货的玩法,也更是不懂中国国情。
好吧,那后一个SMART200的项目,我从头到尾来做吧。
把他做好的电机块阀门块借来,在其基础上做了改造,实现简单调用就可以实现重复调用,另外又搭建了一些专用块,实现需要的功能。并把在S7-1500项目中,还没有特别明确的库函数随工艺分层而分层的理念更加明确清晰。在分层清晰的基础上,也可以施行更清晰的原则,本文只讲一些原则,并秀一些在原则基础上实现的效果。而具体的实现方法细节,会在以后的文章中陆续表述。
与高端PLC的子程序有FB和FC的区分,在S7-200里,子程序一概叫做SUBROUTE, 简称SBR,所以你新建一个SUB,名字缺省总是SBR_1, _2,_3等等。并且每个SUB都有一个唯一的编号,SMART200可以定义的SBR号最大为128个,在系统的定义里,这些SUB是平等的,没有分别,但我们可以人为的划区域,指定一些区域的函数是L1,L2,L3的功能性函数,而另一些区域的函数是A区,手动功能的函数,B区则为自动功能的调用实现。
若看不懂我上面说的分区,可以看下我以前的文章:《【万泉河】工艺是分区的,库也是分区的》
而因为SMART的编程软件里面,程序块的列表总是以其数字编号从小到大的顺序来的。所以为了整齐,应当把功能性的库函数定义为较大的编号,以排在后面,而框架调用的函数,则按照手动到自动的顺序依次建立。
由此实现了如截图的效果:
还好,SMART200的函数调用是基于符号的,所以在程序设计中可以随时更改每个SUB的编号,而不会引起任何调用错误和编译错误。上面的函数有一些是后加的,排号有一些不够整齐,要理顺也是分分钟的事。
在划分好分区的基础上,约定了一些具体的原则。定时器TIMER自然是一个也没用了。除此之外,所有的物理I/O地址的调用,全都在手动功能的A区,包括上位HMI通讯的接口,本质上其实也是I/O, 也大都在A区,即作为调用库函数时的接口体现。
B区则不调用任何物理I/O,调用的全部是A区所实现的对象的参数。只有少部分管脚是上位HMI通讯设定参数或者起停指令的。
而L区不管是L1X, L2X,L3X,只做逻辑,而不针对任何具体的全局变量。所谓做逻辑的地方专心做逻辑,绑I/O的地方,只有I/O,不见逻辑。
以后遇到新的项目,在逻辑不变的情况下,只更改I/O的话,那修改范围只在A区。而如果逻辑顺控等有变化的时候,则只在B区和L区中做相应的调整。
对于自动逻辑功能,即便系统中只调用一次,比如一个工艺设备,系统中只此一套,也不具备标准化固化的条件,也仍然单独做成库函数来做逻辑。逻辑中不针对具体的对象,除了那些不是变量的全局量(其实是常量)。可参考:《【万泉河】上帝不是全局变量》
对应截图中, L3X是工艺逻辑,而他们的实现则在上端的B1X中。
最后的这一个原则,是最近才逐渐清晰起来的。在S7-1500的博途的项目中,虽然这样做了, 但没有明确的要求在原则里, 也没有跟我的学员们和学生强烈要求, 才导致后面的照猫画虎简直成了画虎不成反类犬。
用演员演戏的例子来解释上述的原则。
比方说戏剧学院的学生们分组排演罗密欧与朱丽叶,比如黄晓明和赵薇分饰男女主角。那么在讲述剧情的剧本中,只可以提到罗密欧和朱丽叶的名字,而不可以直接指到演员的名字,可以说罗密欧服毒自杀了,但不可以说黄晓明服毒自杀了。对应的剧本就是我们在L3X的函数,而B1X的逻辑实现的函数块,本质上只是个演员表而已。多组演员表演一个剧本,和一组演员饰演一个剧本并最终上映的商业电影,在编剧写剧本时,没有区别。
一定有人心急,SMART怎么可能实现重复调用的函数,需要存储的数据怎么办?简单几句话描述一下,用指针方法给每次功能块的调用分配8个byte的V区,等于给每个块建立了8个byte的静态变量。另外也有人心急,这个程序怎么分享啊!什么价格呀?
我在做的过程中,以及调试的过程中,就在思考这个问题。发现,需要的基本功太多了。许多细节,没有口传身授,恐怕很难传承。在线调试的难度比平常大多了,我自己在刚开始调试逻辑时就经常被搞得晕头转向,被客户催的急死,几乎耽误工期。直到后半段,才逐渐摸索到了正确的调试方法,这些都需要以后手把手传授给学习者。
就好比,高档汽车的司机,跟拖拉机手相比,后者要求高多了。设备越是低级,需要的技能越高。况且,上一期的PORTAL系统的程序分享,在我看来,效果并不够好。程序已经分发了3个月了,但我布置了几个小的作业,能完成的人数都很少。当然,我这里也没有约束力,学员们因为工作忙,顾不上理我给布置的作业,也情有可原。
那么这个SMART200的程序,我是没有信心大面积分享了。我能做的是面对面的培训,以及协助需要的公司,我可以手把手帮你们把程序框架改造升级。而且经过这次低端PLC的洗礼,我的理解又上升了一层,即便对于其它品牌的PLC,如果有人有公司有需要,我也可以协助来开发,有信心实现标准化功能。这可以跟我来谈。
附:作者:万泉河:微信号:TM178616417
来源/万泉河知识分享
往期精彩▼
工控原创投稿征集
【有奖征集活动】工控人在旅途!
【分享】谈PLC与PLC通讯
三菱FX5U和西门子200 Smart实现Modbus TCP以太网通信
潜心研究单片机Modbus TCP以太网通信
【建议收藏】手机组态软件+三菱FX5U Modbus TCP以太网通信
给PLC的IP地址预留个网关吧!
卷烟厂富士W系列伺服升级到alpha 5 smart调试经历
LOGO!和MCGS通过MODBUS TCP通讯,已完成测试通过!
满满的喜欢溢了出来,点在看
|