TIA Variablen abhängig vom Typ in einem DB finden

severinelmecker

Level-2
Beiträge
15
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe einen DB mit bsp. 2000 Einträgen in dem unwillkürlich verschiedenen Datentypen existieren. Nun möchte ich den DB mit einer Funktion von oben nach unten Einlesen und alle Einträge Typ-Abhängig sortieren bzw. in einen weiteren DB kopieren.

Beispiel:

Quell DB:
Eintrag01Real0.0
Eintrag02Bool4.0
Eintrag03Bool4.1
Eintrag04Bool4.2
Eintrag05Bool4.3
Eintrag06Int6.0
Eintrag07Int8.0
Eintrag08Int10.0
Eintrag09Int12.0
Eintrag10Int14.0
Eintrag11Real16.0
Eintrag12Bool20.0
Eintrag13Int22.0
Eintrag14Int24.0
Eintrag15Bool26.0
Eintrag16Bool26.1
Eintrag17Bool26.2
Eintrag18Bool26.3


Ziel DB:
Eintrag01Bool0.0Wert von Quell-DB Adresse 4.0
Eintrag02Bool0.1Wert von Quell-DB Adresse 4.1
Eintrag03Bool0.2Wert von Quell-DB Adresse 4.2
Eintrag04Bool0.3Wert von Quell-DB Adresse 4.3
Eintrag05Bool0.4Wert von Quell-DB Adresse 20.0
Eintrag06Bool0.5Wert von Quell-DB Adresse 26.0
Eintrag07Bool0.6Wert von Quell-DB Adresse 26.1
Eintrag08Bool0.7Wert von Quell-DB Adresse 26.2
Eintrag09Bool1.0Wert von Quell-DB Adresse 26.3

Das ganze natürlich jetzt auch noch mit den INT und REAL usw. da würde ich dann weitere Schleifen bauen mit dem selben Prinzip.

Weis jemand wie man Datentypen in SCL ermitteln kann? und dass dann auch noch in Abhängigkeit der Position in einem DB?

Natürlich in SCL und zzt. TIA V16

Hat da jemand eine Idee?

DANKE!
LG
 
Also es gibt den Befehl TypeOf() und könntest dann anhand des Ergebnisses einen Array Of <datentyp> in einem DB beschreiben.
Allerdings fehlt da jetzt noch, wie man da "Blöd" durch den Ursprungs-DB kommt... woher kommt denn diese Unordnung? :p Und In neueren TIAs ist man ja eh "optimiert" und hat keine Adressen mehr. Da wird es schwieriger und hab da erstmal keine Lösung...
 
Also es gibt den Befehl TypeOf() und könntest dann anhand des Ergebnisses einen Array Of <datentyp> in einem DB beschreiben.
Allerdings fehlt da jetzt noch, wie man da "Blöd" durch den Ursprungs-DB kommt... woher kommt denn diese Unordnung? :p Und In neueren TIAs ist man ja eh "optimiert" und hat keine Adressen mehr. Da wird es schwieriger und hab da erstmal keine Lösung...

Also ich habe mittlerweile herausgefunden, dass ich mit ANY mal den Datentyp herausbekomme. Jetzt muss ich es nur irgendwie schaffen, dass ich jeden Eintrag einzeln und unabhängig vom Datentyp Abfrage und dann kann ich das in einer Schleife ganz bequem sortieren.

Wie würde es gehen wenn der Baustein optimiert ist? Das ich das ganze in einen optimieren Baustein bekomme ist mal das kleinste Problem.
 
Also ich habe mittlerweile herausgefunden, dass ich mit ANY mal den Datentyp herausbekomme.
Geht das wirklich? Wie? Zunächst als VARIANT ansprechen und dann schauen, was passiert?

Das ich das ganze in einen optimieren Baustein bekomme ist mal das kleinste Problem.
In einen optimierten Baustein? Ich hatte verstanden, dass Du die Information aus dem (optimierten) DatenBaustein heraussaugen möchtest.

Bin da sehr skeptisch, ob die Information über den DatenTyp überhaupt im compilierten Programm enthalten ist.
 
Geht das wirklich? Wie? Zunächst als VARIANT ansprechen und dann schauen, was passiert?


In einen optimierten Baustein? Ich hatte verstanden, dass Du die Information aus dem (optimierten) DatenBaustein heraussaugen möchtest.

Bin da sehr skeptisch, ob die Information über den DatenTyp überhaupt im compilierten Programm enthalten ist.
was redest du da?
via Any oder so wie du richtig gesagt hast TypeOf bekommt man den Datentyp einer Variable.
Bei Any via der AT Funktion (Siehe Hilfe im TIA).
Bei TypeOf kann man gleich ziemlich Simpel vergleichen -> DANKE! für die Info.

So.....
jetzt fehlt mir nur noch wie ich Indexweise unabhängig vom Datentyp den Baustein jeden Eintrag von oben nach unten Abfragen kann......
 
Und wozu soll das Ganze gut sein? Daß der SPS-Programmierer bei irgendeinem Folgeprojekt vielleicht die eine oder andere Tipp-Stunde spart, aber dafür alle Kunden doppelt so teure leistungsfähigere CPUs brauchen? ;)

Harald
 
Bitte nur hilfreiche Antworten! Die Warum-Fragen führen nicht zum Ziel und leider gibt es keinen Plan B bzw. ist das schon der kürzeste weg.

Ich bin schon ziemlich nahe am Ziel....... aber dennoch hier die Fragestellung, da ggf. der eine oder andere eine Idee hat:

Wie man "Eintragsweise" unabhängig vom Datentyp aus einem DB jeden Eintrag von oben nach unten Abfragen kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie man "Eintragsweise" unabhängig vom Datentyp aus einem DB jeden Eintrag von oben nach unten Abfragen kann.
Hmmm, unabhängig vom DatenTyp? Aber doch abhängig von den DatenTypen der zuvor abgefragten, damit man weiss, ab wo es sich lohnt nach weiteren Variablen zu stochern.
Gibt es denn auch die Möglichkeit, abzufragen, ob ein Byte keinen DatenTyp besitzt, weil keine Variable zugeordnet ist (Belegung ab der nächsten WortGrenze)?
Wie sieht es damit bei den BOOLes aus?
 
Noch ein nicht hilfreicher Beitrag ;) Bei DB mit Standard-Zugriff kann man nicht den Datentyp und die Struktur des DB-Speichers erforschen. Und bei "optimierten" DB kann man nicht durch die Struktur und die Variablennamen browsen... ein Teufelskreis...

Fazit: Vergiss Deine Idee.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...Ich bin schon ziemlich nahe am Ziel....
Glaube ich nicht.

Wie man "Eintragsweise" unabhängig vom Datentyp aus einem DB jeden Eintrag von oben nach unten Abfragen kann.
Wenn Du es schaffen solltest, einen Any-Pointer auf den ersten DB-Eintrag zu erzeugen (dessen Typ Du leider nicht kennst),
dann kannst Du Dir auch ausrechnen, wo der nächste Eintrag beginnt, denn alle erforderlichen Informationen stehen ja im Any-Pointer.
Dann kannst Du den Any-Pointer auf den nächsten DB-Eintrag erzeugen (dessen Typ Du leider wieder nicht kennst) usw.

p.s. Ich glaube nicht, dass Du das schaffst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Glaube ich nicht.


Wenn Du es schaffen solltest, einen Any-Pointer auf den ersten DB-Eintrag zu erzeugen (dessen Typ Du leider nicht kennst),
dann kannst Du Dir auch ausrechnen, wo der nächste Eintrag beginnt, denn alle erforderlichen Informationen stehen ja im Any-Pointer.
Dann kannst Du den Any-Pointer auf den nächsten DB-Eintrag erzeugen (dessen Typ Du leider wieder nicht kennst) usw.

p.s. Ich glaube nicht, dass Du das schaffst.

Also den ersten Eintrag kann ich zuweisen. Damit hätte ich nicht das Problem..... aber dann wird es natürlich ein Problem wie du richtig schreibst, da ich ja dadurch nicht weiß wie groß der nächste Eintrag ist....
dann geht's über Referenz
Wenn die UDT geändert wird ist's auch wieder mist... also besser vergiss es!
Wie geht das mit der Referenz bzw. was meinst du damit?
 
Zurück
Oben