I already checked the examples described in the forum.Â
/ctrlx-plc-ctxo5cm7/post/cxa-datalayer-how-to-write-a-flatbuffer-dlKyajQncuYip4N
But all examples described here, have methods, which returns a "pointer to real" or "pointer to string", ... so an easy datatype.
Â
My task is, to read the pending diagnostic and in this case, the method returns an object "pointer to DiagnosticInformation from the table"
And I don´t know, how to get access to this returned table. I have no chance to the information to the returned diagnostic string.
Here´s my example:
Declaration:
Â
PROGRAM PLC_PRG2
VAR
strMyInstancename : STRING := 'MyInstance';
bRead: BOOL;
bExecute: BOOL;
strNodePath: STRING(255) := 'diagnosis/get/actual/log';
fbDL_ReadNodeValue: DL_ReadNodeValue;
DataRead: CXA_Datalayer.DL_NodeValue;
fbDiagInfo : CXA_AutomationCore_fbs.common_log_diagnosis_fbs_DiagnosisIdentificationWithTimestamp;
pendingDiag: CXA_AutomationCore_fbs.common_log_diagnosis_fbs_DiagnosisIdentification;
strTimeStamp: STRING;
pendingDiag2: POINTER TO CXA_AutomationCore_fbs.common_log_diagnosis_fbs_DiagnosisIdentification;
END_VAR
Â
Implementation:
Â
IF bRead THEN
bRead := FALSE;
bExecute := TRUE;
END_IF
IF fbDL_ReadNodeValue.Done THEN
fbDiagInfo.getRootAsDiagnosisIdentificationWithTimestamp(data:= DataRead.GetData(), size:= DataRead.GetSize());
pendingDiag2 := fbDiagInfo.getDiagnosisIdentification();
pendingDiag := pendingDiag2^;
strTimeStamp := fbDiagInfo.getTimestamp();
bExecute := FALSE;
END_IF
fbDL_ReadNodeValue(
Execute:= bExecute, ClientId:= , NodeName:= strNodePath, NodeValue:= DataRead);
Â
Â
I get access to the Pointer, but I don´t know, how to get access to special content of this table:
What can i do to see the actual diagnostic?
Â