<< 点击显示目录 >> 主页 mappView帮助助手 > mapp View帮助信息 > 工程 > 事件和行动 > Binding events and actions |
一个 事件 可以被绑定到一个 动作上。如果事件发生,那么绑定的动作就会被执行。
连接是通过 事件绑定进行的 。
以下 范围规则 适用。
使用方法时可以指定参数。
可以为一个事件定义多个事件处理程序;它们负责执行动作。
可以为事件处理程序定义一个执行动作的条件。只有当条件得到满足时,行动才会被执行。
条件的结果总是一个布尔值。条件是用 表达式编写和评估的 。
<EventBinding id="eventBindingId" >
<Source xsi:type="session.Event" refId="variable1" event="ValueChanged"/>
<EventHandler condition="newValue < 20 AND oldValue > 10" >
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var1" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="42" />
</Target>
</Action>
</EventHandler>
</EventBinding>
几个事件处理程序也可以在不同条件下并行执行。
建议分配一个事件绑定ID(id)。这使得它更容易,例如,使用记录器查找错误。
一个动作可以是一个具体的 "原始primitive"动作,也可以是几个动作的组合。
在一个 "原始primitive"动作 中,必须使用 目标 和 方法来选择要执行的具体方法 。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler condition="" >
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var1" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="42" />
</Target>
</Action>
</EventHandler>
</EventBinding>
结构 "序列sequence"用于按照定义的顺序执行动作("步骤")。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler condition="" >
<Sequence>
<Step order="0">
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var1" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="42" />
</Target>
</Action>
</Step>
<Step order="1">
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var2" >
<Method xsi:type="opcUa.NodeAction.SetValueBool" value="true" />
</Target>
</Action>
</Step>
</Sequence>
</EventHandler>
</EventBinding>
结构 "Parallel"用于执行相互平行的行动。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler condition="" >
<Parallel>
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var1" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="42" />
</Target>
</Action>
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var2" >
<Method xsi:type="opcUa.NodeAction.SetValueBool" value="true" />
</Target>
</Action>
</Parallel>
</EventHandler>
</EventBinding>
结构 "并行"只应在两个 长期运行的动作 必须独立并行执行时使用。 一个序列通常会提供更好的性能。
一个动作可以返回一个结果。结果在一个或多个结果处理程序中被处理。
结果被提供在变量 "result "中,供进一步使用。
可以为结果处理程序定义一个执行后续行动的条件。只有在满足条件的情况下才会执行该动作。
条件的结果总是一个布尔值。条件是用表达式编写和评估的。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler>
<Action>
<Target xsi:type="clientSystem.Action" >
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OKCancel" message="HelloWorld" header="Warning!" icon="Warning" />
</Target>
<Result>
<ResultHandler condition="result = 4">
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var2" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="11" />
</Target>
</Action>
</ResultHandler>
</Result>
</Action>
</EventHandler>
</EventBinding>
结果总是被同步处理。
一个读取动作总是返回一个结果。结果由一个或多个结果处理程序来处理。
读取动作需要使用 <ReadTarget> 而不是 <Target>。
使用 <ResultHandler> 对于读取方法来说是强制性的。
结果将在变量 "result "中提供,以便进一步使用。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler>
<Action>
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::prg1:status1" >
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
<Result>
<ResultHandler condition="result = 0">
<Action>
<Target xsi:type="clientSystem.Action" >
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OKCancel" message="Some message" header="Info!" icon="Information" />
</Target>
</Action>
</ResultHandler>
</Result>
</Action>
</EventHandler>
</EventBinding>
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler>
<Action>
<ReadTarget xsi:type="widgets.brease.ContentControl.ReadAction" contentRefId="Content1" widgetRefId="ContentControl1" >
<Method xsi:type="widgets.brease.ContentControl.Action.GetContentId" />
</ReadTarget>
<Result>
<ResultHandler condition="result = "content1"">
<Action>
<Target xsi:type="clientSystem.Action" >
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OKCancel" message="Some message" header="Info!" icon="Information" />
</Target>
</Action>
</ResultHandler>
</Result>
</Action>
</EventHandler>
</EventBinding>
结果总是被同步处理。
本节的主题: