1 <概述>
在 WinCC 使用过程中,有很多应用场合需要把获得的数据保存下来,在其它事件 中来使用,例如在 WinCC 运行后去读取自定义的配置文件中的参数,在控制相应设 备时需要根据这些参数来确定控制方式,那么就需要把这些参数以 WinCC 更容易读 取的方式保存下来。
目前,在 WinCC V7.5 SP1 中,可以通过 WinCC 变量、VBS 全局变量以及 DataSet 来保存这些数据。本文档主要介绍 VBS 全局变量使用,分别介绍在画面的 动作中定义全局变量以及在 VBS 全局脚本中定义全局变量的方法。
全局变量可在全局 VBS 脚本编辑器中定义,然后可在所有 VBS 动作、过程和画面 中使用。也可以在画面的动作中定义全局变量,但只能在当前画面使用此全局变 量。
本文档所使用的软件版本如下:
➢ WinCC 版本: SIMATIC WinCC V7.5 SP1
2 <基于画面的 VBS 全局变量>
可以在画面的动作中定义 VBS 全局变量,通过全局变量可以在不同的 VBS 脚本中 交换数据,但这种全局变量只能在当前画面使用。下面介绍如何在画面中的两个按 钮通过全局变量传送数据。
第一步,在画面中插入两个按钮及一个圆,并为圆对象命名。本例中圆的名称为 “C1”。如图 1 所示。
第二步,按钮 1 的按下事件中输入如图 2 所示的 VBS 脚本。
其中 Option Explicit 部分定义的就是此画面动作的全局变量,这里定义的变量可 以赋值为数值和对象。图中定义了两个全局变量:数值变量“MyNumber”和对象 变量“My Control”。
默认情况下,Option Explicit 是隐藏的,可以通过 VBS 脚本编辑器中的“显示声 明区”按钮把这部分内容显示出来,如图 3 所示。
第三步,在按钮 1 的按下事件的 VBS 脚本中直接调用全局变量。如图 4 所示。
这里可以直接调用全局变量,而不用再重新声明。并且按钮 1 中设定的数值也会 随着变量传送过来。
第四步,激活 WinCC 运行系统。先后点击按钮 1 和按钮 2,可以看到按钮 2 可以直 接控制圆的颜色。如图 5 所示。
注意,基于画面的 VBS 全局变量不能跨画面使用。本例中再创建一个新的画面 “NewPdl3”,在画面中添加一个按钮“按钮 3”,其动作中调用对象变量“My Control”。如图 6 所示。
在原画面中通过画面窗口显示“NewPdl3”画面,此时执行按钮 3 的动作,可以看 到缺少对象变量“My Control”的提示,如图 7 所示。说明不能跨画面引用基本画 面的 VBS 全局变量。
3 <基于全局脚本的 VBS 全局变量>
基于全局脚本的 VBS 全局变量是在全局 VBS 脚本编辑器中定义,这种变量可在所 有 VBS 动作、过程(函数)和画面中使用,但是在全局脚本中声明的变量不能在全 局动作和画面动作脚本之间交换数据,不同画面动作脚本之间也不能交换数据。如 果需要在全局动作和画面之间交换数据可以使用内部变量或 DataSet 对象。
下面介绍如何定义并使用基于全局脚本的 VBS 全局变量。
第一步,在 VBS 全局脚本编辑器中创建“模块 1”,在“模块 1”定义全局变量“GTag”, 并在过程“procedure1”和 “procedure2”中使用此变量,如图 8 所示。
其中,过程“procedure1”是为全局变量赋初值为 1,过程“procedure2”使全局变 量赋自加 1。
第二步,创建新的模块“模块 2”,在“模块 2”中创建过程“procedure11”,并直接引用 “模块 1”创建的全局变量“GTag”,如图 9 所示。
第三步,创建画面,添加四个按钮,并添加“应用程序窗口”用来显示脚本中的 trace 信息。如图 10 所示。
其中,前三个按钮分别调用“模块 1”中的过程“procedure1”和 “procedure2”,以 及“模块 2”中的过程“procedure11”。图 11 所示为按钮 1 调用“模块 1”中的过程 “procedure1”。
第四个按钮通过 VBS 脚本在画面中为全局变量“GTag”赋值,如图 12 所示。
第四步,激活 WinCC 运行系统,分别点击“按钮 1”、“GTag=11”、“按钮 2”、“按钮 3”,结果如图 13 所示。
可以看到按下“过程 1”按钮后,变量 GTag 在当前画面中注册,“GTag=11”按钮 在画面中为 GTag 赋值之后,“过程 2”按钮通过全局过程脚本可以读到刚才设定 的值。同时,调用不同模块中的过程函数的“过程 11”按钮也可以读取“GTag”变 量的值。
上面演示的在同一个画面中 VBS 全局变量的使用,但是需要注意的是
▪ 全局动作脚本和画面动作脚本之间无法通过全局变量交换数据。
▪ 不同画面的动作脚本也不能通过全局变量交换数据。
4 应用举例
下面以实现操作记录为例介绍 VBS 全局脚本的使用。本例中,在 WinCC 画面中的 操作动作通过脚本记录到自定义的 Access 数据库中。由于对设备的操作有可能很频 繁,如果每个记录都重新连接并打开数据库,那么会占用大量的系统资源。本例中 使用 VBS 全局变量保存连接的数据库对象,每次操作直接调用这些全局变量即可, 不用重新去连接数据。
4.1 <创建数据库>
WinCC 项目文件夹下创建”report”文件夹,并在文件夹中创建 Access 数据,本 例中名称为“ActionRecrod”,如图 14 所示。
在 ActionRecrod 数据库中创建表“actionRecrod”,各字段设计如图 15 所示。
4.2 <创建 VBS 全局脚本>
打开全局 VBS 脚本编辑器,创建“模块 3”,定义全局变量“CurrentUserName”和 “sqlcomm”,以及对象变量“Conn”和“adors”,并创建过程“operating_record”和 “SQL_Close”,如图 16 所示。
其中,过程“operating_record”用来创建到数据库“ActionRecrod”的连接,这个连接 保存到 VBS 全局变量“Conn”中。过程““SQL_Close””用来断开和数据库的连接。
具体的脚本如下:
Dim CurrentUserName,sqlcomm
Dim Conn,adors
Sub operating_record
Set CurrentUserName = HMIRuntime.Tags("@CurrentUserName") CurrentUserName.Read Set conn = CreateObject("ADODB.Connection")
Set adors = CreateObject("ADODB.Recordset") Conn.ConnectionString = "Provider=microsoft.ace.oledb.12.0;" & "Data Source=" & HMIRuntime.ActiveProject.Path &"\report\ActionRecrod.accdb"
Conn.Open sqlcomm = "insert into actionRecrod (Act_time, Act_dec, UserN) values ( #"
End Sub
Sub SQL_Close
Conn.close
Set Conn = Nothing
Set adors = Nothing
End Sub
4.3 <创建用户>
在 WinCC 用户管理器中创建用户,如下图 17 所示。
4.4 <画面组态>
<在画面中插入用来登录的按钮,用来显示当前用户的 IO 域已经设备操作按钮,如 图 18 所示。
在画面的“打开画面”事件中,调用过程“operating_record”,如图 19 所示。
“用户登录”按钮使用 C 脚本调用登录对话框,如图 20 所示
具体脚本如下:
#pragma code ("useadmin.dll")
#include "PWRT_api.h"
#pragma code()
PWRTLogin('1');
添加 IO 域,连接系统变量“@CurrentUserName”,用来显示当前登录的用户名,如 图 21 所示。
在设备操作按钮事件脚本中,添加操作记录脚本。如图 22 所示。
在操作记录脚本中不用再去连接数据库,而是直接使用全局变量“Conn”,此变量保 存了所连接的数据库的信息。本例中的四个设备操作按钮的操作记录脚本如下:
‘打开阀 1
Dim act_dec,sql
act_dec = "打开阀 1"
CurrentUserName.read
SQL = sqlcomm & Now & "#, '" & act_dec & "', '" & CurrentUserName.Value & "')"
Conn.Execute SQL
‘关闭阀 1
Dim act_dec,sql
act_dec = "关闭阀 1"
CurrentUserName.read
SQL = sqlcomm & Now & "#, '" & act_dec & "', '" & CurrentUserName.Value & "')"
Conn.Execute SQL
‘启动电机 1
Dim act_dec,sql
act_dec = "启动电机 1"
CurrentUserName.read
SQL = sqlcomm & Now & "#, '" & act_dec & "', '" & CurrentUserName.Value & "')"
Conn.Execute SQL
‘停止电机 1
Dim act_dec,sql
act_dec = "停止电机 1"
CurrentUserName.read
SQL = sqlcomm & Now & "#, '" & act_dec & "', '" & CurrentUserName.Value & "')"
Conn.Execute SQL
WINCC中比较实际趋势曲线和设定值(理想)曲线的实现方法
西门子1500PLC怎样异地远程监控
经典WinCC移植到WinCC Professional
WinCC 数据使用MQTT传送到云端
NET421/NET431西门子plc与ABplc通讯网关
S7-200 SMART 与 S7-1200 之间 TCP 通信— S7-200 SMART 作为服务器
如何在 WinCC Runtime Professional 中自动调整画面分辨率适应窗口的大小?
如何实现简单的 WinCC 项目分屏?
s7-1200通过4G网连接中控室
WinCC C/S结构快速入门
如何防止多个WinCC客户机同时操作或更改数值?
精智Comfort屏如何周期性调用脚本
巨控协议转换网关GRM321GRM322GRM323应用场景
精智面板/二代精简PN面板如何使用Modbus TCP/IP 通信组态
如何快速实现OPC DA转为WEBSEVER
200smart数据日志的功能
HMI如何通过PLC变量控制开始和停止数据记录
WinCC flexible配方与PLC的同步
HMI面板与S7-1500 R/H 冗余PLC的通信
WinCC Flexible Smart快速导入 Smart PLC变量
巨控OPC560系列远程智能控制终端
S7_1200配方功能快速入门
PLC远程调试监控模块-巨控GRM530
PN IO设备ET 200SP将支持R1模式
SCL 常见问题
PLC协议转换网关:巨控NET400
如何判断S7通信中断
S7-1500R/H PROFIBUS DP 通信
如何实现PLC短信报警
WinCC Modbus TCP 通信
wincc 远程和PLC通讯方案
1500PLC与wincc通过4G网络远程通讯
WINCC中自定义 XY 轴的多功能曲线的实现方法
wincc报警如何通过短信发送给手机
在WinCC(TIA Portal)项目中,如何正确的使用面板,模板,弹出窗口和滑入窗口?
通过巨控GRM532Y-C远程调试下载国外PLC
巨控GRM远程模块配置使用流程简介
巨控远程模块微信报警配置方法
TIA中如何将数据块的实际值转到初始值中
西门子200smart与三菱FX3U plc之间的自由口通讯
wincc 远程和PLC通讯方案
1500PLC如何更好地配置一个OPC UA客户机使其与服务器进行有效的通信?
如何使用EXCEL访问WinCC中的实时数据实现报表
西门子PLC无线通讯解决方案
数据丟了--WinCc历史数据丢失怎么办
巨控无线通讯模块在带式输送机行业的应用
WinCC激活故障排除及解决思路
Wincc在手机端监控_巨控OPC560解决方案
PLC之间的Profibus 通讯
怎么远程控制国外的PLC