你可以为可视化定义一个称为对话框的接口。
使用可视化类型对话框为其创建一个可视化,并为该对话框声明一个接口。通过用户输入在主要可视化中引用可视化并将参数传输到界面。
如果将可视化称为集成可视化,则传输的参数必须是基本数据类型的变量。如果将可视化称为CODESYS TargetVisu或CODESYS WebVisu,则参数也可以具有用户定义的数据类型。
1. | 将可视化的可视化类型设置为对话框。 |
2. | 在对话框的接口编辑器中声明变量。 ⇒ | 该对话框有一个接口。您可以在调用对话框时传输参数。 |
|
3. | 配置对话框的元素并使用接口变量。 |
4. | 在另一个可视化(通常是主可视化)中选择一个元素来配置对话框如何打开。 |
5. | 在属性点击配置。 |
6. | 在选定的输入操作列表中选择打开对话框。 |
7. | 从对话框下拉列表中选择一个。 ⇒ | 如果选定的对话框有一个接口,则下面列出了接口变量。 |
|
8. | 在值列的接口变量中分配一个传递参数。 |
9. | 在列表 更新 和 参数的结果中选择已更新参数的结果 |
10. | 激活选项打开模态对话框。点击确定以关闭对话框。 |
|
同时执行一个对话框多次需要该对话框的多个实例。在下载应用程序时,这些必须已经下载到可视化设备。为此,请在可视化管理器(可视化选项卡)中设置要下载的实例数。 |
如下应用程序将调用更改用户级别对话框并提示用户选择级别并指定密码。如果密码一致,则启用确定按钮。然后用户可以关闭对话框。级别的输入也将被应用。
.对话框visChangeUserLevel:
.对话框visChangeUserLevel的接口声明:
VAR_INPUT
sTitle: STRING; // 对话框的标题
sItfLevel0: STRING; //密码等级0
sItfLevel1: STRING; //密码等级1
sItfLevel2: STRING; //密码等级2
sItfLevel3: STRING; //密码等级3
sItfLevel4: STRING; //密码等级4
sItfLevel5: STRING; //密码等级5
sItfLevel6: STRING; //密码等级6
sItfLevel7: STRING; //密码等级 7
END_VAR
VAR_IN_OUT
iItfLevel: INT; // 用户输入:等级
sItfPwd: STRING; //用户输入:密码
END_VAR
.visChangeUserLevel对话框的元素列表:
类型 | 名称 | 元素属性 | 描述 |
---|
#0 Image | Background | 静态ID:VisuDialogs.ImagePoolDialogs.Login | 该属性将具有灰色背景和空白蓝色标题栏的空白对话框的图像分配给该元素。该图像包含在VisuDialogs库中。 |
#1 Box | Title | : %s | 对于文本变量的占位符输出 |
:sItfTitle | 在调用时为其传递参数的接口变量sItfTitle的赋值。 |
#2 Radio Buttons | Input level | 变量:iItfLevel | 在调用时为其传递参数的接口变量iItfLevel的赋值。包括runtime的用户输入。 |
列数:4 | |
单选按钮顺序:左到右 | 显示 |
:[0]到[7] :<n> | 八个单选按钮的标号,数字从0到7 |
#3 Text Field | Input password | : %s | 对于文本变量的占位符输出 |
:sItfPwd | 在调用时为其传递参数的接口变量sItfPwd的赋值。包括runtime的用户输入。 |
:Variable:,InputType:Edit,Use text output variable : TRUE | 在输入配置对话框,输入类型下拉列表中选择文本输入并且激活了使用文本输出变量选项。 |
#4 Text Field | Label for level | : Level: | 标签 |
#5 Text Field | Label for password | : Password | 标签 |
#6 Button | OK | : OK | 标签 |
: Element base color : Alarm fill color | 以状态相关颜色显示的配置。您可以在颜色之间切换。 |
:sItfPwd <> MUX(iItfLevel, sItfLevel0, sItfLevel1, sItfLevel2, sItfLevel3, sItfLevel4, sItfLevel5, sItfLevel6, sItfLevel7); | 如果密码和用户输入不一致,则表达式为TRUE。然后按钮以报警颜色显示。 |
:sItfPwd <> MUX(iItfLevel, sItfLevel0, sItfLevel1, sItfLevel2, sItfLevel3, sItfLevel4, sItfLevel5, sItfLevel6, sItfLevel7); | 如果密码和用户输入不一致,则表达式为TRUE。该按钮已停用。 如果密码一致,则该按钮被启用。 |
:Close Dialog: visChangeUserLevel, Result : OK | 如果用户点击确定按钮,则会关闭visChangeUserLevel对话框并更新参数。 |
#7 Button | Cancel | : Cancel | 标签 |
: Element base color | 显示 |
:Close Dialog: visChangeUserLevel, Result : Cancel | 如果用户点击取消按钮, 则会关闭visChangeUserLevel对话框。 |
.主可视化visMain:
.visMain可视化的元素列表:
类型 | 名称 | 元素属性 | 描述 |
---|
#5 Text Field | Button for change user level | : %s | 带占位符的输出 |
:PLC_PRG.iLevel | 将PLC_PRG.iLevel变量分配给占位符。包括级别号。 |
#6 Button | Title | : Change user level | |
:Open Dialog: visChangeUserLevel | 如果用户点击更改用户等级按钮, 则会打开visChangeUserLevel对话框,并在此处存储参数列表。 提示:点击配置在输入配置对话框(输入操作打开对话框)查看存储的配置 。 |
.对话框visChangeUserLevel的调用配置:
参数 | 类型 | 值 | 描述 |
---|
参数列表存储在输入配置对话框(输入操作O打开对话框)中。 |
sItfTitle | STRING | 'ChangeUse user level' | 传输标题字符串 |
sItfLevel0 | STRING | % pwd0 | 传输字符串作为等级0的密码。 |
sItfLevel1 | STRING | % pwd1 | 传输字符串作为等级1的密码。 |
sItfLevel2 | STRING | % pwd2 | 传输字符串作为等级2的密码。 |
sItfLevel3 | STRING | % pwd3 | 传输字符串作为等级3的密码。 |
sItfLevel4 | STRING | % pwd4 | 传输字符串作为等级4的密码。 |
sItfLevel5 | STRING | % pwd5 | 传输字符串作为等级5的密码。 |
sItfLevel6 | STRING | % pwd6 | 传输字符串作为等级6的密码。 |
sItfLevel7 | STRING | % pwd7 | 传输字符串作为等级7的密码。 |
iItfLevel | INT | PLC_PRG.iLevel | 传递用户指定级别的变量。 |
sItfPwd | STRING | PLC_PRG.sPwd | 传输用户指定密码的变量。 |
.应用代码PLC_PRG:
PROGRAM PLC_PRG
VAR
iLevel: INT;
sPwd : STRING;
END_VAR
.在runtime中的可视化
点击按钮后,对话框打开并允许输入。如果指定的文本与存储的文本一致,则启用确定:
点击确定后,将应用选择。
|
该示例显示了多个返回值的过程。但是,在对话框中使用局部变量可以更容易地返回密码。 |
以编程方式访问参数
在可视化界面中声明的变量可以自动用作结构变量。它们由<Name of visualization>_VISU_STRUCT标识。因此,您可以访问显示为对话框的可视化的接口变量。通常,在由用户输入调用的函数的应用程序代码中使用该结构。
将指针作为参数传递
要传递一个复杂的数据结构,可以用编译附注属性 VAR_IN_OUT_AS_POINTER标记类型为VAR_IN_OUT的接口变量,并将指针或对它的引用作为参数来传递。
.引用程序
1. | 声明用户数据对象(DUT)。 |
2. | 在对话框的接口编辑器中,通过将属性'VAR_IN_OUT_AS_POINTER'赋值给该变量,将接口变量(VAR_IN_OUT)声明为对数据对象的引用。 |
3. | 编程用户界面:在可视化中使用对话框或在可视化元素的输入配置中指定对话框。然后就可以访问引用的数据。 |
.示例:使用带有编译附注的 'VAR_IN_OUT_AS_POINTER'接口
FUNCTION_BLOCK ControlFB
VAR
bOk : BOOL := TRUE;
nCounter : INT;
nValue : INT;
END_VAR
nCounter := nCounter + 1;
用VAR_IN_OUT_AS_POINTER声明接口变量
用户界面:对话框打开: