0724 【万泉河】烟台方法前进之路:在信捷PLC中实现FB功能 点击:937 | 回复:4



万泉河

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:74帖 | 62回
  • 年度积分:67
  • 历史总积分:413
  • 注册:2009年12月04日
发表于:2022-07-23 22:13:11
楼主

0724 【万泉河】烟台方法前进之路:在信捷PLC中实现FB功能

 

前段时间, 微信群里有个网友杠我:

万老师, 你如果能研究把烟台方法应用到信捷小PLC中,实现优雅编程就厉害了。

 

我说,那怎么样?

 

佩服你厉害。

 

那就是男人之间最朴素的赌约了:承认你厉害。

 

虽然没有啥实际意义, 我还是到信捷官网下载了编程软件研究了一下。

 

属于最简单的那种PLC 没有FC, 也没有FB 只有一个C函数功能,然而主要用于自定义算法实现的,看来也用不上什么大用场。

 

所以简单研究后, 就放弃了。 软件卸载, 文档资料也都删除到回收站里了。

 

反正我也没吹过牛,没拍过胸脯, 做不出就做不出了。 也不是我个人的责任。 没什么。

 

然而两天前, 某位参加了烟台方法学习的深圳的学员讲, 他们那里周边有很多非标设备的厂家,大量使用信捷PLC控制,因为成本低,所以用量很大。 是一块巨大的市场。

 

所以, 如果我们能努力研究下,开发出便捷高效的程序架构,帮助这些工厂实现一定程度的标准化架构,也可以带来一些市场收益。

 

所以我就把删除的文件从回收站里又翻出来恢复,软件也重新安装了。 再从头研究了解。 其实本意想的是, 如果实在不能实现面向对象模块的重复调用, 那就最朴素的方法平铺开写,然后通过STL的规律, 顶多想办法 再用高级语言软件生成一套上位编程软件,对象的应用库都在上位软件中,在上层实现面向对象的标准化应用, 顶多实现过程麻烦一点,但只要花出些精力实现了, 以后一劳永逸,也仍然可以实现高效和优雅。

 

于是按照上述的思路, 80双联开关的例子程序在信捷PLC中实现了, 先做了一般发给他。

 

然后再具体翻阅文档的时候, 发现信捷PLC虽然不支持单独文件格式的子程序,所有程序都在一个主程序中实现, 然而仍然可以有子程序:

虽说相当简陋,但也总比一遍一遍无穷次地重复写代码要好一些。

 

所以研究了如何用这个P子程序实现功能块的方法。 只有实现了功能块, 后面才有可能实现面向对象的标准化应用。

 

 

而这种子程序的缺点非常多,没有参数接口,没有INPUT, OUTPUT, TEMP , STATIC 其实就是啥都没有。

 

那么就需要把这些功能全都逐一规划实现。

 

比如没有INOUT接口, 我们可以统一规划M100-M199为输入接口,而M200-M299为输出接口。所有FB均使用同一接口,可以实现在调用时结构的统一规范,易于使用。

 

那么每个FB逻辑内部, 需要对使用的公共M区(以及D区)进行备份保存现场,以及运行数据恢复。那么需要得到每个实例的UID标识, 以将静态数据保存到固定的存储区域。

 

然而也并不适合所有数据全部存储,需要部署安排一部分TEMP区域,否则所有数据都保存的话,在系统设备多的时候,D区很快会耗光。

 

我做三菱标准化的时候为什么曲折特别多?就是因为它的FB里面没有TEMP 全靠STATIC VAR , 导致软元件消耗非常快,动辄一不小心就耗光。

 

而对于TEMP区,还需要考虑到子程序多重调用产生的堆栈和出栈的问题,同一个子程序内部,在调用了另外的子程序进入并回来后,TEMP的数据以及INOUT的数值都不应该丢失被冲掉。

 

即需要有一个堆栈层数的计量。

 

这种编程其实已经完全回到最古老的汇编语言的编程了。 而其实所有高级语言,以及PLC语言, 最终也都是经过编译后成为汇编语言并到机器码,才被CPU识别并执行。 所以是否支持面向对象的功能, 那是高级语言系统的区别, 到了机器代码层级,都一回事, 并没有什么区别。

 

比如我所规划的:

 

M5000-5099 100 BIT TEMP,M5100-5199  100bit INPUT,M5200-5299  100BIT OUTPUT,DM5300-5320 20WORD TEMP, 其中DM5300存放了当前UID的偏移量---堆栈保存到的D1100

 

D1000-1020 20WORD STATIC

 

D1000 参数给定/运行INPUT/OUTPUT

D1020 参数给定内部使用

D1040-1060 TEMP

---堆栈40wWORD保存到的D1200

 

D1060 运行值静态

 

有人会反驳, 标准化编程你不是反对用全局变量嘛? 这不还是规划使用了全局变量

 

放心, 我这里规划的全局变量,都是同一套变量在重复使用, 而且使用之前会保存现场值,使用之后会恢复现场值。

 

比如M5000的数据我用过了,然而如果有相邻的程序功能, 有人恰巧也用到了M5000,也不影响。(这里面又又出现了谈虎色变双线圈色又变的故事, 下回专门讲)

 

最终程序用到的只是D1000—D7999的数据区。 而且数据区的使用都是自动分配的不会发生呼吸干涉, 即便调试程序, 都不需要查阅数据区的使用情况。

 

如下是实现了定时器以及MOTOR块的情况:

 

 

以及电机块的实例化调用:

 

大学时代有学习过汇编语言, 考试成绩还不错。 然而工作这么多年,除了曾经解读加密软件的反汇编代码曾经接触过一点之外,一直没有机会用到。 没想到那点技能和理解,今天又用上了。

 

这个程序暂时不打算公开。因为并没有经过调试,还有很多错误。因为我并没有信捷PLC的真机,而信捷的软件里也没有仿真功能。 所以虽然我把架构搭好了,到真正能跑起来, 差的还很远很远。 要完全实现标准化烟台方法, 更是不知到哪年了。

 

也不打算做完整的培训例子教程,一方面不晓得同行的需求度有多高,我耗费心血做下来市场不认可, 也是白白浪费精力。 另一方面,这个的开发难度比起即便SMART和三菱,又高出了一个层级, 那么价格会比他们更高,而对于习惯使用廉价PLC的同行及工厂来说, 这部分费用肯定难以承受。

 

开发难度高,学习难度也更高了。 学习的门槛就更高。所以也不认为有推广的意义。 如果哪位玩汇编熟练的老手,想做同样的工作,看看我上面两张截图和说明, 估计自己也能做出来。

 

如果哪位手里有淘汰不用的信捷PLC的硬件, 又非常想获得这套例子程序参考,可以跟我联系交换。 但无论如何必须接受一点:程序是不完整的, 一定有很多错误。所以你肯定是先接受了本文中提出的理论理念, 认为有可行性,才来加入学习。 而不是像行业中的某些人,拿到我书看到其中的TIA误写成TAI这样的错误,就破口大骂,抱怨书的内容垃圾, 甚至大有一种通过一个小错误全盘掀翻所有理论, 并逼你下跪认错的架势。 太令人不齿了。

 

其他的有应用信捷PLC 或者其它类似的小型PLC如军创等的厂家, 如果有研发非标设备的需求, 希望能有协助开发标准化程度高一些的程序架构,现在可以联系合作了。

 


正在下载,请等待……
下载附件需5积分!

1分不嫌少!


楼主最近还看过



olove83

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 414回
  • 年度积分:1030
  • 历史总积分:1779
  • 注册:2008年6月17日
发表于:2022-07-26 13:54:35
1楼

赞一下,其实信捷厂家已经有努力优化软件了,

花笙米

  • 精华:0帖
  • 求助:8帖
  • 帖子:15帖 | 208回
  • 年度积分:997
  • 历史总积分:3283
  • 注册:2018年7月24日
发表于:2023-02-01 16:34:08
2楼

信捷XDH现在支持FB FC功能.

美天使

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 16回
  • 年度积分:0
  • 历史总积分:171
  • 注册:2009年9月29日
发表于:2023-09-26 09:51:04
3楼

回复内容:

对:花笙米 信捷XDH现在支持FB FC功能.     内容的回复:

信捷XD系列都支持。

13176908692

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:15
  • 历史总积分:75
  • 注册:2020年10月27日
发表于:2023-11-08 18:30:14
4楼

很好的


热门招聘
相关主题

官方公众号

智造工程师