Witam,
Siedze juz kilka dni nad opracowywaniem algorytmu dzialania ukladu i nie moge opracowac takiego, ktory dzialal by w kazdej zakladanej sytuacji. Moze ktorys z Was koledzy wpadnie na pomysl
Mam 5 przekaznikow ktorymi steruje. Nektore urzadzenia sa samodzielne, inne do pracy wymagaja uruchomienia innych peryferiow. Zaleznosci przy przekaznikach wygladaja nastepujaco:
Przekaznik1 (samodzielny), przekaznik2 (opcja dla p1), przekaznik3 (wymaga p1), przekaznik4 i 5 (wymagaja p1).
Urzadzenie na przekazniku1 uruchamiane bedzie na ustalony okres czasu o danej godzinie codziennie (np. na godzine, codziennie o 17:00). Jesli pewna usluga zostanie wlaczona, to zawsze gdy przekaznik1 bedzie uruchomiony, przekaznik2 rowniez.
Urzadzenie na przekazniku3 bedzie uruchomione jesli temp. z czujnika1 bedzie wyzsza od ustalonej, a temp. Na czujniku2 bedzie w ustalonym zakresie. Przy pracy tego urzadzenia uruchomiony bedzie musial byc przekaznik1.
Urzadzenia na przekaznikach 4 i 5 uruchamiane beda na wyznaczony czas co okreslona ilosc dni (np. Na 10 sekund co 14 dni). Podczas ich pracy (oraz przez ilka minut po zakonczeniu) przekaznik1 bedzie musial dzialac.
Caly uklad bedzie posiadal system zegarowy, pomyslalem wiec o zapisywaniu daty uruchomienia oraz zakonczenia dzialania w zmiennych w formacie timestamp oraz wykonywaniu co 1sekunde daemon-a dzialajacego w oparciu o algorytm jak ponizej:
[Odczytaj aktualny czas (timestamp)] -> [jesli czas wl <= aktualny <= czas wyl] sprawdzamy status uslugi (0 wylaczony, 1 wlaczony) -> jesli status=0 wlaczamy przekaznik -> [jesli czas wl <= aktualny > czas wyl] sprawdzamy status uslugi -> jesli status=1 wylaczamy przekaznik -> zatrzymujemy na 1 sek i zapetlamy.
Problem w tym, ze przy takim algorytmie i sposobie dzialania powstalyby kolizje podczas uruchomienia kilku uslug na raz (wtedy ostatnia nadpisywalaby wczesniejsza i ja zatrzymywala) i pewnie w calej masie innych sytuacji. Czy macie moze pomysl jak to wszystko uruchamiac, zatrzymywac i zapamietywac kiedy nastepnym razem uruchomic dana usluge?
Siedze juz kilka dni nad opracowywaniem algorytmu dzialania ukladu i nie moge opracowac takiego, ktory dzialal by w kazdej zakladanej sytuacji. Moze ktorys z Was koledzy wpadnie na pomysl
Mam 5 przekaznikow ktorymi steruje. Nektore urzadzenia sa samodzielne, inne do pracy wymagaja uruchomienia innych peryferiow. Zaleznosci przy przekaznikach wygladaja nastepujaco:
Przekaznik1 (samodzielny), przekaznik2 (opcja dla p1), przekaznik3 (wymaga p1), przekaznik4 i 5 (wymagaja p1).
Urzadzenie na przekazniku1 uruchamiane bedzie na ustalony okres czasu o danej godzinie codziennie (np. na godzine, codziennie o 17:00). Jesli pewna usluga zostanie wlaczona, to zawsze gdy przekaznik1 bedzie uruchomiony, przekaznik2 rowniez.
Urzadzenie na przekazniku3 bedzie uruchomione jesli temp. z czujnika1 bedzie wyzsza od ustalonej, a temp. Na czujniku2 bedzie w ustalonym zakresie. Przy pracy tego urzadzenia uruchomiony bedzie musial byc przekaznik1.
Urzadzenia na przekaznikach 4 i 5 uruchamiane beda na wyznaczony czas co okreslona ilosc dni (np. Na 10 sekund co 14 dni). Podczas ich pracy (oraz przez ilka minut po zakonczeniu) przekaznik1 bedzie musial dzialac.
Caly uklad bedzie posiadal system zegarowy, pomyslalem wiec o zapisywaniu daty uruchomienia oraz zakonczenia dzialania w zmiennych w formacie timestamp oraz wykonywaniu co 1sekunde daemon-a dzialajacego w oparciu o algorytm jak ponizej:
[Odczytaj aktualny czas (timestamp)] -> [jesli czas wl <= aktualny <= czas wyl] sprawdzamy status uslugi (0 wylaczony, 1 wlaczony) -> jesli status=0 wlaczamy przekaznik -> [jesli czas wl <= aktualny > czas wyl] sprawdzamy status uslugi -> jesli status=1 wylaczamy przekaznik -> zatrzymujemy na 1 sek i zapetlamy.
Problem w tym, ze przy takim algorytmie i sposobie dzialania powstalyby kolizje podczas uruchomienia kilku uslug na raz (wtedy ostatnia nadpisywalaby wczesniejsza i ja zatrzymywala) i pewnie w calej masie innych sytuacji. Czy macie moze pomysl jak to wszystko uruchamiac, zatrzymywac i zapamietywac kiedy nastepnym razem uruchomic dana usluge?