Step 7 Wandeln von DIG Eingänge in Byte und DB Wertevorgabe als Adresse

gw-tuning

Level-1
Beiträge
126
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, hab da mal wieder ne Frage... ABER ERSTEINMAL EIN FROHES NEUES JAHR

ich möchte gerne folgendes machen, ich muss mir einen FC bauen, den ich immer wieder nutzen kann, soweit kein Thema, doch eines habe ich dennoch...

Ich habe als IN 8 Eingänge die ich z.B. mit E0.0-E0.7 oder anderen Komponenten als Bool belegen kann...

Ich möchte nun im FC diese Eingänge in ein Byte wandeln, doch irgendwie funzt das nicht, habe mehrere Variationen getestet, u.a.

Code:
U #Send_1   // der erste Eingang
= L0.0
BLD 103
U #Send_2   // der zweite Eingang

doch das führt ja zu nichts... denn ich kann es ja nicht transferieren...

Ich weiss nicht... habe auch schon gegoogled, doch da ist nicht wirklich das wofür ich es bräuchte...

Nun der Hintergedanke ist, das ich Kommunikationsbausteine erstelle, indem ich aus diversen Signale Byte erzeugen muss ohne über den DB gehen muss, und diese dann mit X_PUT versende... Funtz auch alles so weit... nur das ich das gerne etwas schöner machen würde...

Bisher nehme ich jeden z.B.Eingang und schaut selbst:
Wobei der DB202.dbb0 mein X_Put Byte ist... Ich habe hier Eingänge gewählt da es zum Verständnis einfacher ist...


Code:
U E0.0
= db202.dbx0.0
u e0.1
= db202.dbx0.1
.
.
.

Wer hat noch ne Idee...

Mein FC hat nachher die Eingänge 0-8 für die einzelnen Bits, intern soll er es in ein Byte wandeln und direkt an den Empfänger senden...

Dafür liegen folgende Belegungen zugrunde:
IN:
- Bit 0-8 als BOOL
- MPI Adresse als INT (für den intern aufgerufenen X-PUT Befehl)

OUT:
- Sendebyte
- Empfangsbyte

Muss nur noch schauen wie ich dem FC als IN die DB Nummer gebe und die Position im DB
also: DB = 202 (INT??) und Position 2 (INT?? für das Byte) GEHT DAS??? Um intern dann : z.B. DB202.DBB0 zu erzeugen...

Ich weiss ich wieder mit den Scheinbar komplizierten Dingen...

Danke Euch zu später Stunde...


Gruss Uwe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal ein Beispiel (Quelle), wie man das ohne die Nutzung von absolut adressierten lokalen Variablen machen könnte:

Code:
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1




VAR_INPUT
  MyIn_01 : INT ;	
  Bit_00 : BOOL ;	
  Bit_01 : BOOL ;	
  Bit_02 : BOOL ;	
  Bit_03 : BOOL ;	
  Bit_04 : BOOL ;	
  Bit_05 : BOOL ;	
  Bit_06 : BOOL ;	
  Bit_07 : BOOL ;	
  MyIn_02 : INT ;	
END_VAR
VAR_OUTPUT
  Zahl_aus_BOOL : WORD ;	
END_VAR
VAR_TEMP
  Inp_Adr : DWORD ;	
  Zahl_aus_Bool_Intern : WORD ;	
END_VAR
BEGIN
NETWORK
TITLE =


      L     P##Bit_00; 
      T     #Inp_Adr; 
      LAR1  ; 


      L     B [AR1,P#0.0]; 
      T     #Zahl_aus_Bool_Intern; 
      T     #Zahl_aus_BOOL; 
END_FUNCTION

Eine AWL-Quelle erzeugen, den Code einfügen und übersetzen, Achtung evtl. noch die FC-Nummer anpassen.

Für die Adressierung von DB-Variablen über die DB-Nummer ind die Datenword-Nummer suchst du bitte zuerst mal im Forum nach Any und nach indirekter Adressierung.
In unserer FAQ gibt es dazu auch gute Erklärungen.
 
Unser User Onkel Dagobert hat mich noch auf Folgendes aufmerksam gemacht:

AR1 zeigt auf die Adresse von Bit_00, also z.Bsp. auf E0.0. Das geht in einer FC nur dann gut, solange wirklich E0.0 bis E0.7 als INPUTs verwendet werden.

Wenn mal also Bits aus verschiedenen E-Bereichen und/oder Merker an den IN-Bits nutzt, kann man das nicht so machen. Dann müßte man die Bits erst wieder umkopieren oder gleich die Variante von Thomas_v2.1 nehmen.
 
Unser User Onkel Dagobert hat mich noch auf Folgendes aufmerksam gemacht:



Wenn mal also Bits aus verschiedenen E-Bereichen und/oder Merker an den IN-Bits nutzt, kann man das nicht so machen. Dann müßte man die Bits erst wieder umkopieren oder gleich die Variante von Thomas_v2.1 nehmen.

Man erzeugt ja auch keinen Fc mit 8 Boolschen eingängen von denen man dann nur einen verwendet! Ich würde sagen einfach jedes Bit einzeln zuweisen:

Code:
      L     P##[FONT=Verdana]Zahl_aus_Bool_Intern;[/FONT]
      LAR1  ; 

      U     [FONT=Verdana]Bit_00
[/FONT]      [FONT=Verdana]=[/FONT]     [FONT=Verdana][AR1,P#0.0]; 
[/FONT]
      U     [FONT=Verdana]Bit_01
[/FONT]      [FONT=Verdana]=[/FONT]     [FONT=Verdana][AR1,P#0.1]; 
[/FONT]
      ...

      L     #Zahl_aus_Bool_Intern; 
      T     #Zahl_aus_BOOL;
 
Zuletzt bearbeitet:
Zurück
Oben