TIA Array of Struct verschiedene Bereiche beschreiben

ChrisE

Level-1
Beiträge
6
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich sitze gerade an einer Realisierung eines Lagersystems und habe da eine kleinere Denkblockade :confused:

Ich arbeite mit TIA V15 und einer CPU 1513-1PN

Ich habe einen DB_Forminfo angelegt, in dem ich die Informationen ablege zu den eingelagerten Formen.
Diese habe ich als Array (1...100)of Struct angelegt.
Jede Structur enthält :
Formtyp / INT
Reihe / INT
Platz / INT
Position / REAL
DB_Formeninfo.png

über mein HMI kann ich eine Formnummer ( 1 bis 100 ) eingeben und möchte dann deren Informationen ändern.
als Beispiel : Form Nr. 8 hat den Typ 3 und ich muss den auf Typ 2 ändern
DB_Visu an SPS.png
Hat da jemand ne Idee, wie man so etwas realisiert?
Steh da grade voll auf dem Schlauch :(
 
Moin,

Wenn ich dich richtig verstehe gibst du doch mit deinem HMI die Formnummer ein und diese Nummer entspricht doch dann dem Index deines Arrays aus deinem DB_Forminfo.
Ich würde also in der SPS anhand deines Visu-DB schauen, welche Form im HMI ausgewählt wurde, und dann das entsprechende Element (oder nur Teile der Struktur) aus DB_Forminfo in den Visu_DB kopieren und zur anzeige bringen. Wenn man was ändern möchte, brauchst du noch den umgekehrten Weg - von Visu_DB in entsprechendes Element des Arrays im DB_Forminfo.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Howard,

ja du hast mich schon richtig verstanden.
Danke für die schnelle Antwort!

ich hab nur keine richtige Idee, mit welchem Befehl ich das in TIA löse.
Also wie ich auf die gewünschte Struct ( Form) schreibe
 
In etwas so...

Code:
//Wenn sich die gewählte Formnummer ändert -> Eintrag auf HMI kopieren

IF "DB_Vsu an SPS".Form Nummer" <> #FormnummerStatic THEN 
   "DB_Formnummer".FormNr[#Formnummer] := "DB_Vsu an SPS".Form ändern";
END_IF;

//Auf HMI gewählte Formnummer speichern
#FormnummerStatic := "DB_Vsu an SPS".Form Nummer;

//Von HMI in Array kopieren
IF "DB_Vsu an SPS.speichern" THEN
      "DB_Formnummer".FormNr[#Formnummer] := "DB_Vsu an SPS".Form ändern";
END_IF;

Und warum hast du in deinem HMI DB ein Array[0..0] angelegt ? Einfache Struct tuts auch..

Edit: Ich bin jetzt doch nicht sicher ob man Structs in SCL zuweisen kann. Wenn du aus der Struct einen PLC-Datentyp machts gehts sicher... Ansonsten BLK_MOV benutzen oder alle Elemente einzelen zuweisen.
 
Zuletzt bearbeitet:
Du kannst auch direkt über die Indexvariable des Array im HMI arbeiten.

Dazu ziehst du das erste Array-Element (die 1. Struktur) aus dem DB in eine HMI-Variablentabelle.
Bei den Eigenschaften gehst du dann auf Adresse, wählst dort Indexvariable und gibst eine von dir angelegte HMI-Variable vom Typ Int an.
Im Feld "PLC-Variable" steht dann automatisch "Multiplexvariable".

Nun kannst du in einem Bild des HMI deine Felder mit den Elementen aus dieser Multiplex-Variable anlegen und ein Feld, in welchem du den Index wählen oder eingeben kannst.
Angezigt werden dann die Werte, die zum Index gehören, ändern ist entsprechend auch möglich.

Mit etwas Geschick, kann man sogar mehrstufige Multiplexvariablen anlegen, aber das ist dann etwas verzwickter, die Übersicht zu behalten.
Außerdem passiert es manchmal, dass TIA beim Hochrüsten auf eine neue TIA-Version solche Multiplexvariablen zerschießt.

PS: Array, die auch im HMI verwendet werden immer mit 0 beginnen, sonst wird das im HMI falsch (verschoben) verwendet. (Zuminste bei V14 war das noch so).
Schadet ja auch nicht, ist eben ein Element mehr. Diese kann man dann gut für die Multiplex-Variable nutzen, da sieht man am Variablennamen sofort, dass hier nicht direkt zugegriffen wird.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So ich hab mal alle Tipps von euch ausprobiert und die Funktionieren prima.
Danke dafür!!
ich hab mich in meinem Fall für die SCL Variante entschieden.
Das ganze sieht dann so aus und klappt super. (Falls mal jemand ein ähnliches Vorhaben hat)

Code:
//Auf HMI gewählte Formnummer speichern
#Formnummer := "DB_Visu an SPS"."Form Nummer";

//Wenn sich die gewählte Formnummer ändert -> Eintrag auf HMI kopieren
IF "DB_Visu an SPS"."Form Nummer" <> "FormnummerStatic" THEN
    "FormnummerStatic" :="DB_Visu an SPS"."Form Nummer";

        //Daten aus DB_Info nach HMI schreiben
        "DB_Visu an SPS"."Form ändern" := "DB_Formeninfo"."Form-Nr"[#Formnummer];

        //bei jeder FormNr. Änderung im HMI, holt es sich die Ist Werte der
        //ausgewählten Form
    END_IF;


//Auf HMI gewählte Formnummer speichern
IF "DB_Visu an SPS".speichern THEN
    "DB_Formeninfo"."Form-Nr"[#Formnummer] := "DB_Visu an SPS"."Form ändern";
END_IF;
 
Zurück
Oben