Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232

doktor_piotr 08 Jun 2021 10:39 3189 19
  • #1
    doktor_piotr
    Level 11  
    Może ktoś ma wiedzę lub dokumentację techniczna dotyczącą inwertera ESB 6kw-24v.
    Do tej pory miałem do czynienia z rs485 i odczytem na arduino liczników energetycznych ORNO OR-WE-517 oraz wersji jednofazowej oraz regulatora ładowania mppt esmart - (jak by ktoś potrzebował mogę udostępnić kod w Arduino - działa cały czas) ale teraz utknąłem z problemem - Kupiłem inwerter ESB - 6kw 24v a tam okazuje sie jest modbus ale po rs232 - i dodatkowo brak jest jakiejkolwiek dokumentacji żeby napisać sobie własny program do odczytu na arduino. Może ktoś coś ma lub pomoże mi go podłaczyć chociażby do arduino - domyślam sie że potrzebny będzie max232 na ttl prędkość transmisji znam jest podana w instrukcji ale nic więcej.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • #2
    Kiermasz
    Level 19  
    Witaj.
    Także mam falownik ESB 6kW-24V.
    Sprawa jest generalnie prosta, tylko trzeba rozpracować poszczególne polecenia, a i to niekoniecznie, by pobrać dane z falownika o statusie i bieżącej konfiguracji.
    Ot wystarczy wysłać sekwencję bajtów i potem obrabiać odpowiedź. Na potrzeby pobierania statystyk - to wystarczy na dowolnej platformie (AVR/STM32/ARM/Android/PC - no każda powinna potrafić wysyłać gołe bajty po RS232 bez wielkich kombinacji w dowolnym języku programowania).
    Akurat przymierzam się do napisania czegoś pod OrangePi, także zmotywował mnie Kolega do wyłuskania transmisji ;)

    Wygląda też na to że komunikacja powinna być kompatybilna z falownikiem Voltronic Axpert VMIII 3000VA - tak się ten falownik przedstawia na porcie com.
    Konfiguracja portu: 2400 8N1 bez kontroli przepływu lub Xon/Xoff - to i to mi działa.
    Warstwa sprzętowa to standardowy port com, zgodny ze standardem. Także MAX232 i podobne rozwiązania są tu na miejscu. Ja akurat używam bramki LAN <-> RS232/485.

    Tu lista poleceń, które działają z moim falownikiem - wydobyte z żywego organizmu.
    Prawdę mówiąc, nie wiem, dlaczego są takie różnice między komunikacją z aplikacji, a komunikacją z palca. Obie wersje działają jak przepiszę w konsolę. Jednak proponuję używać dłuższych wersji poleceń (fabryczna aplikacja takich używa).

    Kolejna rzecz, ten falownik może pracować on-gridowo (mimo iż sprzedawca tego nie podał, a producent przemilczał). W trybie SUB - Energia z niego potrafi cofać się do licznika przy niedociążeniu (jest to niewielki upływ w moim egzemplarzu - na poziomie kilkunastu Wh na godzinę) - kwestia korekty parametrów by to zlikwidować, ale zjawisko jak najbardziej do praktycznego wykorzystania na ongrida (o ile opanuję dostęp do ciekawszych parametrów, bo z siecią to on synchronicznie pracuje w SUB już z fabryki [SUB mnie najbardziej interesuje, ale praca synchroniczna działa jak ogólnie jest włączony "bypass"]).

    
    Komenda: QPI (Odpytywanie protokołu?)
    ----------------------------------
    Via app: 51 50 49 BE AC 0D			QPIľ¬.
    Via console: 51 50 49 BE AC 0D		QPIľ¬.			Console manual input: QPI<l.alt+0190><l.alt+170><enter>
    
    Return: 
    28 50 49 33 30 9A 0B 0D			(PI30š..
    
    
    Komenda: QMN (Model falownika)
    ----------------------------------
    Via app: 	 51 4D 4E BB 64 0D		QMN»d.
    Via console: 51 4D 4E 0D			QMN.			Console manual input: QMN<enter>
    
    Return:
    28 56 4D 49 49 49 2D 33 30 30 30 8F BE 0D          (VMIII-3000Źľ.
    Tak właśnie przedstawia się mój ESB 6kW-24V - wygląda, że w środku to jednak Axpert. A na pewno panel ma od Axperta.
    
    
    Komenda: QID (numer seryjny falownika)
    ----------------------------------
    Via app:	 51 49 44 D6 EA 0D		QIDÖę.
    Via console: 51 49 44 0D			QID.			Console manual input: QID<enter>
    
    Return:
    XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX DA 0D	(XXXXXXXXXXXXXXXÚ.
    Znakami X zakryłem S/N mojego falownika.
    
    Komenda QVFW
    ----------------------------------
    Via app:  51 56 46 57 62 99 0D		QVFWb™.
    Via console: 51 56 46 57 62 99 0D		QVFWb™.			Console manual input: QVFWb<l.alt+0153 na numpadzie><enter>
    
    Return:
    28 56 45 52 46 57 3A 30 30 30 34 31 2E 31 35 DC AA 0D   (VERFW:00041.15ÜŞ.
     
     
    Komenda: QPIGS (odczyt bieżących parametrów pracy)
    ----------------------------------
    Via app: 	 51 50 49 47 53 B7 A9 0D	QPIGS·©. 	
    Via console: 51 50 49 47 53 0D      	QPIGS.			Console manual input: QPIGS<enter>
    
    Return:
    (228.0 50.0 228.0 50.0 0615 0605 020 409 27.10 000 100 0036 01.9 190.8 00.00 00000 00010110 00 00 00373 110
    
    Rozpisane co czym jest:
    1<(228.0> 2<50.0> 3<228.0> 4<50.0> 5<0615> 6<0605> 7<020> 8<409> 9<27.10> 10<000> 11<100> 12<0036> 13<01.9> 14<190.8> 15<00.00> 16<00000> 17<00010110> 18<00> 19<00> 20<00373> 21<110>
    
    1<AC_Voltage(float)> 2<AC-Freq(float)> 3<OutAC_voltage(float)> 4<OutAC-Freq(float)> 5<P_Apparent(int)> 6<P_Active(int)> 7<%_Of_Load(int)> 8<V_BUS(int)> 9<V_Aku(float)> 10<I_Aku_Chg(int)> 11<%_SoC(int)> 12<HS_Temp(int)> 13<I_PV(float)> 14<V_PV(float)> 15<00.00> 16<I_Aku_Dchg(integer)> 17<00010110> 18<00> 19<00> 20<P_PV> 21<110>
    
    Wartości nieopisane po ludzku, są po prostu mi nie znane na ten moment.
    
    
    Komenda: QMODI (odczyt trybu pracy)
    ----------------------------------
    Via app: 	 51 4D 4F 44 49 C1 0D 		QMODIÁ.
    Via console: 51 4D 4F 44 49 0D 	 	QMODI.			Console manual input: QMODI<enter>
    
    Return:
    28 4C 06 07 0D (L... - SUB/USB mode
    Albo:
    28 42 E7 C9 0D (BçÉ. - SBU mode
    
    
    Komenda: QPIRI (Odczyt wartości nastawionych)
    ----------------------------------
    Via app: 51 50 49 52 49 F8 54 0D 		QPIRIřT. 
    Via console: 51 50 49 52 49 0D 		QPIRI. 		Console manual input: QPIRI<enter>
    Return:
    (230.0 13.0 230.0 50.0 13.0 3000 3000 24.0 23.0 21.0 27.0 27.0 2 10 010 0 1 3 1 01 0 0 27.0 0 1O
    
    
    TRYBY PRACY - zmienianie
    ----------------------------------
    Via app: 		50 4F 50 30 32 E2 0B 0D 		POP02â.. 	Set SBU
    Via console: 	50 4F 50 30 32 0D 			POP02. 		Set SBU | Console manual input: POP02<enter>
    
    Via app: 		50 4F 50 30 30 C2 48 0D 		POP00ÂH.	Set USB
    Via console:	50 4F 50 30 30 48 0D 			POP00H.		Set USB | Console manual input: POP00H<enter>
    
    Via app: 		50 4F 50 30 31 D2 69 0D	 	POP01Ňi.	Set SUB
    Via console: 	50 4F 50 30 31 69 0D 			POP01i.		Set SUB | Console manual input: POP01i<enter>
    
    Return:
    28 41 43 4B 39 20 0D						(ACK9 .
    
    
    OPERATOR ERROR - czyli nieznana komenda/błędnie wysłana:
    ----------------------------------
    Via console: 73 69 61 6C 61 6C 61 6C 61 6C 61 0D	sialalalala.
    
    Return:
    28 4E 41 4B 73 73 0D                 		                (NAKss.
    
    
    Uwaga: 0D to znak "entera" (bądź bardziej po ludzku <CR>) i musi być.
    Wysyłanie znaków nie jest czasokrytyczne. Falownik ma bufor znaków. Ważna jest sekwencja bajtów.
    Wszystkie podane sekwencje działają na żywym organiźmie. Krótsze wersje poleceń odczytu parametrów, zaczynają działać dopiero, gdy wyśle się jedną dłuższą np. QPIGS·©
    
    


    @update: Znalazłem listę poleceń pod Axperta i wygląda przynajmniej częściowo na zgodną z listingami:
    Spoiler:

    #Axpert Commands and examples
    #Q1 # Undocumented command: LocalInverterStatus (seconds from absorb), ParaExistInfo (seconds from end of Float), SccOkFlag, AllowSccOnFlag, ChargeAverageCurrent, SCC PWM Temperature, Inverter Temperature, Battery Temperature, Transformer Temperature, GPDAT, FanLockStatus, FanPWMDuty, FanPWM, SCCChargePowerWatts, ParaWarning, SYNFreq, InverterChargeStatus
    #QPI # Device protocol ID inquiry
    #QID # The device serial number inquiry
    #QVFW # Main CPU Firmware version inquiry
    #QVFW2 # Another CPU Firmware version inquiry
    #QFLAG # Device flag status inquiry
    #QPIGS # Device general status parameters inquiry
    # GridVoltage, GridFrequency, OutputVoltage, OutputFrequency, OutputApparentPower, OutputActivePower, OutputLoadPercent, BusVoltage, BatteryVoltage, BatteryChargingCurrent, BatteryCapacity, InverterHeatSinkTemperature, PV-InputCurrentForBattery, PV-InputVoltage, BatteryVoltageFromSCC, BatteryDischargeCurrent, DeviceStatus,
    #QMOD # Device mode inquiry P: PowerOnMode, S: StandbyMode, L: LineMode, B: BatteryMode, F: FaultMode, H: PowerSavingMode
    #QPIWS # Device warning status inquiry: Reserved, InverterFault, BusOver, BusUnder, BusSoftFail, LineFail, OPVShort, InverterVoltageTooLow, InverterVoltageTooHIGH, OverTemperature, FanLocked, BatteryVoltageHigh, BatteryLowAlarm, Reserved, ButteryUnderShutdown, Reserved, OverLoad, EEPROMFault, InverterSoftFail, SelfTestFail, OPDCVoltageOver, BatOpen, CurrentSensorFail, BatteryShort, PowerLimit, PVVoltageHigh, MPPTOverloadFault, MPPTOverloadWarning, BatteryTooLowToCharge, Reserved, Reserved
    #QDI # The default setting value information
    #QMCHGCR # Enquiry selectable value about max charging current
    #QMUCHGCR # Enquiry selectable value about max utility charging current
    #QBOOT # Enquiry DSP has bootstrap or not
    #QOPM # Enquiry output mode
    #QPIRI # Device rating information inquiry - nefunguje
    #QPGS0 # Parallel information inquiry
    # TheParallelNumber, SerialNumber, WorkMode, FaultCode, GridVoltage, GridFrequency, OutputVoltage, OutputFrequency, OutputAparentPower, OutputActivePower, LoadPercentage, BatteryVoltage, BatteryChargingCurrent, BatteryCapacity, PV-InputVoltage, TotalChargingCurrent, Total-AC-OutputApparentPower, Total-AC-OutputActivePower, Total-AC-OutputPercentage, InverterStatus, OutputMode, ChargerSourcePriority, MaxChargeCurrent, MaxChargerRange, Max-AC-ChargerCurrent, PV-InputCurrentForBattery, BatteryDischargeCurrent
    #QBV # Compensated Voltage, SoC
    #PEXXX # Setting some status enable
    #PDXXX # Setting some status disable
    #PF # Setting control parameter to default value
    #FXX # Setting device output rating frequency
    #POP02 # set to SBU
    #POP01 # set to Solar First
    #POP00 # Set to UTILITY
    #PBCVXX_X # Set battery re-charge voltage
    #PBDVXX_X # Set battery re-discharge voltage
    #PCP00 # Setting device charger priority: Utility First
    #PCP01 # Setting device charger priority: Solar First
    #PCP02 # Setting device charger priority: Solar and Utility
    #PGRXX # Setting device grid working range
    #PBTXX # Setting battery type
    #PSDVXX_X # Setting battery cut-off voltage
    #PCVVXX_X # Setting battery C.V. charging voltage
    #PBFTXX_X # Setting battery float charging voltage
    #PPVOCKCX # Setting PV OK condition
    #PSPBX # Setting solar power balance
    #MCHGC0XX # Setting max charging Current M XX
    #MUCHGC002 # Setting utility max charging current 0 02
    #MUCHGC010 # Setting utility max charging current 0 10
    #MUCHGC020 # Setting utility max charging current 0 20
    #MUCHGC030 # Setting utility max charging current 0 30
    #POPMMX # Set output mode M 0:single, 1: parrallel, 2: PH1, 3: PH2, 4: PH3

    #notworking
    #PPCP000 # Setting parallel device charger priority: UtilityFirst - notworking
    #PPCP001 # Setting parallel device charger priority: SolarFirst - notworking
    #PPCP002 # Setting parallel device charger priority: OnlySolarCharging - notworking
  • #3
    jurek.parus
    Level 18  
    Trafiłem na ten wątek poszukując możliwości spięcia tych chińskich inwerterów hybrydowych (dostępnych pod wieloma różnymi markami) z jakimś systemem monitorowania.

    Bardzo interesująco wygląda udostępniony przez Victrona system Venus, kto nie widział tych victronowych kafelków
    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
    Co ciekawe, można go postawić na Rasbperry PI, potrafi samodzielnie wykryć trochę urządzeń (np. moje falowniki Froniusa)
    Ale tez jest otwarty na samodzielne budowanie własnych modułów. np ktoś dopisał support świetnego licznika SDM630
    Jest do tego cała dokumentacja jak takie moduły podłączyć do VictronVenus
    https://community.victronenergy.com/questions/105383/dbus-service-example.html

    Gdyby, korzystając z danych które udało Ci się skompletować - dopisać taki moduł do Victron Venus to to naprawdę było by coś!!!
    Tych chińskich falowników jest dużo (sam zamierzam sobie taki zamontować) a taka współpraca różnych klocków w ramach jednego systemu była by super. Niestety jest jeden problem - nie potrafię programować w Phytonie :(
  • #4
    Kiermasz
    Level 19  
    @jurek.parus
    Ja używam EmonCMS (CMS oparty jest o jQuerry, dane trzyma w MySQL/MariaDB), warstwy pośredniej w postaci MQTT (mosquitto) i Vcom na socat'cie w cronie (do bramki LAN, takie akurat specyficzne dla mnie) - też fajna sprawa bo akwizycja danych oraz wysyłanie poleceń może się odbywać nawet głupim skryptem sh.
    A MQTT jest o tyle prostym protokołem, że można spinać wszelkie wynalazki na uC i mieć małe centrum kontroli.

    Całość postawiona na Orange Pi R1 i wygląda to tak. Dashboardy są konfigurowalne.
    Jedno co jeszcze mam w planach, to dopisanie do DemandShapera wystawiania stanów na GPIO względem parametrów na falowniku i 15min historii.
    Obecnie się z tym nie śpieszę, gdyż obecnie wystawiam CMS w świat i niefortunnym by było, jak by mi jakiś szkodnik mógł przestawiać parametry. Więc cały system nie ma obecnie wbitych komend sterujących.

    Zależało mi głównie na podglądzie parametrów na np. telefonie po wi-fi, czy tablecie jako stała konsola wisząca na ścianie.

    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
  • #6
    uncle__saddam
    Level 13  
    Witam,

    właśnie zakupiłem i zamontowałem podobny falownik tyle że 3kW. Dzięki za podesłanie pełnych komend, te z monitora portu miały na końcu jakieś krzaki i po wysłaniu z konsoli falownik nic nie zwracał. Sprawdzę jutro jak z tymi poniżej.
    Wracając do rzeczy. Napisałem prosty kod na układ ESP 8266, który ma za zadanie odebrać ramkę z wartościami napiec itp po uart i wysłać ją po MQTT dalej czyli taki UART to MQTT gateway. Jak było napisane powyżej do ESP/arduino itp. oczywiście musi być konwerter MAX232.

    Dam znać jak poszło.
  • #7
    elkam
    Level 15  
    Witam
    Mam uruchomioną komunikację z przetwornicą (jak w temacie), po mqtt via wifi. Większość tematów mqtt ogarnąłem za pomocą Arduino (esp32s). Całość działa pod kontrolą Homeassistant'a i wrzucona na tablet zamocowany w przedpokoju :) Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
    pozdrawiam
    Aby nie być gołosłownym, podrzucam kolegom plik nagłówkowy z główną strukturą zapytań. może to pomoże. Testowałem, także napisany przeze mnie program na RPI, jednakże nie dawało długofalowych stabilnych odczytów z ESB

    **********
    konfiguracja :[ Panele fotowoltaiczne 6kW +
    Tracker z 2x350W +
    przetwornica ESB6kW +
    bateria akumulatorów 2x12V 2500Ah +
    Turbia wiatrowa 1.5kW +
    doładowanie baterii z turbiny +
    pomiar PZEM017(Tasmota mqtt) +
    komunikacja/zarządzanie HASS ]
  • #8
    uncle__saddam
    Level 13  
    Bardzo ładnie to wygląda. Napisałem bardzo prosty kod na samo ESP32, ma za zadanie przechwytywać dane z serial monitora i wysyłąć dalej po mqtt. Jak doszlifuję załączę w tym wątku.

    Nie mam jednak jak przetestować bo niestety utknąłem na etapie samej komunikacji. Nie rozumiem czemu falownik nie odpowiada na zapytania. Pewnie robię coś robię nie tak. Na próbę podłączam się do niego komputerem przez konwerter RS232 i z serial monitora wysyłam komendę QPIGS·© lub samo QPIGS ale nie otrzymuję w zamian żadnej odpowiedzi.

    W zamian za to jak odpalę oprogramowanie producenta to na porcie szeregowym ładnie widać podgląd tych samych komend i odpowiedzi z danymi.

    Może jakieś wskazówki?
  • #9
    Kiermasz
    Level 19  
    uncle__saddam wrote:
    Może jakieś wskazówki?


    Sekwencja komend. Soft producenta najpierw odpytuje z czym ma do czynienia.
    Druga rzecz, że prawdopodobnie wysyłasz bez znaku 0Dh na końcu, albowiem nawet na śmieci powinien odpowiedzieć (NAKss.
    Może być to jeszcze związane z kontrolą przepływu danych.

    P.S Do tematu:
    Też miałem problemy ze stabilnością mojego OrangePi. Wygląda na to, że te płytki malinopochodne są średnie do takich zadań. Ponadto zauważyłem silny związek z jakością użytego zasilacza. Im porządniejszy, tym dłużej to pracuje bez zawieszki.

    Ponadto doświadczyłem nieprzyjemnych problemów z zegarem - te płytki nie mają RTC w pakiecie i przez w przypadku braku netu, zdarzało się, że wartości pobrane z falownika były źle umieszczane na osi czasu.
    Wielki plus, że to oparte o bazę danych i łatwo to było prostować kwerendami.
  • #10
    elkam
    Level 15  
    Witam
    Proponuję wstępnie zapoznać się ze specyfikacją struktury zapytań oraz zwracanych wiadomości.
    Pomoże to w zrozumieniu protokołu komunikacyjnego. Wpisz w przeglądarkę "QPI Device protocol ID Inquiry"
    a otrzymasz informacje skąd ściągnąć rs232-communication-protocol.pdf. Jeśli go już masz to otrzymasz
    odpowiedzi na większość pytań. Co do kodowania to sprawa wygląda dość prosto. Całość jest/może być pisana
    pod Arduino z wstawkami C++ (*.h, *.cpp) bardzo upraszczającymi proces bibliotekami komunikacyjnymi.
    Funkcje i kilka procedur tworzą całość programu. Ograniczyłem komunikację do niezbędnych elementów aby, nie
    obciążać komunikacji ESB<->ESP32. Przetwornice ESB mam w piwnicy a terminal piętro wyżej, więc zrezygnowałem
    z możliwości dłubania przez sieć w jej ustawieniach. Jest to poprostu bezpieczne
    Jak działa program?
    1. ustanowienia portu : Serial.begin(115200); //debug arduino
    Serial4.begin(2400); //port ESP32<->ESB
    2. aktywacja wifi WiFi.begin(ssid, password)
    aktywacja klienta mqqt client.setServer(mqttServer, mqttPort);
    podłączenie klienta client.connect("Solar Client", mqttUser, mqttPassword
    3. Zdefiniowanie buffora danych
    4. Zdefiniowanie zmiennych typu String "question"
    5. Procedury kontrolne potrzebne przy wysyłaniu i odbiorze message crc 16
    6. Procedura kontrolna tzw pierwszego znaku lub jak kto woli nagłówek
    7. Procedura parsująca ciągi otrzymanych wg kolejności danych
    8. Procedury parsujące otrzymane wiadomości
    9 Procedury parsujące zmienne typu float
    5. Procedury obliczające długość wysyłanej wiadomośći mqtt
    11. Procedura publikująca message "client.beginPublish(grid_topic, msgLen, false);"
    to tak na szybko, musiałem zaglądnąć do notatek i komentarzy w programie bo to już trzeci rok
    jak to hula.
    pozdrawiam

    ********************
    konfiguracja :[ Panele fotowoltaiczne 6kW +
    Tracker z 2x350W +
    przetwornica ESB6kW +
    bateria akumulatorów 2x12V 2500Ah +
    Turbia wiatrowa 1.5kW +
    doładowanie baterii z turbiny +
    pomiar PZEM017(Tasmota mqtt) +
    komunikacja/zarządzanie HASS ]

    Dodano po 1 [godziny] 35 [minuty]:

    Kiermasz wrote:
    Druga rzecz, że prawdopodobnie wysyłasz bez znaku 0Dh na końcu, albowiem nawet na śmieci powinien odpowiedzieć (NAKss.

    NAK pojawia się w wiadomościach zwracanych z przetwornicy ale w przypadku próby ich modyfikacji...
    jest tylko coś takiego "(NAK<cr>"
    Co masz na myśli pisząc o kontroli przepływu danych? skąd i dokąd, programowo, sprzętowo ? nie ma w tym protokole takich rozwiązań
  • #11
    uncle__saddam
    Level 13  
    Bardzo dziękuję za odpowiedź, namierzyłem już dokumentację i będę to analizował.
    Prośba jeszcze tylko o rzut okiem na schemat połączeń. Chciałem się upewnić czy to jest na pewno prawidłowo podłączone. W moim falowniku jest wejście RJ45 zakończonej żeńskim wtykiem db9. Dalej wiadomo musi być konwerter na usb albo rs232 na urat o ile dobrze rozumiem.
    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
  • #12
    elkam
    Level 15  
    Witam
    W swoim rozwiązaniu przetestowałem klika konwerterów najlepszym okazał się
    (pozostałość po testach z rpi0 - ESB) "Serial Pi Zero MAX3232 - interfejs RS232 dla Raspberry Pi", polecam każdy który zawiera sprawdzony Max3232, ale jeśli ten, który używasz nie grzeje się itp. to OK. Nie widzę co to jest za układ między płytką WEMOS a wtykiem rs232, jeśli jest to tylko konwerter poziomów logicznych, to nie jest to dobre rozwiązanie. Użyj do testów oryginalną przejściówkę RJ->RS232 dołączoną do przetwornic ESB i konwerter na Max3232 złącze db9(male). Komunikacja sprzętowa oparta jest na liniach różnicowych co wymusza stosowanie dedykowanych konwerterów. Do testów i debugowania ("Serial.println")z użyciem edytora Arduino wystarczy konwerter rs232<->usb
    Pozdrawiam
  • #13
    uncle__saddam
    Level 13  
    Ten układ w środku to gotowy konwerter oparty właśnie na układzie max3232. Robiąc ten rysunek uświadomiłem sobie że chyba w moim wykonaniu mam pomylone rx z tx, będę to testował. Jak skończę pochwalę się finalnym rozwiązaniem.

    Dzięki za wszystkie sugestie
  • #14
    elkam
    Level 15  
    Witam opis wtyku pin2 i 3 jak zauważyłeś jst nieprawidłowy
    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
  • #15
    sh4dov
    Level 2  
    Witam,
    Znalazł ktoś sposób na, wyciągnięcie z ESB statystyk produkcji z paneli np. ile wyprodukowały na dzień, miesiąc, rok?
  • #16
    elkam
    Level 15  
    komunikacja z przetwornicą jak w poprzednich postach
    zapytanie : QEY<YYYYnnn><cr> (query year, checksum, carriage return)
    <YYYY> Y zmienna typu int is an Integer, checksum for QEYYYYY, odpowiedz 8 cyfr wartość w kilowatach
    pytanie:QEY2011179<cr>
    odpowiedz: (03012300<cr>
    miesiąc, dzień podobnie
    Pozdrawiam
  • #17
    matcheyrc1
    Level 1  
    Trafiłem na ten wątek próbując skomunikować się z ESB 10kW-48 a informacje jakie zostały tu umieszczone są szalenie przydatne :)
    Mam jednak identyczny problem jak kolega uncle__saddam, mianowicie na jakiekolwiek zapytanie inwerter odpowiada pustą linią.
    Walczę na malinie i napisałem prosty skrypt, taki jak ponizej:

    --------------------------------------------
    import time
    import serial
    ser = serial.Serial('/dev/ttyUSB0', 2400, timeout=1)

    print(ser)

    #Komenda QPIGS·©

    packet = bytearray()
    packet.append(0x51)
    packet.append(0x50)
    packet.append(0x49)
    packet.append(0x47)
    packet.append(0x53)
    packet.append(0xB7)
    packet.append(0xA9)
    packet.append(0x0D)

    ser.write(packet)

    print("Request: " + str(packet))
    print("Response: " + str(ser.read(1000)))
    --------------------------------------------

    Odpowiedź z maliny

    pi@raspberrypi:~/a $ python inv0.py
    Serial<id=0x76abe5b0, open=True>(port='/dev/ttyUSB0', baudrate=2400, bytesize=8, parity='N', stopbits=1, timeout=1, xonxoff=False, rtscts=False, dsrdtr=False)
    Request: bytearray(b'QPIGS\xb7\xa9\r')
    Response: b'

    --------------------------------------------

    Konwerter USB na RS232 to CH340, działa z WatchPowerem
    Przewód RJ45 na RS232 oryginalny z inwertera

    Nie wiem gdzie szukać, może mam jakiś banalny błąd w kodzie, którego nie widzę....
    Ostatecznie pewno skończy się na Arduino, ale jakoś wrodzony upór ciągnie mnie do tego aby chociaż raz pobrać dane z inwertera za pomocą pythona....

    Prośba o wsparcie :)
  • #18
    sh4dov
    Level 2  
    @matcheyrc1 Próbowałeś wpisywać te komendy w terminalu np PuTTY?

    Zauważyłem, że inwerter zwraca poprawne odpowiedzi na komendy np qpigs, qey, qem itd, wtedy gdy tuż przed nimi wysłane są odpowiednio 3 komendy qpi, qmn i qid. Nie wiem, czy to jest wymagane, ale u mnie to tak działa.

    Co do python'a to ja akurat nie mam doświadczenia w tym języku, natomiast napisałem prosty program w c# który zwraca poprawne odpowiedzi, może komuś się przyda:
    Code: csharp
    Log in, to see the code

    Stworzyłem sobie też "bramkę"/sterownik na esp8266 którego zadaniem jest komunikacja z inwerterem i udostępnianie "dalej" wyników
    Źródła tego projekciku sa na GH: ESBDriver

    Brakuje tam oczywiście pliku pwd.h, który powinien wyglądać tak:
    Code: c
    Log in, to see the code
  • #19
    elkam
    Level 15  
    witam
    zacytuję to co napisałem w swoim poście
    "Proponuję wstępnie zapoznać się ze specyfikacją struktury zapytań oraz zwracanych wiadomości.
    Pomoże to w zrozumieniu protokołu komunikacyjnego. Wpisz w przeglądarkę "QPI Device protocol ID Inquiry"
    a otrzymasz informacje skąd ściągnąć rs232-communication-protocol.pdf."
    Co do "maliny" to odpuściłem sobie to rozwiązanie na rzecz esp32s aczkolwiek nie pozbawione wad (odpowiednie zatasowanie watchdog'a)
    Wykorzystuję kilka struktur do wyłuskania odpowiednich informacji:
    "
    struct QpiMessage
    {
    byte protocolId;
    };


    struct QpigsMessage
    {
    unsigned long rxTimeSec;
    float gridV;
    float gridHz;
    float acOutV;
    float acOutHz;
    short acOutVa;
    short acOutW;
    byte acOutPercent;
    short busV;
    float battV;
    float battChargeA;
    float battPercent;
    float heatSinkDegC;
    float solarA;
    float solarV;
    float sccBattV;
    float battDischargeA;
    bool addSbuPriorityVersion;
    bool isConfigChanged;
    bool isSccFirmwareUpdated;
    bool isLoadOn;
    bool battVoltageToSteadyWhileCharging;
    byte chargingStatus;
    byte reservedY;
    byte reservedZ;
    long reservedAA;
    short reservedBB;
    };

    struct QmodMessage
    {
    char mode;
    };
    "

    Dodano po 11 [minuty]:

    Ciekawostką jest to, że nowe ESB, dość dobrze współpracują z bramkami wifi, które mają zaimplementowany protokół Modbus TCP i tu sprawa odczytu danych robi się trywialnie prosta.
    pozdrawiam
  • #20
    BrucieK
    Level 14  
    Witam,
    Czy sprawdzał ktoś czy taki sam protokół jest w inwenterach easun albo powmr?