Vergleichen von DUT's/Struct in TwinCat3

Chris1803

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Ich suche eine Möglichkeit 2 DUT's miteinander zu vergleichen. Dieses soll dem Zweck einer Verriegelung dienen. Dies ist die Version die ich in TIA erfolgreich nutze:
- Ein UDT(PrgVrr) mit x-Boolschen Variabelen anlegen,
- Eine FC(VrrCheck) die als Temp sowie als Input Variable einen PrgVrr enthält anlegen. Als Programm lediglich: VrrCheck:= Input = Temp definieren.
- In zb einer Schrittkette ebenfalls als Temp eine PrgVrr(Bsp_vrr) anlegen und zb via scl beschreiben. (Bsp_vrr.Verriegelungsbit_1:= true;)
-Dann in der schritkette den FC aufrufen und die Bsp_vrr als input übergeben. Und den Returnwert nutzen.

Nun zur Frage; Wie erreiche ich es in Twincat diese Art des vergleichen von Anwenderdatentypen zu erreichen? Wenn ich den oben beschriebenen Weg gehe meldet Twincat während des kompilieren das ein Vergleich von DUT mit DUT nicht möglich ist.....

Memcmp habe ich schon versucht, das führt zu keinem Erfolg, ebenso mit Pointer to Byte.

Vielen Dank für die Hilfe.
 
Ich mache das mit MEMCMP:

Code:
VAR_INPUT
Eingangsvariable:            TestDUT;           
END_VAR

VAR
Vergleichsvariable:            TestDUT;   
ADR_Eingangsvariable:       PVOID
SIZE_TestDUT:                 UDINT
ADR_Vergleichsvariable:     PVOID
END_VAR

ADR_Eingangsvariable     := ADR (Eingangsvariable);
SIZE_TestUDT             := SIZEOF (Eingangsvariable);
ADR_Vergleichsvariable     := ADR (Vergleichsvariable);

IF MEMCMP(pBuf1:=ADR_Eingangsvariable,pBuf2:=ADR_Vergleichsvariable, n:=SIZE_TestUDT) = 0 THEN
// Gleich
ELSE
// Ungleich
END_IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mache das mit MEMCMP
Diese Funktion kann Unterschiede zeigen, obwohl die Variablenwerte beider Strukturen gleich sind.
Relevant kann der Packmode sein und bei Strings die Anzahl der genutzten Zeichen.
Beispiel:
StringVar : STRING(5) := '123';
Im Speicher kann das so aussehen: 31 32 33 00 7E 00

Wenn man vor jedem Schreiben auf die Struktur mit MEMSET alles auf 0 setzt, müsste der Vergleich richtig arbeiten.
Wenn man beim Vergleich ganz sicher gehen will, bleibt nur ein Vergleich der einzelnen Variablen.
 
Zurück
Oben