Introducción
En este post, se muestra cómo probar el RS-485 en Versión M-Duino PLUS.
Lo primero que debes saber es que la versión RS-485 PLUS tiene comunicación Full y Half-Duplex. Controlando el interruptor dip, debes seleccionar si quieres trabajar en Full o Half-Duplex. Hay internamente instalado un transmisor MAX485 Half duplex y MAX485. Si trabajas en Full-Duplex utilizará el MAX485 Half-Duplex para recibir los datos y el transmisor MAX485 para enviarlos.
La asignación de pines se muestra a continuación:
Max485 | Arduino Pins |
RX (RO) | RX Serial3 (15) |
TX (DI) | TX Serial3 (14) |
RE (inverted logic) | 11 |
DE | 46 |
Requisitos
Ethernet PLC: Productos de la familia M-Duino
Librería RS-485-: Librería Industrial Shields RS-485 (Github)
Configuración
Para hacer la prueba Full-Duplex, debes conectar el A, B (receptores) al Y, X(transmisores). Para el Half-Duplex, debes conectarte con otro dispositivo con RS-485 y seleccionar si quieres transmitir o recibir datos con un comentario o descomentar el comando "#define":
En el boceto Half-Duplex:
Para transmitir:
#define TEST_RS485_TX //#define TEST_RS485_RX
Para recibir
//#define TEST_RS485_TX #define TEST_RS485_RX
Software
A continuación se muestra el esquema de prueba para Half-Duplex:
(por defecto está en modo transmisor)
#define TEST_RS485_TX //#define TEST_RS485_RX int _rs485DE = 46; int _rs485RE = 11; /////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); Serial.println("M-Duino PLUS RS-485 test started"); Serial3.begin(9600L); pinMode(_rs485RE, OUTPUT); digitalWrite(_rs485RE, LOW); pinMode(_rs485DE, OUTPUT); digitalWrite(_rs485DE, LOW); } ////////////////////////////////////////////////////////////////////////////// void loop() { #if defined TEST_RS485_TX digitalWrite(_rs485RE, HIGH); digitalWrite(_rs485DE, HIGH); Serial3.write(0x12); Serial3.flush(); digitalWrite(_rs485DE, LOW); digitalWrite(_rs485RE, LOW); delay(1000); #endif // TEST_RS485_TX #if defined TEST_RS485_RX if (Serial3.available()) { if (Serial3.read() == 0x12) { Serial.println("RX"); } } #endif // TEST_RS485_RX }
A continuación se muestra el esquema de prueba para Full-Duplex:
int _rs485DE = 46; int _rs485RE = 11; /////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); Serial.println("M-Duino PLUS RS-485 test started"); Serial3.begin(9600L); pinMode(_rs485RE, OUTPUT); digitalWrite(_rs485RE, LOW); pinMode(_rs485DE, OUTPUT); digitalWrite(_rs485DE, LOW); } ////////////////////////////////////////////////////////////////////////////// void loop() { digitalWrite(_rs485RE, HIGH); digitalWrite(_rs485DE, HIGH); Serial3.write(0x12); Serial3.flush(); digitalWrite(_rs485DE, LOW); digitalWrite(_rs485RE, LOW); delay(1000); if (Serial3.available()) { if (Serial3.read() == 0x12) { Serial.println("RX"); } } }