Step 7 Vergleich von Bool/Byte/Word/Real

Simon P.

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

ich versuche gerade eine Rezepturverwaltung zu Programmieren die möglichst Variabel ist, die aber nur Werte sichert die ich auch benötige. Dafür habe ich mir überlegt das ich einen Baustein erstelle der von mir mit 10 Zahlen belegt wird. Die Zahlen sollen Zeiger sein die dann den dementsprechenden Datensatz aus dem Datenbaustein kopieren.
Soweit ist das auch noch kein Problem.

Jetzt zum eigentlichen Problem. Der Zeiger zeigt z.B. auf den DB100.dbb176 der soll Bitweise kopiert werden. Jetzt brauche ich eine Funktion die mir sagt das er die nächsten 8 Bits kopieren, weil er ja auf den Typ Byte schaut. Gibt es eine Möglichkeit zu erkennen auf welchen Datentyp (Bit/Byte/Word/Dword) der Zeiger zeigt um dann die richtige Berechnung durchführen zu können?

LG Simon
 
Schau Dir mal den Aufbau des Datentyps "ANY" an. Wenn Du Deine "Zeiger" als ANY übergibst, dann bekommst Du auch gleich die Information, ob der Zeiger auf Bool/Byte/Word/Dword zeigt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was meinst du mit die Zahlen sollen Zeiger sein ? Der Weg über ANY wird wohl am flexibelsten sein. Was genau möchstest du machen ? Ich verstehe jetzt nicht warum du nur 8 Bits kopieren willst ?
 
Ich habe eine Bausteinschnittstelle mit der Zahl 176 diese Zahl Zeigt auf das Byte/Word/DWord 176 im Datenbaustein also auf DB1.DB?176. Ich Durchlaufe den Baustein Bitweise wenn ich an der Bitadresse für 176 ankomme sollen die nachfolgenden Bits kopiert werden, nur ich weiß nicht wieviele, weil ich nicht weiß welcher Datentyp DB1.DB?176 hat.

Wenn der Datentyp ein Byte wäre würde ich ab der Adresse 176*8 = 1408 - 14015 Kopieren
wäre der Datentyp ein Word
 
da ist was falsch gelaufen :-o


wäre der Datentyp ein Word wäre die Adresse 176*8 = 1408 - 1423

ich hoffe das ist verständlicher.

Zum Datentyp ANY müsste ich noch etwas nacharbeiten bin da noch nicht so fit ich versuche es nächste Woche mal.

Danke für die schnellen Antworten
LG Simon
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi. Ich denke du hast da einen Denkfehler drinnen. Was soll die Zahl 176 aussagen ? Da du die Struktur des DBs nicht kennts kanns ja nur ein Zufallswert sein. Und wenn du was Zufälliges kopierst wie willst du es weiterverarbeiten ? Kann es sein das du das 176 Element in diesem DB meinst ? Und der DB aus gleichen Elementen besteht (die vlt einem DB Bytes sind und in einem anderen z.B Doppelwörter )
 
Das ist nun mal so, wenn man die universell projektübergreifend verwendbare Wollmilchsau entwickeln will, dann steht zur Entwicklungszeit gar nichts fest und es kann zur Laufzeit nur über Adresszugriffs-Schweinereien auf den unbekannten Speicherinhalt zugegriffen werden... so bekommt man dann schnell die selbe Unstabilität wie PC-Programme in die SPS-Welt - viel Spass ;)

Den Aufbau des Datentyps ANY findest Du z.B. hier: FAQ: Any-Zeiger für Datentypen

Harald
 
Ich würde da im Rezept immer ganze Doppelwörter Kopieren und zusätzlich ein INT verwenden in dem ich dann den tatsächlichen Datentyp hinterlege.

Also Array of STRUCT
mit jeweils:
INT = Datensatznummer
INT = Datentyp
DW = entsprechender Wert
 
Das erscheint mir wohl sehr kompliziert... Warum nicht einfach pro Projekt/Maschine/Station usw einen UDT mit den benötigten Parametern. Und den dann Programmnummernabhängig in den Arbeitsbereich kopieren. Das geht in SCL ganz easy, in AWL kommt man halt um den ANY nicht herum.
 
Zurück
Oben