抖音粉丝群1
『7x24小时有问必答』

一、目的
在自动化工厂的建设与运营环境中,监控与数据采集系统(SCADA)扮演着神经系统的角色。它不仅关乎生产设备的自动化,更是实现工厂数字化、智能化管理的核心枢纽。作为连接IT与OT的数据桥梁,如果没有SCADA系统作为眼睛,所谓的大数据分析、数字孪生、AI优化都将成为“无源之水”。
但是在实施SCADA系统时有很多项目并不会单独配备PLC控制器,所以很多动作的执行和条件的判断就需要由软件如Wincc平台来执行,而我们执行的动作则是需要通过脚本来实现,这里我们以脉动真空灭菌柜的采集和传输为案例来介绍。
二、步骤

1、明确需求
系统之间对接最重要的是先弄清楚具体需求,MES系统中需要读取到关键流程的开始时间和最终结束时间,我们从灭菌柜PLC中能获取的信息则是这些模式切换的变量状态(开关变量),由此可以明确知道事情可为,关键点就是将两个时间点取到并且存储下来(由于MES从数据库中拉取数据并非瞬间完成的事情,所以在下个流程开始前,我们需要将上个流程的时间点保持下来),故需要创建一些内部时间变量来临时存储取到的时间信息(作为MES取值的中转站)。
2、实现思路
根据需求可以明确需要创建的时间变量,如表1
TEND_C01
程序结束时间
TGZEND_C01
干燥结束时间(等于程序结束时间)
TGZSTAR_C01
干燥开始时间
time0_C01
中间变量
time1_C01
中间变量
TMD_C01
脉动开始时间
TMJEND_C01
灭菌结束时间(等于排气开始时间)
TMJSTAR_C01
灭菌开始时间
TSW_C01
升温开始时间
表1
其中由于灭菌结束信号等于排气开始信号,故采用一个时间来表达即可,干燥结束后意味着程序结束,故同样使用一个变量;
要实现目的的关键还是如何读取状态变化时的系统时间,这里可以直接调用读取系统时间的变量NoW()即可。
考虑到SCADA画面中还要显示出各个流程的状态,此时如果能把不同状态的多个BOOL型变量转换到同一个数值型变量中会不会在做画面的时候更省事些呢?在写脚本的时候可以顺手为之。
3、程序编写
首先是定义变量
Dim A,B,C,D,E,F,G,TM,TD
Dim MD,SW,MJSTAR,MJEND,GZSTAR,GZEND,TEND
'临时变量
Set A = HMIRuntime.Tags("36S_C02F_MD")      '脉动阶段,表示设备开机     
Set B = HMIRuntime.Tags("36S_C02F_SW")   '升温阶段     
Set C = HMIRuntime.Tags("36S_C02F_MJ")   '灭菌阶段            
Set D = HMIRuntime.Tags("36S_C02F_PQ")   '排气阶段               
Set E = HMIRuntime.Tags("36S_C02F_GZ")   '干燥阶段                 
Set F = HMIRuntime.Tags("36S_C02F_JS")   '程序结束阶段     
Set G = HMIRuntime.Tags("PROCESS_C01")   '每个阶段对应相应的值,脉动1,升温2,灭菌3,排气4,干燥5,程序结束6

Set TM = HMIRuntime.Tags("time0_C01")   '中间变量,记录实时时间
Set TD = HMIRuntime.Tags("time1_C01")      
Set MD = HMIRuntime.Tags("TMD_C01")       '脉动开始时间
Set SW = HMIRuntime.Tags("TSW_C01")    '升温开始时间
Set MJSTAR = HMIRuntime.Tags("TMJSTAR_C01")    '灭菌开始时间
Set MJEND = HMIRuntime.Tags("TMJEND_C01")       '灭菌结束时间,等于排气开始时间
Set GZSTAR = HMIRuntime.Tags("TGZSTAR_C01")       '干燥开始时间
Set GZEND = HMIRuntime.Tags("TGZEND_C01")         '干燥结束时间,等于程序结束时间
Set TEND = HMIRuntime.Tags("TEND_C01")         '程序结束时间

其次是处理数据前要读取系统中的变量
A.Read
B.Read
C.Read
D.Read
E.Read
F.Read
G.Read  
MD.Read  
SW.Read  
MJSTAR.Read  
MJEND.Read  
GZSTAR.Read
GZEND.Read
TEND.Read

然后则是进行状态判断和赋值
If A.Value Or B.Value Or C.Value Or D.Value Or E.Value Or F.Value   Then          '不同数值代表不同阶段   
      G.Value = A.Value * 1 + B.Value * 2 + C.Value * 3 + D.Value * 4 + E.Value * 5 + F.Value * 6  
Else
      G.Value = 0
End If
G.Write

If A.Value Then
TD = NoW()
MD.Write FormatDatetime(TD)
End If
MD.Read

If B.Value Then
TD = NoW()
SW.Write FormatDatetime(TD)
End If
SW.Read

If C.Value Then
TD = NoW()
MJSTAR.Write FormatDatetime(TD)
End If
MJSTAR.Read

If D.Value Then
TD = NoW()
MJEND.Write FormatDatetime(TD)
End If
MJEND.Read

If E.Value Then
TD = NoW()
GZSTAR.Write FormatDatetime(TD)
End If
GZSTAR.Read

If F.Value Then
TD = NoW()
GZEND.Write FormatDatetime(TD)
TEND.Write FormatDatetime(TD)
End If
GZEND.Read
TEND.Read
此时将表1中的信息反馈给MES工程师即可,当然每当下次流程开始的时候,上一个流程存储的时间信息都会被覆盖掉,想必很少会因为这种情况导致数据丢失。另外MES系统需要的其他参数信息如灭菌温度的变量也要提供出来,这种本身就是从设备中直接采集的数据就无需多说了,MES可以直接从SCADA数据库中进行调用。

三、总结
脚本编写并不复杂,第一次做的时候还在想该怎么用脚本读取系统时间,但后来发现自己是多想了,毕竟有专门可以调用时间的变量。此次操作的重点和比较花时间的还是和MES工程师讨论如何通讯以及需要哪些数据上面。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码