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: |
|