Forum eSterownik.pl Uwagi do działania Biblioteki. Subskrybuj | ||||
Pierwsza stronaPoprzednia strona4 / 6Następna stronaOstatnia strona | ||||
|
||||
konto usunięte
|
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 |
|||
|
||||
konto usunięte
|
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 |
|||
|
||||
janusz
|
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 |
|||
|
||||
konto usunięte
|
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 :( |
|||
|
||||
janusz
|
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 |
|||
|
||||
konto usunięte
|
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 ? |
|||
|
||||
janusz
|
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 |
|||
|
||||
konto usunięte
|
||||
|
||||
DarekB
|
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 |
|||
|
||||
konto usunięte
|
Lecę wkleić tab =
Dam znać. |
|||
|
||||
Stan
|
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 |
|||
|
||||
janusz
|
Analizując skrypt Verba też to zauważyłem
muszę to zaakceptować to nie moje Vb |
|||
|
||||
konto usunięte
|
Się najadłem cykorii.. ster po potraktowaniu, przestał reagować
Kilka resetów przywróciło go do życia. |
|||
|
||||
Stan
|
A tam, i tak chciałeś sprzedać
Ale blado się robi , co ? |
|||
|
||||
konto usunięte
|
Mam drugi na zapasie, ale jak pomyślę o przepinaniu tych wszystkich czujników, to ufff :>
|
|||
|
||||
janusz
|
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ł |
|||
|
||||
konto usunięte
|
Mój skrypt, odczytuje status getTemp w pętli - wychodzi średnio co 70sec.
Daruję sobie odpalanie w trybie auto, nie chcę uwalić stera. |
|||
|
||||
Stan
|
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ł )) |
|||
|
||||
janusz
|
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ł ? |
|||
|
||||
konto usunięte
|
Stan napisał » 2014-04-08 18:21 Wkleiłem tylko do libsa to co Darek wklepał.. ale on chyba miał na myśli wynik... co ?A może Romku Ty mu jakąś instrukcję autodestrukcji wysłałeś |
|||
Pierwsza stronaPoprzednia strona4 / 6Następna stronaOstatnia strona | ||||