• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wielowątkowość - aplikacja inteligentny dom
#1
Muszę zrobić aplikację, która będzie nasłuchiwać na 30 wejściach Andino MEGA stanów wysokich. 

W pętli głównej mam więc nasłuchiwanie każdego z pinów - pętla robi obrót co około100 milisekund.  Dłuższy czas obrotu mógłby spowodować, że nie będę widział jak na jednym z pinów pojawi się stany wysoki - po prostu program mógłby go przegapić.  

Załączanie stanu wysokiego to nic innego jak sytuacja w której domownik włączy światło włącznikiem monostabilnym na ścianie co wygeneruje stan wysoki dla przekaźnika załączającego obwód światła.

Muszę w pętli mieć też odpowiednio dużo czasu na to aby między obrotami sprawdzać warunki - rejestry stanów dla każdego z wejść z osobna i zależności od scenariusza wysyłać odpowiednie rozkazy dane na wyjście  - stan niski lub wysoki. 

Oczywiście te 100 ms to rzecz dyskusyjna. Może działałoby to dobrze przy większej tolerancji ale nie będę stał przy włączniku i trzymał go przez sekundę. 

Do tego momentu mam napisany kod na ifach i wszystko mi działa bardzo dobrze. 

Problem pojawia się gdy do gry chcę wpiąć bibliotekę serwera ethernet i wystawić jakieś rest API po TCP/IP.  Tak naprawdę powinienem postawić drugą pętlę, która będzie się wykonywać równolegle i nasłuchiwać czy przez www nie nadeszły jakieś rozkazy związane z koniecznością wyłączenia / włączenia jakiegoś odbiornika.  Te pętle powinny działać w taki sposób aby jedna drugiej nie blokowała. 


O asynchroniczności już nie wspomnę, że w jednym czasie może pojawić się kilka reqestów  np wygenerowanych z kilku różnych systemów sterujących czy to przez użytkownika z poziomu np aplikacji mobilnej. 

Szczerze mówiąc nie mam pomysłu jak obsługiwać żądania przez TCP/IP bo tam timeout może wynieść nawet kilka sekund. Nie mogę zatrzymać jednej pętli nasłuchującej piny  bo przegapię informacje na temat tych stanów, które mogłoby się pojawić na wejściach.  

Całość piszę sobie na controllino mega czyli to ten sam procesor co po Arduinio MEGA. Różnica jest tylko w tym, że jest tam  w tym, że niektóre porty są inaczej zmapowane i jako moduł LAN jest układ W5100.

Proszę o info jak Waszym zdaniem można rozwiązać taki problem?
 
Odpowiedź
  


Wiadomości w tym wątku
Wielowątkowość - aplikacja inteligentny dom - przez kamil2234 - 05-03-2021, 23:38

Skocz do:


Przeglądający: 1 gości