读取控制器厂商信息


例如,如果一个库只能特定设备上运行,那么您必须访问控制器上的制造商信息。 通常,功能受到“TargetType”限制。

图1

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

图2

  • 打开库管理器并添加以下库: SysTarget SysTypes2 interfaces

图3

  • 修改 PLC_PRG 如下:

声明

VAR
    xRead            : BOOL;
    iecResult        : SysTypes.RTS_IEC_RESULT;

    dwType            : DWORD;
    dwTargetId        : DWORD;

    wsVendorName      : WSTRING;
    diVendorName      : DINT := SIZEOF(wsVendorName);
    wsDeviceName      : WSTRING;
    wsDev             : DINT := SIZEOF(wsDeviceName);
    dwVersion         : DWORD;
    wsNodeName        : WSTRING;
    udiNodeName       : UDINT := SIZEOF(wsNodeName);

    udiProcessorId    : UDINT;
    udiOsId           : UDINT;

    sSerialNumber     : STRING;
    psSerialNumber    : POINTER TO STRING := ADR(sSerialNumber);
    diSerialNumber    : DINT := SIZEOF(sSerialNumber);
END_VAR

实现

IF xRead THEN
    xRead := FALSE;

    //  Control WinV3: 4096 - 0000 0001
    iecResult := SysTarget.SysTargetGetType(pulType := ADR(dwType));
    iecResult := SysTarget.SysTargetGetId(pulTargetId := ADR(dwTargetId));

    iecResult := SysTarget.SysTargetGetVendorName(pwszName := ADR(wsVendorName), pnMaxLength := ADR(diVendorName));
    iecResult := SysTarget.SysTargetGetDeviceName(pwszName := ADR(wsDeviceName), pnMaxLength := ADR(wsDev));
    iecResult := SysTarget.SysTargetGetVersion(pulVersion := ADR(dwVersion)); // V3.5.SP13.10 == > 50662666 = 16#03050D0A
    iecResult := SysTarget.SysTargetGetNodeName(pwszName := ADR(wsNodeName), pnMaxLength := ADR(udiNodeName));

        // SystemInfo
    iecResult := SysTarget.SysTargetGetOperatingSystemId(pudiOperatingSystemId := ADR(udiOsId));
    iecResult := SysTarget.SysTargetGetProcessorId(pudiProcessorId := ADR(udiProcessorId));

    //Unique RT identifier
    iecResult := SysTarget.SysTargetGetSerialNumber(ppsSerialNumber := ADR(psSerialNumber), pnMaxLen := ADR(diSerialNumber));
END_IF

  • 启动项目并将 xRead 变量设置为 TRUE。

图4