Skocz do zawartości

ESP + Epever + Modbus = problem z czytaniem wiecej niz jednego rejestru.


marcom

Pomocna odpowiedź

Czesc.

Nie uzywalem wczesnie biblioteki ModbusMaster i nie wiem czy w niej szukac problemow, czy raczej w sobie 😉

Zakladam te 2 opcje, ale od rzeczy.

Esp8266 z SoftwareSerial na pinach D1 i D2 + regulator PV Epever Tracer 2210AN.

Tutaj jest opis rejestrow:

https://www.developpez.net/forums/attachments/p196506d1451307310/systemes/autres-systemes/automation/probleme-com-modbus-pl7-pro/controllerprotocolv2.3.pdf/

Dziwne zachowanie, bo jesli czytam konkretny rejestr Modbus, jakis pojedynczy, to mam poprawne wartosci, ale jesli chce przeczytac kilka za jednym razem, to pozniej odczytuje z bufora bledne wartosci.

Probowalem wszystkiego, bo nie bylem pewny, czy zapis nie musi byc w HEX, a moze jednak w DEC, a moze liczy od 0, a moze od 1...i nadal to samo.

 Taki kod dziala, czytam parametr Battery SOC:

  node.clearResponseBuffer();
  result = node.readInputRegisters(0x311A, 0x01); // czytam dane z jednego rejestru, adres 0x311A
  Serial.println(node.getResponseBuffer(0)); // wyswietlam dane z bufowa, spod adresu 0

Ale juz taki kod jak ponizej, zwraca glownie wartosc 0x00, a co jakis czas dane, ale tez nie z tego miejsca w buforze, w ktorym spodziewalbym sie je miec:

node.clearResponseBuffer();
result = node.readInputRegisters(0x3111, 4); // pytam o 4 rejestry
Serial.println(node.getResponseBuffer(0));
Serial.println(node.getResponseBuffer(1));
Serial.println(node.getResponseBuffer(2));
Serial.println(node.getResponseBuffer(3));
 

Na wyjsci mam same wartosci 0.

Ale jesli zapytam tylko o jeden rejestr:

 node.clearResponseBuffer();
result = node.readInputRegisters(0x3111, 1); // pytam tylko o 1 rejestr, a wyswietlam 4
Serial.println(node.getResponseBuffer(0));
Serial.println(node.getResponseBuffer(1));
Serial.println(node.getResponseBuffer(2));
Serial.println(node.getResponseBuffer(3));

To pierwsza wartosci jest poprawna, a 3 nastepne sa zerami.

Pewnie, ze moge przekopac te biblioteki i sprawdzic co sie tam dzieje, ale moze ktos mnie naprowadzi, bo ogladam przyklady i funkcja readInputRegisters() jako paramter przyjmuje adres rejestru poczatkowego i ilosc rejestrow do przeczytania.

Rejestry "maja dzury", nie sa po kolei, np. po 0x3107 jest 0x310c i  myslalem juz, ze moze zwracane sa 0, ale po odpytywaniu w petli o 20 danych z bufora-sytuacja jest bez zmian.

Może to jeszcze byc problem programowego RS-a i musiałbym to przerzucić na STM-a, z 3 portami sprzętowymi, ale to zostawiam na koniec.

Czy ktoś miał taki problem ?
 

Pozdrawiam,

Mariusz

 

P.S.

Zamiana portów, czyli modbus ma sprzętowym UART, a do debug-owania mam programowy - nic nie dała.

P.S.

Zrobilem tablice z adresami rejestrow i  pytam po kolei o kazdy. Dziala ok, ale zeby bylo ciekawiej, pojawiaja sie czesto bledy CRC.

Zmienie konwerter TTL<>RS485, bo mam taki z automatycznym przelaczaniem nadawanie-odbior, a w necie wszyscy uzywaja tych z recznym sterowaniem.

Pozniej jeszcze podmienie ten regulator PV,  bo jest uzywany i moze byc uszkodzony, a na koncu zaczne podsluchiwac transmisje i te sumy kontrolne.

Moze do czegos dojde, moze komus sie ta walka do czegos przyda 😉

 

Edytowano przez marcom
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.