55 *
66 * Recommended Modbus Master: QModbus
77 * http://qmodbus.sourceforge.net/
8+ *
9+ * Editado al español por LuxARTS
810 */
911
12+ // Incluye la librería del protocolo Modbus
1013#include < ModbusRtu.h>
1114#define ID 1
1215
13- Modbus slave (ID, 0 , 0 ); // this is slave ID and RS-232 or USB-FTDI
16+ // Crear instancia
17+ Modbus slave (ID, 0 , 0 ); // ID del nodo. 0 para el master, 1-247 para esclavo
18+ // Puerto serie (0 = TX: 1 - RX: 0)
19+ // Protocolo serie. 0 para RS-232 + USB (default), cualquier pin mayor a 1 para RS-485
1420boolean led;
1521int8_t state = 0 ;
1622unsigned long tempus;
1723
18- // data array for modbus network sharing
19- uint16_t au16data[9 ];
24+ uint16_t au16data[9 ]; // La tabla de registros que se desea compartir por la red
2025
21- /* *
22- * Setup procedure
23- */
26+ /* ********************************************************
27+ Configuración del programa
28+ ******************************************************** */
2429void setup () {
25- io_setup (); // I/O settings
30+ io_setup (); // configura las entradas y salidas
2631
27- // start communication
28- slave.begin ( 19200 );
29- tempus = millis () + 100 ;
30- digitalWrite (13 , HIGH );
32+ slave.begin (19200 ); // Abre la comunicación como esclavo
33+ tempus = millis () + 100 ; // Guarda el tiempo actual + 100ms
34+ digitalWrite (13 , HIGH ); // Prende el led del pin 13 (el de la placa)
3135}
3236
33- /* *
34- * Loop procedure
35- */
37+ /* ********************************************************
38+ Inicio del programa
39+ ******************************************************** */
3640void loop () {
37- // poll messages
38- // blink led pin on each valid message
39- state = slave.poll ( au16data, 9 );
41+ // Comprueba el buffer de entrada
42+ state = slave.poll ( au16data, 9 ); // Parámetros: Tabla de registros para el intercambio de info
43+ // Tamaño de la tabla de registros
44+ // Devuelve 0 si no hay pedido de datos
45+ // Devuelve 1 al 4 si hubo error de comunicación
46+ // Devuelve mas de 4 si se procesó correctamente el pedido
4047
41- if (state > 4 ) {
42- tempus = millis () + 50 ;
43- digitalWrite (13 , HIGH);
48+ if (state > 4 ) { // Si es mayor a 4 = el pedido fué correcto
49+ tempus = millis () + 50 ; // Tiempo actual + 50ms
50+ digitalWrite (13 , HIGH);// Prende el led
4451 }
45- if (millis () > tempus) digitalWrite (13 , LOW );
46-
47- // link the Arduino pins to the Modbus array
52+ if (millis () > tempus) digitalWrite (13 , LOW );// Apaga el led 50ms después
53+
54+ // Actualiza los pines de Arduino con la tabla de Modbus
4855 io_poll ();
4956}
5057
@@ -63,10 +70,9 @@ void loop() {
6370 * 14 - analog input
6471 * 15 - analog input
6572 *
66- * pin 13 is reserved to show a successful query
73+ * pin 13 reservado para ver el estado de la comunicación
6774 */
6875void io_setup () {
69- // define i/o
7076 pinMode (2 , INPUT);
7177 pinMode (3 , INPUT);
7278 pinMode (4 , INPUT);
@@ -83,37 +89,40 @@ void io_setup() {
8389 digitalWrite (7 , LOW );
8490 digitalWrite (8 , LOW );
8591 digitalWrite (9 , LOW );
86- digitalWrite (13 , HIGH ); // this is for the UNO led pin
87- analogWrite (10 , 0 );
88- analogWrite (11 , 0 );
92+ digitalWrite (13 , HIGH ); // Led del pin 13 de la placa
93+ analogWrite (10 , 0 ); // PWM 0%
94+ analogWrite (11 , 0 ); // PWM 0%
8995}
9096
91- /* *
92- * Link between the Arduino pins and the Modbus array
93- */
97+ /* ********************************************************
98+ Enlaza la tabla de registros con los pines
99+ ******************************************************** */
94100void io_poll () {
95- // get digital inputs -> au16data[0]
96- bitWrite ( au16data[0 ], 0 , digitalRead ( 2 ));
101+ // digital inputs -> au16data[0]
102+ // Lee las entradas digitales y las guarda en bits de la primera variable del vector
103+ // (es lo mismo que hacer una máscara)
104+ bitWrite ( au16data[0 ], 0 , digitalRead ( 2 )); // Lee el pin 2 de Arduino y lo guarda en el bit 0 de la variable au16data[0]
97105 bitWrite ( au16data[0 ], 1 , digitalRead ( 3 ));
98106 bitWrite ( au16data[0 ], 2 , digitalRead ( 4 ));
99107 bitWrite ( au16data[0 ], 3 , digitalRead ( 5 ));
100108
101- // set digital outputs -> au16data[1]
102- digitalWrite ( 6 , bitRead ( au16data[1 ], 0 ));
109+ // digital outputs -> au16data[1]
110+ // Lee los bits de la segunda variable y los pone en las salidas digitales
111+ digitalWrite ( 6 , bitRead ( au16data[1 ], 0 )); // Lee el bit 0 de la variable au16data[1] y lo pone en el pin 6 de Arduino
103112 digitalWrite ( 7 , bitRead ( au16data[1 ], 1 ));
104113 digitalWrite ( 8 , bitRead ( au16data[1 ], 2 ));
105114 digitalWrite ( 9 , bitRead ( au16data[1 ], 3 ));
106115
107- // set analog outputs
108- analogWrite ( 10 , au16data[2 ] );
116+ // Cambia el valor del PWM
117+ analogWrite ( 10 , au16data[2 ] ); // El valor de au16data[2] se escribe en la salida de PWM del pin 10 de Arduino. (siendo 0=0% y 255=100%)
109118 analogWrite ( 11 , au16data[3 ] );
110119
111- // read analog inputs
112- au16data[4 ] = analogRead ( 0 );
120+ // Lee las entradas analógicas (ADC)
121+ au16data[4 ] = analogRead ( 0 ); // El valor analógico leido en el pin A0 se guarda en au16data[4]. (siendo 0=0v y 1023=5v)
113122 au16data[5 ] = analogRead ( 1 );
114123
115- // diagnose communication
116- au16data[6 ] = slave.getInCnt ();
117- au16data[7 ] = slave.getOutCnt ();
118- au16data[8 ] = slave.getErrCnt ();
124+ // Diagnóstico de la comunicación (para debug)
125+ au16data[6 ] = slave.getInCnt (); // Devuelve cuantos mensajes se recibieron
126+ au16data[7 ] = slave.getOutCnt (); // Devuelve cuantos mensajes se transmitieron
127+ au16data[8 ] = slave.getErrCnt (); // Devuelve cuantos errores hubieron
119128}
0 commit comments