Problemi con libreria Modbus TCP

Salve a tutti,

questo è il mio primo post, dopo la presentazione.
Ho cercato nella discusisoni già presenti nel forum ma non ho trovato risposta al mio quesito.
Spero quindi che qualcuno più esperto mi possa aiutare...

Sto facendo un progettino didattico a casa nel quale è previsto lo scambio dati tra un PLC Siemens (Master) e un Arduino Uno R4 Minima + Ethernet Shield W5100 (Slave).

Il protocollo che dovrei implementare è il Modbus TCP/IP.

Sto studiando la libreria ModbusEthernet.h partendo dagli esempi al link modbus-ethernet/examples/Lamp/Lamp.ino at master · epsilonrt/modbus-ethernet · GitHub partendo dal più semplice. Ne riporto qui il codice per completezza:

/**
  @file Lamp.ino
  Modbus-Arduino Example - Lamp (Modbus TCP using Ethernet shield)
  Copyright by André Sarmento Barbosa
  https://github.com/epsilonrt/modbus-ethernet
*/
 
#include <ModbusEthernet.h>

//Modbus Registers Offsets (0-9999)
const int LAMP1_COIL = 100; 
//Used Pins
const int ledPin = 9;

//ModbusEthernet object
ModbusEthernet mb;

void setup() {
    // The media access control (ethernet hardware) address for the shield
    byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
    // The IP address for the shield
    byte ip[] = { 192, 168, 1, 120 };   
    // Config Modbus TCP 
    mb.config(mac, ip);
    //Set ledPin mode
    pinMode(ledPin, OUTPUT);
    // Add LAMP1_COIL register - Use addCoil() for digital outputs
    mb.addCoil(LAMP1_COIL);
}

void loop() {
   //Call once inside loop() - all magic here
   mb.task();
   
   //Attach ledPin to LAMP1_COIL register     
   digitalWrite(ledPin, mb.Coil(LAMP1_COIL));
}

Devo supporre che gli sketch siano funzionanti, così come scaricati dal sito, il mio IDE non li compila e mi da il seguente errore:

Preciso, non so se è importante, che la compilazione la faccio senza collegare l'Arduino al pc. Non so se può essere questo il problema.

Non riesco a capire cosa succede. Problema di Hardware? problema di libreria non adatta?
Qualcuno mi può dare qualche dritta?

Grazie
Pas

Hai installato anche le dipendenze della libreria?
Questa in particolare:

Ho installato tutte le librerie del link che ho allegato. Ovvero le seguenti:

ho quest'errore qui:

con riferimento alla riga "Multiple libraries were found for "Modbus.h" ho notato che la libreria che mi hai segnalato ha il file ".h" nominato "Modbus.h" esattamente come quello della libreria Modbus.h. Forse per questo mi da errore?
in tal caso c'è un problema simile anche con "Ethernet.h"

Questo è quello che succede quando si danni nomi troppo generici alle proprie librerie...
Probabilmente hai altre librerie che usano gli stessi nomi ed il compilatore non sa quale includere.

Nel dubbio rimuovi tutte le varie librerie che hai installato fino ad ora e che hanno a che fare con il modbus.

Premesso che ho provato a compilare con successo l'esempio che hai linkato, per il tuo progetto hai bisogno esclusivamente di queste 2 librerie:

Infine un dubbio... sei sicuro che la Ethernet Shield W5100 funziona senza problemi anche con la Uno R4?

In effetti era proprio lì il problema: librerie diverse con lo stesso nome. Succedeva che al terzo tentativo di compilazione me lo dava ok. Durante i primi due invece segnalava errore. Ho fatto come mi hai consigliato e ora fila tutto liscio.
Per la compatibilità della ethrent shield non ho ancora testato: mi risulta che lo sia. Spero di non sbagliare.

Ti ringrazio per l'aiuto!

Mi pare di averla provata sulla MINIMA con esito positivo ...
... c'ho fatto girare Webbino di Sukkopera :grin:

Guglielmo

Bene, questo mi rincuora...io ancora non ho testato...

Rieccomi...ho provato a caricare lo sketch su Arduino e mi dà quest'errore:

Non riesco a capire cosa sia, dato che non mi intendo affatto di DFU, non so cosa sia. In rete leggo che ha a che fare con l'aggiornamento del firmware...

La MINIMA, contrariamente ai vecchi Arduino, per caricare il codice (che sui microcontrollori si chiama firmware) NON utilizza la seriale, ma usa la modalità DFU (Direct Firmware Update) ... che il tuo Win potrebbe non gestire (per mancanza di qualche driver) o ci potrebbe essere qualche altro problema.

Intanto, che versione di Win stai utilizzando?

Poi, prima di avviare il caricamento, premi, abbastanza velocemente, DUE volte il pulsante di "RESET" della minima ... questo forza la modalità DFU e vedi se così carica.

Guglielmo

1 Like

Ciao , prova ad usare anche un cavo usb-c corto e senza prolunghe, avevo lo stesso problema. Come prima cosa proverei a ricaricare l`esempio blink in modo di essere sicuri che tutto funzioni. Se proprio non risolvi prova a togliere anche tutte le periferiche collegate alla scheda.

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