许可:查询容器信息


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

图1

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

图2

  • 创建一个名为 ST_CODEMETER_INFO_EX 的结构体。 按如下修改 ST_CODEMETER_INFO_EX:

声明

TYPE ST_CODEMETER_INFO_EX :
STRUCT
    stRTS_CODEMETER_INFO : CmpCodeMeter.RTS_CODEMETER_INFO;
    wsContainerName : WSTRING;
END_STRUCT
END_TYPE

  • 按如下修改 PLC_PRG:

声明

VAR CONSTANT
    cw_MaxInfos        : WORD := 3;
END_VAR
VAR
    xReadInfo        : BOOL;
    iecResult        : SysTypes.RTS_IEC_RESULT;
    iecHandle        : SysTypes.RTS_IEC_HANDLE;
    iecPrevHandle    : SysTypes.RTS_IEC_HANDLE;
    wIndex           : WORD;
    aInfo            : ARRAY [0..cw_MaxInfos] OF ST_CODEMETER_INFO_EX;
END_VAR

实现

IF xReadInfo THEN
    xReadInfo := FALSE;
    iecHandle := CmpCodeMeter.CodeMGetFirst(iecResult);   
    iecPrevHandle := SYSTYPES.RTS_INVALID_HANDLE;
    wIndex := 0;
    WHILE iecHandle <> SYSTYPES.RTS_INVALID_HANDLE DO
        IF wIndex = 0 THEN
            CmpCodeMeter.CodeMGetInfo(hCodeMeter := iecHandle, info := aInfo[wIndex].stRTS_CODEMETER_INFO);
            CmpCodeMeter.CodeMGetName(hCodeMeter := iecHandle, wstName := aInfo[wIndex].wsContainerName, nLenBytes := SIZEOF(aInfo[wIndex].wsContainerName));
        ELSE
            iecPrevHandle := iecHandle;
            iecHandle := CmpCodeMeter.CodeMGetNext(hPrevCodeMeter := iecPrevHandle, Result := iecResult);
            IF iecHandle <> RTS_INVALID_HANDLE THEN
                CmpCodeMeter.CodeMGetInfo(hCodeMeter := iecHandle, info := aInfo[wIndex].stRTS_CODEMETER_INFO);
                CmpCodeMeter.CodeMGetName(hCodeMeter := iecHandle, wstName := aInfo[wIndex].wsContainerName, nLenBytes := SIZEOF(aInfo[wIndex].wsContainerName));
            END_IF
        END_IF
        wIndex := wIndex + 1;
    END_WHILE
END_IF

  • 启动项目并将 xReadInfo 变量设置为 TRUE。 读取的容器/加密狗信息保存在数组中。

图3

与来自许可证管理器的信息进行比较

图4