Új hozzászólás Aktív témák

  • 01101010111

    csendes tag

    Sziasztok szeretnék egy kis segítséget kérni s7-300-as plc programozáshoz. SCL-ben próbálok csinálni egy olyan FB-t amelynek byte bemente és kimenete van. Azt figyeli, hogy a bementen valahol van-e felfutó él és ahol van, ott a kimeneten létrejön egy impulzus. Egy ideig boldogultam is, működik, de csak úgy tudtam megcsinálni, hogy 8 bool kimenet van. (A kimenetekre számlálókat raktam, hogy észrevegyem, ha keletkezik egy impulzus.)

    FUNCTION_BLOCK FB1
    VAR_INPUT bemenet:BYTE; END_VAR
    VAR_OUTPUT
    kimenet0,kimenet1,kimenet2,kimenet3,
    kimenet4,kimenet5,kimenet6,kimenet7:BOOL;
    END_VAR
    VAR
    result : BYTE;
    qresult : BYTE;
    i : INT;
    tomb : ARRAY[0..7] OF BOOL;
    qtomb : ARRAY[0..7] OF BOOL;
    mtomb : ARRAY[0..7] OF BOOL:=[8(0)];
    END_VAR
    FOR i:=0 TO 7 BY 1 DO
    (* BYTE lebontasa 8 bool-ra *)
    result:=ROR(IN:=bemenet,N:=i);
    tomb:=BYTE_TO_BOOL(result);
    (*felfuto el vizsgalat az i-edik bool-nál*)
    (*qtomb(i) mondja meg, hogy melyik bementi biten volt felfuto el,impulzus jon letre*)
    qtomb(i):=tomb(i) AND NOT mtomb(i);
    mtomb(i):=tomb(i);

    kimenet0:=qtomb[0];
    kimenet1:=qtomb[1];
    kimenet2:=qtomb[2];
    kimenet3:=qtomb[3];
    kimenet4:=qtomb[4];
    kimenet5:=qtomb[5];
    kimenet6:=qtomb[6];
    kimenet7:=qtomb[7];
    END_FOR;
    END_FUNCTION_BLOCK

    Tudom, hogy más gondolatmenetébe belelátni nem egyszerű, de igazából csak az a probléma, hogy ezt a 8 boolt ( qtomb(i) ) kéne összegyúrni egy byte kimenetté, de sehogy sem tudtam rájönni hogyan kéne. ( pld.: Használtam a byte_to_bool-t, majd ráeresztettem a ROR-t, de semmi értelmeset nem produkált. )

Új hozzászólás Aktív témák