Problemas con error No such file or directory

Buenos días, tardes o noches a quienes lean este post. :dog:

Perdonen si no soy apropiado con la estructura de mi post, pero tengo un problema con mis librerías y no sé como resolverlo, soy novato en la programación y no encuentro solución al siguiente problema:

In file included from C:\Users\Admin\Documents\Arduino\Beta_prog_Arduin_PLC0_0_003\Beta_prog_Arduin_PLC0_0_003.ino:4:0:
C:\Users\Admin\Documents\Arduino\libraries\Modbus\src/Modbus.h:9:10: fatal error: vector: No such file or directory
 #include <vector>
          ^~~~~~~~
compilation terminated.
exit status 1

Compilation error: exit status 1

Como podrán ver pongo muchas notas en mi código y no sé porque ocurre esto, agradecería mucho la ayuda.

// Librerias relacionadas con PLC Siements y Ethernet                 //se abrira un menu, en el aparecera la siguiente opcion; "Examples"
//#include <SPI.h>
#include <Modbus.h>             //   Inicializa las                  //se abria una lista con la cual podras consultar los formatos de declaración.
#include <ModbusIP.h>  //      librerias  _ENC28J60
#include <EtherCard.h>
//     Iniciazan las librerias relacionadas con memorias SD
#include <SD.h>  // Objetivos iniciales de la siguiente version incicial de prog.
//#include <SPI.h>     //                                                                         --> Separacion del codigo de forma adecuada
#include <TMRpcm.h>                  //                                                                --> Comprobacion del codigo cargandolo al Arduino
File myFile;                         //   Inicia el protocolo de reconicimiento de datos                                 --> Avance con programacion de lado del PLC (Programar adecuadamente las IP y variables para el arduino)
                                    //                                                                             --> Avanzar con las grabaciones de audio .wav ( el uso de bazooka es posible?)
#include "Adafruit_LiquidCrystal.h"  //
Adafruit_LiquidCrystal lcd(0);       // Conecta e inicia la pantalla

// declaracion de constantes del programa(pines) para SD
#define SD_ChipSelectPin 10  // pin número 4
const int speakerPin = 9;
char* file = "Alarma_zona_o2_1.wav";  // Nombre bajo el que se hara la llamada a la pista de audio

//Variables relacionadas al TRMpcm (Reproduccion de audio)
unsigned long previousTime = 0;
unsigned long interval = 1000;
// Citación del object para TRMpcm
TMRpcm tmrpcm;

const int SENSOR_IREG = 50;   //    Variables que almacenan los datos
const int sensorAnalog = A0;  //            extraidos del plc
ModbusIP mb;                  // Inicia el protocolo de reconocimiento IP

void setup() {

  Serial.begin(9600);  // inicializamos el serial com y especificamos la frecuencia

  Serial.println("Verificación LCD.");

  // Inicializacion del numero de pixeles horizontales/verticales
  if (!lcd.begin(16, 2)) {
    Serial.println("Error con la conexion a la pantalla...");
    while (1)
      ;
  }
  Serial.println("Pantalla conectada.");

  // Imprimiendo mensaje en pantalla LCD
  lcd.print("Inicio de LCD excitoso");

  Modbuscd();     //  Se manda a llamar seccion del codigo para modbus
  SD_lecture();  //  Se manda a llamar seccion del codigo para lectura SD e indicaciones de sonido
  
}

void loop() {
  
  // Inicialización de la pantalla LCD para su uso en el programa
  lcd.setCursor(0, 1);
  // Impresion del tiempo antes del reseteo de la información mostrada
  lcd.print(millis() / 1000);

  lcd.setBacklight(HIGH);  // Indicacion de inicio ecritura lcd
  delay(500);

  lcd.setBacklight(LOW);  // Indicacion de inicio descanso del mensaje en pantalla
  delay(500);
  analisis();
  lecturasd();

}

void Modbuscd(){
//dirección MAC
  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  //Facilmente ajustable a la medida

  //dirección IP (Muestra de dirección IP generica)
  byte ip[] = { 192, 168, 1, 22 };
  mb.config(mac, ip);       // Compara la direcciones tomadas tanto del Arduino como del PLC
  mb.addIreg(SENSOR_IREG);  // Toma los valores previamente especificados del programa plc y los integra en la variable
  mb.task();  // actualiza para el trabajo se realize
              // con normalidad

  // envía los valores del Arduino - PLC
  mb.Ireg(SENSOR_IREG, analogRead(sensorAnalog));

  //muestra en el monitor serie los valores
  Serial.println(analogRead(sensorAnalog));
}
void analisis(){
mb.task();  // actualiza para el trabajo se realize
              // con normalidad

  // envía los valores del Arduino - PLC
  mb.Ireg(SENSOR_IREG, analogRead(sensorAnalog));

  //muestra en el monitor serie los valores de pot4
  Serial.println(analogRead(sensorAnalog));

}

void SD_lecture(){
   // Inicia la lectura de datos de la memoria SD
  Serial.print("Iniciando lectura de tarjeta SD...");
  if (!SD.begin(4)) {  // Comprobación de estado de memoria SD
    Serial.println("... Fallo en la lectura!");
    while (true)
      ;
  }
  Serial.println("... listo.");

  //Inicialización del Speaker
  tmrpcm.speakerPin = speakerPin;
  tmrpcm.setVolume(3);

}

void lecturasd(){

if (millis() - previousTime > interval) {
    activateOutput();  // Llammado a la sub-rutina
    previousTime = millis();
  }

}


void activateOutput() {

  Serial.println("Reproduciendo... ");
  tmrpcm.play(file);
  while (tmrpcm.isPlaying()) {}  // Esperando a que el audio termine su reproducción
  //delay(1000);tmrpcm.stopPlayback(); // o esperar 1 segundo para detener la musica (Los intervalos son variables)
}

PDT: Gracias a los moderadores por recalcarme los detalles en mi post para corregirlos

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @pceduard.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

1 Like

Por favor edita tu post y adjunta el código completo de acuerdo a las Normas del Foro en Español, punto 7.
También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

Lo mismo aplica para el informe de error.

1 Like

Muestre su Modbus.h file, por favor

Mostrare aqui el contenido del documento:

#ifndef MODBUS_H
#define MODBUS_H

//   #ifdef MODEBUS_LOG
//  #define MODEBUS_LOG

#include <Arduino.h>
#include <Stream.h>
#include <vector>
using namespace std;

class Modbus
{
private:
    /* data */
    bool log = false;
    int mode_ = -1;
    uint32_t timeout_ = 100;
    HardwareSerial* s ;
    byte rawRx[512];
    int  lenRx = 0;
    byte dataRx[512];
    int  datalen = 0;
    int  SlaveID = 0x01;
    byte txout[9] = {0,0,0,0,0,0,0,0,0};
    #define Coil_Register       0x01
    #define Discret_Register    0x02
    #define Holding_Register    0x03
    #define Input_Register      0x04  
    // vector <char> txbuff;
    // vector <char> rxbuff;
    
public:
    
    Modbus();
    Modbus(HardwareSerial &st);
    
    bool init(int mode, bool en_log = false);
    void setTimeout(uint16_t timeout);


    byte byteRead(int nb);
    int blockRead(int index);
    int coilRead(int address);                                      //Return 1 byte = 8 bit coil
    int coilRead(int id, int address);
    int discreteInputRead(int address);
    int discreteInputRead(int id, int address);
    long holdingRegisterRead(int address);
    long holdingRegisterRead(int id, int address, int block);
    long inputRegisterRead(int address);
    long inputRegisterRead(int id, int address, int block);
    
    int coilWrite(int address, uint8_t value);
    int coilWrite(int id, int address, uint8_t value);
    int holdingRegisterWrite(int address, uint16_t value);
    int holdingRegisterWrite(int id, int address, uint16_t value);
    void RxRaw(byte *raw, uint8_t &rlen);
    void TxRaw(byte *raw, uint8_t &rlen);
    //Read multiple coils, discrete inputs, holding registers, or input register values.
    //int requestFrom(int type, int address, int nb, byte *ret,int len);
    int requestFrom(int slaveId, int type, int address,int nb);
    //  ~Modbus();


    // Read Coil Register       0x01
    int ReadCoilReg(int add);
    int ReadCoilReg(int slaveId, int add);
    int ReadCoilReg(int slaveId, int add, int nbit);

    // Read Discret Register    0x02
    int ReadDiscretReg(int add);
    int ReadDiscretReg(int slaveId, int add);
    int ReadDiscretReg(int slaveId, int add, int nbit);

    // Read Holding Register    0x03
    int ReadHoldingReg(int add); 
    int ReadHoldingReg(int slaveId, int add);
    int ReadHoldingReg(int slaveId, int add, int nbyte);

    // Read Input Register      0x04
    int ReadInputReg(int add);
    int ReadInputReg(int slaveId, int add);
    int ReadInputReg(int slaveId, int add, int nbyte);


    int8_t   uint8(int add);
    uint16_t uint16(int add);
    uint32_t uint32(int add, bool byteHL = true);
    


    int CheckCRC(byte *buf, int len);
};

//  #else
//   #error "Log not defined"
//  #endif

#endif

Tengo la leve sospecha que la librería no es compatible con UNO.
Crea 2 buffers de 512 bytes cada uno y un array de otros 512 bytes... 1.5Kb solo para empezar.

1 Like

Acabo de buscar mas a profundidad y parece ser que la incompatibilidad es el caso :smiling_face_with_tear:

Alguna sugerencia de una biblioteca Modbus compatible con Arduino Uno?

[Edición]
Solo que es raro, el miercoles corria bien el programa, pero despues de actualizar otras librerias desde Arduino IDE empezaron a fallas

La captura de pantalla no corresponde a la misma librería, se refiere a ArduinoModbus.
La que usas (a juzgar por el código en #7) es la Modbus de Ul Dara, que es la que aparece como Modbus en el administrador de librerías.

Probablemente ese es el problema.
Estuve revisando las versiones de la librería y la versión 1.0.0 (de enero del '23) no incluía "vector".
Seguramente era la versión que usabas y al actualizarse ya no funciona.
Haz la prueba reinstalando la 1.0.0

Ya cambie las librerías y sigue mostrando el problema...

Dejare aqui una captura de la pantalla de el error que muestra ahora:

C:\Users\Admin\Documents\Arduino\Beta_prog_Arduin_PLC0_0_003\Beta_prog_Arduin_PLC0_0_003.ino:5:10: fatal error: ModbusIP.h: No such file or directory
 #include <ModbusIP.h>  //      librerias  _ENC28J60
          ^~~~~~~~~~~~
compilation terminated.
exit status 1

Compilation error: ModbusIP.h: No such file or directory

Creo que no era la librería adecuada...
:man_facepalming:t2:
Me parece que la que debes instalar es

Prueba, no pierdes nada.

Acabo de instalar la libreria, pero ahora el problema es con lo siguiente:

C:\Users\Admin\Documents\Arduino\Beta_prog_Arduin_PLC0_0_003\Beta_prog_Arduin_PLC0_0_003.ino:5:10: fatal error: ModbusIP.h: No such file or directory
 #include <ModbusIP.h>  //      librerias  _ENC28J60
          ^~~~~~~~~~~~
compilation terminated.
exit status 1

Compilation error: ModbusIP.h: No such file or directory

¿Instalaste ModbusIP?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.