ansprechen von Inputs wiederholend mit offset

micha1983
2010-07-09
2010-07-10
  • micha1983 - 2010-07-09

    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

     
  • 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_PRG
    VAR
       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 DO
    out_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

     
  • micha1983 - 2010-07-10

    Vielen Dank.

    Das mit dem SHR ist echt eine pratikable gute Lösung.
    Vielen Dank.

    Gruß Michael

     

Log in to post a comment.