SubmoduleIterator (FB)

FUNCTION_BLOCK SubmoduleIterator

Iterator for the submodules (of a single profinet device) that are configured in the current application.

Example: check all modules of a profinet device

PROGRAM CheckModuleConfig
VAR
    submodule : ProfinetCommon.SubmoduleInfo;
    submodules : ProfinetCommon.SubmoduleIterator;
END_VAR

//Note: 'pnDevice' is a node in the device tree.
IF(pnDevice.xModuleDiff) THEN           // there's a module missmatch ?
    submodules.InitByID(pnDevice.ID);               // init. iterator with the device's ID
    WHILE(submodules.Next(submodule => submodule)) DO
        IF(submodule.xStateInformation) THEN        //some valid info in SubmoduleState ?
            IF(submodule.SubmoduleState.IdentInfo <> ProfinetCommon.SubmoduleState_IdentInfo.OK) THEN
                ;//--> message 'Wrong Module' or sth. like that
            END_IF
        END_IF
    END_WHILE
END_IF

Example: get profinet submodule-status form a generic IDevice-object

FUNCTION GetSubmoduleInfo : BOOL
VAR_INPUT
    Device : DED.IDevice;   // Enable Device Diagnosis in PLC Settings !
END_VAR                     // Then every node in the device tree is an instance of IDevice
VAR_OUTPUT
    Submodule : ProfinetCommon.SubmoduleInfo;
END_VAR

VAR
    info : DED.DEVICE_INFO;
    submodules : ProfinetCommon.SubmoduleIterator;
END_VAR

IF(Device <> 0 AND_THEN Device.GetDeviceInfo(info) = DED.ERROR.NO_ERROR) THEN
    IF(submodules.InitByID(info.idSystem)) THEN     // idSystem = CommFB - ID
        GetSubmoduleInfo := submodules.Next(submodule => submodule);
    END_IF
END_IF
InOut:

Scope

Name

Type

Comment

Output

xInit

BOOL

TRUE if the Iterator is initialized with valid data.