Skip to content

Commit 2297787

Browse files
authored
Merge pull request #20 from luxarts/master
Update advanced_slave.ino
2 parents 3804fc1 + 4a5b6af commit 2297787

File tree

1 file changed

+52
-43
lines changed

1 file changed

+52
-43
lines changed

examples/advanced_slave/advanced_slave.ino

Lines changed: 52 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,46 +5,53 @@
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
1420
boolean led;
1521
int8_t state = 0;
1622
unsigned 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+
*********************************************************/
2429
void 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+
*********************************************************/
3640
void 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
*/
6875
void 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+
*********************************************************/
94100
void 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

Comments
 (0)