Moduł odczytu temperatury
Kolejnym zmysłem mojego inteligentnego budynku będzie odczyt temperatur z prawie dowolnego miejscu domu.System pomiaru temperatury
Standardowo można zakupić do większości sterowników PLC dodatkowy moduł, który podłączając czujniki pozwala mierzyć temperaturę w oddalonych miejscach. Nie przypadło mi to rozwiązanie do gustu z kilku powodów:- cena :), moduł (na szesnaście punktów) + czujniki wyszło sporo powyżej 1000 zł.
- nie ufam oporowym czujnikom temperatury, a zakup czujników temperatury typu "termopara" do domu to moim zdaniem przesada
- z tego co się orientuję (a mogę się mylić) oporowe czujniki temperatury przychodzą z odpowiedniej długości przewodem skalibrowanym co do oporności, aby pomiar rezystancji był jednolity
ONE WIRE
Za 5 złotych można kupić termometr cyfrowy Dallas DS18B20.Każdy taki termometr:
- jest niezależny
- posiada 64-bitowy numer ROM którym można go wywołać i prowadzić z nim komunikację
- do komunikacji potrzebuje tylko dwóch przewodów WLICZAJĄC w to zasilanie i GND - komunikacja odbywa się na linii zasilania
- do jednej wspólnej magistrali można podłączyć dowolnie dużą liczbę takich termometrów
Konwerter magistral - MODBUS over RS-485 + 1-Wire + USB
No dobrze, ale żaden sterownik PLC nie posiada interfejsu one-wire. Z tego też powodu poświęciłem sporo czasu na stworzenie własnego konwertera magistral.
Na rynku dostępne są takie konwertery, ale obarczone są poważną wadą - do jednego wejścia można przyłączyć tylko jeden czujnik One Wire. Wynika to ze skomplikowanego algorytmu detekcji i skanowania obecnych na magistrali urządzeń OW.
Algorytm skanowania zobrazuję przykładem: mamy na magistrali nie wiadomą liczbę urządzeń OW. Każde z urządzeń ma 64 bitowy kod, który chcemy poznać. Jedyne co mamy do dyspozycji to zwarcie na kilka mikrosekund zasilania do GND, w odpowiedzi możemy otrzymać tylko pojedyncze zwarcie tej samej linii zasilania do GND od któregoś z urządzeń. Dość ciekawe zadanie intelektualne. :) Ja je ominąłem znajdując w sieci kawałek kodu w C który zaadoptowałem do mikrokontrolera Microchip PIC 18F2550.
Zdjęcia z realizacji konwertera magistral.
|
Postanowiłem, że mój konwerter będzie wolny od tej wady i zaraz po podłączeniu nowego urządzenia one-wire do wspólnej dwużyłowej magistrali zostanie ono wykryte, zaadresowane, rozpocznie się odczyt pomiarów, który zostanie zmapowany do sterownika PLC.
Algrytm detekcji (One Wire Search) nie jest deterministyczny i po wpięciu nowego urządzenia OW, kolejność zgłaszania się urządzeń zostaje zaburzona. Dlatego też konieczny był interfejs USB, który podłączamy do laptopa, starujemy terminal (nowy port COM) i możemy zarządzać konwerterami jak i przypisywać kolejność urządzeniom OW, czytać temperatury z konsoli etc. Nowe urządzenie OW po wykryciu otrzymuje nowy adres z mojego systemu który od tej pory będzie przechowywać na EEPROMie.
Szczerze powiedziawszy nie jest to tak proste jak napisałem powyżej - wszystko to działa - jednak zdarza mu się jeszcze gubić przy nadawaniu kolejności - muszę doprawcować ten soft.
UPDATE: Pracuję nad nowszą, wersją konwertera ze zmienionym podejściem - 16 osobnych wejść magistrali. W stosownym czasie pojawi się update.
MODBUS Slave
Urządzenie jest odpytywane przez sterownik PLC o 16 kolejnych rejestrów - zwraca sterownikowi wartości tych rejestrów które zawierają temperatury poszczególnych urządzeń 1-wire. Odpytywanie odbywa się co kilka sekund.
SCADA później odpytuje sterownik o zawartość tych rejestrów i oto mamy piękny screen ze SCADA.