通用结构 Generell structure

<< 点击显示目录 >>

主页  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>


Conditions 条件

在某些情况下,可能需要将事件触发器与其他条件结合起来。 例如,只有在某个范围内时才应设置值。 这些条件可以通过添加参数condition添加到事件处理程序中. 有关比较的详细信息,请参阅 this options. 布尔值使用表示法“newValue”表示真,“NOT newValue”表示假。

Snippet

<!-- New value smaller 20, old value greater 10 />-->
<EventHandler condition="newValue &lt; 20 AND oldValue &gt; 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 &lt; 20 AND oldValue &gt; 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=&quot;contentSample&quot; 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>


执行多个操作

一个事件处理程序可以执行多个动作,但它们必须按顺序分开。 要创建序列,请结合使用参数 SequenceStep 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>


动作的结果Results of actions

动作也可以提供结果。 当操作显示用户必须确认的消息框时,这可能很有用。 使用参数 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>