ESP8266 Modbus TCP IP mit ID >3 (SMA PV Wechselrichter)

Hallo Ihr Lieben,
vielleicht kann mir hier jemand mit meinem "kleinen" Problem Helfen.
Ich habe auf meinem PC einen Modbus TCP IP Scanner installiert. Mit diesem kann ich ohne weiteres auf das entsprechende Register zugreifen.

Adresse des Wechselrichters :192. 168. 0. 103
Modbus TCP IP Port :502
Modbus TCP IP Unit ID :3
Registeradresse SMA :30769
Anzahl zusammenhängender SMA Register :2
Datentyp SMA :S32
Datenformat SMA :FIX3
Zugriff SMA :RO

Auszug aus der LOG:

So weit so gut. Nun versuche ich verzweifelt diesen Wert mit dem ESP abzurufen.
Hier ein Paar Zeilen aus dem Code die denke ich ausschlaggebend sein dürften.

#include <ModbusIP_ESP8266.h>
IPAddress SMA4KW(192, 168, 0, 103); // Modbus Slave SMA
ModbusIP mb2

 if (mb2.isConnected(SMA4KW)) {
    mb2.readIreg(SMA4KW, 30770, &SMAres30770, 2,0, 3);
    Serial.println(SMAres30770);
  } else {
    mb2.connect(SMA4KW);
  }
  mb2.task();

Derzeit komme ich nicht in die if Bedingung da ich nicht über die Connected hinaus komme.
Danke

Poste kompletten Code! Ist Dein Modbus-Gerät vom WLAN her erreichbar?

Der Code hat fast 700 Zeilen das wird es nicht bringen. Ich habe zu einem andern Gerät bereits eine aktive Modbus Verbindung aufgebaut nur leider mit der Unit ID 1.
Ja mein Wlan und Lan sind in der gleichen Maske, und "jeder darf mit jeden".

Heisst das, es ist gebridged? Hast Du mit einem Notebook, das nur am WLAN hängt, versucht, das Modbus-Gerät zu erreichen und das war erfolgreich?

Dieser Zeile sollte ein connect()-Aufruf vorangegangen sein. Hast Du dort den Rückgabewert nicht getestet?

In der Fritzbox kann ich einstellen, dass das Wlan kein Extra Netz bekommt.
Der ESP greift schon auf ein Modbus Gerät über Wlan im Lan zu. Damit ist die Verbindung IO

Zum 2. Punkt wie bekomme ich den Rückgabewert raus? Nein ich habe das noch nicht getestet.

dann mach einen Sketch der sich nur ins wlan verbindet und alle 5 Sekunden die zwei Register abfragt.
Einen vollständingen compilierbaren Sketch.
A) damit du dich selber auf das wesentliche konzentrierst
B) damit wir eine Chance haben nachzuvollziehen was da bei dir abgeht.

Außerdem setze bitte einen Link auf die konkrete Library die du verwendest. Die, die ich gefunden habe, ist nur ein Slave/Server und schreibt auch "In the current version the library allows the ESP8266 operate as a slave, "
Du brauchst aber einen IP Master/Client.

Hallo Sorry das ich erst so spät antworte. ich habe den Code auf einen ESP32 umgeschrieben. Der liegt hier noch zum "spielen" rum.
Den SMA Teil habe ich ausgeklammert. (Zeile 127 - 145)
Ich hoffe der Code ist jetzt "kurz genug".
Danke für eure Mühen.

#include <Arduino.h>
  //Imports for ESP32
  #include <WiFi.h>
  #include <WiFiMulti.h>
  #include <HTTPClient.h>
  #include <WebServer.h>
  #include <Update.h>
  WiFiMulti WiFiMulti;
#include <tr064.h>
#include "SPI.h"
#include "Adafruit_ILI9341.h"
#include <SD.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
//Modbus
#include <ModbusIP_ESP8266.h>

#include <time.h>


char buffer[10];
#include <Arduino_JSON.h>


// HTML
unsigned long millisstartb;
unsigned long intervallb = 600; //modbus auslesen

int zeigerdiagramm;
// Wifi network name (SSID)
const char* wifi_ssid = "---"; 
// Wifi network password
const char* wifi_password = "---";

//Modbus E3DC
const int REG83 = 83;     String sres83;   //Batterie in %

String sPVges = ""; int iPVges;
uint16_t res83 = 0;

//SMA
const int SMAREG30769 = 30769;const int SMAREG30770 = 30770;            //DC Strom Eingang
const int SMAREG30771 = 30771;const int SMAREG30772 = 30772;            //DC Spannung Eingang
uint16_t SMAres30769 = 0;uint16_t SMAres30770 = 0;
uint16_t SMAres30771 = 0;uint16_t SMAres30772 = 0;
//MYPV

IPAddress remotee3dc(192, 168, 0, 100);    // Address of Modbus Slave device
IPAddress SMA4KW(192, 168, 0, 103); // Adress of Modbus Slave SMA

ModbusIP mb1;  //ModbusIP object E3DC
ModbusIP mb2;  //ModbusIP object SMA

WebServer server(80);

WiFiUDP ntpUDP;

char *FloatToStr(char *str, double number, uint8_t length, uint8_t digits, char digsign)
{
  uint8_t pos = 0;

  if (number < 0.0)
  {
    str[pos++] = '-';
    number = -number;
  }

  double rounding = 0.5;
  for (uint8_t i = 0; i < digits; ++i)
    rounding /= 10.0;
  number += rounding;

  unsigned long int_part = (unsigned long)number;
  double remainder = number - int_part;

  itoa(int_part, &str[pos], 10);
  pos = strlen(str);

  if (digits > 0)
    str[pos++] = digsign;

  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    str[pos++] = toPrint + '0';
    remainder -= toPrint;
  }
  str[pos] = 0;
  uint8_t len = strlen(str);
  if (len < length)
  {
    while (length != len)
    {
      str[length] = (len < length) ? str[len--] : ' ';
      length--;
    }
  }
  return str;
}

void setup() {
 WiFiClient client;

 Serial.begin(115200);

    if((WiFiMulti.run() != WL_CONNECTED)) {
        WiFiMulti.addAP(wifi_ssid, wifi_password);
        while ((WiFiMulti.run() != WL_CONNECTED)) {
            delay(100);
        }
    }
Serial.println("WIFI connected...");
}

void MODBUSauslesen(){
  char s[4];
  //E3DC
  if (mb1.isConnected(remotee3dc)) {   // Check if connection to Modbus Slave is established
    mb1.readHreg(remotee3dc, REG83 - 1, &res83);delay(1);
  } else {
    mb1.connect(remotee3dc);           // Try to connect if no connection
  }
  delay(1);
  mb1.task();                      // Common local Modbus task
  /*
  //SMA
  Serial.println("SMA Start");
  if (mb2.isConnected(SMA4KW)) {
    //mb2.readHreg(SMA4KW, SMAREG31795 - 1 + 40000, &SMAres31795);mb2.readHreg(SMA4KW, SMAREG31796 - 1 + 40000, &SMAres31796);
    mb2.readIreg(SMA4KW, 30769, &SMAres30769, 2,0, 3);
    //mb2.readHreg(SMA4KW, 30770, &SMAres30770, 1,0, 3);
    //mb2.readHreg(SMA4KW, 60772, &SMAres30771, 1,0, 3); mb2.readHreg(SMA4KW, 60773, &SMAres30772, 1,0, 3);
    Serial.println("SMA Verbunden!");
    Serial.println(SMAres30769);//Serial.println(SMAres30770);
    //Serial.println(SMAres31795);Serial.println(SMAres31796);
  } else {
    Serial.println("SMA Verbindungsversuch");
    mb2.connect(SMA4KW);           // Try to connect if no connection
  }
  mb2.task();                      // Common local Modbus task
  //const int SMAREG31795 = 31795;const int SMAREG31796 = 31796;
  //uint16_t SMAres31795 = 0;uint16_t SMAres31796 = 0;
 */
  delay(100);                     // Pulling interval 100

//  Batt in%
 sres83 = String(res83) + " % ";
 char cres83[6];
 sres83.toCharArray(cres83, 6);
}
void loop(void)
{
  Serial.print(res83);Serial.println(" % Batterie");
  delay(5000);
 server.handleClient();
if (millis() >= millisstartb + intervallb) {
 millisstartb = millis();
 MODBUSauslesen();
 }
}

Ausgabe:
21:56:08.936 -> 91 % Batterie
21:56:14.012 -> 91 % Batterie

Das scheint ja zu funktionieren.

Ich gehe mal davon aus, dass Du "Verbindungsversuch" in Reihe bekommst, wenn Du den SMA-Code nicht auskommentierst (sonst wäre Dein Problem ja gelöst). Das deutet aber sehr darauf hin, dass das Gerät SMA4KW nicht erreichbar ist oder auf einem anderen Port empfangsbereit ist. Was ergibt ein Versuch mit Telnet vom PC aus?

Wenn ich den SMA Code wieder Aktiviere wird die "mb2.isConnected(SMA4KW)" nie erfüllt.
Vom PC aus ist das kein Problem

Entschuldige, aber das hat nichts mit dem Code von Dir zu tun. Der markierte Eintrag scheint von einer IP 192.168.0.101 geholt zu werden, Dein Code versucht aber zu 192.168.0.103 zu verbinden.

Post doch bitte die komplette Ausgabe der seriellen Schnittstelle, wenn der SMA-Code aktiv ist.

Ach du Sch.... bin ich doof!
habe den Code angepasst leider Schläft jetzt der SMA ich werde es morgen gleich mal testen!

#include <Arduino.h>
  //Imports for ESP32
  #include <WiFi.h>
  #include <WiFiMulti.h>
  #include <HTTPClient.h>
  #include <WebServer.h>
  #include <Update.h>
  WiFiMulti WiFiMulti;
#include <tr064.h>
#include "SPI.h"
#include "Adafruit_ILI9341.h"
#include <SD.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
//Modbus
#include <ModbusIP_ESP8266.h>

#include <time.h>


char buffer[10];
#include <Arduino_JSON.h>


// HTML
unsigned long millisstartb;
unsigned long intervallb = 600; //modbus auslesen

int zeigerdiagramm;
// Wifi network name (SSID)
const char* wifi_ssid = "---"; 
// Wifi network password
const char* wifi_password = "---";

//Modbus E3DC
const int REG83 = 83;     String sres83;   //Batterie in %

String sPVges = ""; int iPVges;
uint16_t res83 = 0;

//SMA
const int SMAREG30769 = 30769;const int SMAREG30770 = 30770;            //DC Strom Eingang
uint16_t SMAres1 = 0;
uint16_t SMAres2 = 0;
uint16_t SMAres3 = 0;
uint16_t SMAres4 = 0;
uint16_t SMAres5 = 0;
uint16_t SMAres6 = 0;
//MYPV

IPAddress remotee3dc(192, 168, 0, 100);    // Address of Modbus Slave device
IPAddress SMA4KW(192, 168, 0, 101); // Adress of Modbus Slave SMA

ModbusIP mb1;  //ModbusIP object E3DC
ModbusIP mb2;  //ModbusIP object SMA

WebServer server(80);

WiFiUDP ntpUDP;

char *FloatToStr(char *str, double number, uint8_t length, uint8_t digits, char digsign)
{
  uint8_t pos = 0;

  if (number < 0.0)
  {
    str[pos++] = '-';
    number = -number;
  }

  double rounding = 0.5;
  for (uint8_t i = 0; i < digits; ++i)
    rounding /= 10.0;
  number += rounding;

  unsigned long int_part = (unsigned long)number;
  double remainder = number - int_part;

  itoa(int_part, &str[pos], 10);
  pos = strlen(str);

  if (digits > 0)
    str[pos++] = digsign;

  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    str[pos++] = toPrint + '0';
    remainder -= toPrint;
  }
  str[pos] = 0;
  uint8_t len = strlen(str);
  if (len < length)
  {
    while (length != len)
    {
      str[length] = (len < length) ? str[len--] : ' ';
      length--;
    }
  }
  return str;
}

void setup() {
 WiFiClient client;

 Serial.begin(115200);

    if((WiFiMulti.run() != WL_CONNECTED)) {
        WiFiMulti.addAP(wifi_ssid, wifi_password);
        while ((WiFiMulti.run() != WL_CONNECTED)) {
            delay(100);
        }
    }
Serial.println("WIFI connected...");
}

void MODBUSauslesen(){
  char s[4];
  //E3DC
  if (mb1.isConnected(remotee3dc)) {   // Check if connection to Modbus Slave is established
    mb1.readHreg(remotee3dc, REG83 - 1, &res83);delay(1);
  } else {
    mb1.connect(remotee3dc);           // Try to connect if no connection
  }
  delay(1);
  mb1.task();                      // Common local Modbus task
  //SMA
  Serial.println("SMA Start");
  if (mb2.isConnected(SMA4KW)) {
    mb2.readHreg(SMA4KW, 769, &SMAres1, 2,0, 3);delay(1);
    mb2.readHreg(SMA4KW, 770, &SMAres2, 2,0, 3);delay(1);
    mb2.readHreg(SMA4KW, 30769, &SMAres3, 2,0, 3);delay(1);
    mb2.readHreg(SMA4KW, 30770, &SMAres4, 2,0, 3);delay(1);
    mb2.readHreg(SMA4KW, 60769, &SMAres5, 2,0, 3);delay(1);
    mb2.readHreg(SMA4KW, 60770, &SMAres6, 2,0, 3);delay(1);
    Serial.println("SMA Verbunden!");
    Serial.println(SMAres1);
    Serial.println(SMAres2);
    Serial.println(SMAres3);
    Serial.println(SMAres4);
    Serial.println(SMAres5);
    Serial.println(SMAres6);
  } else {
    Serial.println("SMA Verbindungsversuch");
    mb2.connect(SMA4KW);           // Try to connect if no connection
  }
  mb2.task();                      // Common local Modbus task
  //const int SMAREG31795 = 31795;const int SMAREG31796 = 31796;
  //uint16_t SMAres31795 = 0;uint16_t SMAres31796 = 0;
  delay(100);                     // Pulling interval 100

//  Batt in%
 sres83 = String(res83) + " % ";
 char cres83[6];
 sres83.toCharArray(cres83, 6);
}
void loop(void)
{
  Serial.print(res83);Serial.println(" % Batterie");
  delay(5000);
 server.handleClient();
if (millis() >= millisstartb + intervallb) {
 millisstartb = millis();
 MODBUSauslesen();
 }
}

Ok IP Adresse ist angepasst und Tadaaaa ich bin Verbunden... jetzt ist aber das Nächste Problem.
Ich kann die Abfrage nicht so gestalten, dass ich die Werte einzeln in Variablen bekomme.
Theoretisch müsste es möglich sein auch gleich ab Register 770 + 6 auszulesen und zu selektieren.
das ist der Print:
10:29:48.321 -> WIFI connected...
10:29:53.366 -> SMA Start
10:29:53.366 -> SMA Verbindungsversuch
10:29:58.477 -> SMA Start
10:29:58.477 -> SMA Verbindungsversuch
10:30:03.580 -> SMA Start
10:30:03.580 -> SMA Verbindungsversuch
10:30:08.684 -> SMA Start
10:30:08.684 -> SMA Verbindungsversuch
10:31:44.607 -> WIFI connected...
10:31:49.600 -> SMA Start
10:31:49.600 -> SMA Verbindungsversuch
10:31:54.733 -> SMA Start
10:31:54.733 -> SMA Verbunden!
10:31:54.733 -> 0
10:31:54.733 -> 0
10:31:54.733 -> 0
10:31:54.733 -> 0
10:31:54.733 -> 0
10:31:54.733 -> 0
10:31:59.829 -> SMA Start
10:31:59.829 -> SMA Verbunden!
10:31:59.829 -> 0
10:31:59.829 -> 0
10:31:59.829 -> 0
10:31:59.829 -> 0
10:31:59.829 -> 0
10:31:59.829 -> 0
10:32:04.924 -> SMA Start
10:32:04.971 -> SMA Verbunden!
10:32:04.971 -> 65535
10:32:04.971 -> 1890
10:32:04.971 -> 0
10:32:04.971 -> 65535
10:32:04.971 -> 65535
10:32:04.971 -> 65535
10:32:10.055 -> SMA Start
10:32:10.055 -> SMA Verbunden!
10:32:10.055 -> 65535
10:32:10.055 -> 1876
10:32:10.055 -> 0
10:32:10.055 -> 65535
10:32:10.055 -> 65535
10:32:10.055 -> 65535
so wie in diesem Auszug vom PC

Wenn Du die Bibliothek modbus-esp8266 aus dem Manager der IDE verwendest, dann machst Du hier gefährliche Dinge, denn Du schreibst über den reservierten Speicherbereich hinaus.
SMAres1 ist ein uint16_t, Du sagst aber, dass 2 Register geladen werden sollen, d.h. dort müsste ein Array von uint16_t mit zwei Plätzen übergeben werden. Da Du das nicht machst, wird über den vorgesehenen Bereich hinaus geschrieben.

Du könntest aber mit

    uint16_t SMAregs[10];
    mb2.readHreg(SMA4KW, 769, SMAregs, 7);

Wenn Du eine spezifische Unit-ID brauchst, musst Du den entsprechenden Teil ergänzen.

Die delay(1)-Aufrufe kannst Du vollständig eliminieren, die sind unnütz.

Danke für den Hinweis mit Arrays hatte ich schon mal zu tun.
Das die ESP8266 Lib nicht gut ist glaube ich sofort. Finde nur kein "Noobsichers" Beispiel für mich. Was ich in die Arduino zum laufen bekomme.
Habe etwas über "async Modbus" für den ESP32 gelesen. Aber wie geschrieben, ich bin da leider auf eure Hilfe angewiesen. :smile:
Grüße

Ich würde dir ja meine eModbus-Library anbieten wollen, die hauptsächlich für den ESP32 entwickelt worden und inzwischen ein paar tausend Mal im Einsatz ist. Ein bisschen einlesen müsstest du dich aber trotzdem... :grin:
Die arbeitet grundsätzlich asynchron, d.h., du schickst Requests los, dein Programm läuft ungehindert weiter, bis eine Response eintrifft, wodurch eine von dir angemeldete Callbackfunktion damit aufgerufen wird.
Synchron (dein Programm wartet nach dem Request auf die Response) geht auch, ist aber in der Regel nicht, was man will.

Klingt super das Prog hat bei mir noch genügend anderen Kram zu erledigen.
Leider brauche ich auch ein Beispiel (ino Datei) um es irgendwie für meine Zwecke an zu passen.
Ihr schreibt mit einem Vater der 3 junge Kinder hat. Die Zeit für bastelei ist sehr rah.
Danke Schon mal.
Ich kan auch dauerhaft den ESP32 bei mir einsetzen.

Unter "examples" findest du auch das TCP03example, das so schlicht wie möglich das Absetzen eines Requests zum Lesen von Registern und Anzeigen der Response vorstellt.

Die Sourcedatei heißt main.cpp, du kannst sie auch in irgendwas.ino umbenennen, wenn du willst.

Musst natürlich vorher die Lib als ZIP herunterladen und in der Arduino IDE installieren. (ich benutze PlatformIO, deswegen ist das eher theoretisches Wissen :wink:)

Danke Gesagt getan ich habe jetzt die Datei umbenannt und die Include hinzugefügt.
Jetzt "brüllt" mich aber immer noch der Compiler an und ich weiß keinen Rat.

cmd /c type nul > "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501/file_opts"
Linking everything together...
"C:\\Users\\Admin\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\esp-2021r2-patch5-8.4.0/bin/xtensa-esp32-elf-g++" "-Wl,--Map=C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501/ModBusTCPIPeModbus.ino.map" "-LC:\\Users\\Admin\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\2.0.11/tools/sdk/esp32/lib" "-LC:\\Users\\Admin\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\2.0.11/tools/sdk/esp32/ld" "-LC:\\Users\\Admin\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\2.0.11/tools/sdk/esp32/qio_qspi" -T esp32.rom.redefined.ld -T memory.ld -T sections.ld -T esp32.rom.ld -T esp32.rom.api.ld -T esp32.rom.libgcc.ld -T esp32.rom.newlib-data.ld -T esp32.rom.syscalls.ld -T esp32.peripherals.ld -mlongcalls -Wno-frame-address -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -Wl,--wrap=esp_log_write -Wl,--wrap=esp_log_writev -Wl,--wrap=log_printf -u ld_include_hli_vectors_bt -u _Z5setupv -u _Z4loopv -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u include_esp_phy_override -u ld_include_highint_hdl -u start_app -u start_app_other_cores -u __ubsan_include -Wl,--wrap=longjmp -u __assert_func -u vfs_include_syscalls_impl -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u __cxa_guard_dummy -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 -Wl,--start-group "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\sketch\\ModBusTCPIPeModbus.ino.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFi.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiAP.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiClient.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiGeneric.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiMulti.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiSTA.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiScan.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiServer.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501\\libraries\\WiFi\\WiFiUdp.cpp.o" "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_cache_911938\\core\\core_c60fc52089e0c197d5cb6b72da046ef5.a" -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lasio -lbt -lcbor -lunity -lcmock -lcoap -lnghttp -lesp-tls -lesp_adc_cal -lesp_hid -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lesp_https_server -lesp_lcd -lprotobuf-c -lprotocomm -lmdns -lesp_local_ctrl -lsdmmc -lesp_serial_slave_link -lesp_websocket_client -lexpat -lwear_levelling -lfatfs -lfreemodbus -ljsmn -ljson -llibsodium -lmqtt -lopenssl -lperfmon -lspiffs -lulp -lwifi_provisioning -lrmaker_common -lesp_diagnostics -lrtc_store -lesp_insights -ljson_parser -ljson_generator -lesp_schedule -lespressif__esp_secure_cert_mgr -lesp_rainmaker -lgpio_button -lqrcode -lws2812_led -lesp32-camera -lesp_littlefs -lespressif__esp-dsp -lfb_gfx -lasio -lcmock -lunity -lcoap -lesp_lcd -lesp_websocket_client -lexpat -lfreemodbus -ljsmn -llibsodium -lperfmon -lesp_adc_cal -lesp_hid -lfatfs -lwear_levelling -lopenssl -lspiffs -lesp_insights -lcbor -lesp_diagnostics -lrtc_store -lesp_rainmaker -lesp_local_ctrl -lesp_https_server -lwifi_provisioning -lprotocomm -lbt -lbtdm_app -lprotobuf-c -lmdns -ljson -ljson_parser -ljson_generator -lesp_schedule -lespressif__esp_secure_cert_mgr -lqrcode -lrmaker_common -lmqtt -lcat_face_detect -lhuman_face_detect -lcolor_detect -lmfn -ldl -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls_2 -lmbedcrypto -lmbedx509 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lsmartconfig -lwapi -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls_2 -lmbedcrypto -lmbedx509 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lsmartconfig -lwapi -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls_2 -lmbedcrypto -lmbedx509 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lsmartconfig -lwapi -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls_2 -lmbedcrypto -lmbedx509 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lsmartconfig -lwapi -lesp_ringbuf -lefuse -lesp_ipc -ldriver -lesp_pm -lmbedtls -lapp_update -lbootloader_support -lspi_flash -lnvs_flash -lpthread -lesp_gdbstub -lespcoredump -lesp_phy -lesp_system -lesp_rom -lhal -lvfs -lesp_eth -ltcpip_adapter -lesp_netif -lesp_event -lwpa_supplicant -lesp_wifi -lconsole -llwip -llog -lheap -lsoc -lesp_hw_support -lxtensa -lesp_common -lesp_timer -lfreertos -lnewlib -lcxx -lapp_trace -lnghttp -lesp-tls -ltcp_transport -lesp_http_client -lesp_http_server -lesp_https_ota -lsdmmc -lesp_serial_slave_link -lulp -lmbedtls_2 -lmbedcrypto -lmbedx509 -lcoexist -lcore -lespnow -lmesh -lnet80211 -lpp -lsmartconfig -lwapi -lphy -lrtc -lesp_phy -lphy -lrtc -lesp_phy -lphy -lrtc -lxt_hal -lm -lnewlib -lstdc++ -lpthread -lgcc -lcxx -lapp_trace -lgcov -lapp_trace -lgcov -lc -Wl,--end-group -Wl,-EL -o "C:\\Users\\Admin\\AppData\\Local\\Temp\\arduino_build_567501/ModBusTCPIPeModbus.ino.elf"
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z10handleData13ModbusMessagej+0x10): undefined reference to `ModbusMessage::getServerID() const'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z10handleData13ModbusMessagej+0x14): undefined reference to `ModbusMessage::getFunctionCode() const'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z10handleData13ModbusMessagej+0x18): undefined reference to `ModbusMessage::size()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFv13ModbusMessagejEPS1_E9_M_invokeERKSt9_Any_dataOS0_Oj[_ZNSt17_Function_handlerIFv13ModbusMessagejEPS1_E9_M_invokeERKSt9_Any_dataOS0_Oj]+0x0): undefined reference to `ModbusMessage::ModbusMessage(ModbusMessage&&)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._ZNSt17_Function_handlerIFv13ModbusMessagejEPS1_E9_M_invokeERKSt9_Any_dataOS0_Oj[_ZNSt17_Function_handlerIFv13ModbusMessagejEPS1_E9_M_invokeERKSt9_Any_dataOS0_Oj]+0x4): undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_theClient+0x8): undefined reference to `ModbusClientTCP::ModbusClientTCP(Client&, unsigned short)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal.exit._GLOBAL__sub_D_theClient+0x0): undefined reference to `ModbusClientTCP::~ModbusClientTCP()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x44): undefined reference to `ModbusClient::onDataHandler(std::function<void (ModbusMessage, unsigned int)>)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x4c): undefined reference to `ModbusClient::onErrorHandler(std::function<void (Modbus::Error, unsigned int)>)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x50): undefined reference to `ModbusClientTCP::setTimeout(unsigned int, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x54): undefined reference to `ModbusClientTCP::begin(int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x58): undefined reference to `ModbusClientTCP::setTarget(IPAddress, unsigned short, unsigned int, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x5c): undefined reference to `ModbusMessage::ModbusMessage(unsigned short)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x60): undefined reference to `ModbusMessage::setMessage(unsigned char, unsigned char, unsigned short, unsigned short)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x64): undefined reference to `ModbusMessage::ModbusMessage(ModbusMessage const&)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o:(.literal._Z5setupv+0x68): undefined reference to `ModbusClientTCP::addRequestM(ModbusMessage, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `handleData(ModbusMessage, unsigned int)':
D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:34: undefined reference to `ModbusMessage::getServerID() const'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:34: undefined reference to `ModbusMessage::getFunctionCode() const'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:34: undefined reference to `ModbusMessage::size()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `std::_Function_handler<void (ModbusMessage, unsigned int), void (*)(ModbusMessage, unsigned int)>::_M_invoke(std::_Any_data const&, ModbusMessage&&, unsigned int&&)':
c:\users\admin\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-2021r2-patch5-8.4.0\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297: undefined reference to `ModbusMessage::ModbusMessage(ModbusMessage&&)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: c:\users\admin\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-2021r2-patch5-8.4.0\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297: undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: c:\users\admin\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-2021r2-patch5-8.4.0\xtensa-esp32-elf\include\c++\8.4.0\bits/std_function.h:297: undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `_GLOBAL__sub_I_theClient':
D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:28: undefined reference to `ModbusClientTCP::ModbusClientTCP(Client&, unsigned short)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `_GLOBAL__sub_D_theClient':
D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:28: undefined reference to `ModbusClientTCP::~ModbusClientTCP()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `setup()':
D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:69: undefined reference to `ModbusClient::onDataHandler(std::function<void (ModbusMessage, unsigned int)>)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:71: undefined reference to `ModbusClient::onErrorHandler(std::function<void (Modbus::Error, unsigned int)>)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:73: undefined reference to `ModbusClientTCP::setTimeout(unsigned int, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:75: undefined reference to `ModbusClientTCP::begin(int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino:80: undefined reference to `ModbusClientTCP::setTarget(IPAddress, unsigned short, unsigned int, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch\ModBusTCPIPeModbus.ino.cpp.o: in function `Modbus::Error ModbusClient::addRequest<int, Modbus::FunctionCode, int, int>(unsigned int, int&&, Modbus::FunctionCode&&, int&&, int&&)':
Mehrere Bibliotheken wurden für "WiFi.h" gefunden
 Benutzt: C:\Users\Admin\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\WiFi
C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:75: undefined reference to `ModbusMessage::ModbusMessage(unsigned short)'
 Nicht benutzt: D:\0 Arduino-1.8.13\libraries\WiFi
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:76: undefined reference to `ModbusMessage::setMessage(unsigned char, unsigned char, unsigned short, unsigned short)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:80: undefined reference to `ModbusMessage::ModbusMessage(ModbusMessage const&)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:80: undefined reference to `ModbusClientTCP::addRequestM(ModbusMessage, unsigned int)'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:80: undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:75: undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:80: undefined reference to `ModbusMessage::~ModbusMessage()'
c:/users/admin/appdata/local/arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\Admin\AppData\Local\Temp\arduino_build_567501\sketch/ModbusClient.h:75: undefined reference to `ModbusMessage::~ModbusMessage()'
collect2.exe: error: ld returned 1 exit status
Bibliothek WiFi in Version 2.0.0 im Ordner: C:\Users\Admin\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.11\libraries\WiFi  wird verwendet
exit status 1
Fehler beim Kompilieren für das Board ESP32 Dev Module.

Du hast da etwas mit einem komischen Verzeichnis drin:

D:\1 ESP32\ModBusTCPIPeModbus/ModBusTCPIPeModbus.ino

Mit Blanks in Verzeichnisnamen hat die IDE manchmal Probleme.

Gruß Tommy

Das sieht so aus, als hättest Du die Library nicht mit dem Manager installiert. Da gibt es einen Menüpunkt für: