logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

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

doktor_piotr 08 Cze 2021 10:39 4443 23
  • #1 19470421
    doktor_piotr
    Poziom 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.
  • #2 19571315
    Kiermasz
    Poziom 22  
    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 19680622
    jurek.parus
    Poziom 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 19680663
    Kiermasz
    Poziom 22  
    @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 19935043
    uncle__saddam
    Poziom 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 19989536
    elkam
    Poziom 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 19989757
    uncle__saddam
    Poziom 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 19990125
    Kiermasz
    Poziom 22  
    uncle__saddam napisał:
    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 19990900
    elkam
    Poziom 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 napisał:
    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 19994291
    uncle__saddam
    Poziom 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 19994591
    elkam
    Poziom 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 19995568
    uncle__saddam
    Poziom 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 19997458
    elkam
    Poziom 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 20255274
    sh4dov
    Poziom 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 20255814
    elkam
    Poziom 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 20259601
    matcheyrc1
    Poziom 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 20262231
    sh4dov
    Poziom 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:
    Kod: C#
    Zaloguj się, aby zobaczyć kod

    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:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #19 20262387
    elkam
    Poziom 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 20375577
    BrucieK
    Poziom 14  
    Witam,
    Czy sprawdzał ktoś czy taki sam protokół jest w inwenterach easun albo powmr?
  • #21 20792879
    marwinb
    Poziom 2  
    >>19571315
    Proszę o pomoc jak zapytać mój inwerter o dane (QPI, QPIGS) nazywa się SUB 5000, dołączam protokół wysłany przez producenta , proszę o przykład w HEX ascii ,
    chyba nie jest zgodny z QPIGS , wysyłając takie coś odpowiada na dane , jedyne co mogę odczytać.
    [22:00:23] <= Response: 01 03 08 00 00 00 00 00 00 00 00 95 D7
    [22:00:23] => Poll: 01 03 00 00 00 04 44 09
    [22:00:23] Connect to COM 5:9600,N,8,1.0 timeout: 3
  • #22 20793171
    elkam
    Poziom 15  
    Witam.
    Podaj dokładny typ przetwornicy. Skąd masz kod, który wysłałeś do urządzenia? Z odpowiedzi, którą pokazałeś, wynika, że "coś tam" zwrócił. Z długości zwróconych hex'ów można przypuszczać, że to Modbus.
    Szybkość, ilość bitów, parzystość tu wszystko jest Ok, odpowiedz jest prawidłowa, prawidłowa jest także (występująca na końcu ciągu ) suma kontrolna crc. Być może producenci stwierdzili, ze Modbus jest prostszy i już nie ładują do tych przetwornic "InfiniSolar RS232 communication Protocol"
  • #23 20793749
    marwinb
    Poziom 2  
    czyli w załączonym protokole nic nie widzisz?
    nie działa WatchPower , jest WiFi po rs232 i aplikacja EmartESS działa ale mało danych i odczyt co 5min.
    Może wiecie jak podsłuchać WiFi po rs232 ? No na pewno jest to MODBUS wysłałem w poprzedniej wiadomości.
    Inverter nazywa się CAUTION :) KEMAPOWER, dane w załączniku.

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

    dane odczytałem przez casmodbusScanner
    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
    wysyłam też przez "Serial Port Monitor"
    Inwerter ESB 6kw-24v: Jak podłączyć do Arduino, brak dokumentacji, komunikacja Modbus RS232
  • #24 20795646
    elkam
    Poziom 15  
    Witam, w Chinach "zrzynają" między sobą więc w kodach robią podobnie. Wykorzystaj lub próbuj posłużyć się packet code które znajdziesz w załącznikach, które podrzuciłem. Znajdziesz prawdopodobną składnie zapytań do przetwornicy. Musisz nać adres slave'a.
    Pogaduchy przez wifi, jak najbardziej możliwe, składnia ta sama, potrzebny adres IP, jakiś bridge rs->lan lub coś podobnego.
    A tak nawiasem to jeśli umiesz coś uruchomić na arduino to jest dobra droga.

    Pozdrawiam

Podsumowanie tematu

Dyskusja dotyczy podłączenia inwertera ESB 6kW-24V do Arduino z wykorzystaniem komunikacji Modbus RS232. Użytkownicy dzielą się doświadczeniami związanymi z brakiem dokumentacji oraz problemami z odczytem danych. Wskazówki obejmują użycie konwertera MAX232, konfigurację portu szeregowego (2400 8N1), oraz sekwencje komend do komunikacji. Wspomniane są również inne systemy monitorowania, takie jak Victron Venus oraz EmonCMS, które mogą być użyte do integracji z inwerterami. Użytkownicy podają przykłady kodów oraz schematy połączeń, a także omawiają problemy z odpowiedziami inwertera na zapytania.
Podsumowanie wygenerowane przez model językowy.
REKLAMA