当前位置: 首页 > news >正文

一些关于 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&#xff…...

vue3移动端可同时上传照片和视频的组件

uni-app中的uni-file-picker可单独上传照片或视频,但不支持同时上传照片和视频。本篇博客使用image标签和video标签实现移动端(H5app小程序)中照片和视频的同时上传。 本篇博客采用的是照片和视频的单独上传,但可同时展示&#xf…...

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)作为一种创新的模型结构,已成为了神经网络领域的一个重要组成部分&#xf…...

【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子句是在数据被聚合之前进行过滤&#xff0c…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...