故事作者:万泉河

最近创作

看看TA的故事

0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的

已锁定

万泉河

  • 帖子

    10819
  • 精华

    132
  • 被关注

    902

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的

1396

10

2022-06-28 17:06:13

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工位双联开关”的群文件中。

 

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

 

 

0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的.pdf

P16-万泉河-80个模拟量处理程序_20220628_1641.zip

 


0628 【万泉河】优雅的PLC程序一定是用EXCEL写出来的 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3234条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

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