Aus Hex Zahl wieder Bitmuster machen

Deimos0815

Level-1
Beiträge
32
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Morgen, ich hab da ein Problem und ich hoffe einfach mal das mir einer Helfen kann. Folgendes: Ich will aus einer Hex - Zahl wieder ein Bitmuster machen. Dabei steht jedes Bit für ein Element einschalten bzw. ausschalten.

DW#16#0 wieder in 0000 0000 ...

Anschliesend will ich dann jedes Bit einem Merker zu ordnen.

Hoffe mal ihr könnt mich ansatzweise Verstehen.

Danke schonmal im Vorraus und bis denne
 
Eine Hex-Zahl IST nur eine Darstellungsform eines Bitmusters.

L DBX.DBWY
T MW0

M0.0 - M1.7 sind deine Bits ... fertig.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke schonmal für die schnelle Antwort. Da hätte ich auch selbst darauf kommen können. Wollte das schon mit schieben und dividieren machen. Da hab ich aber dann noch eine Frage:
Das ganze soll in einem Funktionsbaustein passieren(dabei nutze ich auch das Laden von werten aus Instanzbausteinen ...anderes Thema).

Feste Merker wollt ich nciht nutzen, da der FB in viele Steueruungen eingebaut werden soll und die Merkerverteilung unterschiedlich ist.
kann ich auch das ganze in den Statischen Teil laden und dann darauf dann Bitweise zugreifen? also quasi:

L DBXXX.DBW16
T Set_Elemente

.
.
.

U Set_Elemente1.1 (oder so ähnlich)

Danke schonmal
 
Zuletzt bearbeitet:
Hallo,
Mit meineVariable.BitNummer funktioniert es in Step7 so nicht.
Du hättest nun die Möglichkeit es funktionell und/oder schön zu machen.

Funktionell (aber nicht schön und auch nicht zukunftssicher) wäre :
Code:
L #meineEingangsVariable
T LW0
 
U L1.0
= #Out_Bit0
U L1.1
= #Out_Bit1
 
usw.
Es ist so deshalb kritisch, weil du den Lokaldatenbereich direkt adressierst - das sollte man, wo es eben geht, vermeiden.

Schön wäre, du legst im Lokaldatenbereich deines FC/FB eine Struktur mit Bits an, die dem Aufbau deiner Eingangsvariablen entspricht. Auf die transfrierst du dann dieselbe :
Code:
LAR1 p#meineStruktur
L #meineEingangsVariable
T W [AR1, p#0.0]
 
U meineStruktur.Bit0
= #Out_Bit0
 
usw.
Gruß
Larry
 
Super, danke schonmal wieder. Mit der direkten Adressierung ist mir bewusst, allerdings darf sich dort nichts ändern, da dann alles steht. Die Steuerungen läuft schon so auf den Maschienen und auch die DB`s werden durch die Quellen immer nach dem selben Schema erstellt. Aber eine Frage hab ich noch für ganz Blöde.

T LW0

Wird in der Zeile wieder ein Merkerdoppelwort benutzt ?

Danke schonmal

Gruß
 
So ein letztes Mal fragen muss ich noch.
Code:
L     #Set_a
T     #Temp_Set_
 
U     L1.0

Dieses L1.0 ist das das erste Bit des Temp. Speichers oder wie kann ich das Verstehen.


Danke schonmal im Vorraus
 
Im Prinzip kannst Du das Lokalwort wie ein Merkerwort behandeln, zumindest was die Operationen damit angeht. Der Unterschied ist halt nur, dass das Lokalwort eine TEMP-Variable ist.
Du solltest aber wirklich die Variante von Larry (mit dem AR1) nutzen. Wenn in dem Baustein mal TEMP-Variablen deklariert werden, geht das mit T LW0 in die Hose...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
An eine nachträgliche Änderung der Temp Ordung hatte ich noch garnicht gedacht. Leider kenne ich mit der von Larry beschriebenen zweiten Methode nicht aus. Kennt jemand vll ein Tutorial wo die Verwendung von Pointer beschrieben ist oder kann mir auch den Text kommentieren?

Danke mal wieder im Vorraus
 
Servus, so ich muss dann nochmal nerven. Da ich es immer noch nicht schaffe, wollte ich mal Schritt für Schritt hier aufschreiben was ich mache. Hoffe mal einer kann mir Helfen.

1) Im Temp des FB eine Sturktur "Set" anlegen
2) Doppelklick auf die Strucktur und die 64 Bit ("Element_1")anlegen auf die ich zugreifen möchte.
3) Nun mache ich das was Larry schrieb
Code:
LAR1 p#Set_a
T #Set_a
T W [AR1,P#0.0]
U Set.Element_1
= #Ausgang_1
U Set.Element_2
= #Ausgang_2

Allerdings ist LAR1 immer noch Rot.
Edit: Nun ist LAR1 nicht mehr Rot, allerdings hab ich da 2 Rauten, also: LAR1 P##Set_a

PS: Gehen mehrere Zuweißungen in AWL?

Danke mal wieder und schöne Grüße
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
LAR1 p#meineStruktur  // Pointer auf die Struktur im TEMP-Bereich bilden und den ins AR1 übertragen
L #meineEingangsVariable // das Eingangs-WORD des Bausteins laden
T W [AR1, p#0.0] // nun das Eingangs-WORD auf das Lokal-WORD, das über den AR1-Pointer adressiert wird, übertragen
 
U meineStruktur.Bit0  // das Element der STRUCT nutzen
= #Out_Bit0
 
usw.

Hallo,
ich bleibe mal bei meinem Beispiel und meinen Operanden-Namen.
"meineStruktur" ist eine im TEMP-Bereich deines FC's angelegte Struktur mit dem Inhalt :
Code:
Bit_8 : bool
Bit_9 : bool
Bit_10 : bool
Bit_11: bool
Bit_12 : bool
Bit_13 : bool
Bit_14 : bool
Bit_15 : bool
Bit_0 : bool
Bit_1 : bool
Bit_2 : bool
Bit_3 : bool
Bit_4 : bool
Bit_5 : bool
Bit_6 : bool
Bit_7 : bool
"meineEingangsVariable" ist eine IN-Variable in den FC vom Typ WORD.
"Out_Bit0" (und ggf. folgende) ist eine OUT-Variable des FC vom Typ BOOL.

Ich habe das "quick-and-dirty" hingeschrieben, gehe aber mal davon aus, dass das funktioniert. Das kannst du natürlich abwandeln - dann aber nicht den Sinn verdrehen.

Gruß
Larry
 
So morgen nochmal. Hab das jetzt soweit hoffentlich von Larry verstanden. Muss jetzt meine Theat selbst etwas entführen.
Folgendes, wie schon geschrieben möchte ich ein Doppelwort in einzelne Bits aufspalten, da jedes Bit für ein Element (1= AN, 0=Aus) steht. Dabei will ich bei jedem Programmdurchlauf schauen ob sich der Wert geändert hat. Hatte das jetzt vor mit einem FN und FP zumachen, dann per SR Flip-Flop zu speichern und darüber eine Zeit laufen zulassen. Das FF und der Zähler werden später über den nächsten Schritt zurück gesetzt. Mal der Code aus meinen groben Überlegungen.
Code:
U( 
O(
Temp_variable_1_a
FN Stat_flanke_neg_1
)
O(
Temp_variable_1
FN Stat_flanke_pos_1
)
)
S Temp_variable_1_b
U Neuer_Schritt
R Temp_variable_1_b
 
U Temp_variable_1_b
(
L Zeit_Element_1
L Laufzeit
+D oder +I
= Zeit_Element_1
)
Nun zu meinem Fragen.
1) Ich hab so jede Menge Temp. Merker bzw. Stat-Merker. Gibt es eine Möglichkeit das schöner und übersichtlicher zumachen?
2) Gibt es eine Möglichkeit anders auf einen Signalwechsel zu detektieren?

Hoffe mal ihr könnt damit was anfangen.
Danke mal wieder im Vorraus
Grüße Tobias

PS: Falls es besser wäre das ein einen eigenen Theat zupacken, sagt das bitte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es ist doch dein Thread ... damit kannst du machen, was du willst ... :cool:

Zu deiner Frage:
Statt die Bits (des Doppelwortes) einzeln zu vergleichen kannst du doch auch das Doppelwort selbst mit einem zuvor gespeicherten vergleichen und bei Abweichung eine Meldung ausgeben - also in etwa so :
Code:
L #meinDoppelwort
L #LastDoppelwort
<>D
S #Aenderung
 
L #meinDoppelwort
T #LastDoppelwort
Gruß
Larry
 
Moin, jo das mit dem gesamten Vergleichen hatte ich mir auch so überlegt. Nur soll es bis jetzt jedes Element über einen Timer( bei = Zähler) läuft überwacht werden. Wobei da wohl das ganze nochmal beschrechen muss. Hast du vll sonst noch einen Tipp wie ich den Code verständlicher und strukturierter machen kann?

Bis denne
 
Zurück
Oben