Vai al contenuto
PLC Forum


S7-1200 + Arduino Con Settimino


Messaggi consigliati

Inserito:

buongiorno,

è la prima volta che scrivo nel forum. Fino a oggi sono riuscito a cavarmela coi miei esperiemti e per questo ringrazio il forum...

Purtroppo non riesco a completare l'ultimo progettino che avevo in mente.... non riesco a far leggere/scrivere arduino nel DB del s7-1200...

Ho letto la guida di dan64100 su settimino ed utilizzato i sui esempi.... (ottimi esempi professionali e precisi).

Mi spiego nel dettagli:

Utilizzo un Arduino Ethernet e una CPU S7-1214 AC/DC/Rly FW3.0 .

Arduino effettua correttamente la connessione e sembra che non mi "trovi" il mio DB1 con questo errore.

fde7e6cdbfda60e5c5c0a186cc9e67a7.PNG

la variabile che voglio leggere/scrivere è di tipo Int. e nel programma della CPU ho compilato il comando T_send C con l'erroe che ne si vede dalla foto

1e32b8e8b695241d3b1d2bee94ceb598.PNG

Sono a richiedere aiuto ed se ne qualcuno ne è a conoscenza di qualche guida sullìindirizzamento assoluto e/o consigli per completare il progettino.

Ringrazio in aticipo

Roberto


Inserita:

ma il DB1 l'hai compilato e caricato nel plc?

Perche qua sembra un errore di TIa porta step 7 piu che arduino

Inserita:

Il DB1 me lo da compilato correttamente. L'errore di TIA è sul comando DATA di TSEND_C non sulla compilazione del DB , forse è dovuto dal fatto che la variabile sia di tipo INT ma non credo...

Inserita:

se clicchi sul blocco tSend e premi F1 ti si apre la guida cosi puoi guardare che parametri vuole , come li vuole ect

Giuseppe Signorella
Inserita: (modificato)

Ho utilizzato una sola volta la libreria settimino per un test, ma se ricordo bene, in primi s il blocco non deve essere ottimizzato, quindi togli la spunta qual'ora fosse presente sulla voce "ottimizzato" nelle proprietà del blocco stesso.

Poi non comprendo del perché hai utilizzato il blocco T_SEND.

La libreria settimino legge e scrive le aree di memoria del PLC (blocchi compresi) direttamente, quindi senza l'ausilio di alcun blocco per l'invio e la ricezione dei dati sull' Ethernet, in quanto utilizza il protocollo nativo del PLC (Profilnet)

Modificato: da Giuseppe Signorella
Inserita:

Risolto la lettura.....evviva

maledetta ottimizzazione dei DB che non mi permetteva l'indirizzazione assoluta delle variabili

domani mi inoltro nella scrittura.. ... qualcuno ci ha già provato??

grazie del supporto

Giuseppe Signorella
Inserita:

:thumb_yello: Prego,

Perchè non posti qui il codice di esempio con una piccola descrizione?

Sono sicuro che potrà essere di aiuto anche ad altri utenti.

Ciao

Inserita:

Legge e scrive benissimo ...

E pensa che ha solo un anno e mezzo :superlol:

Inserita:

La libreria settimino diventa più grandicella.... speriamo non smetta di crescere.......... ;)

ora devo convertire una variabie int in una void cosi da poter scrivere tramite arduino e le librerie di settimino , facendo lavorare arduino come una sorta di I/O remoto....... :wacko: :wacko: :wacko:

Inserita:

Risolto .... A presto pesento piccolo esempio di scrittura............ :smile:

  • 3 weeks later...
Inserita:

Ciao.. un pò in ritardo ma qui sotto il post col codice implementato alla libreria settimino di dan64100

hardware:

  • Arrduini Ethernet
  • S7-1200 CPU 1214 FW 3.0
  • router
  • PC

Per quanto riguarda Arduino,il codice va ad implemento del file esempio ReadDemo della libreria settimino, non ho fanno nient'altro che seguire la guida ed invertire i 2 byte della variabile per trasmetterla correttamente al PLC.

Invece per il PLC creato una Variabile e un DB DB1.DW0 tipo int.

//----------------------------------------------------------------------
// Programm_for as to variable Int
//---------------------------------------------------------------------- 
   
  
   bearing = 1234;   //// cost. 
   
  Serial.println(bearing);
   delay(1000);   
   
//----------------------------------------------------------------------
// Start connessione DB
//----------------------------------------------------------------------  
   
#ifdef DO_IT_SMALL
  Size=2;
  Target = NULL; // Uses the internal Buffer (PDU.DATA[])
#else
  Size=1024;
  Target = &Buffer; // Uses a larger buffer
#endif
  
  // Connection
  while (!Client.Connected)
  {
    if (!Connect())
      delay(500);
  }
  
//----------------------------------------------------------------------
// modifica void...
//----------------------------------------------------------------------
  
int VAR1 = bearing;

      byte* bytes = (byte*)&VAR1;
  
//----------------------------------------------------------------------
// Reverse word/int
//----------------------------------------------------------------------
void Reverse2(void *bytes);
{
  byte *pb;
  byte tmp;
  pb=(byte*)(bytes);
  // Swap byte 2 with byte 1
  tmp=*(pb+1);
  *(pb+1)=*pb;
  *pb=tmp;
 }
 
 
//----------------------------------------------------------------------
// Serial check
//----------------------------------------------------------------------
 
  Serial.print("Write ");Serial.print(Size);Serial.println(" bytes from DB1.DBW0"); 
  // Put the current tick
  MarkTime();
  Result=Client.WriteArea(S7AreaDB, // We are requesting DB access
                         1,        // DB Number = 1
                         0,        // Start from byte N.0
                         Size,     // We need "Size" bytes
                         bytes);  // Put them into our target (Buffer or PDU)
  if (Result==0)
  {
    ShowTime();
    Dump(Target, Size);
    
    
  }
  else
    CheckError(Result);
    
  delay(500);  
}

Semplice e funzionale.... ... attendo critiche da i programmatori più esperti... :P :P e ringrazio di nuovo.

  • 5 months later...
Inserita:

Bongiorno BARAZ ,

Per favore, lei puo mandarmi i 2 file arduino e S7-1200 , cosi posso capire bene.  Per la Mia tese .Grazie 

Inserita:

Ciao Hicham Haraki,

se scrivi sul buon google "settimino s7-1200" la prima voce è il sito internet con tutte le spiegazioni, anche perchè non credo di essere in grado di dare una mano per una tesi:toobad:.

Posso dirti crea su TIA un DB1 non ottimizzato ,nel DB1 crea una variabile tipo "Int" .

Prendi il file dal pacchetto demo che puoi scaricare sul sito che ti ho detto prima,leggi le note sul file "ReadDemo.ino" ti dirà di cambiare l'indirizzamento del rack e delle slot del PLC,dopo di che indirizzi il "Client.ReadArea(S7AreaDB..  " sul DB1 poi sulla variabile 1.

Dall guida in pdf trovi la spiegazione passo passo per creare :

  Result=Client.WriteArea(S7AreaDB, // We are requesting DB access
                         1,        // DB Number = 1
                         0,        // Start from byte N.0
                         Size,     // We need "Size" bytes
                         bytes);  // Put them into our target (Buffer or PDU)

 

Non ho fatto nient'altro, che leggere la spiegazione... a disposizione.;)

baraz

  • 1 month later...
Inserita:

ciao,

per caso qualcuno di voi ha provato le librerie settimino su un s7-1200 fw 4.01?? riscontro dei problemi con PDU errore 0x100...::'??? vi terrò aggiornati

 

Grazie

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...