一些关于 WinCC Comfort 和 WinCC Advanced 脚本编程语言 VBS 的实用技巧
为什么一个由内部变量的 “数值更变” 事件触发的脚本不执行?
如果使用一个内部变量调用另外一个内部变量,以此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这个功能被执行。
 此安全功能是为了阻止连续的执行。
例如
 在内部变量 “HMI_Tag_01” 属性下,“更改数值”事件去置位内部变量 “HMI_Tag_02” 中的某一位。
 同时内部变量 “HMI_Tag_02” 的“更改数值”事件下又调用一个脚本。
 结果:这个脚本不会被执行。
解决办法
 使用和控制器通讯的外部变量。请注意,通过使用外部变量可以规避上述安全机制。在项目运行时可能会产生问题。
如何在脚本中访问数组中的元素?
对数组元素的访问是通过数组的名称和数组中由括号分隔的数组索引来实现的:“SmartTags("Array Name")(array index) ”
例如    访问数组 "DB10_HMI_Data" 的第二个元素 :
Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data")(2)
注意
 使用下面语法访问字符串类型数组中的元素:
Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data[2]")
例如 通过一个循环描述数组 "DM10_HMI_Data" 的第一个元素至第十一个元素
Dim Tag_01
For Tag_01=0 to 10
SmartTags("DB10_HMI_Data")(Tag_01) = 5Next
局部脚本的数组(该数组仅在此脚本中可用)可以使用同样的方式查询,对于多维数组,各个维度通过一个逗号分隔开。
例如  访问二维数组变量 "HMI_Data"  没有连接控制器。
Dim HMI_Data(10,10)
Dim Tag_01
Tag_01 = HMI_Data(0, 5)
注意
 当使用控制器连接的数组元素时,推荐在脚本开始前将他们赋值给脚本内部变量,然后再使用内部变量进行其他工作。结束脚本前,将内部变量赋值给数组元素。 
如何用 VBS 确定鼠标当前的位置?
 为了读取当前鼠标的位置,需要访问操作系统的 API  (Application Programming Interface) 。
 VBS 不支持通过 DLLs 访问操作系统的 API 。
为什么不能在脚本里使用 “ MsgBox ” 命令?
 “MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。“MsgBox”的弹出显示可能会覆盖掉元素操作,比如:阻止设备的快速操作。此外,消息框可能会阻止脚本的进一步执行。
 解决办法
 可以使用系统函数 ShowSystemAlarm。
如何在脚本中使用十六进制符号给变量赋值?
在脚本编辑器中把字符组合 "&h" 作为个十六进制常数的标识。
例如
Dim Tag_01Tag_01
= &h45E ' Corresponds to the decimal value "1118"
如何在脚本里显示或隐藏各个层级?
使用层是 WinCC (TIA Portal)  开发系统的一个功能。层只能在这里组态显示隐藏。
 这个功能在操作面板或 PC 的运行系统中不可用。所以不能用脚本显示或隐藏“层”。
解决办法
在 “ 属性>动画>可见性 ” 组态变量,根据变量值控制相关对象的显示或隐藏。
如何在脚本中合并字符串?
可以使用 “ & ” 来合并字符串:
例如  将  "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 合并成新字符串 "Tag_01"
    Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
    Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03
注意
VB函数 CStr (Expression) 将相应的表达式转换为“字符串”类型。这样在连接字符串转换之前可以避免运行时出现错误。
如何在脚本中连接的字符串之间插入通配符(空格)?
为了在两个文本之间插入任意数量的空格,可以使用两个引号 " "。“空格”的数量取决于两个引号间的距离 " "。
连接下一个字符需要再次使用连接操作 "&"。
例如 将字符串 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 还有空格组合成一个新的字符串 "Tag_01"
   Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03
    Tag_01 = Tag_Text_01 & " " & Tag_Text_02 & " " & Tag_Text_03
如何组态带返回值和参数的脚本?
脚本类型必须是 “ Function ” 才可以有返回值。所以,请在TIA Portal 中添加新 VB 函数的 "Properties > General > Settings" 类型的下拉列表框中选择 “Function” 。
在 “ Parameter ” 表格中可以创建脚本变量,在脚本调用时,用来将内部变量或控制器变量传入。
 若要组态函数返回值,在脚本中为脚本的名称分配表达式。
例如
组态函数类型,。按下面所示,在TIA Portal 组态名称为 “ VBFunction_1 ” 脚本函数的参数和返回值:

图. 01
例如,脚本在按钮的 “ Click ” 的事件中被调用。

图. 02
在脚本中使用 "HMI_Tag_1" 的值赋给"Parameter_1" ,"HMI_Tag_2" 的值赋给"Parameter_2" ,必须有一行脚本定义了返回值。
下面的例子的返回值是两个传入参数的乘积:
 VB_Function_1= Parameter_1 * Parameter_2
 "VB_Function_1" 是这个函数的名字,在执行这个脚本后,"HMI_Tag_3"  获得这个函数的返回值是 "HMI_Tag_1" * "HMI_Tag_2" 。
注意
定义一个 "by reference" 的参数 ,这意味着作为 "By_Ref " 参数,仅对脚本中定义的和引用的变量产生影响,对 HMI 内部变量或者控制器变量不起作用。
什么能导致“达到最大嵌套深度”消息被触发?
如果太多的脚本在结束前调用自己或者调用其他脚本,会引起到达最大嵌套深度消息。
解决方法
检查脚本过程的处理,如有必要,减少脚本的嵌套。
如何确定当前画面的编号和画面名称?
通过预定义 VB 函数 “HmiRuntime.BaseScreenName ” 的返回值提供了当前画面的名字。
注意
 不能使用脚本通过相关画面的“属性”直接读取画面名称/编号。
 也可以使用“画面编号”区域指针。
如何在脚本中使用多路复用变量?
多路复用变量不能用在脚本中。
如何在脚本中使用 HMI UDT 变量?
可以使用“SmartTags” 访问数据类型是HMI UDT的变量元素(用户定义的数据类型)。
  
例如 访问 UDT 变量 " Recipe " 的元素 "x"
SmartTags("Recipe.x")
注意
 这适用于在项目中已创建库类型 HMI UDT的实例。不能直接访问库类型。
如何在脚本中保存变量,以便实现在两个脚本调用之间保留它们?
在两个脚本间相互传递数据需要使用全局变量。全局变量可以是 HMI 或者 PLC 变量。
脚本中定义的变量总是在脚本结束时删除。
如何通过脚本更改文本域的内容?
文本域的文本在运行时可以通过修改相应的对象属性而改变。
例如 在画面 "MachineData" 中,将文本 "NewText" 分配给 文本域 "Text_Field_01" :
Dim objSet obj = HmiRuntime.Screens("MachineData").ScreenItems("Text_Field_01")obj.Text = "NewText"
注意
 文本的变化只是“暂时”的。当屏幕更改后这个被修改后的文本将被组态的文本覆盖。
如何使用脚本从密码列表或用户视图中读取用户密码?
 由于安全原因这个功能在 WinCC (TIA Portal) 中不能实现。
 
如何通过脚本关闭 WinCC 运行系统,然后关闭 PC 或面板?
通过系统函数 “StopRuntime” 可以关闭 WinCC 运行系统和操作系统 。
可以通过修改 "StopRuntime" 函数的参数方式选择仅关闭运行系统或者将运行系统和操作系统都关闭。
| 参数 | 含义 | 
| 0 = hmiStopRuntime | 结束运行系统 | 
| 1 = hmiStopRuntimeAndOperationSystem | 关闭运行系统和操作系统 | 
例如
 StopRuntime hmiStopRuntime
 StopRuntime 1
注意
 Windows-based 面板的操作系统不能通过这种方式关闭。
  
如何在脚本中访问画面或模板中的对象?
组态 “Runtime” 对象的属性 “ ActiveScreen ”,可以找到画面上组态对象的名字和修改相关的属性。
例如 把激活屏幕中的对象 "Circle_01" 设置为不显示
HmiRuntime.ActiveScreen.ScreenItems("Circle_01").Visible=False
注意
 在画面中被组态对象必须有唯一的名字。对象的属性修改仅是暂时的,当屏幕更改后,画面仍使用组态时的配置。
如何在运行时将焦点放在特定的画面对象上(比如输入域)?
获得一个对象的焦点通过 "Activate" 功能,文本输入会直接自动指向那个对象。
例如 获得屏幕 "Screen_1" 的 输入/输出域"IOField_1" 的焦点
HMIRuntime.Screens("Screen_1").ScreenItems("IOField_1").Activate
-  微信群:PLC自动化技术交流(加好友入群,请标注:姓名-单位)工控王工188****7316*****6826 
-  经典WinCC移植到WinCC Professional 
-  S7-1200PLC的 计数器说明 
-  为什么SCL源编译成功后,在‘一致性检查’ 编译中仍然报错 
-  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 
组态资料12
组态资料 · 目录
上一篇经典WinCC移植到WinCC Professional
相关文章:
 
一些关于 WinCC Comfort 和 WinCC Advanced 脚本编程语言 VBS 的实用技巧
为什么一个由内部变量的 “数值更变” 事件触发的脚本不执行? 如果使用一个内部变量调用另外一个内部变量,以此,例如被调用的变量又去执行一个脚本(比如,根据变量变化),此时一个安全机制会阻止这…...
Java|乐观锁和悲观锁在自旋的时候分别有什么表现?
乐观锁和悲观锁是两种不同的并发控制策略,各自采用不同的机制来处理线程之间的资源竞争。 乐观锁 1. 定义 乐观锁是一种假设冲突不会发生的并发控制策略,通常不对资源进行加锁,而是在操作前不加锁,操作后再进行验证。乐观锁通常…...
Linux定时器定时任务清理log日志文件
首先,创建xx.sh文件,内容如下 #!/bin/bash sfecho "" > /var/lib/docker/containers/12379e809ea1294eea9b117368181cff1dd3915fdb1611f940c5cf3d6077d734/12379e809ea1294eea9b117368181cff1dd3915fdb1611f940c5cf3d6077d734-json.log 打…...
美国大学生数学建模竞赛(MCM/ICM)介绍
美国大学生数学建模竞赛(MCM/ICM)是一项具有较高影响力的国际赛事。以下是一份美赛教程: 一、前期准备 组队 寻找合适的队友,最好具备不同的专业技能,如数学、计算机、工程等。团队成员应具备良好的沟通能力、合作精神和责任心。明确各自的分工,例如有人负责建模、有人负…...
 
【独家:AI编程助手Cursor如何revolutionize Java设计模式学习】
【独家:AI编程助手Cursor如何revolutionize Java设计模式学习】 导语 在Java高级编程的世界里,设计模式是每个开发者必须掌握的利器。但是,如何快速理解并灵活运用这些模式呢?让我们一起探索如何借助AI编程助手Cursor,轻松掌握设计模式,提升Java编程技能! 正文 设计模式:J…...
数据仓库宽表概述
宽表是指一种将多个相关数据集整合到一个表中的数据建模方法,具有减少连接操作、提高查询性能、简化数据管理的优点。 一、宽表的定义 宽表,顾名思义,是一种在数据仓库中使用的表格形式,其特征是包含了大量的列。这种表格设计的…...
在数据库中编程 vs 在应用程序中编程
原文地址 https://brandur.org/fragments/code-database-vs-app 数据库领域有一个长期存在的问题:你是更愿意将应用逻辑放在更接近数据库本身的存储过程和触发器中,还是置于数据库之上的应用程序代码中? 没有客观正确的答案,只有…...
 
【设计模式系列】装饰器模式
目录 一、什么是装饰器模式 二、装饰器模式中的角色 三、装饰器模式的典型应用场景 四、装饰器模式在BufferedReader中的应用 一、什么是装饰器模式 装饰器模式是一种结构型设计模式,用于在不修改对象自身的基础上,通过创建一个或多个装饰类来给对象…...
 
你真的知道TCP协议中的序列号确认、上层协议及记录标识问题吗?
引言 在前面的内容中,我们已经详细讲解了一系列与TCP相关的面试问题。然而,这些问题都是基于个别知识点进行扩展的。今天,我们将重点讨论一些场景问题,并探讨如何解决这些问题。 序列号确认问题 当A主机与B主机建立了TCP连接后…...
 
一家生物技术企业终止,科创属性可能不足,报告期内专利数猛增
轩凯生物九成以上营业收入来源于植物营养领域,收入来源结构单一,产品下游应用领域较为集中。报告期内公司应收账款账面价值逐年上升,回款比例显著低于前两年,遭交易所问询是否存在较大的坏账风险。 轩凯生物核心技术是否成熟以及是…...
 
使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML
使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML:详解与示例 在 Web 开发和数据分析中,解析 HTML 是一个常见的任务,尤其是当你需要从网页中提取数据时。Python 提供了多个库来处理 HTML,其中最受欢迎的就…...
 
Spring Cache Caffeine 高性能缓存库
 Caffeine 背景 Caffeine是一个高性能的Java缓存库,它基于Guava Cache进行了增强,提供了更加出色的缓存体验。Caffeine的主要特点包括: 高性能:Caffeine使用了Java 8最新的StampedLock乐观锁技术,极大地提高了缓存…...
Python3入门--数据类型
文章目录 一、基础语法编码标识符注释单行注释以 # 开头多行注释用多个 # 号,还有 和 """ 空行行与缩进同一行显示多条语句多行语句 二、数据类型Number(数字)type和isinstance查询变量类型数值运算 String(字符串…...
 
开发运维警示录-20241024
开发警示录 1、作为开发,不要私自修改业务人员给的SQL语句,虽然个人感觉SQL很冗余,效率低等。 2、开发前,要明确需求,必要时通过图和文字形成文档与需求方确认、留痕。 3、开发复杂的业务逻辑代码前,先疏通…...
 
Linux运维_搭建smb服务
Samba(SMB)是一个开源软件,允许Linux和Unix系统与Windows系统共享文件和打印机。以下是一些关于Samba和SMB的基本信息和操作步骤: Samba 和 SMB 基本概念 Samba:实现了SMB(Server Message Blockÿ…...
 
vue3移动端可同时上传照片和视频的组件
uni-app中的uni-file-picker可单独上传照片或视频,但不支持同时上传照片和视频。本篇博客使用image标签和video标签实现移动端(H5app小程序)中照片和视频的同时上传。 本篇博客采用的是照片和视频的单独上传,但可同时展示…...
PyQt入门指南二十七 QTableView表格视图组件
# 创建一个QStandardItemModel实例,用于存储表格数据model QStandardItemModel(4, 2) # 4行2列# 填充模型数据for row in range(4):for column in range(2):item QStandardItem(fRow {row}, Column {column})model.setItem(row, column, item)# 创建一个QTableVi…...
AI学习指南深度学习篇-自注意力机制(Self-Attention Mechanism)
AI学习指南深度学习篇—自注意力机制(Self-Attention Mechanism) 在深度学习的研究领域,自注意力机制(Self-Attention Mechanism)作为一种创新的模型结构,已成为了神经网络领域的一个重要组成部分…...
 
【JAVA毕业设计】基于Vue和SpringBoot的校园管理系统
本文项目编号 T 026 ,文末自助获取源码 \color{red}{T026,文末自助获取源码} T026,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 管…...
 
你对MySQL的having关键字了解多少?
在MySQL中,HAVING子句用于在数据分组并计算聚合函数之后,对结果进行进一步的过滤。它通常与GROUP BY子句一起使用,以根据指定的条件过滤分组。HAVING子句的作用类似于WHERE子句,但WHERE子句是在数据被聚合之前进行过滤,…...
 
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
 
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
 
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
 
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
 
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
 
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
 
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
