TIA Variablen abhängig vom Typ in einem DB finden

severinelmecker

Level-2
Beiträge
15
Reaktionspunkte
2
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? 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...
 
ich weiss ... codesys nützt dir nichts .. da gibt es den operator _varinfo ....
evtl hilft dir eine suche bei den SCL-operatoren weiter ?
 

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.
 
hmm dann müsste man nur noch mit einer schleife die db durchlaufen können, den typ bestimmen und in ein array schreiben ...
oder verstehe ich das falsch ?
 
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.
 
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.
 
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?
 
Alles egal, in einem optimierten DB kommst du nicht an die Info ohne Array und UDT
 
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
 
...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.
 
dann geht's über Referenz
Wenn die UDT geändert wird ist's auch wieder mist... also besser vergiss es!
 

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?
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…