Pagina 1 di 1

PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 9:49
da Makerone
Comportamento assai strano nell’Upload

Buonasera a tutti chiedo aiuto per comprendere il comportamento della scheda Arduino posta allinterno del PLC Siemens IOT2020 settato già da qualche anno con SD , Ethernet, USB , tutto settato a dovere.

Vado per punti

1- ho riesumato il mio PLC Siemens IOT 2000, con piattaforma Galileo 2 e architettura AVR su cui avevo caricato alcuni programmi tra cui relè, Lcd ed altri, insomma una scheda rediviva che ha sempre funzionato e fino a qualche giorno fa dopo averci lavorato parecchio tutto diventa INCOMPRENSIBILE.

2- Decido di caricare Blink per test, e tutto fila liscio, anche il led USER posto sula scocca esterna lampeggia, per segnalarmi che la connessione seriale è attiva.

3- Decido di caricare un algoritmo un po’ più complesso, di cui sotto allego

4- Carico ma tutto sembra morto, anche il lampeggio USER morto

5- Carico nuovamente Blink per ritestarlo.

6- Qualche secondo e la digitazione sul diplay compare PERFETTA, e anche blink continua a far lampeggiare il led USER

7- Spengo la scheda con un LCD caricato con la scritta PLC IN FUNZIONE, decido di caricare un programmino con due relè dell’upload mi si blocca TUTTO, o meglio, nel’IDE di Arduino, nella parte relativa alla compilazione, per intenderci dove scorrono i caratteri in rosso, scorrono una valanga di numeri e codici ed alla fine “Transfert complete”. ATTENZIONE! Non “Done” e NESSUN ERRORE . Ma la scheda è morta.

8- Eseguo tutte le routine immaginabili, del genere 1 Con tutte le utenze attive premere RESET per 10 secondi (Senza IDE). 2 Con tutte le utenze attive premere USER per 10 secondi (Con IDE) . A questo punto cambio slot della la COM, che veniva indicata come “Nativa”, rilancio l’upload e di nuovo “Transfert complete”. Ma neanche un Blink si carica.

Grazie a chi gentilmente mi aiuterà ! O_/

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 11:47
da alev
Makerone ha scritto:3- Decido di caricare un algoritmo un po’ più complesso, di cui sotto allego


Manca l'allegato, suggerisco di usare i tag "CODE" che vedi sopra il box di scrittura

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 12:09
da EstellePV
Potrebbe essere che durante il test ad alta corrente si sia rovinato il **bootloader** o la parte di alimentazione dell’Arduino, quindi il programma si carica ma non parte più come dovrebbe.

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 17:15
da Makerone
Codice: Seleziona tutto
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
/**************************************/

void setup() // funzione di configurazione dei Input/Output
{ // inizializza il pin 7 e 6 come output, perche' sono collegati ai LED
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  lcd.init();                      // initialize the lcd

  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("PLC IN FUNZIONE");
}
void loop() // programma principale (main) --> ciclo infinito (loop)
{
  digitalWrite(7, HIGH); // accendi il LED1 forzando un livello ALTO sul pin 7
  digitalWrite(6, LOW);  // spegni il LED2 forzando un livello BASSO sul pin 6
  delay(2500);            // aspetta 0,25 secondi
  digitalWrite(7, LOW);  // spegni il LED1 forzando un livello BASSO sul pin 7
  digitalWrite(6, HIGH); // accendi il LED2 forzando un livello ALTO sul pin 6
  delay(2500);            // aspetta 0,25 secondi
}

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 17:39
da Makerone
Questo lo carica perfettamente.
Codice: Seleziona tutto
void setup() {
  // Inizializza la comunicazione seriale a 9600 baud.
  // Questo valore deve corrispondere a quello impostato nel Monitor Seriale.
  Serial.begin(9600);
  // Invia un messaggio per confermare l'avvio dello sketch.
  Serial.println("Sketch avviato. Invia dei dati per testare la comunicazione.");
}

void loop() {
  // Verifica se ci sono dati in arrivo sulla porta seriale.
  if (Serial.available() > 0) {
    // Legge il byte in arrivo.
    char dataRicevuto = Serial.read();
    // Invia di nuovo il dato ricevuto sul Monitor Seriale per confermare.
    Serial.print("Dato ricevuto: ");
    Serial.print(dataRicevuto);
    Serial.println(); // Va a capo
  }
}

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 19 set 2025, 18:10
da Makerone
Link rimosso, le immagini vanno caricate direttamente sul forum

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 20 set 2025, 9:37
da alev
L'immagine non è visibile, inoltre è buona regola caricare le foto sul forum

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 20 set 2025, 15:08
da claudiocedrone
Non è solo "buona regola", è l'unico modo ammesso dalle regole del forum.
Per come fare puoi vedere anche qui.

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 20 set 2025, 15:11
da alev
E' una regola del forum ed è una regola buona....va bene così? :mrgreen:

Re: PLC Arduino carica ma non attiva

MessaggioInviato: 20 set 2025, 21:13
da Makerone
Grazie per avermi risposto, ora il PLC funziona si e no. mi spego. Se collego il display LCD a scl-sda ovvero tx e rx si blocca tutto, scollegato ricomincia a caricare, con un tempo di latenza di 30 secondi. Dall'Uplload passano circa 30 secondi prima che le utenze si avviino. comunque qwuesto mistero rimane..

Codice: Seleziona tutto
int IN1 = 2;
int IN2 = 3;

#define ON   0
#define OFF  1

// LED semplice
const int ledPin = 13;
unsigned long previousLedMillis = 0;
const unsigned long ledInterval = 1000; // 1 secondo
bool ledState = false;

// RELAY
unsigned long previousRelayMillis = 0;
const unsigned long relayInterval = 3000; // 3 secondi
bool relayToggle = false;

// LED RGB (anodo comune)
const int redPin   = 4;
const int greenPin = 5;
const int bluePin  = 6;

unsigned long previousRgbMillis = 0;
const unsigned long rgbInterval = 500; // 0.5 secondi
int rgbStep = 0;

void setup() {
  // LED singolo
  pinMode(ledPin, OUTPUT);

  // Relè
  relay_init();

  // LED RGB
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  rgb_off(); // parte spento
}

void loop() {
  unsigned long currentMillis = millis();

  // --- Gestione LED singolo ---
  if (currentMillis - previousLedMillis >= ledInterval) {
    previousLedMillis = currentMillis;
    ledState = !ledState; // inverti stato
    digitalWrite(ledPin, ledState ? HIGH : LOW);
  }

  // --- Gestione Relè ---
  if (currentMillis - previousRelayMillis >= relayInterval) {
    previousRelayMillis = currentMillis;
    relayToggle = !relayToggle;

    if (relayToggle) {
      relay_SetStatus(ON, OFF); // attiva RELAY_1
    } else {
      relay_SetStatus(OFF, ON); // attiva RELAY_2
    }
  }

  // --- Gestione LED RGB ---
  if (currentMillis - previousRgbMillis >= rgbInterval) {
    previousRgbMillis = currentMillis;

    rgbStep = (rgbStep + 1) % 6; // 6 colori in sequenza

    switch (rgbStep) {
      case 0: rgb_setColor(true, false, false); break; // Rosso
      case 1: rgb_setColor(false, true, false); break; // Verde
      case 2: rgb_setColor(false, false, true); break; // Blu
      case 3: rgb_setColor(true, true, false); break;  // Giallo (R+G)
      case 4: rgb_setColor(true, false, true); break;  // Magenta (R+B)
      case 5: rgb_setColor(false, true, true); break;  // Ciano (G+B)
    }
  }
}

// ---------------- Funzioni relè ----------------
void relay_init(void) {
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  relay_SetStatus(OFF, OFF); // spegne tutti i relè
}

void relay_SetStatus(unsigned char status_1, unsigned char status_2) {
  digitalWrite(IN1, status_1);
  digitalWrite(IN2, status_2);
}

// ---------------- Funzioni LED RGB ----------------
void rgb_off() {
  digitalWrite(redPin, HIGH);
  digitalWrite(greenPin, HIGH);
  digitalWrite(bluePin, HIGH);
}

// accende i colori scelti (true=acceso, false=spento)
void rgb_setColor(bool r, bool g, bool b) {
  digitalWrite(redPin,   r ? LOW : HIGH);
  digitalWrite(greenPin, g ? LOW : HIGH);
  digitalWrite(bluePin,  b ? LOW : HIGH);
}