WORD Variable umwandeln

boggle

Level-1
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
ich habe hier grade einen AX5203 Servoverstärker von Beckhoff.
8 Digitale Eingänge bzw. 7 Eingänge und 1 Ausgang.
Die Eingänge werden in eine Word Variable geschrieben, die ich auch im PLC Control lesen und beschreiben kann.
Nun habe ich das Problem das ich nicht genau weiß, wie ich jeden Eingang einer Boolschen Variablen zuweisen kann.
Der Wert verändert sich ja je nach geschalteten Ausgängen.
I1 = 1
I2 = 2
I3 = 4
...
I8 = 128
Wenn nur ein Eingang beschaltet wird, ist das ja kein Thema.
Aber bei mehreren addieren sich ja die Werte. I1 +I3 ist dann ja 5.
Wie kann ich das nun auseinanderhalten?

Danke
Boggle
 
Du hast doch eine absolute Adresse mit dem Du das Word verbunden hast.

z.B. %IW20
Dann kannst Du einfach noch weiter Variablen anlegen die Du mit den Adressen %IX20.0, %IX20.0 usw. verbindest.

Eingang_1 AT %IX20.0 : BOOL;
 
Hmmm. naja.
Ich hab unter Globale Variablen einfach eine Variable angelegt.
Die so aussieht : AX5203_IN AT %I* : WORD;
Diese habe ich im System Manager dann mit dem AX5203 verknüpft.
Wenn ich dann im SM schaue, hat diese Word Variable eine Adresse (2280)
Wenn ich jetzt einfach eine Variable Anlege mit 2280.0 verschiebt sich diese Adresse und wird automatisch zugewiesen.
Oder habe ich grade ein Brett vorm Kopf?!
 
OK.Hat sich erledigt, Danke.
Ich kann dann einfach für Eingang 1 schreiben AX5203_IN.0 usw....
Das schöne Brett ist weg :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
An den Bitoperator (die nun von Dir verwendete Lösung) habe ich bei der Aufgabenstellung gar nicht gedacht da ich persönlich ein AX5203_IN.0 wenig aussagekräftig halte. Dann doch lieber ein Variablennamen der auf die Funktion hinweist.
Dazu gibt es mindestens zwei Möglichkeiten:
1. Der verwendete Bitoperator mit Konstanten verwenden dazu muss man aber eine Compiler Einstellung ändern damit die Konstanten vor dem Übersetzen ersetzt werden (Projekt -> Optionen -> Übersetzungsoptionen -> Konstanten ersetzen).

2. So wie ich es in meiner ersten Antwort angedeutet habe. Du musst dann nur noch die Deklaration
AX5203_IN AT %I* : WORD;
durch
AX5203_IN AT %IW2280 : WORD;
ersetzen und TwinCAT kommt Deinen Wünschen nach und bildet Adressüberschneident Variablen.

PS: Die Idee von Ralle mit der Strucktur würde mir sehr gut gefallen. Leider unterstützt TwinCAT/CoDeSys 2.3 das auf der Bitebene nicht da eine Bool Variable in einer Strucktur leider ein Byte groß ist.
Da das aber eine Standard Aufgabe ist gibt es noch einige andere Möglichkeiten.
 
Nur mal das ich dich richtig verstehe.
Zum Punkt 2
AX5203_IN AT %IW2280 : WORD; hab ich angelegt.
Und jetzt lege ich dann auch noch an:
Eingang_1 AT %IX2280.0 : BOOL;
Eingang_2 AT %IX2280.1 : BOOL;

Verstehe ich das so richtig?
Falls ja, ist da ja nun das Problem, wenn sich die Adresse ändern sollte, muss ich das alles umschreiben oder nicht?
 
Warum sollte sich die Adresse ändern wenn Du die Adresse manuell vergibst?
 
Zurück
Oben