在某一客户上登录一个用户Logging in a user on a certain client

<< 点击显示目录 >>

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

在某一客户上登录一个用户Logging in a user on a certain client

使用案例

在控制器上改变一个值就可以在客户端上登录用户。

该程序的结果显示在一个消息框中。

执行

定义一个PLC变量用于改变数值。

为用户名定义一个PLC变量。

为密码定义一个PLC变量。

定义一个PLC变量用于选择客户。

定义一个事件绑定。

定义PLC变量

我们将定义  定义这些变量任务 程序

 

VariablesLogin每当变量 "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>