0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何自定义函数或局部脚本

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-10-10 10:45 次阅读

使用系统函数和运行系统脚本

运行系统脚本 (Panels, RT Advanced, RT Professional)

运行系统脚本

指代用户自定义函数和局部脚本中所有活动的通用术语。

函数

指代系统函数和用户自定义函数的通用术语。

系统函数

系统函数是所有随 WinCC 一同提供的函数。系统函数可应用在函数列表、用户自定义函数或局部脚本中。

用户自定义函数

用户自定义函数是指在“脚本”编辑器中编写的函数。为了更准确的加以说明,本文档中使用术语“用户自定义 VB 函数”和“用户自定义 C 函数”。

局部脚本

局部脚本是指在使用的位置直接创建的脚本(例如对象属性),并且具有周期性或非周期性触发器。为了更准确的加以说明,本文档中使用术语“局部 VB 脚本”和“局部 C 脚本”。

VBS/VBScript

Visual Basic Script 的缩写形式

应用运行系统脚本

下图可作为应对编程任务的决策指南:

c62a8478-47ae-11ed-a3b6-dac502259ad0.png

WinCC RT Advanced 和面板不支持局部脚本。

自定义函数或局部脚本?

使用用户自定义的函数或者使用局部脚本完成编程任务,这取决于应用目的并最终取决于用户自定义函数或局部脚本的数量。

局部脚本可用于各种后台活动,例如日常打印或记录、变量的监视或者计算的执行。

通过自定义函数,只需创建一次就可以在项目中重复使用代码。需要时,只需调用相应的自定义函数即可,而无需多次输入代码。这样代码将更加清晰并易于维护。

c644313e-47ae-11ed-a3b6-dac502259ad0.png

系统函数

● 函数列表

发生特定事件时,可通过函数列表来执行组态的系统函数。

● 用户自定义函数

如果 HMI 设备支持用户自定义函数,可以将系统函数与用户自定义函数代码中的指令和条件结合使用。这样,便可以根据特定的系统状态来执行自定义函数。此外,还可以计算系统函数的返回值。利用返回值可以执行测试函数,继而影响函数流。

● 函数列表

组态函数列表时,从按类别排序的选择列表中选择系统函数:

c664ff86-47ae-11ed-a3b6-dac502259ad0.png

● 用户自定义函数

如果在用户自定义函数中使用系统函数,可以在选择列表中进行选择。要打开选择列表,请使用快捷键或单击c68c1b34-47ae-11ed-a3b6-dac502259ad0.png  。

c69c3f32-47ae-11ed-a3b6-dac502259ad0.png

用户定义的函数 (Panels, RT Advanced, RT Professional)

自定义函数可用于以下情况:

● 组态函数列表

在自定义函数中,自定义函数和系统函数可以按一定的条件来执行,还可以重复执

行。然后将该用户自定义函数添加到函数列表中。

● 编写新函数

自定义函数仅在定义它们的项目中有效。对于用户自定义函数,可定义传送参数和返回

值以实现数值的转换。

在函数列表中只能使用属于同一种编程语言的用户自定义函数。选择的首个用户自定义函

数将决定随后在该函数列表中可选择的是 VB 函数还是 C 函数。

自定义函数的组织

通过“脚本”编辑器创建自定义函数。更多信息,请参见““脚本”编辑器 (页 7082)”。自定义函数保存在项目中。要保护用户自定义函数,请设置专有技术保护。

● 项目树

用户自定义函数显示在项目树的“VB 脚本”(VB scripts) 或“C 脚本”(C scripts) 下。

c6d6b496-47ae-11ed-a3b6-dac502259ad0.png

● 函数列表

用户自定义函数显示在函数列表的“VB 函数”(VB functions) 或“C 函数”(C functions) 下。

● 用户自定义函数

如果在用户自定义函数中使用系统函数,可以在选择列表中进行选择。要打开选择列

表,请使用快捷键或单击c6f58efc-47ae-11ed-a3b6-dac502259ad0.png  。

局部脚本 (RT Professional)

可将局部脚本用于以下操作:

● 动态化对象

可使用局部脚本确定运行系统中某对象属性的值。例如,通过此方法可根据变量值更改

颜色。

● 在任意时间点执行任务。

可使用局部脚本规划工作,例如在每天换班交接时打印输出日志。

局部脚本的属性

在使用的位置直接创建局部脚本。局部脚本具有以下属性:

● 预定义名称

● 预定义参数

● 预定义返回值(可选)

● 只能在使用的位置进行更改

● 不具有触发器

● 调用自定义函数、系统函数

触发器

在运行系统中执行局部脚本时需要使用触发器。触发器可以在创建局部脚本时自动确定,也可以由项目经理指定。

WinCC 支持以下触发器:

● 非周期性触发器,例如,规划单次终止运行系统以进行维护工作。

● 周期性触发器,例如,规划一项启动日常日志打印的作业。

● 事件,例如,单击按钮时。

下表列出了不同类型的触发器:

c757187a-47ae-11ed-a3b6-dac502259ad0.png

触发器可用于以下编辑器:

● 调度程序

首先需要在调度程序中组态触发器。然后将该触发器连接到局部脚本或函数列表。

● 画面

要对对象属性做动态化处理,首先应在相应画面的属性列表中组态局部脚本。

在创建局部脚本时会自动确定触发器。可更改该触发器,例如可更改为变量触发器。

关于函数列表的基础知识

原理

针对对象(例如画面对象或任务等)的事件来组态函数列表。可以将函数列表精确地组态到每个事件上。可用事件取决于所选择的对象和HMI设备。

c78ff816-47ae-11ed-a3b6-dac502259ad0.png

组态函数列表

通过从下拉列表中选择系统函数和自定义函数来组态函数列表。系统函数根据类别排列在选择列表中。

在函数列表中只能使用属于同一种编程语言的自定义函数。选择的首个用户自定义函数将决定随后在该函数列表中可选择的是用户自定义 VB 函数还是用户自定义 C 函数。哪些编程语言可用取决于所选的 HMI 设备。

步骤

要组态函数列表,请按如下步骤进行操作:

1. 打开对象所在的编辑器。

2. 选择对象。

3. 在巡视窗口中单击“属性 > 事件”(Properties> Events)。选择要对其组态函数列表的事件。

4. 在巡视窗口的下拉列表中标记“<添加函数>”() 条目。

5. 从选择列表中选择所需的系统函数或用户自定义函数。也可输入该系统函数或用户自定义函数的名称。

c7beaf94-47ae-11ed-a3b6-dac502259ad0.png

系统函数或自定义函数已输入到函数列表中。

6. 如果该系统函数或自定义函数具有参数,则为参数选择合适的值。

c7d09970-47ae-11ed-a3b6-dac502259ad0.png7. 如果要向函数列表中添加其它系统函数或用户自定义函数,请重复步骤 4) 到步骤 6)。

函数列表组态已经完成。除了组态的事件,函数列表的状态也显示在巡视窗口中。在运行系统中发生组态的事件时,函数列表从上至下执行一遍。

更改系统函数或自定义函数的顺序

1. 在函数列表中选择所需的系统函数或自定义函数。

2. 然后在巡视窗口中单击相应的方向箭头,直到该系统函数或自定义函数移动到所需位置。

c7ff4342-47ae-11ed-a3b6-dac502259ad0.png

“脚本”编辑器 (Panels, RT Advanced, RT Professional)

“脚本”编辑器具有诸如自动完成和语法突出显示等功能,有助于用户自定义函数的创建。

可以使用“指令”(Instructions) 任务卡插入频繁使用的指令的代码模板。

c8727330-47ae-11ed-a3b6-dac502259ad0.png

访问 HMI 变量 (Panels, RT Advanced, RT Professional)

通过 VBS 或 C,可访问项目中已创建的 HMI 变量。可在运行系统中通过用户自定义函数更改或读取 HMI 变量的值。

还可创建局部变量,作为计数器或缓冲器。每个局部变量都必须经过初始化,以防止由于错误写入局部变量而导致的错误。

HMI 变量

● WinCC Runtime Advanced 和面板

在变量映像中创建的变量值将保存在用户自定义函数中。然后,会将变量值更新为设置周期时间。用户自定义函数首先会访问上一个周期中读取的变量值。

如果变量名称与项目中 VBS 的命名约定匹配,则可按如下方式在用户自定义函数中使用该变量。

'VBS_Example_03

If BeltDriveOilTemperature > 100 Then [instruction]

如果项目中的变量名称与 VBS 命名约定不匹配,则必须通过“SmartTags”列表引用该变量。在以下示例中,变量名称包含“&”字符,其不符合 VBS 的命名约定。

'VBS_Example_04

SmartTags("Test&Trial")= 2005

● WinCC Runtime Professional

访问功能与在 HMI 设备中使用 WinCC Runtime Advanced 和面板进行访问相同。还可以以异步方式访问变量值。PLC 中的变量值以异步访问方式直接访问。在局部脚本或用户自定义 C 函数中按如下方式访问变量值:

– SmartTags 列表 (VBS)

– 带有 Read-/Write 方法的 Tags 列表 (VBS)

– GetTag 函数 (C)

– SetTag 函数 (C)

当调用方法或用户自定义函数时,立即读取 PLC 中的变量值。变量值并不定期更新,这与从变量映像中读取的情况不同。

c8c4540c-47ae-11ed-a3b6-dac502259ad0.png

c8e08f1e-47ae-11ed-a3b6-dac502259ad0.png

运行系统脚本

PLC 数组元素的索引可以任何数字开头。但在 WinCC 中,始终从 0 开始索引。例如,PLC 变量“Array [1..3] of Int”映射到 WinCC 中的“Array [0..2] of Int”。在脚本中访问数组时,须注意正确的索引顺序。

访问带有动态名称的 HMI 变量(WinCC Runtime Advanced 和面板)

用户自定义 VB 函数通过变量名称访问变量值。可以以这样一种方式来指定变量名称,即变量名称在用户自定义函数运行时构成。

如果只是在画面中调用用户自定义 VB 函数且其中的 HMI 变量还用在其它位置,例如,在 I/O 字段中使用,则出于性能方面的原因,应将该 HMI 变量组态为“操作时循环”采集模式。

如果访问用户自定义 VB 函数且当前显示的画面中未使用 HMI 变量,则将 HMI 变量组态为“循环连续”采集模式。这样可确保该变量的当前值始终可用。

示例:更换在 HMI 设备上当前显示的操作模式。

在本示例中,使用系统函数“SetDeviceMode”在 HMI 设备上切换“在线”和“离线”模式。也可在 HMI 设备上显示当前设置的操作模式。

已经创建一个画面。

在该示例中需要一个 HMI 变量和一个文本列表以及下列设置:

HMI 变量:

OperatingMode 无 Bool

文本列表:

ShowOperatingMode Bit (0/1) 1: 操作模式:“在线”0: 操作模式:“离线”

步骤

1.创建上面所示的“OperatingMode”HMI 变量。

c904e238-47ae-11ed-a3b6-dac502259ad0.png

2.创建上面所示的“ShowOperatingMode”文本列表。

c9364508-47ae-11ed-a3b6-dac502259ad0.png

3. 打开画面并插入一个可将操作模式改为“在线”的按钮。

4. 在巡视窗口中单击“属性 > 事件”(Properties> Events)。选择“按下”事件。

5. 对“按下”事件组态系统函数“SetDeviceMode”。该系统函数可在“设置”下的选择列表中找到。

6. 为“模式”参数选择“在线”条目。

7. 对“按下”事件组态系统函数“SetBit”。该系统函数可在“位处理”下的选择列表中找到。

8. 从选择列表中为参数“变量”选择 HMI 变量“操作模式”。

c967bce6-47ae-11ed-a3b6-dac502259ad0.png

9. 在过程画面中添加一个可将操作模式改为“离线”的按钮。

10.重复步骤 4 至 7。为“模式”参数选择“离线”条目。组态系统函数“ResetBit”代替系统函数“SetBit”。

c9ab8a3e-47ae-11ed-a3b6-dac502259ad0.png

中间结果

在运行系统中可使用这两个按钮切换 HMI 设备的操作模式。

想要在 HMI 设备的输出域中显示当前设置的操作模式。

步骤

1. 在过程映像中创建“符号 I/O 域”。在巡视窗口中单击“属性 > 属性”(Properties>

Properties)。

2. 在“常规”(General) 组中进行如下设置:

– 选择“输出”作为“模式”。

– 选择文本列表“显示操作模式”作为“文本列表”。

– 选择“操作模式”作为“变量”。

c9cfb9f4-47ae-11ed-a3b6-dac502259ad0.png

结果

使用按钮更改操作模式时,始终显示 HMI 设备上当前设置的操作模式。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92388
  • 触发器
    +关注

    关注

    14

    文章

    1677

    浏览量

    60402
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14635

原文标题:WINCC 使用系统函数和运行系统脚本

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenHarmony自定义组件

    **可通过@Builder装饰器进行描述,该装饰器可以修饰一个函数,此函数可以在build函数之外声明,并在build函数中或其他@Builder修饰的
    的头像 发表于 12-08 12:26 1438次阅读

    自定义控件无法创建局部变量怎么解决

    自定义的布尔控件无法创建局部变量,请问是怎么回事?创建局部时鼠标上不是附带的局部变量,框框不是绿色而是黑色的,并且框框内部是黑色的问号而不是布尔控件的标题。
    发表于 02-27 10:12

    新手请教一个关于MATLAB自定义函数的问题?

    我请教大家一个MATLAB的问题,就是关于自定义函数的。假如我的一个程序里面有我自定义的一个函数,以前的做法就是把这个自定义
    发表于 04-11 08:53

    OpenHarmony自定义构建函数:@Builder装饰器

    () { ... } ● 允许在自定义组件内定义一个多个自定义构建函数,该函数被认为是该组件的
    发表于 09-26 16:36

    matlab自定义函数调用的方法

    matlab自定义函数调用的方法 命令文件/函数文件+ 函数文件 - 多
    发表于 11-29 13:14 88次下载

    自定义函数测试学习工程

    自定义函数测试学习工程
    发表于 07-01 16:37 5次下载

    1602自定义字符

    1602液晶能够显示自定义字符,能够根据读者的具体情况显示自定义字符。
    发表于 01-20 15:43 1次下载

    基于自定义架构的局部处理机

    针对企业生产过程中存在大量原始数据需要实时处理的问题,设计并实现了一个基于自定义架构的局部处理机。在设计之初以Hadoop的并行架构为参考,对MapReduce的工作原理和缓存方式进行了分析
    发表于 01-10 16:18 0次下载
    基于<b class='flag-5'>自定义</b>架构的<b class='flag-5'>局部</b>处理机

    基于linux下自定义一个脚本来替代rm命令

    linux下的rm命令,功能太强,同时又没法撤消,为了避免误操作,可以自定义一个脚本来替代rm命令。
    的头像 发表于 02-01 18:08 3535次阅读
    基于linux下<b class='flag-5'>自定义</b>一个<b class='flag-5'>脚本</b>来替代rm命令

    erlang如何自定义_ERLANG环境搭建

    本文详细介绍了erlang 如何自定义 behaviour以及ERLANG环境搭建。要定义一个behaviour,首先你要创建一个模块,它必须导出 behaviour_info/1 这个函数(注意必须带u),
    发表于 02-23 08:42 1382次阅读
    erlang如何<b class='flag-5'>自定义</b>_ERLANG环境搭建

    WINCC使用系统函数和运行系统脚本

    系统函数是所有随 WinCC 一同提供的函数。系统函数可应用在函数列表、用户自定义函数
    的头像 发表于 03-10 15:59 3748次阅读
    WINCC使用系统<b class='flag-5'>函数</b>和运行系统<b class='flag-5'>脚本</b>

    自定义视图组件教程案例

    自定义组件 1.自定义组件-particles(粒子效果) 2.自定义组件- pulse(脉冲button效果) 3.自定义组件-progress(progress效果) 4.
    发表于 04-08 10:48 14次下载

    使用C++ sort函数对vector进行自定义排序

    今天在学一些C++ STL容器,看到sort函数允许自定义排序规则,小小地实操了一下。
    的头像 发表于 07-22 10:12 1049次阅读

    labview超快自定义控件制作和普通自定义控件制作

    labview超快自定义控件制作和普通自定义控件制作
    发表于 08-21 10:32 5次下载

    博途用户自定义库的使用

    博途官方提供了很多库,比如:基本函数库、通信库、安全库、驱动库等等,用户可以使用库中的函数/函数块来完成具体的控制任务。除了官方的库,我们也可以创建自己的库(用户自定义库)。比如,把项
    的头像 发表于 12-25 10:08 287次阅读
    博途用户<b class='flag-5'>自定义</b>库的使用