Page tree
  • Create a "Standard project" and select CODESYS Control Win V3 as the device.
  • Define the target system by means of the Network scan.




  • Open the Library Manager and add the following libraries:
    CmpCodeMeter
    SysTypes2 interfaces



  • Create a "Structure" named ST_CODEMETER_INFO_EX.
    Adapt the ST_CODEMETER_INFO_EX as follows:


    Declaration

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


  • Adapt the POU PLC_PRG as follows:


    Declaration

    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

    Implementation

    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


  • Start the project and set the xReadInfo variable to TRUE.





    The read container/dongle information is saved in the array.

    For comparing the information from the License Manager.


  • No labels