<< 点击显示目录 >> 主页 mappView帮助助手 > mapp View帮助信息 > 工程 > 事件和行动 > 使用案例 > 在某一客户上登录一个用户Logging in a user on a certain client |
•在控制器上改变一个值就可以在客户端上登录用户。
•该程序的结果显示在一个消息框中。
•定义一个PLC变量用于改变数值。
•为用户名定义一个PLC变量。
•为密码定义一个PLC变量。
•定义一个PLC变量用于选择客户。
•定义一个事件绑定。
我们将定义 定义这些变量的任务 程序。
每当变量 "startLogin "的值变为1时,就应该执行 "登录 "动作。
PLC变量的配置将在其他地方解释。
一个完整的定义看起来像这样。
<EventBinding>
<Source xsi:type="opcUa.Event" refId="::Program:startLogin" event="ValueChanged" />
<Operand name="user" datatype="ANY_STRING">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:user">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="pwd" datatype="ANY_STRING">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:pwd">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="clientId" datatype="ANY_INT">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:clientId">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="slotId" datatype="ANY_INT">
<ReadTarget xsi:type="session.VariableAction.Read" refId="::SYSTEM:clientInfo.slotId">
<Method xsi:type="session.VariableAction.GetValue" />
</ReadTarget>
</Operand>
<EventHandler condition="newValue = 1 AND slotId = clientId">
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.Login" userName="=user" password="=pwd" />
</Target>
<Result>
<ResultHandler condition="NOT result">
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OK" message="login failed" header="Warning" icon="Warning" />
</Target>
</Action>
</ResultHandler>
<ResultHandler condition="result">
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OK" message="login successful" header="Information" icon="Information" />
</Target>
</Action>
</ResultHandler>
</Result>
</Action>
</EventHandler>
</EventBinding>
现在,各个元素被一步步地定义。
•定义对数值变化做出反应的事件。
•定义显示消息框的动作。
该事件是事件绑定的来源。 这里使用的是事件 ValueChanged 。
•通过 opcUa.Event,条目 xsi:type 定义了源是一个OPC UA变量。
•条目 refId 在OPC UA符号中引用该变量。
•条目 event 定义了 ValueChanged 的值的变化。
<EventBinding>
<Source xsi:type="opcUa.Event" refId="::Program:startLogin" event="ValueChanged" />
...
</EventBinding>
一个动作被定义在一个事件处理程序中。
登录的执行是一个类型 为clientSystem.Action的目标 。
执行登录的系统方法的名称 是clientSystem.Action.Login。
<EventBinding>
<Source xsi:type="opcUa.Event" refId="::Program:startLogin" event="ValueChanged" />
<EventHandler>
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.Login" userName="" password="" />
</Target>
</Action>
</EventHandler>
</EventBinding>
对于OPC UA变量和会话变量的值在事件绑定中使用,它们必须被定义为 操作数。
<Operand name="user" datatype="ANY_STRING">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:user">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="pwd" datatype="ANY_STRING">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:pwd">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="clientId" datatype="ANY_INT">
<ReadTarget xsi:type="opcUa.NodeAction.Read" refId="::Program:clientId">
<Method xsi:type="opcUa.NodeAction.GetValue" />
</ReadTarget>
</Operand>
<Operand name="slotId" datatype="ANY_INT">
<ReadTarget xsi:type="session.VariableAction.Read" refId="::SYSTEM:clientInfo.slotId">
<Method xsi:type="session.VariableAction.GetValue" />
</ReadTarget>
</Operand>
客户端是通过 系统变量 clientInfo.slotId来选择的 。
只有当触发变量的值为1,并且客户端的slotId与变量clientId对应时,该动作才会被执行。
<EventBinding>
<Source xsi:type="opcUa.Event" refId="::Program:startLogin" event="ValueChanged" />
<EventHandler condition="newValue = 1 AND slotId = clientId">
...
</EventHandler>
</EventBinding>
clientSystem.Action.Login动作 返回BOOL类型的结果,该结果可在条件中与标识符 "result "一起使用。结果显示在一个消息框中。
<Result>
<ResultHandler condition="NOT result">
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OK" message="login failed" header="Warning" icon="Warning" />
</Target>
</Action>
</ResultHandler>
<ResultHandler condition="result">
<Action>
<Target xsi:type="clientSystem.Action">
<Method xsi:type="clientSystem.Action.ShowMessageBox" type="OK" message="login successful" header="Information" icon="Information" />
</Target>
</Action>
</ResultHandler>
</Result>