W nowym sofcie do sterowników PELLO dodaliśmy obsługę BUFORA. Więcej informacji na forum lub w tym pliku

Profil użytkownika

DarekB

Tarnowskie Góry

 

Rejestracja: 2013-06-20 14:04

Logowanie: 2023-12-01 11:56

Urządzenia: 1

Tematy: 0

Posty: 16

posty użytkownika 
2014-04-08 18:27 Temat: eSterownik.pl » Uwagi do działania Biblioteki.
  DarekB Posty: 16
W tym skrypcie do łączenia po RS232 na samym początku umieściłem moje przemyślenia na temat budowy rozkazów do sterownika zacytuję:



# bajt   znczenia
#   0   0x02 (2) początek rozkazu
#   1   0x01 (1) ?
#   2   0x00 (0) ? dla polecenia 0x06 (6) dla odpowiedzi
#   3   `\  polecenie
#   4     > p. wysłane jest z bajtem 2 utawionym na 0
#   5   _/  w odpowiedzi zwracane przy czym bajt 2 jest zmieniany na 6
#   6   lo długosc parametrow polecenia
#   7   hi ---//---
#  ...  parametry polecenia z reguly 2 bajty 1-lo, 2-hi (on - 0100 off - 0000)
#   -2 (przedostatni) suma CRC od [1:-2]
#   -1 (ostatni) 0x03 (3) koniec rozkazu



Jak widać po logach wklejonych kilka komentarzy wyżej myliłem się ponieważ sterownik zwrócił w bajcie 3 (indeks 2) 15 nie 06 widocznie tak może być a ja mylnie sprawdzam czy jest 6 oraz czy 3 bajty od 4 do 6 [3:6] jakie zostały wysłane zostały zwrócone.
W wypadku dmuchawy należy wyliczyć sumę kontrolną, ta suma kontrolna jest w każdym rozkazie tylko my mamy takie gotowce które już mają wyliczoną tę sumę.
Jakby ciągi wysyłane przez com=.. są tożsame ciągom binarnym wysyłanym po rs (grupując parami po 2 znaki) 


Tak więc funkcja ustawiająca dmuchawę zmieni się tylko 1 bajtem


    #02 01 00 02 00 0F 02 00 28 00 DF 03
    def setDmuchawaMocAuto(self, value):
        tab = [0x01, 0x00, 0x02, 0x00, 0x0F, 0x02, 0x00, value & 0xff, 0x00]
        crc = self.crc(tab)
        tab.insert(0, 0x02)
        tab.append(crc)
        tab.append(0x03)
        cmd = ''.join('{:02x}'.format(x) for x in tab)
        return self._getRequest(cmd)        



To tak na szybko 
Pozdrawiam
Darek

2014-03-21 14:34 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16

VERB napisał » 2014-03-21 06:33
Niestety, nie działa. 





OK
https://drive.google.com/file/d/0B1rjRhAXEGUoclM5Q1ltOW5fZ0k/edit?usp=sharing
Tam jest taka właściwość klasy __debug obecnie ustawiona na True i dzięki temu wyświetla co wysłał, nagłówek komunikatu zwrotnego, cały komunikat oraz czy ustawione są bajty początkowe końcowe i suma kontrolna.
Dodatkowo dołączony jest test który prócz tego co poprzednio (status, ręczny, status,auto,status) włącza i wyłącza pompę CWU.
Żeby przetestować skrypt pod Windows postanowiłem to zrobić w po cichu w pracy, zestawiłem poprzez VPN połączenie Serial over IP z kotłownią w domu i uruchomiłem skrypt na pythonie 3.4 na przeterminowanym XP, musiałem zwiększyć timeout początkowo do 5 i okazało się że status pobiera ale nie chce kotła przełączyć w tryb ręczny, (pompę CWU włącza i wyłącza) porobiłem "debugowanie" i okazało się że ta komenda mu coś nie pasuje bo nie dość że nic nie robi to jeszcze nic nie zwraca. 
Ale ten sam skrypt uruchomiony bezpośrednio na komputerze podłączonym do pieca (Linux) wykonuje wszystkie komendy. 
Żeby ten skrypt normalnie używać należy ustawić właściwość __debug na False i zmienić timeout w konstruktorze __init__ lub przy wywoływaniu konstruktora ponieważ domyślny ustawiłem na 10 sek.


tu jest udostępniony cały katalog na google drive 
a w środku wyniki działanie skryptu pod linux (bezpośrednio) i windows (serial over IP)
https://drive.google.com/folderview?id=0B1rjRhAXEGUoaFFHSktha2t2cGc&usp=sharing



Pozdrawiam
Darek
2014-03-20 22:32 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16
VERB napisał » 2014-03-20 18:57
Niestety, nie robi nic ze sterownikiem.
Nie używam przejściówki, zmieniłem na ('COM1','9600'; dobrze to wpisuję ?
Stąd pociągnąłem serial: pyserial-2.7 for Python 3.x (3.0...3.4)

PS: Sprawdziłem, port zostaje otwarty przez skrypt, tylko druga strona nie odpowiada:>



sprawdziłem, u mnie działa tylko z prędkością 115200 przy innych pomimo zwiększenia timeout do 5 wyłączenia flow control (DTR/DSR) na innych prędkościach nie działa (ale sypie błędami). Po prostu nic nie otrzymuje ze sterownika.
Prędkość portu to liczba bez ' '.


Pozdrawiam
Darek
2014-03-20 19:37 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16
VERB napisał » 2014-03-20 16:40

Napisz jeśli możesz, działającego sampla - może w końcu załapię o co chodzi.



test do sterownik_rs.py:
https://drive.google.com/file/d/0B1rjRhAXEGUoZGFXN0dYVFRqeVE/edit?usp=sharing



pokazuje status 
wyłącza tryb auto
3 sek czeka

pokazuje status 
włącza tryb auto
3 sek czeka
pokazuje status


Pozdrawiam
Darek
2014-03-20 16:45 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16

Było pytanie o błąd w skrypcie do łączenia po RS, ale znikło.
Myślę że chodzi o to że skrypt był uruchamiany pod python 3.
Jakoś do tej pory mimo kilku podejść nie miałem śmiałości zanurzyć się w pythonie 3 ale w końcu się przemogłem i zainstalowałem wersję 3.
Jest źle, kilkanaście linii wymagało poprawienia to co python 2 łykał to teraz nie przechodzi, szczególnie że zrobiłem już serwer www do tego skryptu w python 2.7, taka wersja minimalistyczna bez frameworków, cgi, apachów czy innych serwerów www, żeby pociągną to micro PC.


Ale teraz działa na python3 tylko należy dociągnąć
python3-serial
bo ten co był też się wysypał.


debian ma to w repozytoriach 
apt-get install python3-serial


a poprawiony skrypt wrzuciłem tu:
https://drive.google.com/file/d/0B1rjRhAXEGUobGx4RHNfRkVFU1E/edit?usp=sharing



Pozdrawiam
Darek
2014-03-19 01:24 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16
Zrobiłem jeszcze jedno rozwiązanie.
Skoro sprzęt który będzie to obsługiwał i tak ma wisieć w okolicach kotła można połączyć się bezpośrednio pod rs232.


podjąłem próbę rozpracowania go oto efekt: sterownik ma identyczną strukturę więc można go łatwo wymienić wystarczy zamiast ip podać port com1 lub /dev/ttyS0 lub /dev/ttyUSB0 przy przejściówce usb-rs 


Wymaga biblioteki pyserial http://pyserial.sourceforge.net/ którą dołaczyłem do paczki do pobrania:
https://drive.google.com/file/d/0B1rjRhAXEGUoc2pfNzh4c2VQZTQ/edit?usp=sharing


test: python sterownik.py /dev/ttyUSB0
lub python sterownik.py com1
Testowane na python 2.7


Pozdrawiam Darek
2014-03-19 01:04 Temat: eSterownik.pl » Rozwiązania sprzętowe dla biblioteki w Pythonie.
  DarekB Posty: 16
mark3k napisał » 2014-03-18 19:11
Na routerku TL-WR1043ND v.1 skrypt nie działa. Na dzisiaj nie ma nowej wersji pythona na OpenWRT (AA). Jest wersja serii 2.7...
Pozdrawiam.

Ps: Do kolegi Stan
Jaki system wrzuciłeś do RPi v.2 ?




Na python 2.7 skrypt działa. Nie wiem jak na openwrt (czy nie jest okrojony o jakieś biblioteki)


Pozdrawiam
Darek
2014-03-04 14:08 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16

Podmieniłem wersję biblioteki


https://drive.google.com/file/d/0B1rjRhAXEGUoN3hTV2xHWXFpaGs/edit?usp=sharing



zrobiłem kilka poprawek:
Można się łączyć ze sterownikiem w sieci lokalnej jak i poprzez esterownik.pl 
zależnie od tego czy poda się IP czy id sterownika, 
Uwzględniłem interpretację temperatur ujemne
Do łączenia używam wbudowane urllib2 więc nie potrzeba dociągać dodatkowych bibliotek.


Jeszcze pytania: 
Czy ktoś zaczął pisać jakiś sterownik do kotła, chętnie w miarę umiejętności i czasu dołączę się, może nie pomogę merytorycznie ale programistycznie chętnie?
Czy można gdzieś zdobyć algorytmy lub źródła programów do sterowania kotłami.


Pozdrawiam 
db
2014-03-03 19:56 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16

Faktycznie jest błąd najprostsze rozwiązanie to przed (przed funkcjami zwracającymi temperatury) wstawić




temp=lambda hi,lo: struct.unpack('h', chr(lo)+chr(hi))[0]/10.0


i przepisać definicje funkcji zwracajacych temperatury np:


  def getTempZew(self):
        if (bool(self.s_statusdata)):
            return temp(self.s_statusdata[21], self.s_statusdata[20])




Pozdrawiam
db
2014-02-28 17:17 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16
mateuszm napisał » 2014-02-27 11:51
A co z możliwością połączenia przez esterownik?



Nie wiem czy można takie rzeczy robić ale dodałem do tej biblioteki parę linii kodu i zrobiłem możliwość łączenia się ze sterownikiem przez platformę esterownik. 
Można też skrypt wywołać z linii komend podając id sterownika, opcjonalnie można podać login i hasło żeby połączyć się w trybie do odczyt - zapis.


skrypt do pobrania z  https://drive.google.com/file/d/0B1rjRhAXEGUoN3hTV2xHWXFpaGs/edit?usp=sharing


Już kiedyś próbowałem rozpracować protokół sterownika ale kod javascript jest tak zaciemniony ze nie chciało mi się w to wgryzać.




Pozdrawiam
Darek
 
2014-02-27 15:40 Temat: eSterownik.pl » Biblioteka w Pythonie do obsługi sterownika
  DarekB Posty: 16

Dzięki nie wiem czy się praktycznie do czegoś przyda ale zawsze warto wiedzieć.


Ktoś pytał o przełączanie pomiędzy auto a manual: 


    def setTrybAuto(self, state):
        #auto 020100020033020001006503
        #manual  020100020033020000009103
        if (state):
            self._getRequest("020100020033020001006503");
        else:
            self._getRequest("020100020033020000009103");




Pozdrawiam
DarekB