plc 程序配方怎么写(0628万泉河)
0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的
我有一些认知盲区。
我一直以为,许多能谈得上PLC编程高手的同行, EXCEL的灵活运用肯定不在话下, 至少不会比办公室文员的小姑娘们水平差。
所以,以往我写文章,甚至写书,到接近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工位双联开关”的群文件中。
当然这种程序方法也完全可以照猫画虎迁移到其它品牌平台,有兴趣者欢迎钻研一下, 完成后署名上传, 业界同行会记住你的名字你的贡献的。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com