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

Ergebnis 1 bis 5 von 5

Thema: B&R Strukturen und deren Elemente vergleichen

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

    Beitrag


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    Ich habe folgendes Problem:

    ich möchte sehr gern nach einem Import eines Rezeptes über mappRecipe und RegPar die Parameter auf über-/ unterschreiten von Grenzwerte prüfen und ggf. einen Default Wert setzen.
    Hierzu habe ich folgende Strukturen:

    Rezept_TMP.Parametersatz_1.Par1 ( Bool)
    Rezept_TMP.Parametersatz_1.Par2 ( UDINT)
    Rezept_TMP.Parametersatz_1.Par3 ( INT)
    Rezept_TMP.Parametersatz_2.Par1 ( INT)

    Rezept_STD.Parametersatz_1.Par1 ( Bool)
    Rezept_STD.Parametersatz_1.Par2 ( UDINT)
    Rezept_STD.Parametersatz_1.Par3 ( INT)
    Rezept_STD.Parametersatz_2.Par1 ( INT)

    Rezept_GWO.Parametersatz_1.Par1 ( Bool)
    Rezept_GWO.Parametersatz_1.Par2 ( UDINT)
    Rezept_GWO.Parametersatz_1.Par3 ( INT)
    Rezept_GWO.Parametersatz_2.Par1 ( INT)

    Rezept_GWU.Parametersatz_1.Par1 ( Bool)
    Rezept_GWU.Parametersatz_1.Par2 ( UDINT)
    Rezept_GWU.Parametersatz_1.Par3 ( INT)
    Rezept_GWU.Parametersatz_2.Par1 ( INT)

    Diese Strukturen sind identisch aufgebaut.


    Nach dem Laden des Rezeptes stehen die Daten in der Rezept_TMP Strukur.
    Nun möchte ich über eine Schleife (habe ca. 200 Parameter zu Prüfen) die Temp Werte mit den GWU und GWO Werten vergleichen und beim über- / unterschreiten
    der Grenzwerte den entsprechenden STD Wert setzen.

    Mitt "ADR" bekomme ich die jeweilige Adresse der Struktur im Speicher und über "SIZEOFF" auch deren Größe.
    Wie kann ich jetzt die Anzahl der Elemente bestimmen (bestimmt mir ja die Anzahl der Schleifendurchläufe) und dann in der Schleife auf deren Werte zugreifen (fürs Vergleichen).

    Des weiteren würde mich interessieren, wie ich den Variablennamen der aktuell geladenen Variablen aus der TMP Struktur, dann in einen String umkopieren kann.

    Ich habe schon mal die Sys_Lib angeschaut, finde dort allerdings keinen so rechten Ansatz für mein Problem.
    Arbeiten aktuell mit dem AS4.2.5 und programmieren in ST.

    Ich bin für jeden Ansatz dankbar, da ich es eigentlich nicht mit 200 If/Elsif Anweisungen realisieren möchte.
    Man will sich ja auch weiter entwickeln


    Mit Besten Grüßen
    Ronny
    Geändert von Ronny1981 (12.08.2016 um 09:22 Uhr)
    Zitieren Zitieren Gelöst: B&R Strukturen und deren Elemente vergleichen  

  2. "Hallo Ronny

    Eine Struktur zerpflücken geht mit der SysLib sehr gut. Du brauchst als Startpunkt einzig einen PV Namen.

    Wenn du also mit "task:Rezept_TMP" startest, findest du mit der Funktion "PV_ninfo()" heraus, ob es sich um eine Struktur handelt und wie viele Felder sie beinhaltet.
    Mit der Funktion "PV_item()" findest du dann die Namen deiner Strukturfelder. Diese bastelst du hinter deinen Startnamen und entscheidest dann mit "PV_ninfo()" wie weiter vorzugehen ist.

    Das ganze lässt sich also wunderbar mit einer rekursiven Funktion lösen. Wenn du bei einem Feld angekommen bist, welches kein Array und auch keine Struktur mehr ist, ermittelst du mit "PV_xgetadr()" seine Adresse und accessierst sie mit dem entsprechenden Datentyp. Mit dem Adressoffset zu deiner Startvariable ("task:Rezept_TMP") weisst du auch bereits, wo relativ zur Startadresse von "Rezept_GWO", "Rezept_GWU" und "Rezept_STD" deine Referenzdaten liegen.

    Viel Erfolg
    Ulumulu1510"


  3. #2
    Registriert seit
    04.01.2015
    Beiträge
    54
    Danke
    0
    Erhielt 12 Danke für 12 Beiträge

    Standard

    Kenne die Recept Read Routine nicht.
    Kannst du den Datensatz nicht als Array anlegen und laden. Zumindest beim Lesen des Datensatzen muß die Info über die Anzahl der gelesenen Daten bekommen.

    Hast du dir im sys_lib auch die variable services angesehen (PV_ident.....). Hier bekommt man Infos über die Variablen.

  4. #3
    Ronny1981 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.10.2013
    Beiträge
    6
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der komplette Datensatz wird aus einer CSV Datei geladen. Leider möchte der Kunde nicht, dass der Datensatz als Array hinterlegt wird.
    Werde mir mal den Funktionsblock PV_Ident anschauen.
    Danke.
    Geändert von Ronny1981 (16.08.2016 um 08:52 Uhr)

  5. #4
    Registriert seit
    03.05.2015
    Ort
    Schweiz
    Beiträge
    3
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Ronny

    Eine Struktur zerpflücken geht mit der SysLib sehr gut. Du brauchst als Startpunkt einzig einen PV Namen.

    Wenn du also mit "task:Rezept_TMP" startest, findest du mit der Funktion "PV_ninfo()" heraus, ob es sich um eine Struktur handelt und wie viele Felder sie beinhaltet.
    Mit der Funktion "PV_item()" findest du dann die Namen deiner Strukturfelder. Diese bastelst du hinter deinen Startnamen und entscheidest dann mit "PV_ninfo()" wie weiter vorzugehen ist.

    Das ganze lässt sich also wunderbar mit einer rekursiven Funktion lösen. Wenn du bei einem Feld angekommen bist, welches kein Array und auch keine Struktur mehr ist, ermittelst du mit "PV_xgetadr()" seine Adresse und accessierst sie mit dem entsprechenden Datentyp. Mit dem Adressoffset zu deiner Startvariable ("task:Rezept_TMP") weisst du auch bereits, wo relativ zur Startadresse von "Rezept_GWO", "Rezept_GWU" und "Rezept_STD" deine Referenzdaten liegen.

    Viel Erfolg
    Ulumulu1510

  6. Folgender Benutzer sagt Danke zu Ulumulu1510 für den nützlichen Beitrag:

    Ronny1981 (23.09.2016)

  7. #5
    Ronny1981 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.10.2013
    Beiträge
    6
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    nach dieser möglichen Vorgehensweise habe ich gesucht. Das es diese Funktionen gibt, war mir bekannt. Allerdings wusste ich nicht, in welcher Reihenfolge diese anzuwenden sind und vor allem welche Funktionen ich genau für mein Fall brauche.
    Von daher vielen Dank. Werde mir mal den beschriebenen Ablauf genauer anschauen und mich dann an die Umsetzung wagen


    Gruß Ronny
    Geändert von Ronny1981 (19.08.2016 um 10:01 Uhr)

Ähnliche Themen

  1. Step 7 Vergleichen von Strukturen
    Von Chräshe im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 01.06.2015, 21:04
  2. Step 7 Zwei Strukturen [Bool] vergleichen
    Von Hausen im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 22.01.2014, 21:53
  3. Strukturen Vergleichen in denen Arrays vorkommen
    Von SteffenD im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 31.07.2013, 09:18
  4. KTP600 color PN & Strukturen
    Von Farinin im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 01.08.2012, 11:30
  5. TwinCAT V2.11: Vergleichen von Strukturen
    Von Chräshe im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 10.08.2011, 15:28

Stichworte

Lesezeichen

Berechtigungen

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