TIA Schleife programmieren bei gemischtem Datenbaustein

Falcon9

Level-2
Beiträge
12
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,

ich habe ein Problem auf das ich noch keine gewünschte Lösung gefunden habe.
Vielleicht hat jemand eine Anregung wie man das lösen kann.

Ich habe ein DB mit gemischten Datentypen.
Dieser DB ist für mir gesetzt/unveränderlich da ich sonst zuviel im Programm umstellen müsste.

Meine Aufgabe ist es die einzelnen Parameter Spaltenweisen in eine Sql Datenbank zu befüllen.
Ich hätte das gerne mit einer Schleife gemacht, kann aber dadurch das ich gemischte Datentypen habe kein Array verwenden (optimierter Baustein).
Wie würdet ihr das angehen?

Für die Kommunikation zur Datenbank verwende ich den Siemens Sql Baustein
(Beitrag: https://support.industry.siemens.com/cs/ww/de/view/109779336)

Ich habe gerade einen Lösungsansatz, finde den aber weniger elegant.


Grüße

Falcon9
 
Wenns kein Array ist und noch dazu gemischt gehen nur einzelne Zuweisungen. Wenn die Datenbreiten immer gleich sind könnte man mit indirekter Adressierung arbeiten, würde ich aber vermeiden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Datenbank sollen die Daten jeweils mit demselben Datentyp wie im DB erscheinen?
Alle Nicht-Array-Variablen mußt Du jede Variable einzeln anfassen. Schleife geht nicht.

Meine Aufgabe ist es die einzelnen Parameter Spaltenweisen in eine Sql Datenbank zu befüllen.
Was meinst Du mit "spaltenweise"?

Harald
 
Schön wäre wenn die Datentypen gesammelt sind, erst BOOLs, dann INTs, dann REALs, dann STRINGs.
Dann kann man pro Datetyp eine Schleife machen.
Wenn die obengenannte Datentypen wie beschrieben grupiert sind, aber nicht in Arrays gesammelt, dann kann man sie trotzdem in Arrays umwandeln.
Eine Verfahren ist alternative "Sicht" mittels AT.
Eine andere Verfahren ist die Daten in Arrays kopieren mittels Serialize/Deserialize.

Wenn die Datentypen unterschiedlich und 'gemischt' sind, also nicht grupiert wie oben beschrieben, dann kann man sie nicht in eine Schleife oder Schleifen behandeln.
 
Wenn die Datentypen unterschiedlich und 'gemischt' sind, also nicht grupiert wie oben beschrieben, dann kann man sie nicht in eine Schleife oder Schleifen behandeln.
Könnte man schon, wenn man ein Array anlegt, in dem man zu jedem Datum (inkl. evtl. nicht belegter Bits/Bytes) den entsprechenden DatenTyp codiert ablegt und evtl. auch noch einen WiederholungsFaktor. Wie man die DatenTypen in diesem Array codiert, bleibt einem selbst überlassen.
In einer Schleife könnte man das Array dann abarbeiten und per CASE die verschiedenen Fälle behandeln. Ist schon ein ziemlicher Aufwand, aber der kann je nach Anwendung vielleicht gerechtfertigt sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätte das gerne mit einer Schleife gemacht, kann aber dadurch das ich gemischte Datentypen habe kein Array verwenden (optimierter Baustein).
Problem: in einem "optimierten" DB kann man außer Arrays nichts indirekt adressieren.

Man müsste den DB erst in eine indirekt adressierbare Form umwandeln (Serialize?) und über ein zusätzliches Array eine Datentyp-Beschreibung hinzufügen. Dann könnte der DB-Inhalt in einer Schleife verarbeitet werden. Allerdings macht da das manuelle Erzeugen der Strukturbeschreibung schon mehr Arbeit als gleich jede einzelne Variable einzeln zu kopieren.

Harald
 
Problem: in einem "optimierten" DB kann man außer Arrays nichts indirekt adressieren.
Du hast natürlich Recht, Harald. Den optimierten DB hatte ich glatt überlesen.
Der Aufwand wäre für meinen Geschmack auch erst gerechtfertigt, wenn man häufiger Anwendungen für solch eine Routine hätte und den DatenBausteinen nicht nachträglich eine Struktur "überziehen" kann - warum auch immer.
 
Hallo Forum,

danke für die zahlreichen Antworten.


Was meinst Du mit "spaltenweise"?
Ich habe in der Sql-Datenbank eine Tabell mit 300 spalten > diese müsste ich einzeln befüllen.
Der Transact Befehl für eine Zeile mit 300 Spalten ist länger als die max. zulässige Stringlänge. Daher Spaltenweise..

Schön wäre wenn die Datentypen gesammelt sind, erst BOOLs, dann INTs, dann REALs, dann STRINGs.
Dann kann man pro Datetyp eine Schleife machen.
Ja, leider sind im DB verschiedene UDT aufgerufen, weshalb die Daten nicht strukturiert sind. Mein Gedanke war auch schon pseudo Variablen in den UDT's anzulegen um eine gleiche Struktur zu schaffen.

Man müsste den DB erst in eine indirekt adressierbare Form umwandeln (Serialize?) und über ein zusätzliches Array eine Datentyp-Beschreibung hinzufügen.
Hatte ich auch schon überlegt. Das Zielformat ist aber String. Datentyp muss konvertiert werden (REAL_TO_STRING,....).
Könnte ich Serialize/Deserialize in die Kovnertierung packen?? :confused:

Im Moment habe ich mir eine eigene Schleife über Schrittketten gebaut und frage die verschiedenen Datenytpen ab.
Es funktioniert zwar, allerdings habe ich auch viel Code produziert :ROFLMAO:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Sind die Daten in Typen (BOOLs, INTs, REALs, ...) gruppiert, oder sind sie durcheinander gemischt ?
Wenn gruppiert kann man sie mittels serialize/deserialize relativ einfach in passender Arrays kopieren, und davon pro Datentyp durch Schleifen behandeln. Die Umwandlung von REAL to STRING wurde ich in die Schleife machen.

Für Serialize/Deserialize guck mal Beispiel 2 in diesen FAQ:
Wie können Sie in STEP 7 (TIA Portal) Speicherbereiche und strukturierte Daten kopieren?

edit: Tsculdigung, dass die Daten nicht in Typen gruppiert sind hätte ich in den vorigen Bertrag lesen können.
 
Zuletzt bearbeitet:
MCAS-Phänomen des Editors

1. Ich habe in der Sql-Datenbank eine Tabell mit 300 spalten > diese müsste ich einzeln befüllen.
Der Transact Befehl für eine Zeile mit 300 Spalten ist länger als die max. zulässige Stringlänge. Daher Spaltenweise.
2. Ja, leider sind im DB verschiedene UDT aufgerufen, weshalb die Daten nicht strukturiert sind. Mein Gedanke war auch schon pseudo Variablen in den UDT's anzulegen um eine gleiche Struktur zu schaffen.
3. Das Zielformat ist aber String. Datentyp muss konvertiert werden (REAL_TO_STRING,....).
4. Könnte ich Serialize/Deserialize in die Kovnertierung packen??
5. Im Moment habe ich mir eine eigene Schleife über Schrittketten gebaut und frage die verschiedenen Datenytpen ab.
Es funktioniert zwar, allerdings habe ich auch viel Code produziert
1. OK, Du musst also zu jedem Datum noch angeben, um welches Datum es sich handelt.
2. Die Daten sind NICHT strukturiert, WEIL verschiedene UDT aufgerufen sind? :confused:
3. Da sehe ich nur bei den BOOLs EinsparPotenzial, wenn man '0' und '1' statt 'True' und 'False' ausgibt.
Vorlaufende Nullen werden bei den ZahlenFormaten wohl ohnehin unterdrückt.

4. Grundsätzlich ist es eher GeschmacksSache, ob man Funktionen schachteln oder lieber sichtbare ZwischenErgebnisse produzieren mag.
5. Wenn man es versäumt hat oder es nicht möglich ist, eine sich wiederholende DatenStruktur zu schaffen, dann kann das Interpretieren der Struktur auch nicht einfacher sein, als die Struktur selbst.
Es ist dann eben viel Code erforderlich. Eine Anwendung geschweige denn Notwendigkeit für Schrittketten sehe ich hier aber nicht. Dadurch würde mit Gewalt dafür gesorgt, dass zuviel Code zu produzieren ist.

Edit:
Warum der EdiTor vor "2." meint, eigenmächtig die Quotierung zu unterbrechen und dann fortzuführen ... keine Ahnung. Ich gebe jetzt auf, dagegen anzukämpfen. ;)

PS:
Meinst Du mit Schrittkette etwa "nur", dass Du eine CASE-Selektion verwendest?
Schrittketten kann man mit CASE realisieren, aber die Anwendung von CASE wandelt nicht automatisch ein Programm in eine Schrittkette um. ;)
 
Zuletzt bearbeitet:
Zurück
Oben