Binding events and actions

<< 点击显示目录 >>

主页  mappView帮助助手 > mapp View帮助信息 > 工程 > 事件和行动 >

Binding events and actions

一个 事件 可以被绑定到一个 动作。如果事件发生,那么绑定的动作就会被执行。

连接是通过 事件绑定进行的 。

以下 范围规则 适用。

使用方法时可以指定参数。

可以为一个事件定义多个事件处理程序;它们负责执行动作。

Condition 条件

可以为事件处理程序定义一个执行动作的条件。只有当条件得到满足时,行动才会被执行。

条件的结果总是一个布尔值。条件是用 表达式编写和评估的 。

 

Condition

<EventBinding id="eventBindingId" >
  <Source xsi:type="session.Event" refId="variable1" event="ValueChanged"/>
  <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>

几个事件处理程序也可以在不同条件下并行执行。

 

MultipleEventHandler

建议分配一个事件绑定ID(id)。这使得它更容易,例如,使用记录器查找错误。

Action structures 行动结构

一个动作可以是一个具体的 "原始primitive"动作,也可以是几个动作的组合。

在一个 "原始primitive"动作 中,必须使用 目标方法选择要执行的具体方法 。

 

PrimitiveAction

<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"用于按照定义的顺序执行动作("步骤")。

 

SequenceAction

<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"用于执行相互平行的行动。

 

parallelAction

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

结构 "并行"只应在两个 长期运行的动作 必须独立并行执行时使用。 一个序列通常会提供更好的性能。

Results of actions行动的结果

一个动作可以返回一个结果。结果在一个或多个结果处理程序中被处理。

结果被提供在变量 "result "中,供进一步使用。

可以为结果处理程序定义一个执行后续行动的条件。只有在满足条件的情况下才会执行该动作。

条件的结果总是一个布尔值。条件是用表达式编写和评估的。

 

Resulthandler

Example of a client system action客户端系统行动的例子

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

结果总是被同步处理。

Read actions

一个读取动作总是返回一个结果。结果由一个或多个结果处理程序来处理。

读取动作需要使用 <ReadTarget> 而不是 <Target>

使用 <ResultHandler> 对于读取方法来说是强制性的

结果将在变量 "result "中提供,以便进一步使用。

 

Resulthandler

opcUa例子

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

Example for a widget

<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 = &quot;content1&quot;">
          <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>

结果总是被同步处理。

本节的主题:

Guidelines for connecting events and actions

Scope rules