Są osoby, które nie mają ochoty na pracę z Raspberry Pi i amatorskimi podzespołami. Mimo intensywnego przekonywania, mój brat odmówił współpracy z RPi i linuxem. Chciał mieć coś, co po prostu będzie działać...
Aby połączyć jego rozbudowaną w międzyczasie sieć 1-wire ze sterownikiem WAGO 750, zamówiłem moduł "1-Wire Buskoppler SPS" firmy esera automation. Jest to moduł konwersji RS232 z 1-Wire, który podłączyć można bezpośrednio do portu serwisowego WAGO przez przygotowany przez sprzedawcę kabel. Unika się w ten sposób konieczności dokupienia osobnego modułu RS232 (lub RS485 do innych rozwiązań). Całość kosztowała nas niecałe 400 PLN z dostawą do Polski. Sam moduł wyceniony jest na 70 EUR. Oto, jak wygląda on po zainstalowaniu:
Instalacja i uruchamianie przebiegło zaskakująco sprawnie. Moduł zasilany jest 24 VDC i posiada 2 kanały 1-wire. Firmowy kabel należy wetknąć w port serwisowy i... to tyle!
Na stronie esera automation znaleźć można kompletny przykład programu do obsługi modułu 1-wire oraz kopie biblioteki OWOS. Oto, co trzeba zrobić:
1. Dodać bibliotekę owos_9_1.lib oraz biblioteki pomocnicze, z których najbardziej kłopotliwa może być oscat_basic_333.lib (o tym, jak dodać ją do programu piszę w odrębnym artykule).
2. Skonfigurować globalną zmienną do obsługi komunikacji.
Przykład z dostarczonej przez producenta paczki przewiduje wykorzystanie najróżniejszych urządzeń sieci 1-wire. W moim przypadku były to wyłącznie termometry DS1820. Program wyglądał więc następująco:
W zmiennej DS1820_Anzahl wpisać należy liczbę obsługiwanych urządzeń... Może być nieco większa od tego, co funkcjonuje w naszej sieci. Jeśli, natomiast, wpiszemy zbyt małą liczbę, moduł nie będzie odnajdywał nowych, dodatkowych czujników.
Definicja tablicy DS1820 podana jest jako przykład z 2 pustymi polami. Zostawiamy je tak na tym etapie i będziemy wypełniać w dalszych krokach.
3. Dodać nowy program (np. o nazwie oneWire) i uzupełnić go, jak poniżej:
4. W Task Manager dodać 1 zadanie wykonujące program oneWire co 80ms;
Tyle powinno wystarczyć, by moduł został uruchomiony... to jednak za mało, by sprawnie go obsługiwać. Poszczególne czujniki nie wyskoczą w jakiś magiczny sposób w tabeli wypełnionej odczytami. Trzeba wykonać kilka konfiguracyjnych kroków. Kompilujemy i uruchamiamy program, a następnie:
1. Zmieniamy wartość zmiennej globalnej owp.ID_suchen.was_suchen.DS1820 na TRUE i wciskamy CTRL+F7 by zmiana została uwzględniona:
2. Zmieniamy wartość zmiennej globalnej owp.ID_suchen.neue_ID_suchen na TRUE. Po wciśnięciu CTRL+F7 uruchomi się cykl poszukiwania nowych czujników DS1820 w podłączonej sieci 1-wire.
3. Jeśli nowe urządzenia zostaną odnalezione, informacje o tym znajdziemy:
- w globalnej zmiennej owp.ID_suchen.anzahl_gefunden.DS1820, gdzie wykazana będzie ilość znalezionych czujników
- w globalnej tablicy DS1820, gdzie w poszczególnych polach dodane będą dane nowych czujników.
4. Po znalezieniu czujnika należy zmodyfikować program w sekcji definicji zmiennych globalnych, uzupełniając dane tablicy DS1820. Poniżej przykład z uzupełnionym 1 nowym czujnikiem.
Dzięki temu sterownik po ponownym uruchomieniu od razu będzie miał dostęp do danych zdefiniowanych czujników, bez konieczności uruchamiania cyklu wyszukiwania.
Aby usprawnić sobie cały proces wyszukiwania i dodawania nowych czujników, zbudować można prostą wizualizację, która pozwoli tap'ować zmienne owp.ID_suchen.was_suchen.DS1820 i owp.ID_suchen.neue_ID_suchen, i która wyświetli wyniki poszukiwań.
Ostatecznie - temperatury odczytane z poszczególnych czujników dostępne są w globalnej tablicy DS1820[x].Temperatur.
To tyle :) Gdyby pominąć fakt, że zmienne i bloki funkcyjne mają niemieckie nazwy, całość przebiegła zaskakująco sprawnie. Na ten moment, do 1 kanału podpiętych jest 10 czujników i całość działa sprawnie. Wydaje się więc, że moduł 1-Wire Buskoppler SPS wystarczy do obsługi domu bez konieczności instalowania hub'ów 1-wire.