02-06-2019, 03:18
Witam, mam nadzieje, ze pisze w dobrym dziale
Jakis czas temu szukałem na tym forum rekomendacji dotyczącej dwukierunkowego licznika z protokołem ModbusRTU, koniec końców zakupiłem cos takiego: https://www.fif.com.pl/pl/index.php?cont...hment=1093 (pełna dokumentacja, również z adresami poszczególnych rejestrów).
Docelowo, chcę zczytywać dane z licznika za pomocą NodeMCU v2 i konwertera UART -> RS485 by potem można było wysyłać dane na serwer. Układ połączyłem nastepujaco:
NodeMCU: Konwerter:
3.3V -> 3.3V
GND -> GND
D7 -> RO
D8 -> DI
D6 -> RSE
Oraz złącze A konwertera ze złączem A licznika, analogicznie z B.
Do obsługi protokołu ModbusRTU użyłem biblioteki https://github.com/Trialcommand/ESP8266-...RTU-Master, jest ona odpowiednio zmodyfikowana by działała z ESP8266, jednak pojawiły się dwa problemy. Program nie kompilował się z racji na nadpisywanie nazw funkcji z oryginalnej biblioteki SoftwareSerial, dla świętego spokoju pozmieniałem nazwy plików nagłówkowych; oprocz tego, zdałem sobie sprawę, że musze jakoś obsluzyc konwerter z którego korzystam - wymaga on podania stanu wysokiego na pin RST by wysylac dane oraz stanu niskiego by nasłuchiwać. Poczyniłem zatem parę modyfikacji w bibliotece, są one opisane i oznaczone w plikach.
Teoretycznie wszystko powinno być ok, jednak dalej nie jestem wstanie skomunikować się z licznikiem. Biblioteka ma pewną obsługę błędów i po wgraniu następującego programu:
otrzymuje status odpowiedzi 0xE2 który odpowiada ResponseTimedOut. Co zatem może być jeszcze nie tak? Wiem, że zagadnienie jest dość obszerne i możliwe, że to o co pytam to błachostka, ale zaznaczam, że mam bardzo małe doświadczenie jeśli chodzi o obsługę protokołów. Niestety nie posiadam też analizatora stanów logicznych (dotrze do mnie dopiero w przyszłym tygodniu).
Jakis czas temu szukałem na tym forum rekomendacji dotyczącej dwukierunkowego licznika z protokołem ModbusRTU, koniec końców zakupiłem cos takiego: https://www.fif.com.pl/pl/index.php?cont...hment=1093 (pełna dokumentacja, również z adresami poszczególnych rejestrów).
Docelowo, chcę zczytywać dane z licznika za pomocą NodeMCU v2 i konwertera UART -> RS485 by potem można było wysyłać dane na serwer. Układ połączyłem nastepujaco:
NodeMCU: Konwerter:
3.3V -> 3.3V
GND -> GND
D7 -> RO
D8 -> DI
D6 -> RSE
Oraz złącze A konwertera ze złączem A licznika, analogicznie z B.
Do obsługi protokołu ModbusRTU użyłem biblioteki https://github.com/Trialcommand/ESP8266-...RTU-Master, jest ona odpowiednio zmodyfikowana by działała z ESP8266, jednak pojawiły się dwa problemy. Program nie kompilował się z racji na nadpisywanie nazw funkcji z oryginalnej biblioteki SoftwareSerial, dla świętego spokoju pozmieniałem nazwy plików nagłówkowych; oprocz tego, zdałem sobie sprawę, że musze jakoś obsluzyc konwerter z którego korzystam - wymaga on podania stanu wysokiego na pin RST by wysylac dane oraz stanu niskiego by nasłuchiwać. Poczyniłem zatem parę modyfikacji w bibliotece, są one opisane i oznaczone w plikach.
Teoretycznie wszystko powinno być ok, jednak dalej nie jestem wstanie skomunikować się z licznikiem. Biblioteka ma pewną obsługę błędów i po wgraniu następującego programu:
Kod:
#include "ModbusMaster232.h"
#include "SoftwareSerialForESP.h"
#define SLAVE_ADDRESS 1
#define RX_SOFTWARE_PIN D7
#define TX_SOFTWARE_PIN D8
#define EXAMPLE_REGISTER 0
#define REGISTER_SIZE 1
ModbusMaster232 node(SLAVE_ADDRESS);
void setup() {
Serial.begin(9600);
delay(100);
node.begin(9600, D6);
//pinMode(D6, HIGH); //
}
void loop() {
Serial.print("Response status: ");
String hexResponseStatus(node.readDiscreteInputs(EXAMPLE_REGISTER, REGISTER_SIZE), HEX);
Serial.println(hexResponseStatus);
Serial.print("Response: ");
Serial.println(node.getResponseBuffer(0));
node.clearResponseBuffer();
delay(5000);
}