Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PLC Arduino carica ma non attiva

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] PLC Arduino carica ma non attiva

Messaggioda Foto UtenteMakerone » 19 set 2025, 9:49

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_/
Avatar utente
Foto UtenteMakerone
0 2
 
Messaggi: 5
Iscritto il: 19 set 2025, 9:03

0
voti

[2] Re: PLC Arduino carica ma non attiva

Messaggioda Foto Utentealev » 19 set 2025, 11:47

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
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

0
voti

[3] Re: PLC Arduino carica ma non attiva

Messaggioda Foto UtenteEstellePV » 19 set 2025, 12:09

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.
Avatar utente
Foto UtenteEstellePV
50 2
 
Messaggi: 29
Iscritto il: 25 apr 2025, 3:58

0
voti

[4] Re: PLC Arduino carica ma non attiva

Messaggioda Foto UtenteMakerone » 19 set 2025, 17:15

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
}
Avatar utente
Foto UtenteMakerone
0 2
 
Messaggi: 5
Iscritto il: 19 set 2025, 9:03

0
voti

[5] Re: PLC Arduino carica ma non attiva

Messaggioda Foto UtenteMakerone » 19 set 2025, 17:39

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
  }
}
Avatar utente
Foto UtenteMakerone
0 2
 
Messaggi: 5
Iscritto il: 19 set 2025, 9:03

0
voti

[6] Re: PLC Arduino carica ma non attiva

Messaggioda Foto UtenteMakerone » 19 set 2025, 18:10

Link rimosso, le immagini vanno caricate direttamente sul forum
Avatar utente
Foto UtenteMakerone
0 2
 
Messaggi: 5
Iscritto il: 19 set 2025, 9:03

0
voti

[7] Re: PLC Arduino carica ma non attiva

Messaggioda Foto Utentealev » 20 set 2025, 9:37

L'immagine non è visibile, inoltre è buona regola caricare le foto sul forum
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

0
voti

[8] Re: PLC Arduino carica ma non attiva

Messaggioda Foto Utenteclaudiocedrone » 20 set 2025, 15:08

Non è solo "buona regola", è l'unico modo ammesso dalle regole del forum.
Per come fare puoi vedere anche qui.
"Non farei mai parte di un club che accettasse la mia iscrizione" (G. Marx)
Avatar utente
Foto Utenteclaudiocedrone
21,3k 4 7 9
Master EY
Master EY
 
Messaggi: 15306
Iscritto il: 18 gen 2012, 13:36

1
voti

[9] Re: PLC Arduino carica ma non attiva

Messaggioda Foto Utentealev » 20 set 2025, 15:11

E' una regola del forum ed è una regola buona....va bene così? :mrgreen:
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

0
voti

[10] Re: PLC Arduino carica ma non attiva

Messaggioda Foto UtenteMakerone » 20 set 2025, 21:13

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);
}
Avatar utente
Foto UtenteMakerone
0 2
 
Messaggi: 5
Iscritto il: 19 set 2025, 9:03


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti