♫ ♩ ♪ Vanden Plas ☘ The Ghost Xperiment ♪ ♩ ♫
https://youtu.be/23BzcW8-zAY
Zabawka dalej to kolejny temat majstrowany głównie w celu niezwariowania od siedzenia w domu, wychodzenie na ogród przestało wystarczać. No i dni temu kilka taka mnie tęsknota naszła z nagła za zostawionymi na stoliku w pracy advantechowymi kostkami ADAM, miałam rozgrzebany mega fajny temat komunikacji MODBUS a tu brzdęk, wygnali precz na teleizolację, a klamoty osierocone zostały. No to myśl taka, że może coś na kolanie sobie wydłubię w tych klimatach i z części, które mam po pudełkach. I tak się wykluł pomysł na systemik akwizycji danych, edycja intencyjnie biedna i ekonomiczna - czyli tytułowe bieDAQ. Póki co zwalczyłam odczyt analogowy i działa mi kadłubek komunikacji MODBUS w trybie ASCII, do tego szkice w LabVIEW, niezbyt doskonałe ale także pracują. Dalej może będzie cyfrowe IO jako osobny moduł i będę miała te swoje "ADAMY z Biedry". A jak już nadejdzie kryzys postapokaliptyczny - to będą jak znalazł.
bieDAQ.ai4 - wejścia analogowe
Pisze *.ai4 ponieważ teoretycznie obsługiwany są cztery kanały pomiarowe, tyle po prostu posiada kostka PIC16F876. Btw, dostałam strzał od jednego ludka z Elki - czemu takim starociem się zajmuje? No właśnie dla sportu, przecież do kosza nie wyrzucę. Wprawdzie na horyzoncie widać już zasobową ścianę, głównie w postaci braku pamięci RAM, ale ogólnie to w układ sporo się mieści, nawet pisząc w C. Wracając to tematu - schemat poniżej - podobny był już tu pewnie kilka razy. Dla porządku kilka słów.
Procesor PIC w typowej konfiguracji z zewnętrznym kwarcem, przetwornik A/C PIC-a pracuje z zewnętrznym źródłem napięcia odniesienia na bazie kostki MCP1541. Kolejne kanały pomiarowe zasilają oczywiście termometry MCP9700 oraz LM35. Czwarty kanał póki co się obija. Komunikacja systemowe to MAX485 także w dość typowej konfiguracji. Pierwsze testy były na znanym już konwerterze TTL/RS485 z Chinowa, ale w ramach potaniania zastąpiłam go MAX-em. Komunikacja z człowiekiem zapewnia wyświetlacz LCD, taki zwykły jakich wszędzie pełno. Z powodu zabraknięcia pinów w kontrolerze zastosowanie znalazł układzik CD4094 pracujący jako slave SPI. Wyprowadzeń na ewentualne CS-y jeszcze tam kilka mam, więc to SPI ratuje mi skórę przy tak ubogich peryferiach. No i jeszcze LED-y, które ostały się na płytce z czasów 'PIC na wodę...', służą aktualnie do sygnalizacji aktywności modułu, no i dzięki nim zawsze coś więcej się dzieje na stole. Kolejne etapy ewolucji zabawki mamy na kolażu poniżej.
Wyświetlacz prezentuje surowe dane z przetwornika A/C w formie szesnastkowej, do obserwacji jak układzik się miewa to zupełnie wystarcza. Na płytce stykowej można zauważyć też elementy do spy-485 czyli podglądu magistrali, na schemacie już nie rysowałam, ponieważ to tymczasowy dodatek.
Oprogramowanie na PIC - w załączniku, to w sumie mieszanka moich urojeń w C oraz google, szczególnie odnośnie konfiguracji ADC, łatwo to poznać po niespójności odwołań do rejestrów procesora, raz ba wprost, raz przez pola bitowe.
Gdzieś tam w tym kodzie mym nieszczęsnym zaczaił się błąd i program potrafi się nieoczekiwanie zawiesić. Stąd szybko przeprosiłam się w watchdog-iem, gdyby coś nie pykło - układzik się zresetuje automatycznie.
Programik w LabVIEW także ewoluował - w załączniki kolejne etapy dziergania. Tu przy okazji wyszło jajko kwadratowe z klockami do obsługi Modbus, które przygotowali koleżkowie z National Instruments (znajdziemy je w narzędziu ot zarządzania pakietami VIPM, proszę doinstalować, gdyby ktoś chciał się tym pobawić). Rzeczone jajko polega na tym, że po przestawieniu kostki otwierającej sesję Modbus w tryb ASCII (tekstowy, pamiętamy, że RTU jest binarny) komunikacja odbywa się na siedmiu bitach danych, najstarszy ósmy bit robi za parzystość, bit stopu jest jeden. I w sumie nieważne co ustawimy w klocku, none,even czy odd - i tak w komunikacji jest even. Przynajmniej w tej wersji, która dla LV2014 jest w repozytoriach NI. Po stronie samego LabVIEW nic z tym nie zrobimy, ale z softem na PIC to nie ukrywam - namęczyłam się nieco, wycinanie najstarszego bitu przy odbiorze to pikuś, ale wyliczanie i wstawianie przy nadawaniu....heh, no właśnie na tę okazję powstało spy-485 ponieważ zdarzało się kląć mocniej niż zwykle.
Może kilka zdań o programiku w LV, w wersji która nie tylko odczytuje dane analogowe (funkcja 4) ale i informacje o klamocie (43/13). Kluczowe elementy ponumerowane, zatem mamy tak:
1 - VISA resource name - ekranowa kontrolka pozwalająca wskazać port szeregowy, do którego dołączyliśmy konwerter USB/RS485
2 - Create Modbus Instance - otwarcie sesji z urządzeniami Modbus, konfigurujemy parametry transmisji, wskazujemy ID urządzenia podrzędnego do dalszych operacji zapisu/odczytu. Oczywiście jest osobny klocek to zmiany tej wartości.
3 - Set Timeouts - ustawienie dopuszczalnych czasów oczekiwania na reakcję urządzeń podrzędnych
4 - Read Device Identification - kostka wywołująca funkcję 43 - identyfikacja urządzenia. Wykorzystuje tryb podstawowy (basic) stąd zwrotka zawiera tablicę trzech wartości - producent, produkt, wersja, opakowane w klaster ObjectID+Value [4]. Po pozyskaniu elementów tablicy i dodaniu do każdego CRLF-a można je na przykład wypisać na tekstowym indykatorze Info Text[9] metodą Invoke Node [5] AppendString. Oczywiście na starcie aplikacji warto jego zawartość wyczyścić wpisując pusty napis. Wracamy do Modbus-a.
7 - Read Input Registers - kostka wołające funkcję 4 - odczyt wskazanych rejestrów (w zamyśle analogowych), podajemy ile rejestrów chcemy odczytać oraz od którego zacząć odczyt. Te wartości są specyficzne dla danego urządzenia, każde może mieć przecież inne zasoby.
8 - Shutdown - zamknięcie połączenia z szyną i zwolnienie zasobów, np uchwytów do portu szeregowego.
Jak widać czarów tu nie ma, klocki są łatwe do ogarnięcia i robią to, co należy.
Garstka linków, gdyby komuś MODBUS przypasował, warto to poznać, to standard stary i wygrzany, a na rynku jest ogrom modułów, przystawek, liczników etc/itd obsługujących ten protokół, włączając w to różne (i myślę, że ciekawe) podróbki Advantecha, które zalegają ALI.
Na koniec oczywiście filmik jak zabawka się sprawuje. Widać też moment zawieszki bieDAQ i sprzętowy reset, czego konsekwencją jest (póki co nieobsłużony) timeout po stronie LabVIEW. Aplikacje obie nie są aktualnie tak idiotoodporne jakbym chciała, stąd te drobne, tymczasowe niedogodności.
https://youtu.be/t4wTBgjARrc
#slowanawiatr
