Program pro řídící jednotku Foxtrot a čistírnu odpadních vod Aquatec AT-6. Nabízí 10 programů, dle zatížení domácnosti. Dá se později napojit na vodoměr (počitadlo) a podle toho měnit program.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
TYPE T_COVProgram :STRUCT runs: ARRAY[0..23] OF usint; END_STRUCT END_TYPE VAR_GLOBAL COV_Programs: ARRAY[1..10] OF T_COVProgram := [ // cas - hodina rozdelena na 12 useku po 5min. // hodnoty: 1 -> 1 min bezi, 5-1=4 stoji // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // 1 - 5.6h celkem, 4 min stoji, 1 min bezi (runs := [5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]), // 2 - 8.8h celkem, 4 min stoji, 1 min bezi (runs := [5, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5]), // 3 - 10.4h celkem, 4 min stoji, 1 min bezi (runs := [5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 1, 1]), // 4 - 12h celkem, 4 min stoji, 1 min bezi (runs := [5, 5, 5, 5, 5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 1, 5, 5]), // 5 - 15h celkem, 3 min stoji, 2 min bezi (runs := [5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 5, 5]), // 6 - 18h celkem, 2 min stoji, 3 min bezi (runs := [5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 5, 5]), // 7 - 20.4h celkem, 2 min stoji, 3 min bezi (runs := [5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 5, 3, 3, 3, 5, 5, 5]), // 8 - 21.6h celkem, 2 min stoji, 3 min bezi (runs := [5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5]), // 9 - 22.8h celkem, 2 min stoji, 3 min bezi (runs := [5, 5, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5, 5, 3, 5, 5, 5, 5]), // 10 - 24h celkem, 24h bezi (runs := [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]) ]; END_VAR VAR_GLOBAL RETAIN COV_PROGRAM : usint := 0; END_VAR |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
FUNCTION_BLOCK fbCistickaProgram VAR_INPUT prog_num: usint; END_VAR VAR_OUTPUT output: BOOL; END_VAR VAR_IN_OUT END_VAR VAR ton_stop: ton; ton_run: ton; light: fb_iLight; curr_time: time; hour: usint; covprg : T_COVProgram; mins : usint; END_VAR curr_time := GetTime(); hour := hour_of_time(in := curr_time); covprg := COV_Programs[prog_num]; mins := covprg.runs[hour]; ton_stop( IN := not ton_run.q, pt := encodeTime(M := 5-mins)); ton_run( IN := ton_stop.q, pt := encodeTime(M:= mins)); light( lightOn := ton_stop.q, lightOff := ton_run.q, name:= 'Cisticka', out => output ); END_FUNCTION_BLOCK |
1 2 3 4 5 6 7 8 9 10 11 |
PROGRAM prgJson VAR cisticka : fbCistickaProgram; END_VAR if COV_PROGRAM = 0 then COV_PROGRAM := 1; end_if; cisticka( prog_num := COV_PROGRAM, output => RO04_COV ); END_PROGRAM |
Jsou tam ještě nějaké záseky, např. že pokud je cyklus plný (5 minut) a následuje ten samý (bez pauzy), bylo by fajn vynechat úplně vypínání výstupu, popř. zkrátit cyklus o párset ms. Dále pak přidat reset v případě změny programu atd. Každopádně to ale zatím funguje k mé spokojenosti.