1、WinCC中的脚本
从作用域来分:局部脚本、全局脚本。
局部脚本,也叫对象脚本,针对某个画面对象的属性和事件所定制的脚本。
全局脚本,也叫背景脚本,可以不依赖画面对象,独立运行。
从编程语言来分:C、VBS。
WinCC是通过“脚本队列”来实现的。就像办事窗口排队一样。
为了优化整体性能,WinCC开设了多个窗口来执行脚本。根据脚本出现的位置及脚本的类型,一共有7个窗口。
其中全局动作有3个窗口,分别是VBS全局动作窗口,C脚本周期触发全局动作窗口,C脚本变量触发全局动作窗口。
画面运行系统中有4个窗口,分别是VBS处理属性动态化的窗口,VBS处理事件的窗口,C脚本处理属性动态化的窗口,C脚本处理事件的窗口。
VBS
项目模块只能在当前的项目中重新获取。由于过程存储在项目目录中,所以在复制项目时会自动复制这些过程。项目模块存储在WinCC 文件系统的下列路径:<项目路径>\ScriptLib\<Moduname>.bmo。由于项目模块存储在项目目录中,所以在复制WinCC项目时会复制这些模块。
标准模块可通过所有与项目链接的计算机调入。在复制项目到另一个计算机上时,必须手动将标准过程复制到目标计算机上的相应目录中。标准模块存储在WinCC 文件系统的下列路径:<WinCC-安装路径>\ApLib\ScriptLibStd\<Moduiname>.bmo
动作:可以独立运行的过程,拥有触发器可以自主运行。存储在WinCC文件系统的下列路径:<项目路径>\ScriptAct\<Moduiname>.bmo
代码模板:常用指令的代码模板,使用时双击或拖拽引用
2、WinCC中的VBS
WinCC中的vbs脚本与系统自带的VBS脚本区别:
1.Wincc中的VBS增加了wincc中特有的对象。如:wincc画面对象、变量对象等。(HMIRuntime、ScreenItems)
2.去除了在wincc中不适用的函数。如:sleep函数。
特别注意,WinCC的变量与vbs变量操作方式的区别
Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)
Dim test
'画面中获取对象数目
Set test=ScreenItems
Msgbox test.Count
'获取按钮1对象父级(所在画面)的名称
Set test=ScreenItems("按钮1")
Msgbox test.Parent.ObjectName
'修改按钮1对象字体为红色
test.ForeColor =vbRed
'修改按钮1对象背景色为蓝色([V6.2] Windows 样式=否)
test.BackColor=vbBlue
'获取服务器的名称
Dim ServerName
Set ServerName = HMIRuntime.Tags("@ServerName")
Msgbox ServerName.Read
'退出运行1
Dim stt
Set stt=HMIRuntime
stt.Stop
'退出运行2
hmiruntime.Stop
End Sub
3、使用APDiag的“输出窗口”显示脚本信息
Wincc中在调试脚本时,在画面中使用GSC诊断窗口可以输出脚本中的打印信息,来跟踪脚本的执行。当脚本运行错误时还会显示错误信息。
使用APDiag的“输出窗口”同样可用于脚本调试。(应用程序Apdiag.exe 位于C:\Program Files (x86)\Siemens\WinCC\uTools目录下。)
Sub OnOpen()
'添加全局变量
Dim PRJItem
Dim PRJDataSet
Set PRJDataSet=HMIRuntime.DataSet
'检查ButtonPressedCounter是否已经存在
For Each PRJItem In PRJDataSet
If PRJItem.name = "ButtonPressedCounter" Then
Exit Sub
End If
Next
HMIRuntime.DataSet.Add "ButtonPressedCounter",0
End Sub
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
'画面按钮事件
'1、启动画面打开事件添加智能对象,创建全局变量。
'HMIRuntime.DataSet.Add "ButtonPressedCounter",0
'2、在画面按钮事件中读出值+1
HMIRuntime.DataSet("ButtonPressedCounter").Value=HMIRuntime.DataSet("ButtonPressedCounter").Value+1
'3、打印显示,输出到诊断窗口
Msgbox HMIRuntime.DataSet("ButtonPressedCounter").Value
HMIRuntime.Trace "DataSet运算结果:"& HMIRuntime.DataSet("ButtonPressedCounter").Value & vbCrlf
'4、DataSet是真正意义上的全局变量
End Sub
<配合HMIRuntime.Trace语句>
而且相比画面中的GSC诊断窗口,APDiag的“输出窗口”有以下优点:
-
不用组态,不用在画面添加暂时的GSC诊断窗口
-
由于全局脚本运行系统先于图形运行系统激活,所以在图形运行系统激活前,显然画面中的GSC诊断窗口无法输出脚本中的信息。而使用APDiag的“输出窗口”,可以在激活运行系统之前打开它,在激活过程中显示错误信息。
-
APDiag的“输出窗口”独立于画面,可以用于任何画面。
4、WinCC变量声明的几个地方
- 项目模块(可以看成是子程序,必须被调用)
- 标准模块(可以看成是子程序,必须被调用)
- 全局动作事件
- 画面的打开/关闭事件
- 画面中的元素属性/事件
- 全局DataSet
'项目模块"ModuleA.bmo"
'声明变量
'规则:调用此模块就可以使用此变量
Dim ButtonPressedCounter
Sub PRJSubA
'1、新建项目模块"ModuleA.bmo"
'2、新建/修改过程名:"PRJSubA"
'3、在画面事件中调用模块
'4、在画面中直接使用变量"ButtonPressedCounter+1"
End Sub