WinCC 通过VBS全局脚本令OnlineTableControl周期性自动导出CSV文件

0前言

OnlineTableControl控件可以导出CSV文件,但这一过程是手动执行的,我希望能让CSV文件被定期导出备份以实现过程自动化。为了能实现这一设想,首先应当被考虑的就是全局脚本。
在WinCC的全局脚本中,有C编辑器和VBS编辑器,下面就以VBS脚本为例讲解如何实现数据导出自动化。

前置知识

●VBS基础语法
可参考我写的另一篇文章:VBScript基础语法学习笔记
在这里插入图片描述
●CSV
CSV(Comma-Separated Value,逗号分隔值)是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,因为大量程序都支持某种CSV变体,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。
在这里插入图片描述
●脚本
脚本程序是组态软件中的一种内置编程语言引擎,当某些控制和计算任务通过常规组态方法难以实现时,可以借助脚本程序。以MCGS嵌入版脚本程序为例,它被封装在一个功能构件里(脚本程序功能构建),在后台由独立的线程来运行和处理,从而避免单个脚本程序的错误导致整个系统的瘫痪。

脚本语言是一种供工程设计人员使用以便进行二次开发的内置程序语言,实现方式分为三种:

  1. 内置类 C/Basic 语言,要求用户使用类 C/Basic 的高级语言写脚本,借助操作系统提供的函数来完成各种功能;
  2. 采用微软公司的 VBA 脚本语言,这是一种相对完备的开发环境,但是只能运行在 Windows 系统;
  3. 采用面向对象的脚本语言,提供对象访问机制,其中以 JavaScript 为代表,但是实现比较复杂。

组态软件使用事件驱动机制来调用脚本程序,当设定事件如鼠标单击事件、键盘按键事件等发生时就会触发一个脚本程序,执行脚本程序中的操作。

1准备工作

首先在WinCC项目管理器>计算机>属性>启动中勾选“全局脚本运行系统”,在未勾选的情况下脚本将不会自动运行。
在这里插入图片描述

2创建VBS脚本

在WinCC项目管理器中选择 全局脚本>VBS-Editor>动作。动作的执行需要触发器,而触发器是可以周期性触发的,这样既可实现VBS脚本的周期执行。
在这里插入图片描述

VBS编辑器包含全局脚本编辑器在图形编辑器中打开的VBS编辑器
同理,VBS动作包括在图形编辑器中的图形对象属性或对象事件的VBS动作全局脚本动作

关于全局脚本中项目模块、标准模块和动作的区别
首先项目模块和标准模块相当于函数,都是受动作调用的,光靠模块本身并不能执行;
项目模块只能在本项目中调用,而标准模块可以在任意项目中调用。

VBS编辑器如下图所示:
在这里插入图片描述

3编写脚本

3.1文件导出

可以看到在新建动作后编辑器自动生成了语句:

Option Explicit
Function action

End Function

正式脚本如下:

Option Explicit
Function action
Dim objOnlineTable
Set objOnlineTable=HMIRuntime.screens("画面名").ScreenItems("控件1")
objOnlineTable.ExportDirectoryname = "C:\Users\Administrator\Desktop\test" '设置路径
objOnlineTable.ExportFilename = Now '设置文件名
objOnlineTable.Export() '导出
End Function

这里必须要对生成的文件进行重命名,如果不这样的话,会弹出“文件已存在”的弹窗,而这将打断文件备份的自动化:必须手动点击是才能继续执行备份操作。我直接调用了Now时间函数将文件名改为了当前日期。
在这里插入图片描述
只是将 属性>导出 中的“显示对话框”取消勾选,并不能屏蔽弹窗:
在这里插入图片描述
在工具>语法检查中可以进行VBS语法检查;此外当保存脚本时系统也会自动进行语法检查,如果出现语法错误将无法保存脚本。
在这里插入图片描述

3.2问题及解决

OnlineTableControl在导出CSV文件时控件会自动停止(也可以说只有在控件停止时OnlineTableControl才能导出CSV文件),虽然归档仍在进行,但是当如果控件一直处于停止状态,那么它此后输出的文件仅包含控件启动时显示的数据,停止之后的数据并未被记录。因此必须想办法让控件可以自动重新启动。
我能想到的一个方法是给启动停止按键添加快捷键,然后再用脚本定时调用此按键,即可实现自启动。

在 属性>工具栏>启动/停止/快捷键 中为此按键添加快捷键:
在这里插入图片描述
创建一个新的动作,脚本代码如下:

Option Explicit
Function action
CreateObject("wscript.shell").sendkeys "{F8}"
End Function

使用这行代码可以实现按键的功能。
必须将这一行代码单独写进一个脚本中,如果和之间的脚本合写,会导致脚本运行不正常。
之前就合写了,结果一直运行不正常,以为是代码写错了,我就多改了几次语法结构;后来索性用记事本改成vbs脚本作外部脚本运行,结果到点直接卡死;最后干脆直接测试单独一行按键代码能否正常工作,发现可以,后来就分开写了。

4设置触发器

由于数据需要被定期导出备份,而编写的脚本一次只会导出一份文件,因此脚本需要被周期执行。

4.1为导出脚本设置触发器

首先为用于导出数据的脚本设置触发器。
选择右上方的闹钟样式的触发器图标,选择 定时器>周期性>添加,在“添加触发器”页面的“事件”中可以选择标准周期、每小时的、每日的、每周的、每月的和每年的:
在这里插入图片描述

这里选择“每小时的”:
在这里插入图片描述
即在每小时的第七分钟将执行一次脚本。

4.2为按键脚本设置触发器

和上一步设置过程类似,两个脚本之间我预留了30s间隙,因为控件只有在暂停时才会导出文件,我不清楚如果暂停时间过短,会不会影响这一导出过程。
在这里插入图片描述

5测试

完成后启动OnlineTableControl所在画面,同时观察备份目录,可看到在预定的某一时刻,备份文件生成,同时控件被停止:然后在下一个预定时刻,控件自启动,表格内数据刷新。此过程将不断循环。

在这里插入图片描述

  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值