故事作者:万泉河

最近创作

看看TA的故事

【万泉河】征集FB的编程题:获取SID

已锁定

万泉河

  • 帖子

    10885
  • 精华

    132
  • 被关注

    893

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】征集FB的编程题:获取SID

815

6

2022-01-22 22:24:47

【万泉河】征集FB的编程题:获取SID

 

我在推广宣传PLC编程烟台方法的时候, 总有人疑惑是在做了什么。

 

讲解是用计算机编程中的面向对象的方法来进行PLC编程。

 

那么在PLC中是用什么手段实现的面向对象呢?

 

回答是用FB, 做成库函数应用。

 

然后对方瞬间就恍然大悟了, FB啊, 不是什么新玩意,我们20年前就会用了。 你这把FB换个高大上的名字,也太能忽悠人了。

 

原来做标准化就是开发FB啊, 那我们正在做,或者早就在自己做了。你这做的没啥稀奇的。

 

好吧。                     

 

如果对方既没有感知到自身的痛点, 又没有机会见过真正的应用实例, 那说破了嘴皮子对方也想象不出是啥样子。 毕竟,PLC编程烟台方法的实现是古今中外开天辟地以来都没有过的, 大部分的PLC工程师包括我自己入行开始,都是从模仿入门的,没有完全创新的经验,在没有见过猪跑之前让他们想象出猪肉的味道, 确实有些难度。  

 

我当然知道,PLC系统中早就有FB功能块的功能, 也早已经用了二十多年。 但我自己能用面向对象的方法来做PLC程序,也不过近2-3年的事。

 

然而, 我同样也知道,我们许多同行,尽管可能不懂得计算机高级语言编程,但对FB的各种理论技巧还是很熟练的。 我也见过一些比较复杂的PLC程序,看到里面非常丰富的FB的用法,但从中很明显地可以看出来,设计者对FB原理是非常懂,然而却没有面向对象的理念。

 

也有过比较熟识的西门子网站的驱动板块的版主,在了解到我的标准化编程理论之后就非常高傲地表示, 即便不算驱动方面的技能,仅仅拿PLC编程的经验和水平PK,对我也照样是不服的,完全可以一比高下。

 

我也只能摊手认怂, 不跟你比。

 

现在抛开面向对象,抛开标准化编程, 有一道比较有意思的题目,抛出来给大家练练手,可以算是检验下自己对FB的理解深度,同时对自己也算做个知识技能的储备。

 

临近春节假期,大家项目工作应该已经不太忙碌,可以有空闲时间为自己充充电了。 这里算是给大家提供一个学习方向。

 

题目的原委是这样的,在PLC项目中FB功能块的调用,通常被称为实例,而一个FB有可能被调用多次, 那就是产生多个实例。

现在需要对每一个实例做出ID的标识,即为SID。

 

比方说一个FB在整个OB1环境中被调用了10次, 那么我希望它们分别得到从1到10连续且不相等的ID号。

 

这个功能的实现, 应该是一个完全封装好的独立完成功能的函数块,FB或者FC。当然,因为它的实现还是比较复杂,我认为FB实现会比FC实现能方便些, 名字定义为GetSID。

 

 

有了这个FB ,那么在需要区分SID的项目设备FB中,只需要调用一次函数,就可以得到了SID。

 

最好的结果是按照OB1执行的顺序, 第一个调用的ID=1,第二个为ID=2, 最后一个ID=MAX。

 

然后如果PLC调试过程中实例有增加或减少,不管是中间增减还是尾部的增补,都应该能刷新更新。

 

有人会疑问得到这个SID有啥用?

 

我顺手就可以举例出好多个应用场景。 比如。。。。。再比如。。。。,以及。。。。

 

然而,我非常了解咱们许多同行的调性,如果我把应用举例描述详细了,很多人会跑题去探究我所举例具体的应用, 去用他自己的方式千方百计绕过SID,找方法实现。然后回过来再跟我证明获取SID无意义。

 

所以具体举例就不提了。标准化学习营的学员,可以积极参与实现这个应用,将来你们在具体的项目中会遇到这种需求的时候,我会适时与你们讲解。

(这里也透漏出个信息,以往的标准化应用分享项目中并未用到SID)

 

为了鼓励同行朋友积极参与,对成功实现功能并投稿的朋友,给出一点彩头。奖励方式三种,获奖者三种之中任选一种:

 

1,  PLC标准化编程例程优惠1000元,所有品牌任选。

2,  《万泉河著PLC标准化编程原理与实践》书稿电子加密版。

3,  现金100元。

 

然后是具体要求:

 

1,  可以使用主流PLC任一品牌实现,不仅仅西门子, 也更不仅仅TIA PORTAL。

所以这是一场面向全行业的应用比武。 我相信所有品牌的PLC,都可以实现。

 

2,  编程语言建议使用SCL语言。因为这样更会容易跨品牌跨平台移植。

这也是我所以可以接受全行业所有品牌的原因。同时大家未来也可以了解,任何企业,只要实现了标准化编程,是可以实现跨平台跨品牌移植的。比如2021年的断货危机,换品牌就易如反掌。 不会因为担忧品牌更换而所有程序从头再来。

 

3,  如果实在不会使用SCL,或者所用的PLC不支持SCL, 那么也可以用LAD来实现,并投递交稿。不过,将来的奖励需要减半。

 

4,  为了方便检查评审功能,做好的程序块请录制运行监控视频,动态显示运行结果。交稿时除源程序外,视频文件也一并提交。

 

5,  投稿截止时间为2月底,即现在起到正月期间均可参加。 只要认证功能完整有效,均给予奖励。有意投稿者,可以先加我微信:zho6371995,进行预报名。 报名后在截止期之前完成正式交稿都可以。 到时如果有特殊情况需要延时,可以提前打招呼获准。

 

6,  预报名限制人数100人, 正式获奖人数限30人, 按交稿先后顺序且功能正确者排名。

 

为了堵住一部分不怀好意的同行的嘴, 提防他们骂我低价购买别人的智力, 或者说我自己的问题没有能力解决,换了个方式来找别人帮忙解决。

 

我截图展示一下我已经实现的效果:

 


 


 

我这里SID是得到了, 但ID1的位置是随机的。并没有严格地让第一台必须为1。 因为我这里应用谁是ID=1不重要,所以就没有特意去实现了。

 

最后提醒大家多去读我以往发表的文章,包括公众号《PLC标准化编程》以及西门子论坛我开设的专栏《万泉河讲故事》,找不到路的百度或者微信搜一搜”【万泉河】”, 我的所有文章标题都带了这样的标识。

 

好多文章,发表了很多年,逐渐都被遗忘了。 然而最近,有好多朋友提出的问题, 一看都是我在多年前发表文章中提及的技术或问题。

 

比如最近连续两次不同的场合,针对网友的提问推荐了文章

【万泉河】PLC编程求3/8的题目

http://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1256568&b_id=80&s_id=157&num=34#anch


 

问题都得到了解决。 说明,他们还是文章读少了。

 

这篇文章看来对同行如此有用,那就在本文下面再发一次。以前已经读过的请再次温习一下。


提醒所有有意投稿作答的同仁:这不是个简单问题,不是5分钟内抖机灵就能实现的。 

我自己2年前做过一个版本,但不能适应加站少站的自动更新, 每次都需要CPU停机重新启动。 

所以最近又花了几天完全重新做了逻辑。 


所以, 如果你想到的答案是一分钟就想到的, 那十有八九是理解问题错误,或者自己知识有盲点。 


 

 

 


【万泉河】征集FB的编程题:获取SID 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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