WORD aus einzelnen Bits zusammensetzen

Zuviel Werbung?
-> Hier kostenlos registrieren
Die Adressen der Ein- und Ausgänge von Funktionen liegen in den Lokaldaten des aufrufenden Bausteins (V-Bereich). Was du meinst, ist nichts anderes als ein unnützer Zähler aber keine wirkliche Adresse. Wenn du mal einen Pointer auf eine solche Variable setzt, zeigt er dir die Adresse. Sie ist bei jedem Aufruf einer Funktion eine andere, bzw. sie abhängig vom jeweiligen Aktualparameter. Man kann nur indirekt oder symbolisch darauf zugreifen.

Code:
L P##Bit_00
LAR1 // AR1 = z.Bsp. V 29.2


Gruß, Onkel
 
wär ich doch nur noch im büro ...

wenn ich aber eine funktion "bit_to_word" schreibe und diese like

U #in_bit0
= L2.0
U #in_bit1
= L2.1
...
U #in_bit15
=L3.7

ausführe, wobei ich 16 in-variablen (bool) von L0.0 bis L1.7 und eine out-variable (word) mit anfangsadresse L2.0 habe, funktioniert das!
 
Irrtum. Du schreibst auf jeden Fall in die temporären Lokaldaten. Erst wenn du anschliessend mit...

Code:
L     LW2
T    OutWord
...die Lokaldaten an den Ausgang übergibst, wird es funktionieren. Siehe auch Beitrag Nr.5 von OHGN.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier noch mal ein Lösungsvorschlag mit Pointern:

Code:
FUNCTION "FC_BOOL_WORD_PT" : VOID
TITLE =BOOL => WORD
AUTHOR : KAI
FAMILY : SPSFORUM
NAME : LOKALDAT
VERSION : 1.0
 
VAR_INPUT
  IN_BIT_00 : BOOL ;    
  IN_BIT_01 : BOOL ;    
  IN_BIT_02 : BOOL ;    
  IN_BIT_03 : BOOL ;    
  IN_BIT_04 : BOOL ;    
  IN_BIT_05 : BOOL ;    
  IN_BIT_06 : BOOL ;    
  IN_BIT_07 : BOOL ;    
  IN_BIT_08 : BOOL ;    
  IN_BIT_09 : BOOL ;    
  IN_BIT_10 : BOOL ;    
  IN_BIT_11 : BOOL ;    
  IN_BIT_12 : BOOL ;    
  IN_BIT_13 : BOOL ;    
  IN_BIT_14 : BOOL ;    
  IN_BIT_15 : BOOL ;    
END_VAR
VAR_OUTPUT
  OUT_WORD : WORD ; 
END_VAR
BEGIN
NETWORK
TITLE =IN_BIT_00 - IN_BIT_15 (BOOL) => OUT_WORD (WORD)
 
      L     P##IN_BIT_00; 
      LAR1  ; 
 
      L     W [AR1,P#0.0]; 
      TAW   ; 
      T     #OUT_WORD; 
 
END_FUNCTION

Gruß Kai
 

Anhänge

  • OB1.pdf
    3,8 KB · Aufrufe: 66
  • FC100.pdf
    3 KB · Aufrufe: 74
da gehts schon los ...:twisted:

Sehe ich genau so ...
Das Thema ist doch hinreichend beantwortet und ob man es über Pointer oder Lokaldaten oder sonstwie machen möchte liegt doch an jedem selbst.
In diesem Fall ging es, glaube ich, um eine eigenständige Funktion, die sich nur selbst "verschmickeln" kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Das Thema ist doch hinreichend beantwortet und ob man es über Pointer oder Lokaldaten oder sonstwie machen möchte liegt doch an jedem selbst.
...

Also ich bin ja kein Freund vom direkten (->nicht symbolischen) Zugriff auf Lokale Daten. Aber bitte lass sich keiner dazu verleiten in einer geschlossenen Funktion einen globalen Merker als Schmiermerker zu missbrauchen. In AWL ist Kais Lösung sicher die eleganteste. @Kai: die PDFs waren IMHO allerdings mal wieder unnötig. Alles Wichtige steht doch schon zwischen den Code Tags.
 
Also ich bin ja kein Freund vom direkten (->nicht symbolischen) Zugriff auf Lokale Daten. Aber bitte lass sich keiner dazu verleiten in einer geschlossenen Funktion einen globalen Merker als Schmiermerker zu missbrauchen.
...
100% ACK

Bei mir steht zu Beginn eines Bausteins drin, wie dirty der geschrieben ist. Dort schreibe ich dann Achtung ...
-Querzugriffe
-benutzt Globalvariablen
-greift absolut auf Lokal-/Instanzdaten zu.

Aber das entscheide ich dann in dem Moment, wo ich das mache, wie schmutzig es in dem Moment sein darf. Viel Achtung wird man mir dafür nicht entgegenbringen, dass ich weiß, das es nicht nur sauber, sondern auch rein geht:???:

Aber bei Inbetriebnahme, wenn man dann eine Anlage nicht wegen einer Instanzänderung abstellen will, bleibt manchmal keine ander Wahl.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
AIn AWL ist Kais Lösung sicher die eleganteste. @Kai: die PDFs waren IMHO allerdings mal wieder unnötig. Alles Wichtige steht doch schon zwischen den Code Tags.

Hallo Zotos,

Recht hast du, Kais Lösung (mit dem von mir vorgeschlagenen P##) ist die eleganteste Lösung.

Unrecht hast du mit den PDF.
Ich finds ungeheuer praktisch, weil ich da den Baustein schnell
angenehm lesbar formatiert vor mir sehe.

@Kai: Weiter so. :ROFLMAO:
 
Aber bei Inbetriebnahme, wenn man dann eine Anlage nicht wegen einer Instanzänderung abstellen will, bleibt manchmal keine ander Wahl.

Hallo Andreas,

da sieht man, dass du mit Maschinen nicht nur theoretisch umgehst,
sondern auch ein Mann der Praxis bist.

Das würde einigen "Aristokraten" hier auch mal guttun.... :eek:

In den Not findet nun mal so manches statt, was sonst nicht stattgefunden hat.
(Wilhelm Busch)




CU

Jürgen


.
 
Zurück
Oben