3.3 组态动态的几种方法
通常需要采用一些动态效果模拟现实的生产过程。WinCC画面中的动态效果可以由多种方法来实现,主要包括:组态对话框、动态向导、变量连接、动态对话框、直接连接、C动作、VBS动作等。
3.3.1 组态对话框
第2章画面组态拖动输入/输出域到画面时,会自动打开组态对话框,如图3-29所示。可以通过是否勾选图3-30所示的“设置”对话框的“选项”选项卡中的“使用组态对话框”复选框来设置当插入具有组态对话框的对象时,“组态对话框”窗口是否自动打开。如果复选框取消,则对象以标准设置插入。无论复选框是否选中,组态对话框都可以通过该对象右键快捷菜单“组态对话框…”打开。
具有组态对话框的对象包括“智能对象”中的控件、I/O域、条形图、图形对象、状态显示、文本列表和“Windows对象”中的按钮、滚动条对象。
下面以几个例子说明组态对话框的使用。
图3-29 输入/输出域的组态对话框
图3-30 “设置”对话框的“选项”选项卡
1.组态滚动条
在画面上组态一个滚动条,从“标准”对话框中的“窗口对象”中拖动“滚动条”对象到画面编辑区时,自动出现如图3-31所示的组态对话框,输入期望连接的变量,更新周期,滚动条的限制值及方向等。
2.组态文本列表
使用文本列表,当变量Tag1=0时,显示文本“系统未工作”,当Tag1=1到25时,显示“加热器未工作”,当Tag1>25时,显示“加热器开始工作”。
新建变量Tag1,在画面编辑区插入文本列表,按照图3-32所示组态文本列表。
图3-31 滚动条组态对话框
图3-32 文本列表组态
在属性编辑栏中选择“输出/输入”项中的分配,如图3-33所示,双击打开图3-34所示的“文本列表分配”对话框。
按照图3-34组态“文本列表分配”对话框。
范围类型分为单一值、从数值、到数值、取值范围。单一值相当于“=”,从数值相当于“>”,到数值相当于“<”,取值范围相当于“<x<”。在相应的值域内输入期望的数值,在文本中输入期望的文本内容,单击“附件”按钮则将当前设置填入到显示框中,若需要修改显示框中的值域或文本,则需要在“值范围属性”中修改,单击“更改”按钮进行更新修改。选择显示框中的项,单击“删除”按钮,可以删除相应的项。
图3-33 文本列表属性
图3-34 “文本列表分配”对话框
激活项目运行测试。
3.3.2 动态向导
在画面编辑区新建一个“退出WinCC Runtime”按钮,如图3-35所示。
图3-35 新建按钮
选定新建的按钮后,在动态向导编辑界面找到“退出WinCC Runtime”功能按键,双击“退出WinCC Runtime”,出现图3-36所示的欢迎使用向导对话框,可以勾选“不再显示此页”,再次使用动态向导时,将不再显示此对话框。单击图3-36中“下一步”按钮,进入选择触发器对话框,如图3-37所示,选择鼠标左键作为触发器。
单击图3-37中“下一步”按钮,单击完成。运行项目测试一下。
下面再给出一个使用动态向导完成圆对象的填充的例子。
新建变量Tag5,在画面中绘制一个圆,双击动态向导中的“Standard Dynamics→Fill object”,打开动态向导对话框,选择变量触发,在图3-38所示的对话框中选择变量“Tag5”,指定圆对象的填充效果对应的Tag5的取值范围,此处表示当Tag5=0时,圆对象的填充为0%,Tag5=100时,圆对象的填充为100%。
图3-36 欢迎使用动态向导对话框
图3-37 选择触发器
图3-38 设置参数
激活项目,观察结果如图3-39所示。
图3-39 圆形填充效果
3.3.3 动态对话框
动态对话框允许定义某个对象属性的行为根据所给表达式的值变化。表达式可以是一个变量这样简单的表达式,也可以是复杂的算术操作运算、C功能返回值或两者的结合等。实际上,动态对话框是一个简化的脚本编程,根据用户输入的信息将其转化为C脚本程序。动态对话框只能用于组态对象的属性,不能用于对象的事件。动态对话框需要一个触发器才能执行。
下面以实现根据变量Tag1来填充一个矩形对象的填充量为例演示动态对话框的使用。拖动一个矩形对象到画面编辑区,在属性编辑区选择“填充”,如图3-40所示。右键单击“填充量”后面的图标,选择“动态对话框…”,出现图3-41所示的动态对话框界面。
图3-40 矩形对象属性
图3-41 动态对话框界面
单击图3-41中的图标,打开触发器选择对话框,如图3-42a所示。动态对话框的触发器可以以时间为基,也可以以变量为基。本例选择触发事件为“变量”,变量名“Tag1”,标准周期“有变化时”,如图3-42b所示。单击“确定”按钮返回。
图3-42 选择触发器
选择触发器为变量时,每次变量值发生变化时触发;选择标准周期时,则按照所选的时间周期触发;选择画面周期或窗口周期则与画面或当前窗口的刷新周期一致。
单击图3-41中的图标,出现图3-43所示的表达式选择对话框。表达式可以是一个变量,单击“变量”打开变量选择对话框选择相应的变量;或者单击“函数”打开函数浏览器,如图3-44所示,选择适当的函数;或者单击“操作员”打开操作符对话框选择合适的“+,-,*,/”操作符完成表达式。本例单击“变量”选择Tag1变量。
图3-43 表达式选择对话框
单击图3-41所示的“检查”按钮可以检查表达式输入是否有误。
选择图3-41中的“数据类型”为“直接”,即将变量的值与矩形对象填充量百分比关联起来。单击“应用”按钮生成组态好的动态对话框,可以发现图3-40中的图标变为图标,表示动态效果连接好。
数据类型为“直接”将表达式的值直接传给属性值,需要注意的是确保表达式的数据类型和属性的相匹配。
“数据类型”选择为“模拟量”,可以单击“添加…”按钮添加数值范围,示意图如图3-45所示。
“数据类型”为“位”,允许选择某变量中某一位,如图3-46所示。注意:“位”数据类型仅适用于1个字节/字/双字的变量。
“数据类型”为“布尔型”,如图3-47所示。布尔型是针对二进制而言的,如果变量或表达式数据类型不是二进制值,该值将转换成二进制值,返回一个最小的有意义的数字布尔值。
双击图3-40中的“动态填充”属性后的“否”,将其变为“是”,这样才能使能动态填充。
运行画面即可观察到动态效果。
【例3-1】 如果根据布尔型变量Tag2的0/1状态使圆形对象的背景色分别为红色和蓝色,同时静态文本分别显示关闭和打开。
图3-44 函数浏览器
图3-45 数据类型为模拟量
图3-46 数据类型为位
图3-47 数据类型为布尔型
新建布尔型变量Tag2;在画面编辑器中拖动圆对象到画面编辑区,在“对象属性”对话框中选择“颜色>背景颜色”,右键单击图标,选择“动态对话框”,如图3-48所示。
图3-48 圆对象属性对话框
打开动态对话框,选择触发器的触发事件为“变量”,变量名称“Tag2”,标准周期为“有变化时”,表达式/公式为变量“Tag2”,数据类型选择为“布尔型”,“真”“假”有效范围对应的背景颜色分别设置为红色和蓝色,如图3-49所示。
同样,在画面编辑区插入静态文本,在对象属性编辑区,选择“字体→文本”,右键单击图标,选择“动态对话框”,设置触发器的触发事件为“变量”,变量名称“Tag2”,标准周期为“有变化时”,表达式/公式为变量“Tag2”,数据类型选择为“布尔型”,“真”“假”有效范围对应的文本分别设置为“打开”和“关闭”,如图3-50所示。
图3-49 背景颜色组态对话框
图3-50 文本组态对话框
单击应用完成组态,激活项目即可观察到动态效果。
图3-50中,勾选了“不要评估变量状态”。如果表达式中含有外部变量,可以通过“变量状态”和“质量代码”测试该变量与PLC的连接以及查看连接的状态等。
【例3-2】 组态I/O域,由华氏温度输入摄氏温度输出。
在画面编辑区插入两个静态文本“华氏温度”和“摄氏温度”以及两个I/O域,如图3-51所示。设置左边的I/O域类型为输入,右边的I/O域类型为输出。编辑右边的I/O域属性,选择“输出/输入>输出值”,右键单击图标,选择“动态对话框”并打开,触发器选择“标准周期2秒”(此处只是为了演示触发器的使用),表达式/公式为(‘Tag3’-32)*5/9,Tag3为图3-40左边I/O域连接的变量,数据类型选择“直接”,如图3-52所示。
图3-51 两个静态文本和两个I/O域
图3-52 I/O组态对话框
单击应用完成组态,激活项目即可观察到动态效果。
【例3-3】 当变量Tag6的值在0~100之间时,圆对象的背景为灰色,101~200之间为蓝色,高于200为红色。
新建变量Tag6,在画面编辑区插入一个圆对象和一个I/O域,I/O域与变量Tag6连接,如图3-53所示。
选中圆对象,选择“属性→颜色→背景颜色”,右键单击图标,选择动态对话框,打开动态对话框。按照图3-54所示组态动态对话框,选择触发器为变量Tag6,表达式/公式为Tag6,数据类型为模拟量,单击“添加…”按钮,添加数值范围1、数值范围2,设置对应的背景颜色。
图3-53 插入圆对象
图3-54 动态对话框
单击应用完成组态。激活项目运行测试。
3.3.4 直接连接
直接连接允许用户在一个对象事件基础上,组态从源到目标直接动态传递任何类型的数据。直接连接可用于组态画面切换键,读或写数据到过程变量中,或将数字值传给图形显示。直接连接中的数据源和数据目标可以是常数、变量的当前值,也可以是当前画面中任何对象的任何属性值。要想使用直接连接组态某个对象,必须找到该对象的属性页的事件标号。直接连接只能在事件中使用,不能用于属性。
直接连接对话框如图3-55所示。源中的“常数”可以是数值或字符串格式,单击图标可以打开图形浏览器,使用户能够为常数快速选择一个 PDL 画面,用于简单的切换画面键的组态。源中的“属性”可以从任意对象属性中取源数据,这些对象属性在下框对象/属性浏览器中给出,选中对象的属性将在属性框中显示。源中的“变量”则从变量中取源数据,单击图标可以打开变量浏览器。
图3-55 直接连接对话框
目标中的“当前窗口”:在当前窗口所选的目标数据为运行时显示的画面;目标中的“画面中的对象”定义数据目标将为在下框浏览器中定义的对象属性,选中的对象属性表将在属性框中出现;目标中的“变量”定义作为源变量的数据目标,单击图标可以打开变量浏览器进行选择,可以是直接的或间接的。
下面以几个例子说明直接连接的使用。
【例3-4】 组态一个瞬时按钮,即按钮按下时变量Tag4的值为1,释放时为0。
定义布尔型变量Tag4,在画面编辑区放置一个按钮,命名为“启动”,在对象属性编辑区,选择“事件”选项卡,单击“鼠标”项,如图3-56所示。
图3-56 “按钮”的鼠标事件
右键单击图3-56的“按左键”右边的图标,选择“直接连接…”打开直接连接对话框,如图3-57所示,源为“常数”1,目标为“变量”二进制变量Tag4。单击“确定”按钮完成组态。同理图3-56的“释放左键”通过直接连接将源常数0传给目标为“变量”二进制变量Tag4。
激活后的效果图如图3-58所示。
【例3-5】 将滚动条移动改变后的值传给矩形的液位填充量属性,矩形液位填充量属性又传给静态文本。
图3-57 直接连接对话框
图3-58 激活效果图
在画面编辑区添加图3-59所示的三个对象:一个滚动条、一个矩形和一个静态文本。在对象属性编辑区,选择“事件>属性主题>其他>过程驱动器连接”,如图3-60所示。右键单击“更改”右边的图标,选择“直接连接…”,打开直接连接对话框,按照图3-61所示的“源”和“目标”项进行组态。
图3-59 添加三个对象
图3-60 滚动条对象属性
图3-61 直接连接对话框
同样,右键单击矩形对象属性对话框的“事件”选项卡中“属性主题>填充>填充量”中“更改”右边的图标,如图3-62所示,打开直接连接对话框,按照图3-63所示进行组态。
图3-62 矩形对象属性
这样,激活项目即可观察到动态效果,如图3-64所示。
3.3.5 变量
通过“变量”连接也可以实现对象的动态效果。下面以例子说明其应用。
用布尔型变量Tag5控制圆对象的闪烁,若Tag5=1,则圆背景闪烁,若Tag5=0,则不闪烁。
在画面编辑区绘制圆对象,在对象属性编辑栏选择“闪烁>激活闪烁背景”,右键单击“激活闪烁背景”右边的图标,选择“变量…”打开变量浏览器,选择布尔型变量Tag5,刷新周期改为“根据变化”,如图3-65所示。在图3-65中,还可以设置闪烁的颜色、闪烁的频率、闪烁线等。
图3-63 直接连接对话框
图3-64 演示效果
图3-65 圆对象闪烁属性
激活项目,可以看出,当Tag5=1时,圆按照设置的颜色进行闪烁,当Tag5=0时,不闪烁。
注意:当组态的属性与连接的变量的数据类型不一致时,将自动进行转换。如将整数数据类型的变量Tag1赋给图3-65的“激活闪烁背景”,则当Tag1=0时不闪烁,Tag1≠0时闪烁。
3.3.6 C动作
WinCC的C脚本语言基于ANSI C标准,并允许用最大的灵活性定义动态对象。C动作可用于对象的属性和事件。作用于对象属性的C动作是用时间或变量触发器驱动的,作用于对象事件的C动作是当其属性改变或其他事件来激活。
关于C脚本的详细内容将在第9章进行,此处仅仅给出使用C动作实现几个动态效果的例子。
右键单击图标或图标,选择“C动作…”,打开C脚本编辑器,如图3-66所示。
图3-66 C脚本编辑器
在对象属性对话框中右键单击相关的按钮,并在弹出菜单中选择命令“C动作...”用公式表述C函数。单击按钮,并指定触发器。从工具栏中选择C编译的语言。单击按钮。编译函数。该过程将由消息“编译动作...”在对话框的状态栏中表示。如果没有错误地完成编译,则消息“0出错,0警告”将显示在状态栏中。单击“确定”按钮,“编辑动作”对话框关闭。在“对象属性”对话框中通过图标表示使用C动作进行动态化。
函数浏览器中包括三种函数,其中项目函数是在全局脚本编辑器中生成的C函数,这些函数在本项目中是唯一的,可以从任何地方调用;标准函数用于WinCC编辑器,如报警,变量存档和用户档案库,这些函数对于系统是唯一的,但对于项目不是唯一的;内部函数是最常用的C函数库,包含标准的C库函数以及允许用户改变对象的属性值,读写外部变量和退出运行状态的函数。
大多数函数需要定义参数。参数赋值工具允许选择一个变量或一个对象属性值作为参数传递给函数。当从函数浏览器中选中一个参数,双击该函数将弹出参数赋值框,在此定义该函数所需的参数,注意每个参数赋的值必须与函数声明表定义的数据类型相同。
代码编写完成,需要用编译器或生成动作来编译这些代码。编译器将检查代码的语法错误和逻辑错误,产生相应的错误和警告消息。警告是编译器提醒代码可能有问题,也许会丢失数据,多数情况下是由于在两种不同的数据类型间传送数据造成的。有警告的代码可以成功编译,但要尽量完整测试代码以确保没有数据丢失的问题。错误表明代码中有语法或逻辑错误,通过消息区可以找到出错的那行程序代码。对于多个错误,要先修正最上面的,多数情况下其余大多数将自动消失。
代码区的文字将根据代码内容不同显示不同的颜色。与其他C编译器一样,WinCC编译器使用标准的颜色代码,方便开发人员理解和调试C脚本程序。绿色文本表示为文字注释,编译器将忽略。文字注释可用斜线“//”符号或用ANSI最常用的/*…*/表示。蓝色文本表示C语言的关键字。红色文本表示文本串,由双引号限定。黑色文本为正常的代码。建议开发者多使用注释。
下面给出几个C动作的实例。
【例3-6】 新建两个I/O域,如图3-67所示,左边的I/O域与变量Tag3连接,右边的I/O域其值为左边的值加100。
图3-67 两个I/O域
通过组态对话框将变量Tag3连接至左边的I/O域,选中右边的I/O域“属性→输出/输入”的“输出值”项,右键单击“输出值”项后的图标选择“C动作”,打开C脚本编辑器,编写C脚本如图3-68所示。
图3-68 C脚本
注意:GetTagWord为内部函数,在“内部函数→tag→get”目录下可以找到。调用时,双击函数GetTagWord,系统将打开图3-69所示的“分配参数”对话框。该对话框主要便于用户通过对话框选择相关函数的参数,单击“值”列出现的按钮,可以进行变量、图形对象和画面的选择,如图3-69所示,根据函数参数的类型选择相应的条目,此处选择“变量选择”条目,打开变量选择对话框,如图3-70所示,选择Tag3变量,单击“确定”按钮完成该函数参数的分配。
在C脚本编辑器中,单击工具栏图标打开“改变触发器”对话框,修改C脚本的触发为“变量Tag3,有变化时”。
图3-69 分配参数对话框
图3-70 变量选择对话框
运行项目,观察效果。
【例3-7】 单击一次按钮,变量Tag3的值加1。
新建一个按钮,在按钮的“鼠标动作”事件编写C脚本如图3-71所示。此处的C脚本无需设置触发器,因为“鼠标动作”事件就是一个触发器。
图3-71 C脚本
注意:此处用到了两个内部函数:GetTagFloat和SetTagFloat,其编辑方法与上述函数类似,具体含义请参考帮助。
运行项目,观察效果。
【例3-8】 编写瓶子的模拟运动。
在画面中组态图3-72所示静态对象,“瓶”对象可以从“库→SIEMENS HMI Symbol Library 1.4.1→容器”中找到。
图3-72 瓶对象
在“瓶”对象的属性对话框“几何→位置X”的灯泡图标单击右键选择“C动作”,打开C动作编辑器,输入下面代码:
编译保存,采用默认触发器,激活项目,即可观察动态效果。
【例3-9】 计算的值。
编写代码如下:
在上面的C脚本中,使用了一些Get和Set函数,它们的工作方式在不同条件存在着一定的差别,下面予以说明。
1.Set函数
SetTagxxx(xxx是数据类型)函数给数据管理器一个任务:写一次值。这样,该变量在整个执行时间(只要在当前画面)都是已知的并且可用于进一步的计算。该函数向数据管理器传递数值。主调函数不用等到实际写入数值。当画面被替换时,所有变量都从数据管理器注销。
SetTagxxx函数特点:调用速度快,主调函数不知道数值实际是在什么时候写入的(异步写入),函数不提供任何有关写作业状态的信息。如果变量也用于输出对象,变量将被周期地更新。
SetTagxxxState函数与SetTagxxx特性相同。SetTagxxxState 函数提供附加的有关写作业状态的信息。由于状态总是在内部提供,在性能上它与 SetTagxxx没有什么区别。
SetTagxxxWait函数给数据管理器一项写一次值作业。函数将值传递给PLC并开始等待,直到数值在返回调用函数前确实写入。此后数据管理器不再理会此变量。
SetTagxxxWait函数特点:与SetTagxxx相比,该调用花的时间更长。这个时间也取决于通道和PLC。主调函数等待数值实际被写入(同步写入),超时为10s。该函数不提供有关写作业状态的任何信息。当画面被替代时,所有变量都从数据管理器注销。
SetTagxxxStateWait函数与SetTagxxxWait有相同的特性。SetTagxxxStateWait函数提供有关写作业状态的附加信息。由于状态总是在内部提供,在表现上与 SetTagxxxWait没有什么不同。
SetTagMultiWait函数与SetTagxxxWait有同样的特性。然而,该函数可以在一次函数调用中能写入多个变量。
2.Get函数
(1)GetTagxxx函数与默认触发器一同工作的方式
假设一个画面对象调用GetTagxxx函数,主调函数每2s执行一次。在第一次调用过程中,使用半个周期值(在此处是1s)GetTagxxx 函数被引入数据管理器,从此PLC周期地从中取值。这可确保函数的每次进一步调用数值都是可用的。在整个执行时间(只要选择当前画面)变量在数据管理器中都是可知的,而且可用于进一步的计算。当画面被替代时,所有变量都从数据管理器注销。
当默认触发器设置为“变化”时,例如触发器切换为1s。默认的触发器由版本和通道而定。
此时GetTagxxx函数特点:对应与数据管理器(异步读取)中的值,调用有一个返回值。主调函数周期地执行。该函数不提供任何有关读取作业状态的信息。
GetTagxxxState函数与GetTagxxx有相同的特性。GetTagxxxState函数提供有关读取作业状态的附加信息。由于状态总是在内部提供,所以它与GetTagxxx的表现没什么不同。
(2)GetTagxxx函数与变量触发器一同工作的方式
GetTagxxx函数使用画面运行模式调用画面,在画面选定期间所有包含在变量触发器中的变量都被引入,从此由PLC按周期值(此处为2s)周期地获取。在该画面中GetTagxxx函数由一个画面对象调用。
例如,当数据管理器确定函数值发生变化时,主调函数每2s执行一次。在整个执行时间(只要选择当前画面)在数据管理器中变量都是可知的,并且可用于进一步计算。当画面被替换时,所有变量都从数据管理器注销。
如果调用的变量不在变量触发器中,那么其行为与默认触发器相同。
GetTagxxx函数特点:与 GetTagxxx相同。当有变化发生时,执行主调函数。
(3)GetTagxxx 函数与事件触发器一道工作的方式
在WinCC的全局脚本中有多个函数用于读取变量值,在解决任务方面具有更大的灵活性。
GetTagxxx使用画面运行模式调用画面,在该画面中,用事件调用GetTagxxx函数。第一次调用,GetTagxxx函数被引入时传递参数“1秒”到数据管理器,从此PLC周期地取值。这可确保函数每次进一步调用都有数值可用。在整个执行时间(只要选择当前画面)在数据管理器中变量都是可知的,并且可用于进一步计算。当画面被替换时,所有变量都从数据管理器注销。
此时函数特点:与GetTagxxx相同。每次触发,主调函数都被执行。如果事件鼠标单击很少被触发,那么建议使用GetTagxxxWait函数。
(4)GetTagxxxWait 函数与事件触发器一道工作的方式
在WinCC的全局脚本中,有多个函数用于读取变量值,在解决任务方面具有更大的灵活性。
GetTagxxxWait使用画面运行模式调用画面,在该画面中,使用事件调用GetTagxxxWait函数。
GetTagxxxWait 函数请求数据管理器读取数值。数据管理器从PLC获取函数值。函数等待数值被读取。在函数处理之后,变量在数据管理器中就不再可知。
此时函数特点:与GetTagxxx相比,该调用花费的时间较长。该时间也取决于通道和PLC。该函数等待数值被实际读取(同步读取),超时为10s。该函数不提供任何有关读取作业状态的信息。
GetTagxxxStateWait函数与GetTagxxxWait具有同样的特性。GetTagxxxStateWait 函数提供有关被读取变量状态的附加信息。由于状态总是在内部提供,在表现方面与GetTagxxx Wait没有什么不同。
GetTagMultiWait函数与GetTagxxxWait具有同样的特性。然而,它不能在一次函数调用中读取多个变量。
3.3.7 VBS动作
VBScript是一种VB脚本语言,它是VB的一个子集,可以实现部分VB的功能。WinCC中的VBS也有对象、属性、方法的概念,而WinCC的对象与VB类似,分为属性和事件两种。关于VBS脚本的详细内容将在第9章进行,此处仅仅给出使用VBS动作实现几个动态效果的例子。
此处编写一个单击按钮更改圆对象的直径的例子。右键单击图标或图标,选择“VBS动作…”,打开VBS脚本编辑器,如图3-73所示。
图3-73 VBS脚本编辑器
注意:图3-73的VBS脚本中用到了关键字:ScreenItems,输入时可以利用VBS编辑器提供的智能工具。在编辑区单击鼠标右键选择“对象列表”,出现图3-74所示的对象选择列表,双击“ScreenItems”,则该关键字自动添加至编辑区,输入“ScreenItems”的对象“圆1”时,建议不要自己输入而是通过工具栏图标打开“对象选择对话框”,如图3-75所示,选择“test.PDL”画面的“圆1”对象,单击“确定”按钮完成输入。
图3-74 对象选择列表
图3-75 对象选择对话框
单击工具栏图标可以打开“变量对话框”,单击工具栏图标可以打开“带扩展返回参数的变量对话框”,单击工具栏图标可以打开“画面选择对话框”,根据需要使用相应的工具栏按钮来帮助输入脚本。
在图3-76中,当输入脚本objCircle.时,系统自动出现图3-76所示的该对象的属性列表,从中选择该对象的某一属性,双击则该属性关键字自动添加到编辑区。
图3-76 属性列表
VBS脚本输入完毕,单击工具栏图标或在脚本编辑区右键选择“语法检查”,系统将对输入的脚本进行语法检查。
【例3-10】 定义圆对象的颜色。
编写VBS脚本如下:
或者
【例3-11】 定义运行画面的样式和颜色。
编写VBS脚本如下:
【例3-12】 单击按钮退出运行系统。
对按钮的鼠标动作事件编写VBS脚本如下:
其中,HMIRuntime为对象,Stop为该对象的属性,其输入方式同前类似。
【例3-13】 单击一次按钮,变量Tag1的值加1。
新建一个按钮,在按钮的“鼠标动作”事件编写VBS脚本,如图3-77所示。
图3-77 VBS脚本
WinCC中对于控件的引用一般都采取“定义变量→使用Set变量=对象.(方法或属性)→引用变量”来做的。
上面例子中,在变量读取或写入的过程中,用到一些属性和方法,如Read和Write方法、变量的Value属性等,熟练掌握这些属性和方法相当重要。下面解释一下Write和Read方法的语法。
Readdata:其中data是读取变量的方法,如果data=1,直接从自动化站(AS)系统中读取,相当于C脚本中的Get*****wait()函数,如果省略,则从WinCC变量管理器中建立的变量中读取。
举例,读取变量的方法有以下两种:
或者
如果以上例程改成直接读取AS系统变量的话,程序为
或者
Writedata,1:其中data是需要写入变量的数值,1代表直接写入AS系统,相当于C脚本中的Set*****wait()函数,1省略,则写入到由Wincc变量管理器建立的变量中去。
举例,写变量的方法:
或者
除了以上方法外,还可以将一个中间变量的值写入,如
当然,其他的方法还很多,需要读者在编程过程中总结和灵活运用。
3.3.8 一些概念的说明
在介绍组态对象的动态效果时,多次提到了触发器和更新周期的概念,指定更新周期是组态系统的重要设置,它影响画面、对象的更新、后台脚本的处理等。当确定更新周期时,要从整体上考虑系统:需要考虑更新什么以及更新几次。不合适的更新周期对HMI系统的性能有负面影响。
对于更新周期,有以下几种不同的类型,如表3-1所示。
表3-1 各种更新周期
一个画面对象的对象属性可以进行动态效果的定义,在属性对话框的“动态”列将显示不同的图标,其含义如下。
白色灯泡:没有动态连接;
绿色灯泡:用变量连接;
红色灯泡:通过动态对话框实现动态效果;
蓝色闪电:用直接连接的动态效果;
带VB缩写的浅蓝色闪电:用VBS实现的动态效果;
带C缩写的绿色闪电:用C动作实现的动态效果;
带C缩写的黄色闪电:用C动作实现的动态效果,但C动作还未通过编译。
当开发一项应用时,用WinCC中提供的功能生成动态对象有很大的灵活性,但是需要注意在运行应用时,使用大量的脚本程序会运行速度性能成反比。这就意味着,大量的脚本程序会使运行时的速度变慢。这也是为什么系统提示使用了循环时间触发器的原因,因为它们经常是不需要时也执行。关键是想在运行时得到好的性能,就必须确保处理器运行脚本时处于最低负载。当生成大的脚本程序时要注意,特别是包括回路时。另一种方法是将负载在直接连接和脚本之间进行平衡。这就需要了解如何使用WinCC中的线程模型。
每个有效的应用中都具有一个或多个的执行线程。每个线程代表一个处理器时间的分数。该处理器时间是每周期应用可执行任务的时间。用这种方法,Windows可同时运行几个应用。实际上,在循环周期中CPU的注意力按顺序不断地直接作用在每个应用线程上。这些线程在其应用正在处理时占用每个CPU循环的大量时间。在一个单独线程中,每个独立的任务都必须等待它的机会给过程。不同线程的应用不需要考虑彼此,因为CPU在处理器循环时将给每个应用安排机会。在WinCC中,所有事件触发的C脚本在一个单独得公共线程上运行。所以它们必须排队等待。同样,触发器触发的脚本和全局操作也共享一个公共的线程。如果在一个画面上有两个对象都在一个公共的线程上运行C脚本,则一个必须结束另一个才能开始。这就意味着,当运行时一个长的脚本程序正在执行,其他对象的脚本将不会响应。直接连接是在一个不同的线程上执行,所以它们不会影响C脚本的运行,反之亦然。