-> Hier kostenlos registrieren
Hallo zusammen!
Ich bin gerade dabei mir zu überlegen wie ich am besten ca. 70 Eingänge entprelle...
Muss ich jeden Eingang mit einem eigenen Debounce bearbeiten oder kann die SPS vielleicht das selber?
Oder kann man das in einer FOR Schleife machen?
Wenn man das mit einem Debounce für jeden Eingang macht kommt ja ganz schön viel Code zusammen.
EDIT:
Vielleicht so?
Ich bin gerade dabei mir zu überlegen wie ich am besten ca. 70 Eingänge entprelle...
Muss ich jeden Eingang mit einem eigenen Debounce bearbeiten oder kann die SPS vielleicht das selber?
Oder kann man das in einer FOR Schleife machen?
Wenn man das mit einem Debounce für jeden Eingang macht kommt ja ganz schön viel Code zusammen.
EDIT:
Vielleicht so?
Code:
TYPE
S_BIT : STRUCT
EDGE : BOOL;
Q : BOOL;
tn : UDINT;
END_STRUCT;
END_TYPE
TYPE
INPUTS_DW : Array[0..31] OF S_BIT;
INPUTS_BYTE : Array[0..7] OF S_BIT;
END_TYPE
Code:
IF NOT init THEN
FOR i := 0 TO 31 DO
inp[i].EDGE := FALSE;
inp[i].Q := FALSE;
END_FOR;
init := TRUE;
END_IF;
T_PLC_MS(); (* read system timer *)
tx := T_PLC_MS.T_PLC_MS;
FOR i := 0 TO 31 DO
(* set edge if input got high *)
IF BIT_OF_DWORD(INPUTS,i) THEN
IF NOT inp[i].EDGE THEN
inp[i].EDGE := TRUE;
inp[i].tn := tx;
END_IF;
END_IF;
(* check inputs with high edge if debounce time elapsed *)
IF BIT_OF_DWORD(INPUTS,i) AND inp[i].EDGE THEN
IF tx - inp[i].tn >= TIME_TO_UDINT(Entprellzeit) THEN
inp[i].Q := TRUE;
END_IF;
ELSIF NOT BIT_OF_DWORD(INPUTS,i) THEN (* check if input is false *)
inp[i].EDGE := FALSE;
inp[i].Q := FALSE;
END_IF;
END_FOR;
BIT1 := inp[0].Q;
BIT2 := inp[1].Q;
BIT3 := inp[2].Q;
BIT4 := inp[3].Q;
BIT5 := inp[4].Q;
BIT6 := inp[5].Q;
BIT7 := inp[6].Q;
BIT8 := inp[7].Q;
BIT9 := inp[8].Q;
BIT10 := inp[9].Q;
BIT11 := inp[10].Q;
BIT12 := inp[11].Q;
BIT13 := inp[12].Q;
BIT14 := inp[13].Q;
BIT15 := inp[14].Q;
BIT16 := inp[15].Q;
BIT17 := inp[16].Q;
BIT18 := inp[17].Q;
BIT19 := inp[18].Q;
BIT20 := inp[19].Q;
BIT21 := inp[20].Q;
BIT22 := inp[21].Q;
BIT23 := inp[22].Q;
BIT24 := inp[23].Q;
BIT25 := inp[24].Q;
BIT26 := inp[25].Q;
BIT27 := inp[26].Q;
BIT28 := inp[27].Q;
BIT29 := inp[28].Q;
BIT30 := inp[29].Q;
BIT31 := inp[30].Q;
BIT32 := inp[31].Q;
Zuletzt bearbeitet: