故事作者:万泉河

最近创作

看看TA的故事

【万泉河】有偿悬赏PORTAL程序块功能实现

已锁定

万泉河

  • 帖子

    10885
  • 精华

    132
  • 被关注

    893

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

【万泉河】有偿悬赏PORTAL程序块功能实现

4950

20

2019-06-30 16:59:59

【万泉河】有偿悬赏PORTAL程序块功能实现

 

我有一个心结。

 

这个心结困扰我好几年了,在做标准化项目之前就存在。我以前的文章提到过几次,如文章

《【万泉河】重新发现FB块之INOUT》


《【求助】PORTAL编程题,可能与指针和间接寻址有关》



都提出过。


 

但一直没能实现。

 

可能因为我自己总结归纳的需求并不够清晰,读者不能完全理解我的所指的需求,给出的解决方案都偏向于头疼医头,为了解决我所列出的具体问题,试图更改原本的底层程序逻辑,把原本的程序框架结构都破坏了,导致最终实现的程序远远偏离了标准化的标准,又回到了老实的平铺式的编程模式。

 

不是我想要的。

 

这次,我把需求重新定义一下,即:如何实现设备对象数组化的问题。

 

比如,我现在有一批设备对象(FB的实例),这里是电机,即#M1, #M2,#M3,#M4。






如何把这些FB的对象赋值到一个ARRAY OF FB的数组中?

 

比如:

 

MOT[1]=#M1;

MOT[2]=#M2;

MOT[3]=#M3;

MOT[4]=#M4;


这里的等号不是程序语法,而是同步映射的意思。左边完全就相当于右边。

 

不管是对象赋值也好,指针赋值也可,最终,程序中对MOT数组元素的任何读写操作,都相当于对对象本身的直接操作。

 

这样通过指定数组下标,简单实现对特定电机的控制。

 

比方说,我在上位设置INDEX=3, 以及START=1, 则#M3电机duang的一声就运行起来.了。INDEX不变,再赋值STOP=1, 则#M3电机duang就停止了。

 

程序中这样子:






以及其它的更复杂的应用逻辑。

 

这如果能实现,好处是非常多的。不需要在每个电机的控制指令之前加上复杂的数值比较判断,而读取设备运行状态的时候也要每次都串联序号判断,即便很简单的逻辑,最终都能非常复杂的程序才能实现。

 

而且工业应用中需要的场合也非常多。

 

比方说恒压供水,除了设备的维修状态,故障状态禁止启动之外,还有可能需要根据设备的投入运行时间做个排序,排序最后选择出优先级最高的水泵编号,那么这里发编号,发指令,就好了。

 

再有化工或者只要行业,罐体,管路和泵阀非常多,罐体之间互相倒液,会指定A#,B#C#,D#,E#,F#一批阀依次打开,打通管路,然后P1,P2泵开,进行输送。复杂的情况下会有许多中运输途径和方案,甚至需要形成配方。程序中都会要求直接指定编号,然后启动设备。

 

以及更多的应用场景大家给我提供。

 

这个功能一直不能实现,导致我们的标准化程序道路不能通畅,设计中逻辑分工不清,总有一些非模块化的程序在其中,干扰我们的精力,增加了调试工作量。

 

这几年来想尽各种办法,学习PORTAL语言中的各种高级功能,和数据类型,VARIANT, ANY , REF-TO,BLKMOVE等等,尝试解决这个问题。但发现都不能很好的实现。

 

所以,最终,我用最笨笨的方法,大约近似实现了:

 

建立了一个FB3, INOUT管脚上8个Moter,






但其实是要把前4个对象的值同步映射给后4个:

 

我直接只复制了其中几个当下逻辑中用到的重要的管脚:


 




后面注释的4行原本是我希望的实现形式,但很遗憾,PORTAL语法错误。

 

方法笨是笨了些,但总算实现了,而且在模块化架构下:

 

监控表中,

 




 

设置INDEX=3,然后START=1, 则标记为M3#的实际设备NM-1103就自动运行起来了!

 

我当然对此实现方法很不满意,但我对自己满意的一点是,终于可以模块化的把需求提出来了!

 

问题最终聚焦为:

如何在FB3的框架内部,实现从M1,2,3,4到O1,2,3,4的映射?

 

由此,可以悬赏求答案了!

 

各种编程方法不限,能实现功能就行。

 

实现所有管脚数据的同步,但不可以和我一样把所有管脚都在程序写一遍。

 

还有条件是,只许修改FB3, 不许提要求对程序的任何其它地方做更改。包括底层逻辑块和上层逻辑块,也包括不许更改FB块的优化寻址方式。

 

欢迎有志研究此算法的同仁下载我的源程序,修改实现后单独发FB3的源码给我,我加入到原程序中测试通过后,按投稿顺序发红包奖励。

 

依次为:

 

第一名 200元;

第二名 100元;

第三名 50元;

……..依次递减减半。

 

当然了,由于我的示例程序已经深度包含标准化PLC程序设计理念的精髓,所以程序不能免费发放。需要扫描二维码,发20红包给我,并在后台截图通知,我发程序给你。

 

对有志参加悬赏的高手,这20元算是门票。

仅仅是感兴趣围观的朋友,算是付费窥探下标准化程序的仪容。

 

我求得答案后,会和原作者商议,再把我们合作而成的程序成果分享。


*********************************************************************

网页编辑贴图太难, 图文全文请移步浏览公众号文章:

https://mp.weixin.qq.com/s/gDw1r4sB1zRGesZVoQJmjA


获得源程序也在关注公众号之后后台操作。 




【万泉河】有偿悬赏PORTAL程序块功能实现 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3227条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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