故事作者:万泉河

最近创作

看看TA的故事

【万泉河】SMART 200也能做标准化编程

已锁定

万泉河

  • 帖子

    10885
  • 精华

    132
  • 被关注

    892

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】SMART 200也能做标准化编程

7248

10

2019-04-12 11:14:47

终于抵不过市场的压力,遵从于市场,用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的逻辑实现的函数块,本质上只是个演员表而已。 多组演员表演一个剧本,和一组演员饰演一个剧本并最终上映的商业电影,在编剧写剧本时,没有区别。

 


 

另外也有人心急,这个程序怎么分享啊!什么价格呀?

我在做的过程中, 以及调试的过程中,就在思考这个问题。发现,需要的基本功太多了。许多细节, 没有口传身授,恐怕很难传承。在线调试的难度比平常大多了,我自己在刚开始调试逻辑时就经常被搞得晕头转向,被客户催的急死,几乎耽误工期。直到后半段,才逐渐摸索到了正确的调试方法,这些都需要以后手把手传授给学习者。  

 

就好比, 高档汽车的司机,跟拖拉机手相比,后者要求高多了。 设备越是低级,需要的技能越高。

 

况且,上一期的PORTAL系统的程序分享,在我看来,效果并不够好。 程序已经分发了3个月了,但我布置了几个小的作业,能完成的人数都很少。当然, 我这里也没有约束力,学员们因为工作忙,顾不上理我给布置的作业, 也情有可原。

 

那么这个SMART200的程序,我是没信心大面积分享了。 我能做的是面对面的培训,以及协助需要的公司,我可以手把手帮你们把程序框架改造升级。

 

而且经过这次低端PLC的洗礼,我的理解又上升了一层,即便对于其它品牌的PLC,如果有人有公司有需要,我也可以协助来开发,有信心实现标准化功能。 这可以跟我来谈。

 

 

 

 

 

 

 

 


【万泉河】SMART 200也能做标准化编程 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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