HAPCAN installation tips and troubleshooting when assembling, commissioning and configuring devices.
Rozwiązywanie problemów z instalacją HAPCAN, budową, uruchamianiem i konfiguracją urządzeń.
Moduł zapytany o stan (np. 0x109 -status request to node), opowiada o sobie wylewnie, wysyła na magistralę wszystko co wie o sobie.
A czy jest możliwe, żeby odpytać moduł o stan np. jednego przycisku/LEDa albo jakoś inaczej go sprowokować, żeby odesłał tylko jedną ramkę, zamiast 17, jak to jest w przypadku modułu 14-kanałowego?
Podczas pracy zintegrowanej z jakimś zewnętrznym systemem, podstawowy scenariusz to:
- wyślij do modułu ramkę ustawiającą „coś”,
- odczytaj stan modułu – sprawdzenie czy „coś” zostało faktycznie ustawione.
Gdyby się udało zoptymalizować odpowiedzi na „status request”, na magistrali CAN byłby znacznie mniejszy ruch podczas takiej pracy. W małych sieciach nie ma problemu, ale przy dużych chyba mógłby być.
Obecnie optymalizację można zrobić jedynie po stronie kodu, który reaguje na przesyłane ramki statusu, żeby niepotrzebnie nie przeciążać go analizowaniem zbędnych danych – można odfiltrować i przetworzyć tylko te ramki, które dotyczą owego „coś”, a dzięki polu Flags (= 0x1) wiadomo, że jest to odpowiedź na zapytanie, a nie na skutek rzeczywistej zmiany stanu modułu.
m.n wrote:
Podczas pracy zintegrowanej z jakimś zewnętrznym systemem, podstawowy scenariusz to:
- wyślij do modułu ramkę ustawiającą „coś”,
- odczytaj stan modułu – sprawdzenie czy „coś” zostało faktycznie ustawione.
Generalnie HAPCAN jest tak zrobiony, że po wysłaniu ramki sterującej urządzeniem, urządzenie sterowane natychmiast odpowiada czy stan został zmieniony.
Ta reguła została celowo pominięta przy sterowaniu LED w module przycisk, właśnie po to by nie generować niepotrzebnego ruchu.
Jacek wrote:Generalnie HAPCAN jest tak zrobiony, że po wysłaniu ramki sterującej urządzeniem, urządzenie sterowane natychmiast odpowiada czy stan został zmieniony.
Ta reguła została celowo pominięta przy sterowaniu LED w module przycisk, właśnie po to by nie generować niepotrzebnego ruchu.
Do innych modułów jeszcze nie doszedłem, jestem na 3.1.3, dlatego nie poznałem jeszcze tego zachowania.
Wysyłanie 17 ramek po zmianie pojedynczej LED nie jest wskazane i dobrze, że tak się nie dzieje automatycznie, ale gdyby była wysłana jedna ramka, ta dla zmienionej LED, to raczej zbędnego ruchu nie będzie.
Może sterowanie LED nie jest scenariuszem częstym i specjalnie mocno pożądanym, ale akurat od tego modułu zacząłem.
Nie znalazłem informacji o tym jak do modułu 3.1.3 przesłać polecenie „wciśnij button”.
Dla 3.1.0 jest wprost informacja, że się nie da: „There are no control instructions in this firmware.”
Jak uzyskać taki efekt, jak w programatorze:
2019-10-12 22_02_02.png (28.96 KiB) Viewed 12735 times
m.n wrote:Nie znalazłem informacji o tym jak do modułu 3.1.3 przesłać polecenie „wciśnij button”.
Moduł musiałby być wyposażony w mechanizm wciskający przycisk "mechaniczna dłoń"
Tak naprawdę wystarczy "podszyć się" pod ten moduł i wysłać ramkę, którą zwykle on wysyła:
No tak, zainteresowane moduły zareagują tak, jak na rzeczywiste wciśnięcie przycisku. Proste.
I jeszcze jedno pytanie: ramka 0x300 (Real Time Clock) – nie znalazłem opisu w dokumentacji. Czy jest gdzieś taki opis? Pytam dla porządku, bo oczywiście jest banalna do rozszyfrowania.