Byte in 8 bit teilen

Irgendwie versteh ich deine Frage nicht.
Wieso greifst du nicht ganz einfach auf das entsprechende Bit zu?

U DB20.DBX2.0
= Ax.y

Gruß
Dieter
 
natürlich könnte ich dass so machen, aber so bald sich etwas verschieben würde, stimmen die Zuordnungen nicht mehr, da ich Symbolnamen vor Abzulte Adresse eingestellt habe. Bei der Adressierung!!

hatte ich oben verschrieben meinte

A db20.dbx2.0
=Bit_0
 
Code:
AUF DB20

L DB2.0
t #temp_bit1

L DB2.1
t #temp_bit2

L DB2.2
t #temp_bit3

Ich würde aber mit AUF den DB öffnen und dann direkt zuweisen!

Am Anfang des BAusteins:

Code:
AUF DB20

u m0.0
u db20.1 
=a0.0


Oder in nen Register Laden....
Aber wieso ist mir nun Schleierhaft? Willst du nen FB mehrfach aufrufen? Multiinstanz? Und Ihm als IN den DB vorgeben?

Dann so:

AUF [#in_int]
 
Zuletzt bearbeitet:
@Paule:
Ich glaube Du hast d3nnis.c missverstanden.
Er will ja eben nicht absolut auf die Bitadressen zugreifen weil er sein Byte symbolisch adressiert hat. Beim nachträglichen Einfügen weiterer Variablen würde der absolute Bitzugriff nicht mehr passen.

@d3nnis.c:
Hier bleibt dir definitiv nichts anderes übrig als mit indirekter Adressierung zu arbeiten:
Code:
L  P#DeinByte
LAR1

U      [AR1,P#0.0]
=      DeinBit0

U      [AR1,P#0.1]
=      DeinBit1
......
usw. usf.
@jackjones: Hast Du Deinen Code schon mal getestet? :icon_rolleyes:
.
 
Neeee habe ich nicht! Bin ja auch zuhause, und kümmere mich nun um's Bier :s10:

Man könnte aber das t in ein = umwandeln ;p
 
Er will ja eben nicht absolut auf die Bitadressen zugreifen weil er sein Byte symbolisch adressiert hat.
Ah, jetzt ist der Groschen gefallen. :D
Ja das geht leider nur bei Merkern das ich die gleiche Adresse als Byte wie auch als Bit Symbolisch benennen kann.
Da muss man bei den DB's schon manchmal überlegen wie man es am besten Strukturiert: Int; Byte; Bool; Array of Bool; u.s.w.)
 
ob das so stimmt?
schließlich kann man auch bytes mit UW verknüpfen :rolleyes:
Wo er recht hat, hat er (fast immer) recht. :)

Mein Vorschlag aus Post #7 ist ohnehin nicht so ganz brauchbar, weil dieser nur auf lokale Variablen anwendbar ist. Dem Threadersteller geht es aber offensichtlich um den Bitzugriff auf symbolische Global-Datenbausteinvariablen.

Anlehnend an Koll. vierlagigs Idee:
Code:
L  1
L  "deinDB".deinByte
UW
==I
=  deinBit0

L  2
L  "deinDB".deinByte
UW
==I
=  deinBit1

L  4
L  "deinDB".deinByte
UW
==I
=  deinBit2
............
............
usw. usf.
 
Zuletzt bearbeitet:
Ich werde es jetzt wohl so lösen, ich erstelle mir einen Hilfs Db(DBsymbol),
in diesem Db werde ich dann die einzelnen Bits erstellen!

Dann werde ich

L Byte1
T DBsymbol.dbb0

L Byte2
T DBsymbol.dbb2

L Byte3
T DBsymbol.dbb3

dann kann ich mit den Symbolnamen aus dem DBSymbol arbeiten!!
Scheint mir die einfachste Methode zu sein!
Aber trotzdem Danke
Dennis
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe mir für solche Funktionen kleine parametrierbare FC`s in SCL gebaut,und in einer Libary abgelgt,somit habe ich die Funktionalität überall verfügbar.
Durch Kleine Änderungen in der SCL Quelle kann man dann auch Wort bzw. Doppelwort Filter bauen.




SCL Quelle
Eingangsgröße:byte
Ausgangsgröße:Array[1..8] of bool

Code:
FUNCTION Byte_nach_bit_array :void
VAR_INPUT
   Einbyte:BYTE; // Eingangsbyte
END_VAR

VAR_OUTPUT
    Aus_bool_8_array:ARRAY[1..8] Of BOOL;
END_VAR

VAR_TEMP
    Einbyte_intern:BYTE; // Eingangsbyte
    Einbyte_at AT Einbyte_intern:ARRAY [1..8] OF BOOL;
    schleife:INT;
END_VAR
Einbyte_intern:=Einbyte;
   schleife:=1     ; 
    FOR schleife := 1 TO 8 BY 1 DO
      Aus_bool_8_array[schleife]:=Einbyte_at[schleife];
    END_FOR;
OK:=true;
 END_FUNCTION
 

Anhänge

  • Byte_nach_bit.JPG
    Byte_nach_bit.JPG
    49,4 KB · Aufrufe: 171
Habe mir für solche Funktionen kleine parametrierbare FC`s in SCL gebaut,und in einer Libary abgelgt,somit habe ich die Funktionalität überall verfügbar.
Also Bernard,
Deine Funktion gefällt mir am besten, Voraussetzung ist natürlich man hat SCL.
Ich brauche das jetzt nicht, aber nachdem hier sonst keiner mal ein Danke drückt, bekommst eins von mir. ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
.....
Ich brauche das jetzt nicht, aber nachdem hier sonst keiner mal ein Danke drückt, bekommst eins von mir. ;)
Und da mir, für alle die nicht über SCL verfügen, die Lösung von Perfektionist am besten gefällt, werde ich mal das entsprechende 'Danke' drücken.:)
 
Hi Bernard,

eine Frage hab ich zu deinem Code.
Ich bin in SCL zwar noch nicht so fit, aber:
Code:
schleife:=1 ;
kannst du dir doch eigentlich sparen, oder?!

mit
Code:
FOR schleife := 1 TO 8 BY 1 DO
fängt die scheife doch automatisch bei 1 an, oder ist das in scl anders als in anderen Hochsprachen?

Gruß wolder
 
Betr. Schleifenvorbelegung

Hallo Wolder.
SCL ist zwar eine Hochsprache,doch der Code läuft auf einer SPS.Meine Schleifenvariable liegt im temporären Bereich,ist also nach verlassen des Bausteines in einem nicht definierten Zustand.Aus diesem Grund präge ich temporäre Indexgrössen mit einem Anfangswert ein.
Versuche es doch einmal ohne Vorbelegung,kann ja sein das die FOR Anweisung selbst vorbelegt.


Viele Grüße Bernard
 
Zurück
Oben