Step 7 Daten und Datenbankverwaltung

netsroht

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

ich sitze gerade vor einem Problem, wo mir die Initialzündung fehlt. Die Aufgabestellung lautet wie folgt.

Ich habe einen Global-DB "Datenbank". Dieser besteht aus einem Array z.b. 1..10. In jedem Array-Element gibt es einen Datensatz Nummer, Länge, Breite, Höhe.

Weiter habe ich 20 Global-DBs "Daten_x". Diese bestehen aus einer eindeutigen ID und dem Index des Elements aus der "Datenbank". Also Index geht von 1..10. Dieser kommt über die Visualisierung in die DBs.
Diese dienen zur Produktverfolgung innerhalb der Anlage, d.h. zum Zeitpunkt n stehen die Daten in Daten_1, zum Zeitpunkt n+1 stehen die Daten in Daten_2 usw.

Nun möchte ich innerhalb der Anlage an verschiedenen Bearbeitungsschritten Produktdaten extrahieren und dem Programm übergeben.
Also z.B. möchte ich aus Daten_5 die dazugehörige Grundfläche ermitteln. Quasi mit dem Index aus "Daten_5" in die Datenbank und daraus dann Array[5].Länge und danach Array[5].Breite in ein MW speichern.

Ich stelle mir einen Baustein vor, dem ich den DB "Datenbank"(oder die DB-Nummer), den Index aus (in diesem Fall) "Daten_5" und den zu extrahierenden Typ (z.B. Länge) übergebe, nur wie ich den Typ herausnehme - da stehe ich gerade auf dem Schlauch.
Vielleicht über Datenanfang in dem Array-Feld und die Feldlänge?
Oder ist es auch - irgendwie - symbolisch möglich?

edit: Also Quasi
L "Datenbank".Array["Daten_5".Index].Länge

Gruß, netsroht
 
In den klassischen Programmiersprachen KOP/FUP/AWL geht das nicht vollsymbolisch, sondern nur über den Umweg mit Adressregistern.
Allerdings sei dir hier eindeutig SCL empfohlen, da kannst du das schon fast so schreiben ...

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Manuel,

SCL wäre mir klar, wie ich flexibel auf den Index des Arrays zugreife. Nur wie teile ich in SCL flexibel das Element des Arrays zu, d.h. z.B. Länge oder Breite.
Dann müsste ich als Eingabeparameter eine Nummer machen, wo jede Nummer für ein Element steht, z.B. 1: Länge, 2: Breite, 3: Höhe... oder geht es symbolischer?


Gruß, netsroht
 
Muss das Element denn Flexibel sein?

CALL FC_DB_READ
IN_Index := "Daten_5".Index
OUT_L := myL //z.B. TEMP-Variable
OUT_B := myB
OUT_H := myH

SCL:
OUT_L := "Datenbank".Array[IN_Index].Länge
OUT_B := "Datenbank".Array[IN_Index].Breite
OUT_H := "Datenbank".Array[IN_Index].Höhe

Mfg
Manuel
 
Das Thema ist, dass ein Feld der Datenbank aus ca. 40 Elementen besteht mit insgesamt knapp 400 Byte Speicher (sind zwei Strings dabei mit je 98 Byte).

D.h. der Baustein würde im Programm einfach ziemlich groß werden und müsste immer komplett beschaltet werden.

Daher hätte ich gerne eine flexible Lösung...

Gruß, netsroht
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thorsten (?),

ich sehe hier jetzt gerade nicht den Widerspruch zu dem Vorschlag von MSB ...
Der vorgeschlagene FC hätte als IN-Parameter die DB-Struktur und gäbe dir dann die Werte aus (und auch nur die), die du ihm programmierst das er sie ausgeben soll. Wenn du bestimmte Elemente deiner Struktur hier nicht willst dann kümmert sich der Baustein auch nicht darum und belastet auch nicht dein System.

Gruß
Larry
 
Hallo Larry,

in der "Datenbank" stehen verschiedene Sachen, die ich in der Summe alle in der Maschine benötige. Die Maschine besteht aus verschiedenen Teilen, z.B. Abbürsten, Aufheizen, Abkühlen.

Je nach Maschinenteil benötige ich unterschiedliche Daten aus der Datenbank.
Wenn ich einen Baustein programmieren würde hätte dieser eben ziemlich viele Ausgänge. Alternativ müsste ich pro Anlagenteil einen eigenen FC schreiben(Was vielleicht aber gar nicht so dumm wäre).

Gruß, netsroht

P.S.: Thorsten (!)
 
... oder du machst dir statt einem FC einen FB.
Dieser hätte dann alle Ausgangs-Variablen und würde auch immer alle Ausgangs-Variablen versorgen - du müßtest hier aber nur die OUT's beschalten, die du jeweils benutzen möchtest ...
Wäre ja auch noch eine Variante ...

Gruß
Larry
 
Zurück
Oben