PLC-home.pl

...inteligentny dom zarządzany przez sterownik PLC

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
Z powyższych względów - przede wszystkim ceny rozwiązania no i małej elastyczności systemu zdecydowałem się na rozwiązanie bliskie elektronikom amatorom.

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.

 Kontrola temperatury wentylacji na SCADA

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.