Scope of events事件作用域

<< 点击显示目录 >>

主页  mappView帮助助手 > mapp View帮助信息 > 指南 > FAQs > 事件和行动应用 > 事件和行动的行为 >

Scope of events事件作用域

一旦有事件发生,就会立即通知客户端。

使用事件绑定,一个连接的客户端可以通过执行一个或多个动作来响应指示的事件。事件绑定本身只对连接的客户端有效。值得注意的是,对于过去发生的事件,没有队列。这意味着事件ValueChanged只发送给当前连接的客户端,比如说。在事件发生后连接的客户端将不会被告知值的变化!

对HMI应用的影响:

在下面的例子中,在发生错误的情况下,一个特殊的风格被应用于小部件。错误状态被映射到应用程序中的一个OPC UA变量。

 

Event ValueChanged可以用来改变风格。然而,Event ValueChanged不允许直接应用到OPC UA变量上。这是因为有一个风险,即在以后连接的客户端将不知道通过事件ValueChanged的值变化。这同样适用于使用会话变量的情况。同样,不能保证当值改变时,这块内容会被显示出来。

<EventBinding>
 <Source xsi:type="opcUa.Event" refId="::Program:errorState" event="ValueChanged" />
 <EventHandler condition="newValue">
  <Action>
   <Target xsi:type="widgets.brease.Button.Action" contentRefId="content_0" widgetRefId="Button1" >
    <Method xsi:type="widgets.brease.Button.Action.SetStyle" value="Error" />
   </Target>
  </Action>
 </EventHandler>
 <EventHandler condition="NOT newValue">
  <Action>
   <Target xsi:type="widgets.brease.Button.Action" contentRefId="content_0" widgetRefId="Button1" >
    <Method xsi:type="widgets.brease.Button.Action.SetStyle" value="default" />
   </Target>
  </Action>
 </EventHandler>
</EventBinding>

如果OPC UA变量  在客户端连接建立时 已经被设置为值 "true" ,那么对应于状态 "false"的 小部件上配置的默认样式  将被显示。该事件只有在值改变时才会再次执行。

解决方案:

OPC UA变量必须被绑定到一个 会话变量 ,然后ValueChanged必须被应用到会话变量。这样做是因为在任何情况下,由于OPC UA变量与会话变量的绑定,都会发生值的变化。

默认值必须对应于默认行为。

 

通过将OPC UA变量(源)绑定到会话变量(目标),在事件绑定中可以响应会话变量的ValueChanged事件,因为它总是被绑定更新。

需要另一个 ANY_STRING类型的会话变量  来缓存样式名称,它反过来被绑定到相应内容中的小部件的样式属性。

创建一个会话变量:

<Variable name="ErrorState" scope="session"  xsi:type="BOOL" value="false" />
<Variable name="StyleName" scope="session"  xsi:type="ANY_STRING" value="default" />

OPC UA与会话变量绑定:

<Binding mode="oneWay">
    <Source xsi:type="opcUa" refId="::Program:errorState" attribute="value" />
    <Target xsi:type="session" refId="ErrorState" attribute="value" />
</Binding>

会话变量被用来代替OPC UA变量来检测一个值的变化。

在事件绑定中,根据错误状态,样式的名称被写入第二个会话变量中。

<EventBinding>
 <Source xsi:type="session.Event" refId="ErrorState" event="ValueChanged" />
 <EventHandler condition="newValue">
  <Action>
   <Target xsi:type="session.VariableAction" refId="StyleName" >
    <Method xsi:type="session.VariableAction.SetValueString" value="Error" />
   </Target>
  </Action>
 </EventHandler>
 <EventHandler condition="NOT newValue">
  <Action>
   <Target xsi:type="session.VariableAction" refId="StyleName" >
    <Method xsi:type="session.VariableAction.SetValueString" value="default" />
   </Target>
  </Action>
 </EventHandler>
</EventBinding>

会话变量 StyleName 必须被绑定到按钮部件的属性 "Style"。