-> Hier kostenlos registrieren
Hallo zusammen,
vorab die Frage ob ich das allgemeine Prinzip der OPC-UA DataAccess in Tc3 richtig verstanden habe:
Ziel ist es, eine verschachtelte Struct zu übertragen.
Im OPC UA - ReadListData Beispiel benötige ich dafür:
- eine Struct, in die später die über cbData aufgeschlüsselten Daten reingepackt werden
- eine zweite Struct, die die List (ReadList) aufführt:
- lediglich einen Connection Handler
- lediglich eine NodeId, die den Identifier vom Server beinhaltet
- cbData[], welche die übertragene Bytes in die einzelnen Strukturelemente aufdröselt
sollte diese Annahme richtig sein, habe ich das Projekt soweit, dass ich über cbData_R alle Bytes am Client empfange. (cbData_R === cbDataTotal)
Leider bleibt jedoch meine stReadListData leer, die die empfangenen Bytes anhand der cbData wieder aufteilen soll.
Eine Fehlermeldung kommt zu keiner Zeit, alle Handler werden regelmäßig erstellt.
Hat jemand eine Idee?
Grüße und danke im Voraus.
Sidame00
vorab die Frage ob ich das allgemeine Prinzip der OPC-UA DataAccess in Tc3 richtig verstanden habe:
Ziel ist es, eine verschachtelte Struct zu übertragen.
Im OPC UA - ReadListData Beispiel benötige ich dafür:
- eine Struct, in die später die über cbData aufgeschlüsselten Daten reingepackt werden
Code:
{attribute 'pack_mode' := '1'}
TYPE ST_A :
STRUCT
stReadListReturnInfo : ARRAY [1..5] OF ST_UAReadListReturnInfo;
Timestamp: DT;
b: REAL;
c: REAL;
d : REAL;
e: REAL;
END_STRUCT
END_TYPE
- eine zweite Struct, die die List (ReadList) aufführt:
Code:
TYPE ST_ReadListData :
STRUCT
stReadListReturnInfo : ARRAY [1..1] OF ST_UAReadListReturnInfo;
A : ST_A;
END_STRUCT
END_TYPE
- lediglich eine NodeId, die den Identifier vom Server beinhaltet
Code:
NodeIDs[1].eIdentifierType := eUAIdentifierType_String;
NodeIDs[1].nNamespaceIndex := nNamespaceIndex;
NodeIDs[1].sIdentifier := 'MAIN.myStruct';
- cbData[], welche die übertragene Bytes in die einzelnen Strukturelemente aufdröselt
Code:
cbData[1] := SIZEOF(stReadListData.A.Timestamp);
cbData[2] := SIZEOF(stReadListData.A.b);
cbData[3] := SIZEOF(stReadListData.A.c);
cbData[4] := SIZEOF(stReadListData.A.d);
cbData[5] := SIZEOF(stReadListData.A.e);
cbDataTotal := SIZEOF(stReadListData.A);
sollte diese Annahme richtig sein, habe ich das Projekt soweit, dass ich über cbData_R alle Bytes am Client empfange. (cbData_R === cbDataTotal)
Leider bleibt jedoch meine stReadListData leer, die die empfangenen Bytes anhand der cbData wieder aufteilen soll.
Eine Fehlermeldung kommt zu keiner Zeit, alle Handler werden regelmäßig erstellt.
Hat jemand eine Idee?
Grüße und danke im Voraus.
Sidame00