Estoy intentando usar Arduino como esclavo Modbus-RTU y Raspberry Pi como maestro Modbus He interconectado Max485 (RS485 a TTL convertidor) con Arduino y Rs485 a USB en Raspberry Pi. Inicialmente, pude enviar datos de Arduino a Raspberry Pi, pero los datos parecen ser inconsistentes y no se pueden leer la mayoría de las veces
Estoy usando enlace para Arduino Modbus mínimo para la frambuesa pi
Conexiones: DI (max485) - TX (Arduino), DE (max485) -D4 (Arduino), RE (max485) - D4 (Arduino), Ro (max485) - RX (Arduino), Vcc (max485) -5v (Arduino), Gnd (max485) - GND (Arduino)
código para Arduino
#include <ModbusRtu.h>
uint16_t au16data[6] = {};
Modbus slave(5,0,4);
void setup() {
slave.begin(19200,SERIAL_8N1 );
}
void loop() {
au16data[0]=100;
au16data[1]=200;
au16data[2]=300;
au16data[3]=400;
au16data[4]=500;
au16data[5]=600;
slave.poll( au16data, 6 );
delay(3000);
}
código python
import minimalmodbus
from datetime import datetime
import time
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 5)
instrument.serial.baudrate = 19200
instrument.serial.bytesize = 8
instrument.serial.parity = minimalmodbus.serial.PARITY_NONE
instrument.serial.stopbits = 1
instrument.serial.timeout =5
instrument.mode = minimalmodbus.MODE_RTU
while(1):
try:
val = instrument.read_registers(0,6)
# Registernumber, number of decimals
print val
except IOError:
error_msg = "Failed to read from device"
error_time = datetime.now()
print "IO Error Time",error_time.isoformat(),error_msg
except ValueError:
error_msg = "Failed to read CRC"
error_time = datetime.now()
print "Value Error Time",error_time.isoformat(),error_msg
time.sleep(2)