ich habe einen FC, dieser verwendet immer wieder die gleiche reihenfolge von digitalen Inputs.
Also z.B.
Beim ersten Aufruf muss der FC INPUTS %IX0.0 und %IX0.1 abfragen
beim zweiten Aufruf, muss er %IX0.2 und %IX0.3 beim dritten 0.4 und 0.5 abfragen.
Jetzt möchte ich diesen Baustein nur einmal programmieren und duch die interne Nummer des Aufrufs also 1, 2,3, usw.
soll der Offset für die Bitadresse bestimmt werden.
Ich dachte ich mache das mit Pointern allerdings funktionieren die nicht mit Bitadressen.
Wie löst ihr solche Sachen in Regel?
Wäre nett wenn mir da jemand helfen kann.
Vielen Dank schonmal!
Gruß Michael
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2010-07-10
Originally created by: ebt'ler
Wie wäre es mit:
input_1 := BYTE_TO_BOOL(SHR (%IB0,offset*2) AND 2#00000001)input_2 := BYTE_TO_BOOL(SHR (%IB0,offset*2+1) AND 2#00000001)
Bei offset := 0 bekommt input_1 Bit 0 von IB0 (IX0.0) und input_2 bekommt Bit 1 von IB0 (IX0.1).
Bei offset := 1 bekommt input_1 Bit 2 von IB0 (IX0.2) und input_2 bekommt Bit 3 von IB0 (IX0.3).
usw.
Hier noch eine Möglichkeit Funktionen mit Bool_Eingängen gleich byteweise aufzurufen:
PROGRAM PLC_PRGVAR  in_byte_1 : BYTE;  in_byte_2 : BYTE;  out_byte_1 : BYTE;  i: INT;END_VAR__________________________________________out_byte_1:= 0;FOR i :=0 TO 7 DOout_byte_1 := out_byte_1 OR SHL (BOOL_TO_BYTE(test_funktion(BYTE_TO_BOOL(SHR (in_byte_1,i) AND 2#00000001),BYTE_TO_BOOL(SHR (in_byte_2,i) AND 2#00000001))),i) ; (* test_funktion besitzt 2 Bool-Inputs und hat als Rückgabewert auch Bool)END_FOR;
Kannst du damit was anfangen? Wenn nicht melde dich nochmal
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo liebes Forum,
ich habe einen FC, dieser verwendet immer wieder die gleiche reihenfolge von digitalen Inputs.
Also z.B.
Beim ersten Aufruf muss der FC INPUTS %IX0.0 und %IX0.1 abfragen
beim zweiten Aufruf, muss er %IX0.2 und %IX0.3 beim dritten 0.4 und 0.5 abfragen.
Jetzt möchte ich diesen Baustein nur einmal programmieren und duch die interne Nummer des Aufrufs also 1, 2,3, usw.
soll der Offset für die Bitadresse bestimmt werden.
Ich dachte ich mache das mit Pointern allerdings funktionieren die nicht mit Bitadressen.
Wie löst ihr solche Sachen in Regel?
Wäre nett wenn mir da jemand helfen kann.
Vielen Dank schonmal!
Gruß Michael
Originally created by: ebt'ler
Wie wäre es mit:
Bei offset := 0 bekommt input_1 Bit 0 von IB0 (IX0.0) und input_2 bekommt Bit 1 von IB0 (IX0.1).
Bei offset := 1 bekommt input_1 Bit 2 von IB0 (IX0.2) und input_2 bekommt Bit 3 von IB0 (IX0.3).
usw.
Hier noch eine Möglichkeit Funktionen mit Bool_Eingängen gleich byteweise aufzurufen:
Kannst du damit was anfangen? Wenn nicht melde dich nochmal
Vielen Dank.
Das mit dem SHR ist echt eine pratikable gute Lösung.
Vielen Dank.
Gruß Michael