通过EXCEL控制PLC启停电机的一种方法
概述
本例将介绍用微软EXCEL电子表格控制西门子S7-1200 PLC实现电机启停的一种方法。
第1步:
添加PLC设备,选择西门子S7-1214C CPU,设置IP地址:192.168.18.18,子网掩码:255.255.255.0。
第2步:
添加一个全局数据块,将其命名为:GdbMtrCtrlData,在该数据块中添加控制电机启停的两个布尔变量。在循环组织块OB Main中用LAD语言编写一个电机启停的程序段。
第3步:
在KEPServerEX中新建一个西门子TCP/IP Ethernet通道。
通道类型选择Siemens TCP/IP Ethernet,即驱动类型。
通道名称命名为:S7PLC。
网络适配器选择PC机的本地物理网卡。
通道概况。
注:其它步骤跳过。
第4步:
为以上Ethernet通道添加一个S7-1200 PLC的设备。
设备名称命名为:CPU1214C。
型号选择S7-1200。
IP地址填写PLC的实际地址。
设备概况。
注:其它步骤跳过。
第5步:
在微软EXCEL中添加START和STOP按钮,在代码编辑器中编写分别对应START和STOP按钮的两段VB脚本代码,添加变量监控的单元格内容。
第6步:
在KEPServerEX中新建一个DDE Client客户端通道。
通道类型选择DDE Client,即驱动类型。
通道名称命名为:EXCEL。
通道概况。
注:其它步骤跳过。
第7步:
为以上DDE Client通道添加一个EXCEL电子表格的设备。
设备名称命名为:SHEET。
设备概况。
注:其它步骤跳过。
第8步:
在KEPServerEX中为PLC和EXCEL创建变量。
以上为PLC变量,包括启动、停止和输出。
以上为EXCEL变量,包括启动、停止和输出。
为了确保EXCEL的 DDE通道连接成功,需要进行以上设置。
第9步:
在LinkMaster中创建一个OPC和DDE的连接组。
需注意输入、输出变量的对应关系。
第10步:
下载TIA Portal程序到S7-1200 PLC,并在线监控。
在EXCEL中按下启动或停止按钮,可以看到能够成功控制PLC的输出,从而实现电机的启停控制,同时可以在EXCEL中会返回电机输出的反馈信号。
0628 「万泉河」优雅的PLC程序一定是用EXCEL写出来的
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工位双联开关”的群文件中。
当然这种程序方法也完全可以照猫画虎迁移到其它品牌平台,有兴趣者欢迎钻研一下, 完成后署名上传, 业界同行会记住你的名字你的贡献的。
相关问答
PLC与电脑AccessExcel之间怎么通信?
自己编个小程序啊,用上位机很简单的啊,其实你触摸屏上一个确定按钮就给PLC一个信号,然后上位机读到这个信号就保存数据到EXCEL,就这么简单,、呵呵自己编个小...
求助如何把PLC中的数据导入电脑的Excel表格中?
关于这个问题,首先,需要确定PLC与电脑之间的通信方式,例如以太网通信或串口通信等。然后,需要编写一个用于读取PLC数据的程序或脚本,将数据读取到电脑中。最...
(SIEMENS)西门子S7-200.PLC编程软件STEP_7.-.MicroWIN_V4_0...
excel表格打印预览时可以显示全为何打印时右边打印不全5154浏览4回答win7...更多频道频道导航辅助工具手机性能天梯图显卡天梯图CPU天梯图电源天梯图...
求文档:三菱PLC编程用电脑怎么样直接用指令语言写-ZOL问答
下面是编程截图:有用(0)回复有专门的编程软件,为什么还要用指令语言?有用...怎么样在excel里每隔十行取一行?1.4万浏览7回答ZOL问答笔记本电脑问题详...
消防的联动编程怎么编?..._消防考试_帮考网
消防联动编程是消防控制系统中的重要组成部分,其主要目的是实现消防设备如消防泵、喷淋系统、报警设备等的自动联动控制。以下是一个简要的编程步骤...
plc如何设置地址变量?
PLC的地址是PLC的重要属性,通过地址设定了其所对应回路在程序中的逻辑关系。在elecworks中,有手动及自动两种编址方式。手动编址方式:在电气项目中,一般在...
怎样使笔记本和PLC进行连接?
这个属于plc与上位机通信和应用的问题,也就是所谓的数据采集与监控SCADA。不同的品牌或者型号的plc所使用的软件也是不同的,例如AB的5000系列要在计算机里面安...
西门子s7-300/400系列的plc有哪些编程软件-ZOL问答
这个新的软件同时支持S7-1200和S7-1500等新系列的PLC系列型号,但这个TIA软件包...excel表格窗口默认最小化肿么还原?6635浏览4回答请问搜狗输入法的“工具箱...
我想搞三菱plc程序编程用什么笔记本好-ZOL问答
老板就问我你是不是搞plc编程的呀?有用(0)回复zhangwei19881103用带有九针...请教一下高手,excel表格中输入序列号①--⑩可以,肿么输入圈11-100呢?6024...
西门子PLC怎么把16个BOOL变量用一个WORD型变量代替?
职场生存攻略提高工作效率的8大必备软件PhotoshopwordExcelDreamweaverElsegb_PlcConnected=TrueMsgBox("plc连...