首页 » 排名链接 » 0628 「万泉河」优雅的PLC程序一定是用EXCEL写出来的(程序工位生成调用万泉河)

0628 「万泉河」优雅的PLC程序一定是用EXCEL写出来的(程序工位生成调用万泉河)

落叶飘零 2024-11-02 00:53:11 0

扫一扫用手机浏览

文章目录 [+]

我有一些认知盲区。

我一直以为,许多能谈得上PLC编程高手的同行, EXCEL的灵活运用肯定不在话下, 至少不会比办公室文员的小姑娘们水平差。

所以,以往我写文章,甚至写书,到接近EXCEL的时候就点到为止,不再多说了。

0628 「万泉河」优雅的PLC程序一定是用EXCEL写出来的(程序工位生成调用万泉河) 排名链接
(图片来自网络侵删)

怕被人指责内容太水, 没有技术含量。

当然,同时也怕被其他行业的人看到,笑话咱们搞高大上的自动化程序,竟然连EXCEL的技巧都还掰扯不清。

所以, 我在《PLC标准化编程原理与方法》书中, 明确把EXCEL技能列在技能需求第二项, 重要程度8, 难度系数2。

因为EXCEL技能现在相当于通用技能, 而不是局限于PLC行业之内。
所以要提升技能, 或者获取答案的方法非常多,即便有解决不了的问题, 网上随便搜索一下, 分分钟可以搞定。

所以,我给标准化学员讲课时也从来不会涉及这个方面, 只需要论证出程序的整体结构, 告诉他们一句话, 这部分可以用EXCEL生成, 后面的操练就他们自己搞了。
而其实我给的资料里面,有时候会夹杂了我做项目时的EXCEL中间文件,他们或许可以借用我的EXCEL文件当模板, 自己做项目的时候可以用到。

但单独的培训交接, 是绝对不会有的。

所以,缺省我会认为,跟我学习的学员一定都具备了EXCEL的基本功。
当然每个人不一样, 如果他自己知道自己这方面有欠缺,自然会私下去补上。
不需要在我这儿添麻烦。

所以,我做的80工位双联开关的例子, 把程序脚本列在那里,在我看来,就足够优雅了,就自个儿去得意洋洋了。

比如SMART200的例子里面备注了一下:

后面79个工位调用用STL编写

//CALL L31_工位控制, GW01_SIG, LAMP, GW01_SAV

CALL L31_工位控制, GW02_SIG, LAMP, GW02_SAV

CALL L31_工位控制, GW03_SIG, LAMP, GW03_SAV

CALL L31_工位控制, GW04_SIG, LAMP, GW04_SAV

CALL L31_工位控制, GW05_SIG, LAMP, GW05_SAV

CALL L31_工位控制, GW06_SIG, LAMP, GW06_SAV

CALL L31_工位控制, GW07_SIG, LAMP, GW07_SAV

CALL L31_工位控制, GW08_SIG, LAMP, GW08_SAV

CALL L31_工位控制, GW09_SIG, LAMP, GW09_SAV

CALL L31_工位控制, GW10_SIG, LAMP, GW10_SAV







而至于怎么写出来的, 这么简单的有规律的程序脚本, EXCEL分分钟可以搞定的呀!

昨天发表了文章《0627 【万泉河】程序算法的本质》,其中提到了我3年前写过的文章《201907 【万泉河】PLC编程中的循环语法使用》。

原本想得很好呢, 咱技术进步一步一个脚印,以前一篇文章的结论为基础, 发展理论到最新的认知。
没想到,在群里吵成一团, 一大票人对前一篇文章的观点压根不认同。
你不管怎么表达, 他都一口认定用循环总是最省事的,能节省编程工作量。

我就奇怪了, 你们只看到循环那几句指令省事了, 可前处理后处理的把IO映射到数组中的程序怎么写的, 怎么生成的, 那些不是工作量吗?

纠结了很久,才搞明白,很多人写程序原来都是从来不使用EXCEL的, 甚至许多EXCEL的技巧压根不晓得。
难怪行业中总有那么多文章教程和视频在宣讲调用模拟量循环调用,当成提高编程效率的不二法门, 也难怪有人反而倒打一耙把我反对用循环,提倡减少用循环的文章当成流毒了。
感情是你们只会用程序软件的编辑器写程序, 从来不会用EXCEL写程序的呀!

好吧, 那我就从最水货的EXCEL技巧出发, 逐步演示用EXCEL生成PLC程序的方法吧!
最终也做个80个模拟量调用的示例程序, 会与80工位双联开关程序合并到一个系列中。
当然, 前提基础仍然是所有PLC平台均兼容的方法,所以不必在意我文章中演示是用的什么PLC平台。

把上述的STL程序生成的第一个实例的程序复制到EXCEL中,然后拖拽单元格右下角的小黑点拖到80行,并选择填充序列:

会发现, 程序中2个数字序列, 但EXCEL只给文本中的最后一个数字生成序列。
这怎么办?

方法是文本复制到AB两列,然后各自删掉头和尾,保证数字分到了两个列。
然后这时候对这两个单元格同时拖拽80行,即生成了80行调用程序。

直接选中, 复制内容到程序中,直接可用。

当然,其实这样复制的内容中有表格分隔符,也可以另外生成一个C列, 里面的公式填入:

=A1&B1,同样拖拽到80行。
生成了80行结果。
或者在前面两列已经生成80行的情况下,直接双击黑点, 也可以。

由此得到了完整的80行程序调用。

然而, 这里80个工位编号完整整齐的从01递增到80, 是我为了例子生成便捷,刻意安排的。
而实际的工程项目中, 位号通常不连续。
比如:GW1001 GW1002 GW1003 GW1004 GW1005 GW1006 GW1007 GW1008 GW1009 GW1010 GW2001 GW2002 GW2003 GW2004 GW2005 GW2006 GW3001 GW3002 GW3003 GW3004 GW3005 GW3006……总计80个。

首先把上述的位号数据复制到A列,这里是一行数据,可以先复制到一个行中,然后选择性粘贴,转置,把行排列的数据转置成了列。

程序调用的位号部分修改到AAAA,即:

CALL L31_工位控制, AAAA_SIG, LAMP, AAAA_SAV

复制到B列所有行。

C2中填入公式:

=SUBSTITUTE(B2,"AAAA",A2)

意思为把B列中的AAAA字符的部分替换为A2单元格的内容。

即得到了目标的程序, 拖拽到底, 则生成了所有程序:

然后模拟量转换程序的调用。

模拟量程序的特点是,输入的参数很多, 每一个模拟量的标定数据上下限,物理单位等都不一样,来自工艺统计的位号表,如:

工艺表中还必然另外存在一些数据信息列,我们不关心的,只需要隐藏即可,留下的内容都需要生成到程序中。
包括字符类型的注释和单位部分,我们也不愿意亲自手工二次录入,在PLC支持的情况下,可以直接做到FB的管脚上,最终不仅仅程序中直观可见, 字符数据还可以传到上位机中, 上位组态时也不必再包含这部分录入的工作量了。

那么, 程序模板会是:

"//#AAAA(IN_INT:=""AAAA"",

HI_LIM:=CCCC,LO_LIM:=BBBB,

INSTANCE:='DDDD',unit:='EEEE');"

其中除了信号名称AAAA需要替换之外,后面的BBBB,CCCC,DDDD,EEEE也分别替换为表格内的内容。

把模板所在的单元格起名字定义为AI_1500, 替换语法设置为:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(AI_1500,"AAAA",B2),"BBBB",G2),"CCCC",H2),"DDDD",I2),"EEEE",F2),CHAR(10)," ")

最终生成了程序:

"AI_V019"(IN_INT:="AI_V019", HI_LIM:=100,LO_LIM:=0, INSTANCE:='DPT-R5',unit:='pa', QOUT=>"HMI".AI.AI_V019);

"AI_V020"(IN_INT:="AI_V020", HI_LIM:=500,LO_LIM:=0, INSTANCE:='DPT-F5',unit:='pa', QOUT=>"HMI".AI.AI_V020);

"AI_V021"(IN_INT:="AI_V021", HI_LIM:=55,LO_LIM:=-5, INSTANCE:='THT-R6-T',unit:='°C', QOUT=>"HMI".AI.AI_V021);

"AI_V022"(IN_INT:="AI_V022", HI_LIM:=100,LO_LIM:=0, INSTANCE:='THT-R6-RH',unit:='%', QOUT=>"HMI".AI.AI_V022);

"AI_V023"(IN_INT:="AI_V023", HI_LIM:=100,LO_LIM:=0, INSTANCE:='DPT-R6',unit:='pa', QOUT=>"HMI".AI.AI_V023);

把程序直接复制到PLC软件中,即可。

这里篇幅有限, 只复制了其中的前几行。
而实际项目中别说80个模拟量了,就是800个, 8000个, 只要工艺来的数据表格规范完整, 这些工作量都是秒成的。

比如如果有8000个的天量数据, 项目所控制的PLC CPU至少也几十个。
那么只需要在数据表中标明CPU的标识, 程序生成后按标识复制到相应的CPU中即可。
啥循环都不需要做。

所有的宣传用循环语法处理模拟量的文章或者视频, 只在意了调用部分, 而参数的输入部分的工作量都忽略不计了。
然而那才是工作量最大的, 最令人厌烦的。

模块参数的给定, 物理通道的给定等等,最方便的方式恰恰是通过FB调用的实例化时给定,因为可以在一行程序语句里面一次性完成。
如果只为了循环调用的爽一下,留给数据整理部分的工作量反而增加了,而且分散到整个程序的多个角落去了。
查错,维护都成了问题。

所有坚持使用循环语法调用模拟量程序的网友们,不妨尝试把我的程序改进到你们的模式,看看效率能不能再提高些。

本文中提及的数据表格,以及生成的例子程序,我会统一打包在一起, 方便下载和借用。

也会归档上传到“80工位双联开关”的群文件中。

当然这种程序方法也完全可以照猫画虎迁移到其它品牌平台,有兴趣者欢迎钻研一下, 完成后署名上传, 业界同行会记住你的名字你的贡献的。

标签:

相关文章

短篇小说:对决(伢子红玫瑰师傅乞丐警察)

作者:南春莲杠伢子本不姓杠,姓杜,大名杜有鹏。村里的会计造花名册的时候,将杜字的“土”旁写成了“工”旁,杜有鹏成了杠有鹏。村里的老...

排名链接 2025-02-10 阅读1252 评论0