TIA selbsterstellte Datenformate in DB

Credofire

Level-1
Beiträge
640
Reaktionspunkte
35
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

ich habe mal wieder eine Verständnisfrage. Grundlage: ich habe 2 benutzerdefinierte Datenformate.
Format 1 der Form: xy : int , xyz : struct mit 16 bool
Format 2 der Form: xy : int , xyz : word

Dem xyz als struct sind jedem bool quasi Ausgänge zugeordnet, ala bit0 Motor 0, bit1 Motor 1 usw.
Dem xyz als als WORD sind Hexzahlen zugeordnet.
Dem xy sind dabei die Zustandsnummern zugeordnet.
In einem Zustands-DB sind für jeden Zustand den die Maschine einzelne Zustände angelegt, die über Sprungmarken angesprungen werden mit xy als Zustandsnummer.
Der DB sieht ungefähr so aus:
static
abc | Format 1 (aktueller Zustand)
xy | int
xyz | struct (darunter dann die 16 Bits)
def | Format 2 (jeweiliger angeforderter Zustand)
xy | int
xyz | WORD
Die einzelnen Bits aus dem Struct werden in einem Ausgabe-FB abgerufen und steuern beispielsweise die Freigabe eines FU.
Das das WORD dem Struct entspricht ist mir klar. Im Zustand 2 wird beispielsweise festgelegt xyz := 16#0301.
Wie kommt dieses WORD nun in das Struct damit die einzelnen Bits die Motoren ansteuern können? Liegt das vielleicht nur dem gleichen Namen xyz?
 
Hallo,
ich mußte deinen Beitrag 3 mal lesen um ihn so zu verstehen, wie ich ihn nun verstanden habe.
Verstanden habe ich :
Das Format 1 und das Format 2 zeigen beide den gleichen Inhalt nur in unterschiedlichen Sichtweisen - sie werden aber parallel aktualisiert.
Wenn ja, dann wird das wahrscheinlich so realisiert, dass die Perepherie-Info's vom dem FU sowohl in den einen Bereich (Format 1) wie in den anderen Bereich (Format 2) geschrieben werden - also hintereinander weg.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Maschine arbeitet, durchläuft sie verschiedene Zustände der Reihe nach, bzw. per Sprungmarke. In jedem dieser zustände sind Beschaltungen die "Motorenausgänge" als 16#xxxx hinterlegt. Dass heist, in dem aktuellen Zustand steht die 16#0001 drin, was bedeuten würde, dass beispielsweise FU1 jetzt Freigabe haben soll. Dieses Bit x.0 wird in einem FB nun zum ansteuern benutzt.
Die Frage ist nun, wenn ich nun diesen Zustand mit anspringe wo die 16#0001 für das xyz hinterlegt ist, wird dies ja abgefragt. Bedeutet das, dass gleichzeitig das Bit x.0 auch 1 wird ohne das ich irgendetwas dazu tun muss? Weil es ist ja eigentlich ein anderer Speicherbereich im DB. Der Variablen-Name an sich ist gleich. Das Bit hat im DB das Offset 2.0. Das entsprechende Bit im WORD hat aber beispielsweise das Offset 82.0.
Wie komme ich von der 82.0 zu 2.0 ohne irgendein zutun? Einen schreibenden Zugriff auf die einzelnen Bits in dem STRUCT konnte ich nicht finden.
 
Diese Frage kann ich dir ohne genaue Kenntnis deines Programms nicht zuverlässig beantworten. In meinen Programmen wäre es vermutlich so - es ist aber eine Frage, wie es gemacht ist ...
Du solltest in diesem Zusammenhang klären, wie die Daten hin und her übertragen werden. Dafür vielleicht mal nach SFC13,14 oder SFC20 suchen. Es kann aber auch irgendwo (da wir ja von 2 Worten sprechen) irgendwo ein "L PED ..." und ein "T PAD ..." stehen oder das Gleiche mit "L PEW ..." bzw. "T PAW ...".
Schau doch einfach mal nach der Perepherie-Adresse des fraglichen Umrichters - die mußt du bei allen diesen Aufrufen irgendwie wiederfinden - dann weißt du vielleicht schon mehr ...

Gruß
Larry
 
Zurück
Oben