W nowym sofcie do sterowników PELLO dodaliśmy obsługę BUFORA. Więcej informacji na forum lub w tym pliku
Forum  eSterownik.pl  Uwagi do działania Biblioteki. Subskrybuj
Pierwsza stronaPoprzednia strona4 / 6Następna stronaOstatnia strona
2014-04-08 16:52
  konto usunięte Posty: 10188 Ostrzeżenie: 0
janusz napisał » 2014-04-08 14:35

Linia skryptu
 print (time.asctime(time.localtime()) + ": CO: " + str(c.getTempCO()) + "°C. " + " CWU: " + str(c.getTempCWU()) + "°C. " + " Spaliny: " + str(c.getTempSpaliny()) + "°C. - Dopalanie.");
wymaga dłuższej analizy nie wszystko jest dla mnie tak jednoznaczne jak w VB

To tylko drukuje aktualny status w logu, właściwie zbędne
2014-04-08 16:59
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Janusz, zobacz gdzie i jak działa dopalanie (wczesna wersja testowa, obecnej definicji, bardzo skurczonej, z pewnych względów na razie nie udostępniam)

def manual():
        if (bool(c.getStatus())):
                if (c.getTrybAuto() != True):
                       
                        # URUCHOMIENIE
                        k = 0;
                        i = 2;
                        c.setPompaCO(True);
                        # PRACA
                        while True:
                                if (bool(c.getStatus())):
                                        if (c.getTempCO() < tempZadana):
                                             if (i == 2):
                                                     i = 1;
                                                     print ("Temperatura CO: " + str(c.getTempCO()) + "°C. Rozruch");
                                                     c.setDmuchawa(True);
                                                     c.setDmuchawaMoc(mocDmuchawaRozruch);
                                                     time.sleep(czasDmuchawaRozruch);
                                                     c.setDmuchawaMoc(mocDmuchawaPrzedmuch);
                                                     c.setPodajnik(True);
                                                     time.sleep(czasPodajnikRozruch);
                                                     time.sleep(czasPraca);
                                                     c.setPodajnik(False);
                                                     c.setDmuchawaMoc(mocDmuchawaPrzedmuch);
                                                     time.sleep(czasPrzedmuchPlus);
                                                     c.setDmuchawaMoc(mocDmuchawaPraca);
                                                     time.sleep(czasPrzerwa);
                                                     k = 1;
                                             else:
                                                     print ("Temperatura CO: " + str(c.getTempCO()) + "°C. Praca");
                                                     c.setDmuchawaMoc(mocDmuchawaPrzedmuch);
                                                     time.sleep(5);
                                                     c.setPodajnik(True);
                                                     time.sleep(czasPraca);
                                                     c.setPodajnik(False);
                                                     c.setDmuchawaMoc(mocDmuchawaPrzedmuch);
                                                     time.sleep(czasPrzedmuchPlus);
                                                     c.setDmuchawaMoc(mocDmuchawaPraca);
                                                     time.sleep(czasPrzerwa);
                                                     k = 1;
                                        else:
                                             c.setPodajnik(False);
                                             c.setDmuchawa(True);
                                             if (k == 1):
                                                     print ("Temperatura CO: " + str(c.getTempCO()) + "°C. Dopalanie");
                                                     c.setDmuchawaMoc(mocDmuchawaDopalanie);
                                                     time.sleep(czasDopalanie);
                                                     k = 0;
                                             c.setDmuchawa(False);
                                             while True:
                                                     if (bool(c.getStatus())):
                                                             if (c.getTempCO() > tempMIN):
                                                                     print ("Temperatura CO: " + str(c.getTempCO()) + "°C. Oczekiwanie");
                                                                     time.sleep(30);
                                                             else:
                                                                     break;
                                             i = 2;
                             
                                else:
                                        print ("Odczyt statusu sie nie powiodl.");
                                        c.setDmuchawa(False);
                                        c.setPodajnik(False);
                                        break
2014-04-08 17:12
  janusz Posty: 540 Ostrzeżenie: 0
Ok drukuje to widać po komendzie print
Tylko jak wysyłasz dane do sterownika ?
Jest bynajmniej w VB typ zmiennej i tak przykładowo 
jeżeli zechcesz dodać 2 wartości 57 + 3 to wynik powinien być 60
a przedrostek str mi mówi że dodajesz zmienną typu string
str(c.getTempCO())
i w takiej sytuacji otrzymasz wynik dla  57 +3  =573
gdy zadeklarujesz  z przedrostkiem mówiącym że to zmienna typu wartość np Val 
 wynik będzie 60 
tylko jak w pythonie określać zmienne na obecną chwilę nie wiem
 
i tu może być błąd bo sterownik otrzyma od kompilatora dane nie zgodne  z oczekiwaniem 
bo widać ze zgłasza błąd dotyczący DATA a to są dane w bajtach wiec dla nas nie czytelne 
no chyba ze znamy strukturę i potrafimy dokonać konwersji
2014-04-08 17:22
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Mam nadzieję, że odpowiem z sensem...
W bibliotece rozpisano def PrintStatus, i get dla możliwych do odczytu danych.
Gdy każę mu drukować, korzysta z biblioteki.
W bibliotece DarkaB, są jak to mówicie "kody maszynowe", jak to dokładnie działa.. nie wiem :(
2014-04-08 17:32
  janusz Posty: 540 Ostrzeżenie: 0
Ja dokładnie tak działam wysyłam do sterownika ( "kody maszynowe") skrótowo KM 
dla sterownika są jednoznaczne 
a zapis c.setDmuchawaMoc(mocDmuchawaPrzedmuch);
jest zmieniany w bibliotece na KM  i jeżeli wartość mocDmuchawaPrzedmuch nie będzie on liczbą to może KM będzie nieczytelny dla biblioteki ale takiej wiedzy nie posiadam 
2014-04-08 17:38
  konto usunięte Posty: 10188 Ostrzeżenie: 0
W bibliotece, dla dmuchawy wygląda to tak:

    def setDmuchawaMoc(self, value):
        tab = [0x01, 0x00, 0x02, 0x00, 0x08, 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)
        #self.__SendList(tab)

    def crc(self, msg):
        runningCRC = 0
        for c in msg:
            runningCRC = self.crcByte(runningCRC, c)
        return runningCRC

    def crcByte(self, oldCrc, byte):
        res = self.crcTable[oldCrc & 0xFF ^ byte & 0xFF]
        return res

Czy to jest konwersja na KM, czy prosić DarkaB o rozpisanie każdej mocy na KM ?
2014-04-08 17:46
  janusz Posty: 540 Ostrzeżenie: 0
def setDmuchawaMoc(self, value):
Widać że oczekuje na wartość Value  w moim odczuciu czeka na liczbę
KM dla dmuchawy w zakresie 25-40 już ci podam jak to będzie ci pomocne
Sub Ustaw_Dmuchawe(Na As Integer)
    Dim MyRequest As Object, arr
    Dim Bk As String
    On Error Resume Next
    Select Case Na
    Case 25
        Bk = "/?com=02010002000F020019009903"
    Case 26
        Bk = "/?com=02010002000F02001A00B403"
    Case 27
        Bk = "/?com=02010002000F02001B004003"
    Case 28
        Bk = "/?com=02010002000F02001C00EE03"
    Case 29
        Bk = "/?com=02010002000F02001D001A03"
    Case 30
        Bk = "/?com=02010002000F02001E003703"
    Case 31
        Bk = "/?com=02010002000F02001F00C303"
    Case 32
        Bk = "/?com=02010002000F02002000E803"
    Case 33
        Bk = "/?com=02010002000F020021001C03"
    Case 34
        Bk = "/?com=02010002000F020022003103"
    Case 35
        Bk = "/?com=02010002000F02002300C503"
    Case 36
        Bk = "/?com=02010002000F020024006B03"
    Case 37
        Bk = "/?com=02010002000F020025009F03"
    Case 38
        Bk = "/?com=02010002000F02002600B203"
    Case 39
        Bk = "/?com=02010002000F020027004603"
    Case 40
        Bk = "/?com=02010002000F02002800DF03"
    End Select
    Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    MyRequest.Open "GET", str_Url & Bk
    MyRequest.SetCredentials str_User, str_Password, 0
    MyRequest.send
End Sub

[Verb/b] Czy to jest konwersja na KM ?
Na to wygląda
2014-04-08 18:13
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Ster w trybie auto, wykonał kila ruchów, ale nie skończył pracy.



Tym razem już nic nie działało, a logi pracy leciały normalnie.

Ven, czy możecie udostępnić nowe biblioteki (rs/http), które pozwolą uruchamiać skrypty w trybie auto ?
Rozwiązałoby to nasz główny problem z testowaniem
2014-04-08 18:27
  DarekB Posty: 16 Ostrzeżenie: 0
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-04-08 18:32
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Lecę wkleić tab =
Dam znać.
2014-04-08 18:55
  Stan Posty: 2564 Ostrzeżenie: 0


Stan jak  udostępnisz  skrypt TRK  to do końca bo chyba ostatni gdzie była funkcja sprawdzania temp Co

jakoś brakowało mi zakończenia pętli While 






W pythonie to jest trochę inaczej
2014-04-08 19:05
  janusz Posty: 540 Ostrzeżenie: 0
Analizując  skrypt Verba też to zauważyłem 
muszę to zaakceptować to nie moje Vb  
2014-04-08 19:53
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Się najadłem cykorii.. ster po potraktowaniu, przestał reagować
Kilka resetów przywróciło go do życia.
2014-04-08 20:02
  Stan Posty: 2564 Ostrzeżenie: 0
A tam, i tak chciałeś sprzedać


Ale blado się robi , co ?
2014-04-08 20:10
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Mam drugi na zapasie, ale jak pomyślę o przepinaniu tych wszystkich czujników, to ufff :>
2014-04-08 20:11
  janusz Posty: 540 Ostrzeżenie: 0
Zauważyłem ze odczytując temp Co bywały okresy szybkiego wahania temp  mój TRK
wysyłał do sterownika komunikat za komunikatem zwieszki żadnej nie miałem
ale uznałem że to nie jest dobre więc teraz nakazuję mu odczekać ze zmianą  do 3 pomiaru  temp i to może być przyczyną  że przestał reagować 
Może komunikaty stały w kolejce  lub całkowicie zgłupiał 
2014-04-08 20:18
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Mój skrypt, odczytuje status getTemp w pętli - wychodzi średnio co 70sec.
Daruję sobie odpalanie w trybie auto, nie chcę uwalić stera.
2014-04-08 20:21
  Stan Posty: 2564 Ostrzeżenie: 0
VERB napisał » 2014-04-08 18:18
Mój skrypt, odczytuje status getTemp w pętli - wychodzi średnio co 70sec.
Daruję sobie odpalanie w trybie auto, nie chcę uwalić stera.



A może Romku Ty mu jakąś instrukcję autodestrukcji wysłałeś


Ciesz się że nie do końca posłuchał ))
2014-04-08 20:25
  janusz Posty: 540 Ostrzeżenie: 0
No to chyba nie w tym problem 
ja czytam co 20 sek a po odczekaniu 3 pomiarów to 60 sek 
i  do tej pory jest ok lecz problem nie wyjaśniony 
zbliża sie lato trzeba testować może nie padnie sterownik


Ps 
Może to ten spadek napięcia palce w tym maczał ?
2014-04-08 20:30
  konto usunięte Posty: 10188 Ostrzeżenie: 0
Stan napisał » 2014-04-08 18:21
A może Romku Ty mu jakąś instrukcję autodestrukcji wysłałeś
Wkleiłem tylko do libsa to co Darek wklepał.. ale on chyba miał na myśli wynik... co ?
Pierwsza stronaPoprzednia strona4 / 6Następna stronaOstatnia strona
Użytkownicy online: Sahryn66