05-06-2019, 20:33
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:
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ć
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ć