Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: Strukturen Vergleichen in denen Arrays vorkommen

  1. #1
    Registriert seit
    06.06.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen, ich bin gerade dabei mir ein Programm zu schreiben, bei dem zwei Strukturen verglichen werden. Hierfür habe ich eine Lösung hier aus dem Forum gefunden (http://www.sps-forum.de/beckhoff-cod...r-twincat.html)

    Code:
    FUNCTION CompareStruct : BOOL
     VAR_INPUT
     adrS1: POINTER TO BYTE; (* Bekommt mit dem ADR Operator die Adresse von der 1. Struktur*)
     adrS2: POINTER TO BYTE; (* Bekommt mit dem ADR Operator die Adresse von der 2. Struktur*)
     uiSize: UINT; (* Bekommt die mit SIZEOF ermittelte Größe einer der beiden Strukturen*)
     END_VAR
     VAR
     i: UINT;
     END_VAR
    
    
     CompareStruct := TRUE;
     FOR i:= 1 TO uiSize DO
     IF adrS1^ <> adrS2^ THEN
     CompareStruct:= FALSE;
     EXIT;
     END_IF
     adrS1:= adrS1 + 1;
     adrS2:= adrS2 + 1;
     END_FOR
    Somit kann ich super Strukturen vergleichen.

    Mein Problem ist das eine Struktur wie folgt aussieht:

    Code:
    TYPE St_Daten :
    STRUCT
    
    	SAR_Rezeptname:			ARRAY[1..20] OF STRING;
    	LRAR_Pos_X_Achse:		ARRAY[1..20] OF LREAL;
    	LRAR_Pos_Z_Achse:		ARRAY[1..20] OF LREAL;
    	LRAR_Pos_Y_Achse:		ARRAY[1..20] OF LREAL;
    	LRAR_Spanndruck:		ARRAY[1..20] OF LREAL;
    	XAR_Gas_On:				ARRAY[1..20] OF BOOL;
    	XAR_Lampe_On:			ARRAY[1..20] OF BOOL;
    
    END_STRUCT
    END_TYPE
    die andere Struktur sieht wie folgt aus:

    Code:
    TYPE St_Positionen :
    STRUCT
    
    	SAR_Rezeptname:			STRING;
    	LRAR_Pos_X_Achse:		LREAL;
    	LRAR_Pos_Z_Achse:		LREAL;
    	LRAR_Pos_Y_Achse:		LREAL;
    	LRAR_Spanndruck:		              LREAL;
    	XAR_Gas_On:		              BOOL;
    	XAR_Lampe_On:			BOOL;
    
    END_STRUCT
    END_TYPE
    Beinhaltet meine erste Struktur ("St_Daten ") keine Arrays kann ich diese super mit meiner zweiten Struktur ("St_Positionen") vergleichen.
    Aber Sobald die Arrays in der ersten Struktur vorhanden sind, ist der vergleich nie gleich, weil ja in der ersten Struktur Arrays drin sind und die Werte dann im Vergleich zur zweiten Struktur unterschiedlich sind.

    Meine Frage ist, kann ich bei meinem Vergleich irgendwie sagen er soll nur auf das z.B. 4.Array von Struktur eins("St_Daten") mit der zweiten Struktur ("St_Positionen") vergleichen??
    Zitieren Zitieren Strukturen Vergleichen in denen Arrays vorkommen  

  2. #2
    Registriert seit
    07.06.2007
    Beiträge
    143
    Danke
    2
    Erhielt 24 Danke für 24 Beiträge

    Standard

    Hallo Steffen,

    so direkt nicht. Allerdings gibt es min. 2 Möglichkeiten.

    1. Deine erste Struktur sieht eigtl. genau so au wie die zweite nur als Array. Wieso deklarierst du dann nicht die erste Sturktur so:
    Code:
    TYPE St_Daten :
    STRUCT
    	my_ST_Positionen:			ARRAY[1..20] OF ST_Positionen;
    END_STRUCT
    END_TYPE
    Ok - macht natürlich wenig Sinn eine Struktur die nur aus einem Element (auch wenn es ein Array ist) besteht. Dann kannst du einfach deine bekannte Funktion nutzen und entsprechend vergleichen.

    2. Falls du auf diese Art der Deklaration angewiesen bist kannst du einen Umweg über ein "Vergleichsobjekt" machen. Das geht so:

    Code:
    Index : INT := 1; (* 1-20 *)
    my_Vergleichsobjekt.SAR_Rezeptname := my_ST_Daten.SAR_Rezeptname[Index];
    my_Vergleichsobjekt.LRAR_Pos_X_Achse:= my_ST_Daten.LRAR_Pos_X_Achse[Index];
    my_Vergleichsobjekt.LRAR_Pos_Y_Achse:= my_ST_Daten.LRAR_Pos_Y_Achse[Index];
    my_Vergleichsobjekt.LRAR_Pos_Z_Achse:= my_ST_Daten.LRAR_Pos_Z_Achse[Index];
    my_Vergleichsobjekt.LRAR_Spanndruck:= my_ST_Daten.LRAR_Spanndruck[Index];
    my_Vergleichsobjekt.LRAR_Gas_On:= my_ST_Daten.LRAR_Gas_On[Index];
    my_Vergleichsobjekt.LRAR_Lampe_On:= my_ST_Daten.LRAR_Lampe_On[Index];
    Dann deine Vergleichsfkt mit der Kopie durchführen.


    Version 1 hat gegenüber der Version 2 den Vorteil, dass du dir die Kopiererei sparst und falls noch ein Element in der Struktur dazu kommt der Code nicht angepasst werden muss.

    Ich würde auf jedenfall Version 1 bevorzugen.

    Grüße BJK

  3. #3
    Registriert seit
    26.07.2013
    Beiträge
    16
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich würde auch Variante 1 nehmen -> ist sauberer.
    PS: Anstelle von Pointern kann man auch die Funktion MEMCMP verwenden.
    Treibt dich deine Steuerung in den Wahnsinn?
    Mich auch

    RE
    www.rmth.at

  4. #4
    SteffenD ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    06.06.2012
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten morgen zusammen,

    @excelite, super vielen Dank mit der Variante 1 funktioniert das super. Genau so habe ich mir es vorgestellt. So spart man sich Quellcode den man eintippen muss und zudem kann ich dann in meiner Struktur noch Variablen hinzufügen ohne meine Vergleichfunktion umzuschreiben. Ich habe wohl wieder zu kompliziert gedacht um auf so eine einfache Lösung wie die Möglichkeit 1 von dir zu kommen.
    Vielen Dank nochmals!!!!!!!!!!!!!

Ähnliche Themen

  1. In Arrays und Strukturen denken
    Von vollmi im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 18.10.2011, 13:35
  2. TwinCAT V2.11: Vergleichen von Strukturen
    Von Chräshe im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 10.08.2011, 15:28
  3. 2 Arrays aus 2 DBs vergleichen
    Von Günni1977 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.12.2008, 17:14
  4. SCL -Arrays mit einander vergleichen
    Von MatthiasH24 im Forum Simatic
    Antworten: 89
    Letzter Beitrag: 09.09.2008, 19:54
  5. umverdrahten von ext. Variablen die in Scripten vorkommen
    Von dellamorte-dellamore im Forum HMI
    Antworten: 2
    Letzter Beitrag: 08.02.2006, 12:33

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •