WINCC脚本系统在香料厨房防差错技术中的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

49
香料厨房防差错技术是北京卷烟厂新上马的项目,供料方式由原来的人工推料到现场改为了集中调配、集中发料的方式,实现了烟草加工过程对控制信息化、智能化、自动化的要求。

同时也要求了对现场发料的准确性,目前我厂统计的配置的香料品种48个,香精品种14个。

由于品种繁多,极易出现发料错误,目前采用的是PLC采集现场编码利用S7程序进行编码比对,考虑到过程控制工业总线PRFINET的局限性,不能完全保证料液编码的比对正确(如工控限制条件的改变、网络通讯的故障都能导致料液编码的比对出现错误,模拟测试时就出现过误发料情况)。

因此我们准备利用WINCC VB及C语言的脚本编程,通过调用ORACREL数据库中的烟牌名称与料罐中的料液名称,利用高级编程语言编写脚本进行比对,作为对编码比对的校验程序,确保发料的准确性。

1 脚本函数
1.1 脚本函数的介入
西门子公司在推出了WINCC V6版本之后,引入了脚本函数这一概念。

使得整个WINCC系统通过完整和丰富的编程系统实现了双向的开放性。

借助C脚本动作,WINCC几乎可以无限制地访问ORACEL数据库及其平台上的各种应用功能。

而VB脚本也以其易用性和开发快速性赢得了广大用户的青睐。

1.2 C脚本及VB脚本的设计
1.2.1 C脚本。

图1 WINCC触发C脚本的基本原理
图2
internal functions(内部函数):内部函数是指C语言的内嵌函数,同被经常用到的函数。

project functions(项目函数):可生成全局访问的函数。

standard functions(标准函数):包含用于WINCC归档、编辑器、报警等功能。

action(动作功能):有用户创建,不由其他C脚本中调用,和其他函数不同,它是由其他判断触发的。

WINCC 脚本系统在香料厨房防差错技术中的应用
刘振强
(上海烟草集团北京卷烟厂,北京 101121)
摘要:
WINCC 技术的不断更新,使得其可操作性更强。

脚本的加入给WINCC 项目带来了极大的灵活性和开放性,通过一些脚本的介入,能够完成一些WINCC 基本组态无法实现的功能。

在V6版本以后WINCC 加入了VB 脚本,它编写起来更加简单、容易入手。

关键词:
脚本函数;WINCC ;C 语言;VBS ;香料厨房防差错技术;配料系统中图分类号:
TS43 文献标识码:A 文章编号:1009-2374(2012)31-0049-04 2012年第31/34期(总第238/241期)NO.31/34.2012
(CumulativetyNO.238/241)
acyclic非周期型,根据时间和日期调用一次。

cyclic周期型,分为每秒、每分、每小时等。

tag triggered变量标签触发,当绑定的标签触发时触发。

图3
上面这段程序是我们要创建的一个动作程序,如图3所示,每当我们创建好后就会自动产生一段缺省程序(圈中的部分是WINCC自带脚本注释),在我厂的香料厨房中基本应用的都是动作功能。

1.2.2 VBS。

由于C语言脚本的开发相对复杂,制作周期较长,所以新版本的WINCC系统引入了新的脚本语言VB,WINCC集成了微软基于VB的运行期脚本语言,能够使用微软的标准工具进行编辑、调试。

能够访问ActiveX控件和Windows应用的
属性和方法。

图4 VBS脚本的创建过程(一)
图5 VBS脚本的创建过程(二)
VBS的应用:WINCC中实现动态化(图形编辑器中)、WINCC中的动态化、集成ActiveX控件;通过Microsoft outlook发送电子邮件;集成Microsoft internet Explorer;集成Acrobat reader;集成在线帮助功能、联接Office应用(Excel、word、access)、读写变量,启动报表;链接数据库。

2 香料厨房的C脚本及VB的应用
2.1 C脚本在配料系统中的应用
首先我们我们看到的是香厨系统在配料时弹出
配料界面的C动作。

图6 
接下来我们来分析下这段C语言动作(我们以301号罐为例):
#include "apdefap.h" 插入一个文本
HWND hwnd=NULL 定义一个句柄目的是为了下文的弹出对话框找到出处
int iRet 定义一个名称为iRet的整型变量
hwnd=FindWindow(NULL,"WinCC-运行系
统-");调用的弹出对话框在WINCC中显示
i f(G e t T a g B i t("T L_B_P T_S t a r t")&(GetTagWord("TL_I_PT_InSelect")!=1)) 说明:一个嵌套功能语句"TL_B_PT_Start"在PLC中为配料启动按钮,"TL_I_PT_InSelect"为配糖画面中的料罐选择,这条语句的意思是当配料启动为1时且配料选择按钮不等于1时执行下一句。

if(GetTagWord("TL_I_PT_InSelect")==2) 当配料选则等于2时
iRet=MessageBox(hwnd,"配料画面不能打开,301罐配料正在进行中"
"操作提示"说明:MessageBox函数弹出对话框
50
",M B_O K|M B_I C O N Q U E S T I O N|M B_ I C O N E X C L A M A T I O N|M B_S E T F O R E G R O U N D|M B_ APPLMODAL);当这条语句执行是弹出OK确认键else {
S e t V i s i b l e("配料1.P D L","画面窗口5",1); //Return-Type:BOOL
S e t V i s i b l e("配料1.P D L","画面窗口4",0); //Return-Type:BOOL
SetTagWord("N_I_PT_InSelect",2); // Return-Type:BOOL
}
说明:从ELSE这条语句开始表示如果配料选择为2时执行else后的语句,SetVisible是弹出配料界面并将料罐号设置为1。

以上程序就是配料的过程中进行料罐选择的C 脚本。

2.2 VBS脚本在配料系统中的应用
图7
图7中的上述界面是由调制罐到将香料送到储存罐的动作过程。

Sub OnClick(ByVal Item) 声明子程序
I f H M I R u n t i m e.T a g s("T L_I_J T_ OutNO303").Read = 1 And (HMIRuntime.Tags ("TL_TX_QG_Name413").Read >< "" And HMIRuntime.Tags("TL_TX_QG_Name413").Read >< HMIRuntime.Tags("TL_TX_QG_Name303"). Read) Then
MsgBox "与413罐料液名称不符,不能出料",vbExclamation,"不能完成操作"
说明:上面一条语句是当"TL_I_JT_OutNO303"即303出料启动为1时,比较"TL_TX_QG_Name413"和"TL_TX_QG_Name303"这两个料液名称如果不同,弹出对话框"与413罐料液名称不符,不能出料",并且VB执行动作不能操作。

Else
I f H M I R u n t i m e.T a g s("T L_I_J T_ OutNO303").Read = 1 And ((HMIRuntime. Tags("TL_B_QG_OutAll303").Read = 1 And HMIRuntime.Tags("TL_R_QG_Weight303").Read + HMIRuntime.Tags("TL_R_QG_Weight413"). Read >= 300) Or (HMIRuntime.Tags("TL_B_ QG_OutAll303").Read = 0 And HMIRuntime.Tags ("TL_R_QG_SWeight303").Read + HMIRuntime. Tags("TL_R_QG_Weight413").Read >= 300)) Then
MsgBox "超出413罐容量上限,不能出料",vbExclamation,"不能完成操作"
说明:此段程序中是比较"T L_R_Q G_ Weight303"与"TL_R_QG_Weight413",表示出料量超出413存储容量时不能出料。

Else
HMIRuntime.Tags("TL_B_JT_Start303"). Write 1
说明:以上条件都不满足是将"T L_B_J T_ Start303"变量置1即出料启动。

3 防差错程序的编写
图8 我们添加的VBS动作
首先我们先定义变量Dim s1 Dim s2 Dim Cn Dim RS
s1=H M I R u n t i m e.T a g s("T L_T X_F T_ Name302").Read 将S1的变量联接到"TL_TX_FT_ Name302",此变量是来自现场加料点的料液名称S e t C n=C r e a t e O b j e c t("A D O D B. Connection")
51
S e t R S=C r e a t e O b j e c t("A D O D B. Recordset") 声明链接数据库的变量
C n.O p e n"P r o v i d e r=M S
D A O R A.1;Password=wang1001;User ID=zswang;Data Source=xlcf;Persist Security Info=TRUE"
说明:上一步已经声明过变量,这步是链接数据库。

S e t R S=C n.E x e c u t e("S E L E C T m n_ materialname FROM materialname WHERE mn_ materialcode LIKE '" & s1 & "'")
说明:根据S1这个变量在数据库中找到相应的的料液编码。

If HMIRuntime.Tags("TL_I_FT_InNO302"). Read = 1 Then
H M I R u n t i m e.T a g s("T L_T X_F T_ ReceiveNN302").Write HMIRuntime.Tags("TL_ TX_QG_Name407").Read
说明:上面这条语句是赋值语句是将现场加料点的料液名称赋给料罐的料液名称。

s2 = RTrim(RS(0))
If HMIRuntime.Tags("TL_I_FT_InNO302"). Read = 1 Then
If RTrim(HMIRuntime.Tags("TL_TX_QG_ Name407").Read) = s2 Then
H M I R u n t i m e.T a g s("T L_T X_F T_ ReceiveNN302").Write HMIRuntime.Tags("TL_ TX_QG_Name407").Read
H M I R u n t i m e.T a g s("T L_T X_F T_ ReceiveName302").Write s1
HMIRuntime.Tags("TL_B_FT_CSend302"). Write 1
Else MsgBox "所选料罐料名不同"
End If
说明:以上这段是我们根据后来的生产情况添加的香料厨房对比块,保证香料厨房出料的正确性,在我们之前声明过变量之后,首先将s2= RTrim(RS(0))即将数据库中调出的料液名称。

当"TL_I_FT_InNO302"为1时,即料罐被选中时,比较"TL_TX_QG_Name407"与S2的变量是否相同,即确认现场发来的牌号与料罐存储的牌号是否相符,如果不相符即弹出对话框"所选料罐料名不同"。

Rtrim是一个消除空格的指令,防止在数据库中输入时产生全角、半角等问题而导致误判断。

4 结语
我们添加的防差错程序基本是由VBS动作脚本编写而成,但是其中很多的料罐参数变量分别由配料的C脚本程序和调配罐到存储罐发料的VBS脚本提供。

最开始设计的程序由于存在全角和半角的差异,经常误报所选料罐料名不同,因此我们在后面添加了Rtrim命令消除差异。

在经过一段时间的观察后发现,检验正确率100%,没有发现误检测情况,杜绝了发料错误,提高了生产的可靠性、安全性。

参考文献
[1] 周良志.C++实践之路[M].北京:人民邮电出版社.
[2] 西门子自动化与驱动集团.WINCC全局脚本手册[M].
[3] 龚沛曾,陆慰民.VB程序设计简明教材[M].北京:高等
教育出版社.
作者简介:刘振强(1985-),男,北京人,上海烟草集团北京卷烟厂助理工程师,研究方向:自动控制。

(责任编辑:周 琼)
52。

相关文档
最新文档