// Wejscia cyfrowe (*I01 - sygnal z czujnika poziomu min*) (*I02 - sygnal z czujnika polowy poziomu*) (*I03 - sygnal z czujnika poziomu max*) (*I04 - sygnal z przycisku trybu manualnego*) // Wyjscia cyfrowe (*Q01 sterowanie pompa*) (*Q02 sterowanie elektrozaworem*) // Znaczniki wykorzystane w programie (*M07 flaga trybu recznego*) (*M08 flaga bledu czujnika poziomu*) // Tryb manualny/automatyczny // Licznik zliczający impulsy z wejscia I04 C01 ( EN := , C_ := I04 OR M15 OR M14, // przycisk zewnętrzny lub przycisk na web visu lub zakonczenie podlewanie w trybie recznym D_ := , SE := , RE := M11, SH := , SL := , SV := , OF => , FB => , CY => , ZE => , QV => MD100 ); IF MD100 = 1 THEN M07 := TRUE; // Tryb reczny aktywny ELSIF MD100 = 2 THEN M07 := FALSE; // Tryb automatyczy aktywny M11 := TRUE; // Reset licznika zliczajacego impulsy z wejscia I04 ELSE M11 := FALSE; END_IF; // na potrzeby wizualizacji IF M07 = TRUE THEN M16 := FALSE ; // wyswietlanie ikony stanu automatycznego END_IF; IF M07 = FALSE THEN M16 := TRUE ; // wyswietlanie ikony stanu automatycznego END_IF; //wykrywanie bledu czujnika poziomu IF (NOT I01 AND I02) OR (NOT I02 AND I03) OR (NOT I01 AND I03) THEN M20 := TRUE; // Start odliczania timera T01 ELSE M08 := FALSE; M20 := FALSE; END_IF; //Timer T01 ; jezeli wystapi blad czujnika poziomu po czasie 5 sek generowany jest blad T01 ( EN := M20, RE := , ST := , I1 := T#5s, I2 := , Q1 => M08, //Flaga bledu czujnikow poziomu aktywa QV => ); //Sterowanie elektrozaworem IF NOT I01 AND NOT M08 THEN Q02 := TRUE; // Elektrozawor otwarty - napuszczanie wody do zbiornika; END_IF; IF I01 AND I02 OR M08 THEN Q02 := FALSE; // Elektrozawor zamkniety; END_IF; //Sterowanie podlewaniem w trybie automatycznym IF I01 AND NOT M07 AND NOT M08 THEN M12 := TRUE; //podlewanie w trybie auto aktywne ELSE M12 := FALSE; END_IF; //Zegar tygodniowy uruchamiający podlewanie WT01 ( EN := M12, Q1 => Q01 ); //Sterowanie podlewaniem w trybie recznym IF I01 AND M07 AND (NOT M08)THEN M13 := TRUE; //podlewanie w trybie recznym aktywne ELSE M13 := FALSE; END_IF; MW50 := 900; //Timer 15 min - po zalaczeniu podlewania w trybie recznym odlicza czas, po jego uplywie podlewanie stop T02 ( EN := M13, RE := , ST := , I1 := MW50, I2 := , Q1 => M14, QV => ); IF M13 AND NOT M14 THEN Q01 := TRUE; // pompa uruchomiona - podlewanie aktywne END_IF; // Licznik czasu pracy pompy - wyswietlany na ekranie easy po nacisnieciu prycisku P1 OT01 ( EN := Q01, RE := P07, //przycisk DEL resetuje licznik D_ := , SE := , I1 := , SV := , Q1 => , ZE => , QV => MW10, MN => MW11, SC => ); // Licznik czasu otwarcia zaworu - wyswietlany na ekranie easy po nacisnieciu przycisku P1 OT02 ( EN := Q02 , RE := P07 , // przycisk DEL resetuje licznik D_ := , SE := , I1 := , SV := , Q1 => , ZE => , QV => MW12, MN => MW13, SC => ); // wyświetlacz easyE4 - konfiguracja // wywołanie ekranu po nacisnieciu przycisku P3: // poziom wody w zbiorniku, kontrola czujnikow poziomu, kontrola trybu pracy, kontrola stanu: elektrozaworu, pompy M1 := M1 OR ( P03 ); // powrot do ekranu glownego po nacisnieciu przycisku ESC (P6) M1 := M1 AND ( NOT P06 ); D01 ( EN := M1, AI := , Q1 => , AO => ); // wywołanie ekranu po nacisnieciu przycisku P1 - kontrola czasu: pracy pompy, otwarcia elektrozaworu M2 := M2 OR ( P01 ); // powrot do ekranu glownego po nacisnieciu przycisku ESC (P6) M2 := M2 AND ( NOT P06 ); D02 ( EN := M2, AI := , Q1 => , AO => ); //Animacja woda - pompa T31 ( EN := Q1, RE := , ST := , I1 := T#200ms, I2 := T#200ms, Q1 => M31, QV => ); M32:=not M31; M30 := not Q1; //Animacja woda - elektrozawór T32 ( EN := Q2, RE := , ST := , I1 := T#200ms, I2 := T#200ms, Q1 => M33, QV => ); M35 := not Q2; M34:= not M33;