Hola que tal colegas tengo dudas y quisiera que me ayuden, estoy tratando con el protocolo modbus rtu con rs485 con la librería modbusmaster que lo instale del mismo id de arduino.
Quiero leer los registros 0x0002 y 0x0003 del esclavo y el código que les muestro me funciona en simulacion "proteus y modsim32" pero a la hora de implementarlo en físico con un arduino uno, modsim32 y el conversor TTL-RS485 no me funciona, puse un led dentro del condicional para saber si estoy recibiendo los datos correcto y no se enciende osea no esta entrando al condicional.
alguien sabra algo de que este haciendo mal, porque me sorprende que en simulación funcione y a la hora de implementarlo no funciona, no se si sera por el hardware arduino o Talvez hay un truco.
Gracias.
#include <ModbusMaster.h> //Library for using ModbusMaster
#define MAX485_DE 7
#define MAX485_RE_NEG 6
#define LED 8
ModbusMaster node; //object node for class ModbusMaster
void preTransmission(){ //Function for setting stste of Pins DE & RE of RS-485
delay(10);
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission(){
delay(10);
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup() {
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
pinMode(LED , OUTPUT);
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.begin(19200);
node.begin(1, Serial); //Slave ID as 1
node.preTransmission(preTransmission); //Callback for configuring RS485 Transreceiver correctly
node.postTransmission(postTransmission);
}
void loop() {
uint8_t result;
result = node.readHoldingRegisters(0x0002, 2);
if (result == node.ku8MBSuccess){
uint16_t data1,data2;
digitalWrite(LED , HIGH);
data1 = node.getResponseBuffer(0x00);
data2 = node.getResponseBuffer(0x01);
Serial.print("[0002]: ");
Serial.println(data1);
Serial.print("[0003]: ");
Serial.println(data2);
}
}
[code]
#include <ModbusMaster.h> //Library for using ModbusMaster
//#define MAX485_DE 3
//#define MAX485_RE_NEG 2
#define MAX485_DE 7
#define MAX485_RE_NEG 6
ModbusMaster node; //object node for class ModbusMaster
void preTransmission(){ //Function for setting stste of Pins DE & RE of RS-485
delay(10);
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission(){
delay(10);
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup() {
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
pinMode(8, OUTPUT);
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.begin(19200); //Baud Rate as 115200
node.begin(1, Serial); //Slave ID as 1
node.preTransmission(preTransmission); //Callback for configuring RS-485 Transreceiver correctly
node.postTransmission(postTransmission);
}
void loop() {
uint8_t result;
int value = analogRead(A0);
result = node.readHoldingRegisters(0x0002, 2);
if (result == node.ku8MBSuccess){
uint16_t data1,data2;
digitalWrite(8, HIGH);
data1 = node.getResponseBuffer(0x00);
data2 = node.getResponseBuffer(0x01);
//result = node.readHoldingRegisters(0x40001, 1);
//result = node.readWriteMultipleRegisters(0x40001, 1);
//result = node.readInputRegisters(0x31000, 1);
Serial.print("value: ");
Serial.println(value);
Serial.print("[0002]: ");
Serial.println(data1);
Serial.print("[0003]: ");
Serial.println(data2);
//delay(30);
//node.clearResponseBuffer();
//}
}
//delay(1000);
}
[code]