一些关于 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子句是在数据被聚合之前进行过滤,…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
2025年低延迟业务DDoS防护全攻略:高可用架构与实战方案
一、延迟敏感行业面临的DDoS攻击新挑战 2025年,金融交易、实时竞技游戏、工业物联网等低延迟业务成为DDoS攻击的首要目标。攻击呈现三大特征: AI驱动的自适应攻击:攻击流量模拟真实用户行为,差异率低至0.5%,传统规则引…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
python基础语法Ⅰ
python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器,来进行一些算术…...
