WebVisu:读取客户端的IP地址

  • 创建标准项目并选择 CODESYS Control Win V3 作为设备。
  • 通过网络扫描连接目标系统。

图1

  • 在设备树中插入可视化。 然后插入带有可视化类型 TargetVisu 和 WebVisu 的可视化管理器。 此外,还会自动创建一个 Visu_Task。

图2

从 SP17 开始:

  • 打开库管理器并添加以下库: VisuUtils

图3

  • 创建一个名为 FB_Iteration 的新 FB 并实现接口 VU.IVisualizationClientIteration。

图4

FB 会自动创建以下方法: EndIteration HandleClient StartIteration

  • 按如下修改 FB_Iteration 功能块:

声明

FUNCTION_BLOCK FB_Iteration IMPLEMENTS VU.IVisualizationClientIteration
VAR CONSTANT
    c_MaxClients    : __XINT := 5;
END_VAR
VAR
    _iIndex         : __XINT;
    asIpAddresses   : ARRAY [0..c_MaxClients-1] OF STRING;
END_VAR

  • 按如下修改 EndIteration 方法:

声明

METHOD EndIteration
VAR
    _iCounter : __XINT;
END_VAR

实现

FOR _iCounter := (c_MaxClients - 1) TO _iIndex BY -1 DO
    asIpAddresses[_iCounter] := '';
END_FOR

  • 按如下修改 HandleClient 方法:

实现

IF _iIndex <= (c_MaxClients - 1) THEN
    asIpAddresses[_iIndex] := itfClient.GetIPv4Address();
    _iIndex := _iIndex + 1;
END_IF

  • 按如下修改 StartIteration 方法:

实现

_iIndex := 0;

  • 修改 PLC_PRG 如下:

声明

VAR
    fbIteration         : FB_Iteration;
    fbIterateClients    : VU.FbIterateClients; 
    xIterate            : BOOL;
END_VAR

实现

fbIterateClients(xExecute := xIterate, itfClientFilter := VU.Globals.OnlyWebVisu, itfIterationCallback := fbIteration);

IF fbIterateClients.xDone  THEN
    xIterate := FALSE;
END_IF

  • 启动项目并在监视列表中插入变量 PLC_PRG.fbIteration。
  • 打开浏览器并输入以下地址:http://localhost:8080/webvisu.htm
  • 设置 PLC_PRG 的 xIterate 变量为 TRUE。

图5

SP16 及以前:

创建一个名为 ClientInfo 的新 POU 并从 Visu_Task 调用它。

ClientInfo POU 的调用必须源自 Visu_Task,因为只有这样才能传递所需的客户端句柄。

图6

  • 按如下修改 ClientInfo:

声明

VAR
    pClient       :    POINTER TO VisuElems.VisuElemBase.VisuStructClientData;
    helper        :    VisuElems.VisuFbClientTagDataHelper;
    s1            :    STRING;
END_VAR

实现

VisuElems.g_ClientManager.BeginIteration();

WHILE (pClient := VisuElems.VisuElemBase.g_ClientManager.GetNextClient()) <> 0 DO
    IF pClient^.GlobalData.ClientType = VisuElems.VisuElemBase.Visu_ClientType.WebVisualization THEN
        helper(pClientData := pClient);
        s1 := helper.stIPv4;
    END_IF
END_WHILE

  • 启动项目并在 ClientInfo 的第 6 行设置断点。

图7

  • 打开浏览器并输入以下地址:http://localhost:8080/webvisu.htm
  • 客户端连接后,执行在断点处停止,可以读取 IP 地址。

图8

该信息仅适用于 Web 客户端。连接到控制器的 TargetVisu 不包含此信息。