• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z komunikacja via RS485 ModbusRTU
#4
Testowałem pod różnymi kątami i w koncu konfiguracja z NodeMcu i konwerterem podpietym pod sprzetowe RX i TX ruszyła, haczykiem było podpiecie zewnetrznego zasilacza. To znaczy, tak jakby ruszyła - nie mam juz teraz błędu "ResponseTimedOut" tylko "InvalidFunction". 

Oto kod:
Kod:
#include <ModbusMaster.h>

#define SLAVE_ADDRESS 0
#define RST_PIN D8
#define CONTROLL_LED_PIN D5

#define EXAMPLE_REGISTER 0
#define REGISTER_SIZE 1

ModbusMaster node;

void preTransmission() {
 digitalWrite(RST_PIN, HIGH);
}

void postTransmission() {
 digitalWrite(RST_PIN, LOW);
}

void setup() {
 pinMode(RST_PIN, OUTPUT);
 digitalWrite(RST_PIN, LOW);
 pinMode(CONTROLL_LED_PIN, OUTPUT);
 digitalWrite(CONTROLL_LED_PIN, LOW);
 
 Serial.begin(9600);

 delay(100);
}

void loop() {
 uint8_t responseStatus;
 Serial.begin(9600);

 node.begin(SLAVE_ADDRESS, Serial);
 node.preTransmission(preTransmission);
 node.postTransmission(postTransmission);

 digitalWrite(CONTROLL_LED_PIN, LOW);
 node.clearResponseBuffer();
 responseStatus = node.readHoldingRegisters(EXAMPLE_REGISTER, REGISTER_SIZE);

 Serial.begin(115200);
 if(responseStatus == node.ku8MBSuccess) {
   digitalWrite(CONTROLL_LED_PIN, HIGH);
   
   Serial.print("Response status: ");
   String hexResponseStatus(responseStatus, HEX);
   Serial.println(hexResponseStatus);
   Serial.print("Response: ");
   Serial.println(node.getResponseBuffer(0));
 } else {
   Serial.print("Error occured, response status: ");
   String hexResponseStatus(responseStatus, HEX);
   Serial.println(hexResponseStatus);
 }
 delay(1000);
}

Tym razem probowałem dostać się do licznika https://www.fif.com.pl/pl/liczniki-zuzyc...3m-ct.html, ponieważ jest to drugi licznik który muszę obsłużyć a mam go zamontowany w garażu i łatwiej mi jest się tam dostać. W każdym razie, wywołując funkcje "readHoldingRegisters" dostaje błąd niewłaściwej funkcji i jest to zrozumiałe, ponieważ, o ile wiem dla odczytywania wartości int powinienem wywoływać "readDiscreteInputs". Jednak gdy wywołuje jakakolwiek funkcje inna niż "readHoldingRegisters" dostaje ponownie odpowiedz "ResponseTimedOut".

EDIT: Właśnie sobie uświadomiłem, że może być to spowodowane załączeniem biblioteki "ModbusMaster.h", zamiast "ModbusMaster232.h" która jest przystosowana do ESP8266. Kiedy wrócę do domu w piatek, spróbuje to jeszcze przetestować Smile
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Problem z komunikacja via RS485 ModbusRTU - przez qbic - 05-06-2019, 20:33

Skocz do:


Przeglądający: 1 gości