First I like to mention that in the CXA_MOTIONINTERFACE there is an easy to use function included:
//Reading mode
ImcStatus.Admin._OpModeAck;
//Setting mode
ImcCtrl.Admin._OpMode := MB_IMC_MODE_CONTROL.IMC_MODE_CTRL_RUN;
ImcCtrl.Admin._OpMode := MB_IMC_MODE_CONTROL.IMC_MODE_CTRL_CONF;
For your question, as all information can be found in the Data Layer you can read as follows:
Declaration:
PROGRAM MotionStatus
VAR
fbDL_ReadNode: DL_ReadNode;
bReadExecute: BOOL;
bReadDone: BOOL;
bReadActive: BOOL;
bReadError: BOOL;
ReadErrorID: CXA_Datalayer.ERROR_CODE;
ReadErrorIdent: CXA_Datalayer.ERROR_STRUCT;
ReadValue: STRING;
diSize: DINT;
END_VAR
Implementation:
fbDL_ReadNode(
Execute:= bReadExecute,
Done=> bReadDone,
Active=> bReadActive,
Error=> bReadError,
ErrorID=> ReadErrorID,
ErrorIdent=> ReadErrorIdent,
ClientId:= ,
NodeName:= 'motion/state/opstate', //Path to the node at the Data Layer
Value:= ReadValue,
Size=> diSize);
Writing with DL_CreateNode because it is a command:
Declaration:
PROGRAM MotionState
VAR
fbDL_WriteNode: DL_WriteNode;
bWriteExecute: BOOL;
bWriteDone: BOOL;
bWriteActive: BOOL;
bWriteError: BOOL;
WriteErrorID: CXA_Datalayer.ERROR_CODE;
WriteErrorIdent: CXA_Datalayer.ERROR_STRUCT;
WriteValue: STRING := 'Configuration'; //Use 'Booting' to get to 'Running'
fbDL_CreateNode: DL_CreateNode;
WriteReturnValue: UDINT;
END_VAR
Implementation:
fbDL_CreateNode(
Execute:= bWriteExecute,
Done=> bWriteDone,
Active=> bWriteActive,
Error=> bWriteError,
ErrorID=> WriteErrorID,
ErrorIdent=> WriteErrorIdent,
ClientId:= ,
NodeName:= 'motion/cmd/opstate',//Path to the node at the Data Layer
ValueIn:= WriteValue,
ValueOut:= WriteReturnValue);
... View more