TIA Daten auslesen und in Datenbank speichern

Pipo1092

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich bin recht neu hier aber ich bin guter dinge das ich hier Hilfe finde.
Ich muss für ein Projekt bei uns Werte von 3 Absolutwertgebern speichern. Diese müssen einem Werkstück zugeordnet werden. Welches auch separat gespeichert werden soll. Die Werte der Geber sollen sollen mehrfach abgespeichert werden, also die Maschine hat verschiedene Positionen die angefahren, abgespeichert und wieder ausgegeben werden sollen. Ich dachte daran für jedes werkstück ein array anzulegen und die passenden Geber-werte dem Array zuzuordnen. Da ja ein Werkstück mehrere Positionen zugeordnet werden sollen. Die Positionen sollen dann über taster durchgeschaltet werden können. Da ich ein SPS-Nueling bin hatte bis jetzt nur einen Kurs besucht, hab ich von solch komplexen dingen noch keine Ahnung.
Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt. Sonst einfach gerne melden.

MfG

Pipo
 
Hallo Pipo,

du wirst deine Absolutwertgeber ja als Eingänge haben. Welchen Datentyp die haben hängt von der Baugruppe ab. Oftmals ist das ein WORD, INT oder REAL. Die Werte kannst du ja ganz einfach jederzeit abspeichern. Dazu einfach den Eingang (am besten als Peripherieeingangswort (PEW bzw PED)) lesen und mit Move kopieren. Wie du die dann verarbeitest kann dir hier keiner sagen, da das abhängig von deinem Projekt ist. Überleg dir erstmal eine Struktur bevor du irgendwas programmierst.

PS: Damit du hier wirklich Hilfe findest solltest du dir mal die Foren Richtlinien durchlesen. Du hast nämlich ganz viele wichtige Infos (z.B. Step 7 / TIA version, etc.) nicht dazu geschrieben.

Gruß Christian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Stoky,

erstmal danke für die Rückmeldung. Tut mir leid das ich die Infos vergessen hab. Ich arbeite mit einer STEP 7 1212C und der TIA Version 15.1. Mein Problem ist, nicht nur das Speichern sondern das Sie über einen Taster direkt hintereinander gespeichert werden müssen. D.h. man Fährt alle 3 Motoren so wie man sie haben will, dann sollen die Werte dem Werkstück zugeordnet abgespeichert werden, dann sollen die 3 Motoren wieder gefahren werden und dann wieder dem Werkstück zugeordnet werden als "Position 2". sodass die vorherigen werte immer noch abrufbar sind. Ich hoffe ich kann mich einigermaßen verständlich ausdrücken.

MfG Pipo
 
Beispielsweise wäre es möglich mit einem Dropdownfeld an einem HMI, oder mit einem Drehschalter die Position (INDEX) auszuwählen. Als Struktur würde sich ein Array[1..Anzahl Positionen] of Struct mit 3 Messwerten (Moto 1-3) empfehlen. Dann kannst du schön in SCL deine INDEX-Variable nehmen und das ganze mit ein paar Zeilen programmieren.
 
Grüße Pipo,

solch ein ähnliches Problem habe ich mich heute beschäftigt. Um verschiedene Werte seperat in verschiedenen Speicher Adressen zu speichern, habe ich mit einem Pointer realisieren können.
Vielleicht hast du schonmal davon was gehört?

Ich gebe einfach mal zwei links dazu, die mir sehr geholfen haben.

Pointer Zeiger FIFO LIFO

http://dahlhoff-automation.de/wp/?p=66

Damit könntest du theoretisch jedesmal eine neue Adresse zuweisen und somit deine Positionen nacheinander speichern.

Gruß Wolf
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen,

solch ein ähnliches Problem habe ich mich heute beschäftigt. Um verschiedene Werte seperat in verschiedenen Speicher Adressen zu speichern, habe ich mit einem Pointer realisieren können.

(Any-)Pointer ist eine Möglichkeit, in Zeiten von symbolischer Programmierung allerdings oftmals nicht mehr State of the Art. Zudem deutlichst komplizierter und unübersichtlicher. Wenn das nicht vernünftig kommentiert wird versteht das oftmals nach ein paar Monaten nicht mal mehr der Autor. Da heutzutage Verständlichkeit/Wartbarkeit des Programmcodes immer wichtiger wird sind Pointer also oft ungeeignet. Nicht zu vergessen, eine Querverweissuche funktioniert dann gar nicht.

In diesem Falle ist IMHO der Pointer quasi mit Kanonen auf Spatzen geschossen.


Möglich wäre beispielsweise sowas in einem SCL Baustein oder Netzwerk:
Startsignal: BOOL
INDEX: INT
DB_ Speicher: DB mit einem Array of Struct, der ein Array [1..3] of INT enthält
Code:
IF Startsignal THEN //Wenn die Werte abgespeichert werden sollen, werden die Absolutwertgeberpositionen in die gewünschte Struktur geladen
    "DB_ Speicher".Position[INDEX].Motor[1] := "Absolutwert_Motor_1";
    "DB_ Speicher".Position[INDEX].Motor[2] := "Absolutwert_Motor_2";
    "DB_ Speicher".Position[INDEX].Motor[3] := "Absolutwert_Motor_3";
    Startsignal := FALSE; //Startsignal zurücksetzen
END_IF;


Gruß Christian
 
Zurück
Oben