WinCC TP1200使用面板VB脚本总结
HMI 变量
WinCC Runtime Advanced 和面板 在变量映像中创建的变量值将保存在用户自定义函数中。然后,会将变量值更新为设置周期时间。用户自定义函数首先会访问上一个周期中读取的变量值。 如果变量名称与项目中 VBS 的命名约定匹配,则可按如下方式在用户自定义函数中使用该变量。 'VBS_Example_03 If BeltDriveOilTemperature > 100 Then [instruction] 如果项目中的变量名称与 VBS 命名约定不匹配,则必须通过“SmartTags”列表引用该变量。在以下示例中,变量名称包含“&”字符,其不符合 VBS 的命名约定。 'VBS_Example_04 SmartTags("Test&Trial")= 2005WinCC Runtime Professional 访问功能与在 HMI 设备中使用 WinCC Runtime Advanced 和面板进行访问相同。还可以以异步方式访问变量值。PLC 中的变量值以异步访问方式直接访问。在局部脚本或用户自定义 C 函数中按如下方式访问变量值: SmartTags 列表 (VBS) 带有 Read-/Write 方法的 Tags 列表 (VBS) GetTag 函数 (C) SetTag 函数 (C) 当调用方法或用户自定义函数时,立即读取 PLC 中的变量值。变量值并不定期更新,这与从变量映像中读取的情况不同。同步:变量值直接来自 PLC 同步:变量值直接来自 PLC
异步:变量值来自变量映像
说明
运行系统脚本
PLC 数组元素的索引可以任何数字开头。但在 WinCC 中,始终从 0 开始索引。
例如,PLC 变量“Array [1..3] of Int”映射到 WinCC 中的“Array [0..2] of Int”。
在脚本中访问数组时,须注意正确的索引顺序。
局部变量
只能在用户自定义函数或局部脚本中使用局部变量。
局部变量可用于以下情况:
缓冲器计数器,例如 For 指令根据编程语言语法初始化每个变量。
示例:Dim objTagFillLevel
设定每个变量的初始值,以避免因出现空 HMI 变量而导致的错误。要使用来自外部的局部变量的值,请将其与内部或外部 HMI 变量链接起来。
访问带有动态名称的 HMI 变量(WinCC Runtime Advanced 和面板)
用户自定义 VB 函数通过变量名称访问变量值。可以以这样一种方式来指定变量名称,即变量名称在用户自定义函数运行时构成。
如果只是在画面中调用用户自定义 VB 函数且其中的 HMI 变量还用在其它位置,例如,在 I/O 域中使用,则出于性能方面的原因,应将该 HMI 变量组态为“操作时循环”采集模式。
如果访问用户自定义 VB 函数且当前显示的画面中未使用 HMI 变量,则将 HMI 变量组态为“循环连续”采集模式。这样可确保该变量的当前值始终可用。
自定义函数或局部脚本?
使用用户自定义的函数或者使用局部脚本完成编程任务,这取决于应用目的并最终取决于用户自定义函数或局部脚本的数量。
局部脚本可用于各种后台活动,例如日常打印或记录、变量的监视或者计算的执行。
通过自定义函数,只需创建一次就可以在项目中重复使用代码。 需要时,只需调用相应的自定义函数即可,而无需多次输入代码。 这样代码将更加清晰并易于维护。
简介
在用户自定义 VB 函数中,可以使用 VBS 对象模型中带有相应属性和方法的各个对象。
可以在运行系统中读取和更改对象属性。
引用对象
在自定义 VB 函数中,通过相应的列表来引用对象。 要识别对象,使用列表中的名称或位置编号
对于访问频率较高的对象属性,则可创建一个对象引用。 可以通过对象引用访问对象属性,也可以不通过对象引用进行访问。
通过以下指令,“MainScreen”中将引用第一个对象:
'VBS_Example_01
Dim objObject
'Change to Screen "MainScreen"
HMIRuntime.BaseScreenName = "MainScreen"
Set objObject = HMIRuntime.Screens(1).ScreenItems(1)
clipboard
通过以下指令,引用了对象的名称,并且对象属性发生了变化。 必须在画面中创建了具有此名称的对象。
'VBS_Example_02
Dim objCircle
HMIRuntime.BaseScreenName = "MainScreen"
Set objCircle = HMIRuntime.Screens(1).ScreenItems("Circle_01")
objCircle.BackColor = vbGreen
调用自定义函数
简介
可在用户自定义函数中插入采用相同编程语言的其它用户自定义函数,例如在用户自定义 C 函数中只能插入用户自定义 C 函数。
具体的语法取决于所用的编程语言。支持哪种编程语言取决于所选的 HMI 设备。
在自定义函数中调用自定义函数的可选方式有:
使用 <Ctrl + 空格键> 或使用直接输入使用“函数列表”(Function list) 选项板使用 <Ctrl + 空格键> 或使用
使用 <Ctrl + 空格键> 或
打开选择列表并选择所需的用户自定义函数。
直接输入
直接将自定义函数输入到代码中。对象(例如画面、连接和日志)的引用在传递时需要以单引号括起来。
调用不带返回值的自定义函数 (VBS)
Average 4,10
clipboard
调用带返回值的自定义函数 (VBS)
Dim ValueA
ValueA = Average (4,10)
clipboard
如果不希望计算返回值,则采用针对不带返回值的自定义函数的方式进行调用。
调用不带返回值的自定义函数(C 语言)
Average(4,10);
clipboard
调用带返回值的自定义函数(C 语言)
SetTagDouble("AverageValue",Average (4, 10));
clipboard
如果不希望计算返回值,则采用针对不带返回值的自定义函数的方式进行调用。
使用“函数列表”(Function list) 选项板
从“函数列表”(Function list) 选项板的下拉列表中选择所需的自定义函数。
按照组态函数列表的方式进行操作。有关详细信息,请参见“组态函数列表”。
要将该列表转换为代码,请单击“转换”(Transfer) 按钮。该列表将自动转换为正确的语法。
对给定的“Bool”型变量的值取反。
如果变量具有值 1(真),它将被设置为 0(假)。如果变量具有值 0(假),它将被设置为 1(真)。'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Get current value
bValue=myTag.Value
'Save current value
bSaved=bValue
'Invert Bit
InvertBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
将“Bool”型变量的值设置为 0(假)。
'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Set value
bValue=1
myTag.Value=bValue
'Save current value
bSaved=bValue
'Reset Bit
ResetBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
将“Bool”型变量的值设置为 1(真)。
'Programming language: VB
Dim myTag
Dim myOutputField
Dim bValue, bSaved, strResult
Set myTag = SmartTags("bStatus")
Set myOutputField=HMIRuntime.Screens("MyScreen").ScreenItems("objTextField")
'Set value
bValue=0
myTag.Value=bValue
'Save current value
bSaved=bValue
'Set Bit
SetBit myTag
bValue=myTag.Value
'Output result old and new value:
strResult="Old Value: "&bSaved &Chr(13)&"New Value: "&bValue
myOutputField.Text=strResult
还可以使用screen对象进行以下操作:
读取画面的宽度和高度(属性 "Height" 和 "Width")。改变背景色(属性"BackColor")。使用对象名作为索引。
在下列实例中,背景色由黑色变为绿色:
'VBS_Example_BackColor
HMIRuntime.Screens("Rootscreen").BackColor = vbGreen
最后具体查看该表进行操作
倍福PLC学习:编写函数块及简单调试
今天这篇文章我们来编写一个简单的电机控制函数块,并将其下载到倍福CX5020控制器进行测试,以熟悉TwinCAT3环境下基本的编程步骤。
打开TwinCAT3(TC3),按照上一篇文章《倍福PLC学习:扫描EtherCAT I/O子站并测试模块》介绍的内容新建工程项目并扫描EtherCAT子站,项目名称为“motorControl”。
在左侧项目树的“PLC”节点下右键单击,选择“Add new item(添加新内容)”,添加新的PLC项目,命名为“CPU1”,如下图所示:
添加完成后,“CPU1 Project”中会有POUs、GVLs、DUTs等文件夹。其中,POU是程序组织单元,GVL是全局变量列表,UDT是用户自定义变量。我们计划编写一个电机控制的函数块,因此在“POUs”文件夹右键单击,在弹出的对话框中选择“添加(Add)”→“POUs”,如下图所示:
在弹出的“添加POU”对话框中,选择功能块(Function Block),命名为motorControl,编程语言选择ST语言,如下图所示:
在函数块motorControl中声明变量,其中:
VAR_INPUT是输入变量,包含电机启动 、停止信号;VAR_OUTPUT是输出变量,包含输出信号(线圈);VAR_STAT是静态变量,包含沿信号检测变量;如下图所示(注意变量不区分大小写):
编写代码如下图所示:
为了分配参数,我们新建全局变量列表:GVL1,并添加变量如下图所示:
接下来要在主函数(MAIN)中调用电机控制函数块。首先在变量列表中声明motorControl的实例,命名为“motorControl1”,编写控制代码如下图所示:
单击工具栏“Build”→“Build CPU1”编译PLC程序。
单击工具栏“PLC”→“Download”下载PLC程序。
单击工具栏“PLC”→“Login”登录到在线状态,或者工具栏的快捷按钮,如下图所示:
如果PLC处于未运行状态,单击“Start(启动)”使其运行。本例程为了给出电机启动信号,我们将全局变量“startBtn1”的“Prepared Value”设置为“TRUE”,并单击工具栏“Write Values”按钮将该值写入到PLC中,如下图所示:
此时可以看到主程序MAIN中电机输出信号为TRUE,如下图所示:
如果想让函数输出对应到实际的输出模块,在“CPU 1 instance”→“PLCTask Outputs”→“GVL1.coilKM”,将其对应到“Linked to”指定的输出模块即可。
好了,关于倍福PLC编写函数块及简单调试就先介绍到这里。
相关问答
西门子plc模拟量编程实例?
以下是一个使用西门子PLC的模拟量编程示例:假设有一个温度传感器,将温度值转换为4-20mA模拟量信号,然后将信号输入到PLC的模拟量输入模块中。我们需要将输入的...
plc中函数和函数块的区别?
函数块是计算机科学里面的概念。函数和函数体的区别为传递参数不同、返回值不同、调用不同。在CODESYS中,FB和FC是根据输出来区分的,FB有多个输出,而FC只有一...
西门子plc运算指令?
西门子PLC的运算指令包括算术运算指令,逻辑运算指令,比较运算指令,移位指令和其他特殊函数指令。这些指令用于在PLC程序中对数据进行操作,满足自动化控制系统...
急求三菱fx3g的plc没有计算三角函数的指令,如何解决?
急求三菱fx3g的plc没有计算三角函数的指令,如何解决三菱fx3g系列的plc是不支持三角函数指令的如正弦(SIN)、余弦(COS)、正切(TAN)以及反三角函数指令,这需要3U...
库卡机器人怎么写浮点数给plc?
库卡机器人(KUKARobot)和PLC(可编程逻辑控制器)通常用于自动化系统。确保机器人和PLC之间的数据传输正确是至关重要的。浮点数通常是指带小数点的数字,如3...
西门子1200plc编程函数块能多次调用吗?
没用1200,不过正常来看对FB和FC的调用都是可以多次的,这些在300系列中都是允许的。没用1200,不过正常来看对FB和FC的调用都是可以多次的,这些在300系列中都是...
流量计在plc用怎么编程?
例如,使用一个0-20mA的模拟量信号输入,在S7-200CPU内部,0-20mA对应于数值范围0-32000;对于4-20mA的信号,对应的内部数值为6400-32000也就是说如;PIW256读...
plc函数的功能是什么?
1、逻辑控制2、定时控制3、计数控制4、步进(顺序)控制5、PID控制6、数据控制:plc具有数据处理能力。7、通信和联网8、其它...1、逻辑控制2、定时控...
1200plc的编程方法有哪几个?
这个问题,不好回答。我只能说一下思路。控制都容易,温度传感器变送出4---20mA信号,给PLC模拟量模块,然后模拟量输出模块输出4---20mA信号给你要控制的设备...
三菱PLC怎么完成小数加减运算-懂得
首先需要明确,三菱PLC默认情况下只能进行整数运算,如果需要进行小数运算,需要购买带有模拟量输入输出模块的PLC。假设使用了模拟量输入输出模块,以...