<< 点击显示目录 >> 主页 mappView帮助助手 > mappView入门简单Wiki > 通用结构 Generell structure |
事件绑定由两个主要元素组成。
•Event trigger
这就是事件的来源。 这里 可以定义触发器
•Event handler
这是触发触发器时执行的部分。 事件处理程序可以根据所执行操作的复杂性而有所不同。 以下示例显示了一个完整的简单事件绑定。 source 是事件触发器。 在这种情况下,PLC 变量的变化。 事件处理程序执行动作。 target 是打开对话窗口的活动 Web 会话。
<EventBinding>
<!-- Trigger when button was pressed />-->
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<!-- Set PLC variable to 42 />-->
<EventHandler>
<Action>
<Target xsi:type="opcUa.NodeAction" refId="::prg1:var1" >
<Method xsi:type="opcUa.NodeAction.SetValueNumber" value="42" />
</Target>
</Action>
</EventHandler>
</EventBinding>
在某些情况下,可能需要将事件触发器与其他条件结合起来。 例如,只有在某个范围内时才应设置值。 这些条件可以通过添加参数condition添加到事件处理程序中. 有关比较的详细信息,请参阅 this options. 布尔值使用表示法“newValue”表示真,“NOT newValue”表示假。
Snippet
<!-- New value smaller 20, old value greater 10 />-->
<EventHandler condition="newValue < 20 AND oldValue > 10" >
Full example
<EventBinding id="eventBindingId" >
<!-- Trigger when value changed />-->
<Source xsi:type="session.Event" refId="variable1" event="ValueChanged"/>
<!-- Execute when new value is smaller 20 and old value was greater 10 />-->
<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>
需要注意的是,上一章的条件是局部的。 这意味着在这种情况下使用的数据是由事件本身自动生成的。 会话事件生成变量 newValue 和 oldValue。 然后可以在以后的条件中使用这些变量。 如果需要另一个变量,例如 PLC 值,则需要先主动读取该值。 这可以通过 ReadTarget 完成。 使用 Operand 将所有外部值分配给局部变量是一种很好的做法。
Snippet
<!-- Read additional value from PLC />-->
<Operand name="ContentIsVisible1" datatype="BOOL">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::AsGlobalPV:Motor[1].IsVisible" >
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
Full example
<EventBinding>
<!-- Trigger when new content is loaded />-->
<Source xsi:type="clientSystem.Event" event="ContentLoaded" />
<!-- Read additional value from PLC />-->
<Operand name="ContentIsVisible1" datatype="BOOL">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::AsGlobalPV:Motor[1].IsVisible" >
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<!-- Execute command when conditions are met />-->
<EventHandler condition="contentId="contentSample" AND ContentIsVisible1=true" >
<Action>
<Target xsi:type="widgets.brease.ContentControl.Action" contentRefId="contentSample" widgetRefId="ContentControl1">
<Method xsi:type="widgets.brease.ContentControl.Action.LoadContent" contentId="contentDyn1"/>
</Target>
</Action>
</EventHandler>
</EventBinding>
一个事件处理程序可以执行多个动作,但它们必须按顺序分开。 要创建序列,请结合使用参数 Sequence 和 Step order。 动作一个接一个地执行。
Snippet
<Sequence>
<Step order="0">
<Action>
...
</Action>
</Step>
<Step order="1">
<Action>
...
</Action>
</Step>
</Sequence>
Full example
<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>
动作也可以提供结果。 当操作显示用户必须确认的消息框时,这可能很有用。 使用参数 Result ** 添加结果处理程序。 结果存储在变量result**中。 然后结果处理程序可以执行另一个操作。
<EventBinding>
<Source xsi:type="widgets.brease.Button.Event" contentRefId="Content1" widgetRefId="Button1" event="Click"/>
<EventHandler condition="" >
<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>