Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Kolektor próżniowy ze sterownikiem SOLARCOMP 951 - transmisja szeregowa RS485

swibno 18 Mar 2014 17:05 4479 22
  • #1 18 Mar 2014 17:05
    swibno
    Poziom 10  

    Przeglądając instrukcję obsługi sterownika SOLARCOMP 951 sterującego kolektorem próżniowym zauważyłem, że wyposażony jest on w złącze do transmisji szeregowej RS485 (RS485 B oraz A). Zastanawia mnie przeznaczenie tego złącza. W instrukcji nie ma o tym wzmianki. Są podane tylko dwa parametry:
    Adres regulatora w sieci monitoringu: Nastawa fabryczna: 10
    Szybkość transmisji: Nastawa fabryczna: 1200
    Jak sprawdzić czy można przesłać szeregowo jakieś parametry za pomocą tego złącza?
    Myślę tu o archiwizacji danych, aktualnych temperatur i energii wytworzonej przez solar, czy ewentualnym wysłaniu ich na serwer www. Sterownik pamięta tylko 7 ostatnich dni.
    Czy gdy kupię konwerter RS232 (mam w komputerze) na RS485 i uruchomię program Putty zobaczę przesyłane dane?

    0 22
  • Relpol
  • Relpol
  • #3 19 Mar 2014 21:09
    swibno
    Poziom 10  

    Dzięki za podpowiedź. Bardzo fajny program. Będę testował jak przejściówka dotrze do mnie. Dziś napisali do mnie z firmy produkującej sterownik, że jest możliwy odczyt parametrów i temperatur i że udostępniają protokół komunikacyjny oraz adresy zmiennych w pamięci sterownika. Czekam na drugą odpowiedź bo ciekawi mnie na jakich warunkach. Sezon letni wkrótce i widzę promyk nadziei na wizualizację danych z kolektora.

    0
  • #4 19 Mar 2014 21:19
    rwxw
    Poziom 22  

    swibno napisał:
    że udostępniają protokół komunikacyjny

    Jeśli to standardowy protokół Modbus RTU, to modpoll powinien przeczytać. Jeśli protokół jest jakiś nietypowy, to może być niestety problem i trzeba będzie kombinować.

    0
  • #5 21 Mar 2014 23:48
    swibno
    Poziom 10  

    Dziś dostałem odpowiedź z firmy wraz z załączoną dokumentacją. Niestety nie jest to Modbus RTU. Sterownik korzysta z własnego protokołu o nazwie Compit C3. Ramka z zapytaniem lub odpowiedzią składa się z 11bajtów. Mam znaczenie poszczególnych bajtów w ramce więc postaram się napisać własny program na atmega32. Doradzono mi program do wizualizacji procesów automatyki ANT Studio niestety w wersji demo chodzi tylko 2 godziny.

    0
  • #6 04 Kwi 2014 11:38
    labudzik
    Poziom 10  

    Udało Ci się jakoś skomunikować z tym sterownikiem? Ja próbowałem za pomocą routera z openwrt (linux, używałem komend typu echo -en "\xE4\x54\xE4\x3D\x78\x78\x01\x78\x78\x78\x23") oraz z Windowsa XP (używałem Bray Terminal). Używałem przejściówek USB-RS485 podłączając do USB oraz RS232-RS485 podłączając bezpośrednio do RS232.
    Wysyłam do sterownika zgodnie z protokołem C3 zapytanie:
    w HEX: E4 54 02 7B 78 78 01 78 78 78 23
    co binarnie odpowiada: 11100100 01010100 00000010 01111011 01111000 01111000 00000001 01111000 01111000 01111000 00100011

    Brak reakcji sterownika. Komunikacja jest bo jak podłączyłem jednocześnie router i PC to wysyłając na routerze ten ciąg znaków, do PC docierało.
    Ktoś może coś podpowiedzieć? Załączam pliki z opisem protokołu C3 i mapą parametrów SolarComp oraz używany program Bray Terminal.

    0
  • #7 05 Kwi 2014 09:02
    swibno
    Poziom 10  

    Na początku żeby zestawić komunikację użyłem programu Terminal do wysyłania zapytań. Spędziłem nad tym sporo czasu ale sterownik w końcu wysłał odpowiedź. Później napisałem krótki program na ATmega32 który co 5 sekund wysyła zapytanie i odczytuje odpowiedź dowolnej temperatury. Nie odczytywałem jeszcze parametrów ale jak sterownik już odpowiada to kwestia zmiany treści zapytania. Teraz pracuję nad uruchomieniem bibliotek które będą te dane zapisywać na kacie pamięci SD. Chętnie ci pomogę na podstawie moich doświadczeń. Rozumiem że połączenie masz poprawne? Ja mam A-A, B-B, w sterowniku do A,B wpięty rezystor 120ohm i rownież po stronie PC. Moja ramka wysyłana w teminalu wygląda tak:$8A$54$01$5A$78$78$01$78$78$78$23 (bez spacji). Sprawdź czy licznik TX na dole pokazuje wysłane 11 bajtów. Adres sterownika u mnie 10, ty wysyłasz do wszystkich powinno też być ok ale akurat tego nie testowałem. Może na początek ustaw adres odbiorcy twojego sterownika. Sprawdź też w sterowniku jaką masz ustawioną prędkość transmisji i taką ustaw w terminalu.

    0
  • #8 14 Kwi 2014 14:35
    labudzik
    Poziom 10  

    Posłałem w Terminalu komendę ze znakami $ i sterownik odpowiedział. Co dają te $? Sterownik odpowiada zarówno na zapytanie do wszystkich jak i na konkretny adres.
    Ten rezystor 120ohm jest konieczny ?
    W openwrt mam problem natury takiej, że nie może obsłużyć znaków ASCII powyżej 128. Jak robię cat /dev/ttyUSB0 to pokazuje odpowiedź, ale tylko ze znakami drukowalnymi ASCII. W openwrt komenda cat nie ma opcji -c. Próbowałem użyć programów picocom, ale problem podobny.
    Jeszcze inna kwestia, że dopiero po ustawieniu prędkości 9600 na sterowniku niektóre programy zaczęły na openwrt w ogóle działać. Mimo że miałem ustawione wcześniej 1200 wszędzie.

    0
  • #9 14 Kwi 2014 17:42
    swibno
    Poziom 10  

    W programie terminal znak $ oznacza, że znak ASCII jest wpisywany szesnastkowo w $xx, natomiast znak # przed liczbą oznacza, że znak ASCII jest podawany w postaci dziesiętnej #xxx. Można te sposoby stosować naprzemiennie według uznania. Tutaj masz link do strony programu gdzie w opisie można znaleźć przykłady zastosowań: https://sites.google.com/site/terminalbpp/

    Jeżeli chodzi o rezystory 120ohm, gdy przeglądałem standard podłączenia RS485 zauważyłem, że zawsze są stosowane na końcach magistrali i takiego podłączenia użyłem, tzw terminatory mające za zadanie redukcje zakłóceń powstających w trakcie przesyłania sygnałów. U mnie bez rezystorów na 15 metrowym przewodzie też działa bez problemu. "zakończenie przewodu terminatorem ..., nadaje mu właściwości przewodu nieskończenie długiego, co powoduje brak odbić przesłanego sygnału".

    W implementacji w openwrt nie pomogę bo nie mam tu żadnych doświadczeń.

    0
  • #10 11 Maj 2014 18:47
    tomasz3dk
    Poziom 11  

    Witam.
    Pozwolę sobie odświeżyć temat, ponieważ na dniach zająłem się komunikacją po rs485 ze sterownikiem solarnym, gdyż założyłem sobie instalację solarną w domu. Z tym, że u mnie został założony zestaw Immergas ze sterownikiem Immsol 51, lecz po szukaniu na necie informacji o nim, okazało się, że jest to ten sam sterownik co SOLARCOMP 951, tylko wszędzie nazwy zmienione i producent ( widocznie firmy się dogadały co do tego) reszta identyczna. Wracając do rzeczy napisałem sobie apkę testującą komunikację z tym sterownikem i sterownik odpowiada mi zgodnie z protokołem. Z tym, że jak chciałem podesłać do niego czas to już na nim się nie zmieniał. Próbował ktoś z was ustawić czas na tym sterowniku? W zamian, że miałem dostęp do protokołu dzięki temu tematowi wrzucam też moją aplikację - na razie potrafi tylko odczytywać parametry. Została ona napisana w Qt (5.2.1), w podkatalogu linux znajduje się ona w wersji pod Linuksa, a w podkatalogu windows dla Windowsa. Starałem się dorzucić też liby aby działa od razu, w razie "w" należy mieć liby Qt w wersji 5.2.1. Uwaga, aby działa pod Linuksem należy też mieć prawa do portu szeregowego. U mnie testowałem na konwerterze USB-rs485 opartym na FTDI. Poniżej linki:
    windows
    linux
    W razie jakby zgłaszało, że brakuje bibliotek należy postępować zgodnie z:
    dodawanie bibliotek

    0
  • #11 12 Maj 2014 09:23
    labudzik
    Poziom 10  

    Nie ustawiałem żadnego czasu. Do tej pory zczytywałem tylko temperatury. Który czas chciałeś ustawić? mogę spróbować u mnie czy pójdzie

    0
  • #12 12 Maj 2014 10:40
    tomasz3dk
    Poziom 11  

    Chodzi o punkt 2 z opisu protokołu, czyli rozsyłanie temperatury zewnętrznej i czasu.
    Edytka:
    Poprawiłem linki w poprzednim poście i wrzuciłem oddzielnie dla Windowsa i Linuksa bo wcześniej coś archiwum było uszkodzone.

    0
  • #13 13 Maj 2014 11:22
    labudzik
    Poziom 10  

    W moim sterowniku również nie można ustawić czasu

    0
  • #14 13 Maj 2014 13:02
    tomasz3dk
    Poziom 11  

    Jakiego konwertera usb-rs485 używasz do komunikacji pomiędzy openwrt, a sterownikiem. Bo planuję właśnie też komunikować się ze sterownikiem przez neta właśnie przez router i muszę sobie coś zakupić. A ten na którym testowałem pożyczyłem sobie z roboty i trochę jest za drogi jak na to rozwiązanie.

    0
  • #15 13 Maj 2014 13:22
    labudzik
    Poziom 10  

    na usb używam Adapter USB Digitus Adapter USB - interfejs szeregowy, USB 2.0 DA-70157
    działało też na dwóch połączonych przejściówkach usb-rs232 (chyba była to na pl2303) i duga rs232-rs485 (taka jak do kamer)
    na openwrt będziesz pisał swój soft?
    twoja aplikacja ruszyła mi na win8.1 na xp mam błąd jak na obrazku
    Kolektor próżniowy ze sterownikiem SOLARCOMP 951 - transmisja szeregowa RS485
    na debianie z koleji brakuje mi libicui18n.so.51 i nie mogłem jej zlokalizować. na linux twoja aplikacja też ma gui, czy z shella da się ją uruchomić?

    0
  • #16 13 Maj 2014 13:37
    tomasz3dk
    Poziom 11  

    To jest ta sama aplikacja tylko przekompilowana, tak to jest, jak sie nie dołączy bibliotek współdzielnoych ;/. Dziwi mnie trochę ten komunikat od xp, być może jakbyś ściągnął i zainstalował biblioteki Qt to pewnie by ruszyło. A tak pod 8.1 to dobrze ci chodziła? Tak będę pisał softa na openwrt, z tym, że będę też korzystał z Qt, bo ostatnio udało mi się je skompilować na mój router (Routerstation Pro), a to dużo usprawnia szybkie pisanie apki, ewentualnie podepnę pod raspberry i tam będzie ta aplikacja, zobaczę jak będzie mi to chodziło na routerze i czy zbynio nie będzie obciążony.

    0
  • #17 14 Maj 2014 08:54
    labudzik
    Poziom 10  

    Sprawdizłem, na win 8.1 aplikacja się uruchamia, jest info o wysyłaniu (pojawiająsie linie Send:.... i HEX:...) ale nie ma informacji zwrotnej. Testowałem na razie zapytanie o temperatury.
    Na XP sprawdze jeszcze po zainstalowaniu bibliotek czy ruszy.

    0
  • #18 14 Maj 2014 10:34
    tomasz3dk
    Poziom 11  

    A ustawiłeś odpowiednio dobrze port i jego prędkość? Wieczorem postaram się uzupełnić biblioteki w wersji na Linuksa.
    Edytka:
    Poprawiłem linka do aplikacji na Linuksa (w razie w postępować zgodnie z opisem poniżej).

    0
  • #19 15 Maj 2014 15:55
    labudzik
    Poziom 10  

    Uuruchomiłem programik pod XP. Utworzyłem w katalogu z programem podkatalog "platforms" i skopiowałem tam plik C:\Qt\Qt5.2.1\5.2.1\mingw48_32\plugins\platforms\qwindows.dll
    Jest możliwość aby ten programik zapisywał dane odczytane do pliku i aby można byłoby go uruchamić z lini poleceń? Głownie chodzi o zebranie danych do zestawienia historycznych wykresów.

    0
  • #20 19 Maj 2014 07:14
    tomasz3dk
    Poziom 11  

    Obecnie trochę cierpię na chroniczny brak czasu, i na razie nic w tej kwestii nie robię. Druga sprawa, że czekam, aż mi przyjdą konwertery rs485. Jak znajdę trochę czasu to się pomyśli nad tym.

    0
  • #21 19 Lut 2015 12:56
    tomasz3dk
    Poziom 11  

    Odgrzeję kotleta. Sorry za post pod postem, ale chciałem żeby wszyscy zainteresowani zostali poinformowani.
    Z racji, że ostatnio trochę więcej mam czasu pozwoliłem sobie wrzucić źródła mojego programu na githuba.
    Dodałem do niego jeszcze obsługę zapytań do sterownika pieca, którego sobie robię do kotłowni bazując na tym samym protokole.
    Link do źródeł:
    https://github.com/tomasz3dk/solarasker.git

    0
  • #22 31 Lip 2015 16:45
    swibno
    Poziom 10  

    Czy udało się komuś odczytać czas ustawiony w sterowniku? Mam działający program wysyłający zapytania o temperatury, ale chciałbym zmodernizować aby odczytywał i zapisywał do pliku też aktualny czas jaki ustawiony jest w sterowniku. Nie wiem jakim zapytaniem to zrobić i czy to jest możliwe. W instrukcji protokołu nie znalazłem nic o odczycie czasu ze sterownika oprócz zdania "Nastawy zegara. Parametry zegara ustawiane co 15 min, np. godzina 8:15 to wartość 33"

    0
  • #23 31 Lip 2015 23:19
    tomasz3dk
    Poziom 11  

    To zdanie to tyczy się czasów włączenia/wyłączenia pracy kolektora ewentualnie grzałki lub cyrkulacji, a czy to działa to nie wiem. Do ustawiania czasu niby jest inny rozkaz: " Rozsyłanie czasu i temp zewnętrznej " z opisu protokołu, ale nigdy nie udało mi się, aby sterownik ustawił wysyłany czas po rs. Z tego co widzę, i co zapewne inni też pewnie zauważlyli to znacznej części ustawień niestety nie da się zmienić przez rs485, bo albo nie ma ich zaimplementowanych, albo są celowe jakieś błędy w opisach.

    0