×
Siemens Industry Online Support
Siemens AG
Tipo di articolo: Esempio di applicazione ID articolo: 8707570, Data articolo: 08/08/2004
(4)
Valuta

Functions & Samples - Trasferimento di dati (con FC5 "AG_SEND" e FC6 "AG_RECV") con lunghezza di telegramma variabile tramite il protocollo TCP

  • Articolo
  • Riguarda prodotto/i


DOMANDA

Come si possono trasferire dati con lunghezza di telegramma variabile tramite il protocollo TCP con le funzioni di comunicazione (FC5 "AG_SEND" e FC6 "AG_RECV")?

RISPOSTA

Comportamento del protocollo TCP
Se i dati vengono trasmessi con l'impiego del protocollo TCP, allora il trasferimento è orientato al flusso di dati. Non vengono trasmesse informazioni né sulla lunghezza né sulla fine e l'inizio di una informazione. Nella trasmissione questo non pone problemi, poiché il mittente sa esattamente quanti byte di dati vuole trasmettere. Il ricevente però non può riconoscere nel flusso dati dove una informazione termina e dove inizia la successiva. Di conseguenza con un puro TCP ci sono solo due possibilità di accoppiamento.

  1. Si lavora con una lunghezza di telegramma fissa, cioè sia il mittente che il ricevente lavorano con una lunghezza dati predefinita. In questo modo il limite dell'informazione è sempre univoco.
  2. Si lavora con una lunghezza di telegramma variabile. Questo richiede, lato ricevente e lato mittente, un maggior impegno, poiché nel primo byte devono essere registrato lo start-delimiter e la lunghezza dei dati trasmessi. In questo modo l'informazione trasmessa può essere esattamente interpretata dal ricevente.

Il seguente esempio di programma contiene una connessione TCP, tramite la quale con FC 5 possono essere inviati dati di lunghezza variabile verso una stazione e è possibile ricevere dati con FC 6.

Esempio di programma: trasferimento di dati (con FC 5 "AG_SEND" e FC6 "AG_RECV") con lunghezza di telegramma variabile tramite il protocollo TCP

Descrizione generale
Il progetto STEP7 contiene due stazioni S7-300 con CPU 315-2DP e CP 343-1 per la comunicazione tramite Industrial Ethernet. Come base per la comunicazione è stata predisposta una connessione TCP tra le due stazioni. Se tramite "tasto destro del mouse > Proprietà oggetto" si aprono le proprietà della connessione TCP, si può vedere il parametro di blocco "ID" dei blocchi funzionali di comunicazione. Questa indicazione deve essere rispettata nel richiamo di FC5 opp. FC6, affinché possa aver luogo lo scambio dati i tramite la connessione TCP

Figura 1 Proprietà della connessione TCP

Affinché il trasferimento dati funzioni tramite il protocollo TCP, i dati da trasmettere devono avere una determinata struttura dati. Una informazione deve contenere start-delimiter (affinché il ricevente possa riconoscere l'inizio dell'informazione), l'indicazione della lunghezza dei dati (per la definizione del buffer di ricezione) ed i dati stessi. In questo esempio sono stati definiti i 4 byte start-delimiter (occupati con i valori: 0x11, 0x12, 0x13, 0x14) e una stringa S7 per una informazione. Una stringa S7 è costituita da una indicazione di lunghezza di 2 byte e dalla stringa di dati effettiva. Con la stringa S7 si possono trasferire tutti i caratteri ASCII.

Figura 2 Struttura di una informazione

Avvertenza
Il programma di esempio si basa sulla struttura del informazioni mostrata nella Figura 2. È però possibile definire in proprio la struttura dell'informazione. Se si vuole utilizzare un'altra struttura dell'informazione (p. es. solo 3 byte di start-delimiter), è possibile adattare il programma di esempio qui fornito secondo le proprie esigenze.

I dati che si vogliono trasmettere con FC5 (AG_SEND), devono perciò essere predisposti in un blocco dati (DB220) secondo la struttura assegnata. La ricezione dei dati con FC6 (AG_RECV) avviene in diversi passi.

  1. Ricezione di start-delimiter (a byte) e identificazione dell'informazione
  2. Ricezione dell'informazione di lunghezza della stringa S7
  3. Ricezione dei dati

Descrizione del programma STEP7

Il programma STEP7 è costituito dai blocchi OB100, OB1, FB100, DB100 (DB di istanza di FB100), FB101 (multistanza in DB100), DB220, DB221, FC5, FC6

  • OB100
    Lo OB100 è un OB di avviamento e viene eseguito in occasione di un nuovo avviamento (avviamento a caldo) della CPU. In questo OB con M1.0 e M0.1 viene comunicata la abilitazione per il primo avvio della comunicazione.

Figura 3 OB100

  • OB1
    Lo OB1 viene richiamato ciclicamente. In questo OB si trova il richiamo dello FB100 (DB di istanza: DB100) con M1.0 e M0.1. Dopo che FB 100 è stato eseguito, M1.0 viene resettato.

Figura 4 OB1

  • FB100
    FB100 viene richiamato nel ciclo OB 1. In questo OB si trova il richiamo di FC5 "AG_SEND" e di FB101 "AG_RECV_VARIABLE".

    Il blocco di trasmissione FC5 "AG_SEND"
    FC5 viene attivato tramite il parametro di ingresso "ACT", quando il merker di clock M10.7 ha un fronte positivo e "SND_BUSY" non è impostato. Se il job è ancora in esecuzione, allora "SND_BUSY" è impostato e non è possibile alcun nuovo avvio della funzione.
    Questo interblocco della funzione è particolarmente importante perché la funzione è asincrona e può durare più i cicli. Una attivazione continua della funzione senza attendere la conclusione può creare un sovraccarico della comunicazione.
    I parametri di ingresso "ID" e "LADDR" devono essere trasferiti dal dialogo delle proprietà della connessione TCP in NetPro (Figura 1). Con il parametro "SEND" deve essere indicato l'indirizzo dei dati da trasmettere (P#DB220.DBX0.0 BYTE 48). Con "LEN" viene registrato il numero dei byte da trasmettere (48). I parametri di uscita "DONE", "ERROR" e "STATUS" sono necessari per l'analisi del job e sono validi solo nello stesso ciclo!

Figura 5 FB100 - Richiamo di FC5

Se il blocco è stato eseguito senza errori, "SND_BUSY" viene resettato ed è possibile un nuovo richiamo di FC5. Se il blocco si è concluso con errori, la parola di stato del blocco viene salvata per l'analisi dell'errore e "SND_BUSY" viene resettato.

Figura 6 FB100 - Analisi del richiamo di FC 5

Il blocco di ricezione FB101 "AG_RECV_VARIABLE"

Nel richiamo dello FB101 "AG_RECV_VARIABLE" i parametri "ID" e "LADDR" sono da trasferire dal dialogo delle proprietà della connessione in NetPro (Figura 1). Con "RECV_BUF" deve essere indicata la posizione di memorizzazione dei dati ricevuti (P#DB221.DBX0.0 BYTE50). I parametri di uscita "NDR", "ERROR" e "STATUS" sono necessari per l'analisi del job e sono validi solo nello stesso ciclo!

Figura 7 FB100 - Richiamo FB101

Se il blocco è stato eseguito senza errori, viene salvata la lunghezza dei dati ricevuti. Se il blocco si è concluso con errori, viene salvata la parola di stato del blocco per analisi degli errori.

Figura 8 FB100 - Analisi del richiamo FB101

  • FB101 ("AG_RECV_VARIABLE")

    La macchina di stato

     Il punto di ingresso nel programma in FB101 viene definito tramite la variabile "STATE_CNT". In funzione dello stato dalla variabile "STATE_CNT" si salta nel corrispondente segmento per continuare l'elaborazione.

Elaborazione del programma in funzione di "STATE_CNT"

"STATE_CNT"

Descrizione

0

È stato ricevuto il primo byte start-delimiter.
(Salto da NW9 a NW13)

1

È stato ricevuto il secondo byte start-delimiter.
(Salto da NW10 a NW14)

2

È stato ricevuto il terzo byte start-delimiter.
(Salto da NW11 a NW15)

3

È stato ricevuto il quarto byte start-delimiter.
(Salto da NW12 a NW16)

4

È stato riconosciuto lo start-delimiter. È stata ricevuta l'informazione di lunghezza.
 
(Salto da NW3 a NW17)

5

Creazione del buffer di ricezione e ricezione dei dati.
(Salto da NW4 a NW20)

Ricezione di start-delimiter (a byte) e identificazione dell'informazione
(Segmenti 5 - 16)

Gli start-delimiter (4 byte) vengono ricevuti a byte con FC6 "AG_RECV".

Nel richiamo dello FC6 "AG_RECV" vengono trasferiti i parametri "ID" e "LADDR" dai parametri di ingresso dello FB101. Con "RECV" deve essere indicata la posizione di memorizzazione per il byte ricevuto (SD_Buffer: variabile a byte). I parametri di uscita "NDR", "ERROR" e "STATUS" sono necessari per l'analisi del job e sono validi solo nello stesso ciclo!

Se il blocco è stato eseguito senza errori, il byte ricevuto viene salvato per una ulteriore elaborazione. Se il blocco è stato concluso con errori, la parola di stato del blocco viene salvata per l'analisi degli errori.
Dopo la ricezione di un byte ha luogo la verifica delle informazioni di start definite (Byte0 = 11; Byte1 = 12; Byte2 = 13; Byte3 = 14).

Figura 9 Identificazione di un informazioni tramite gli start-delimiter

Ricezione dell'informazione di lunghezza della stringa S7 (Segmenti 3, 17 - 20)

Se le informazioni ricevute sono state identificate come start-delimiter, come successiva viene ricevuta l'informazione di lunghezza della stringa S7 (2 byte) con lo FC6 "AG_RECV".

Nel richiamo dello FC6 "AG_RECV" vengono trasferiti i parametri "ID" e "LADDR" dai parametri di ingresso dello FB101. Con "RECV" deve essere indicata la posizione di memorizzazione dei due byte di informazione di lunghezza (VAR_LEN: struttura con 2 byte). I parametri di uscita "NDR", "ERROR" e "STATUS" sono necessari per l'analisi del job e sono validi solo nello stesso ciclo!

Se il blocco è stato eseguito senza errori, la lunghezza effettiva dei dati ricevuti viene utilizzata per il buffer di ricezione (pointer ANY). Se il blocco si è concluso con errori, la parola di stato del blocco viene visualizzata su FB101 come parametro di uscita.

Figura 10 Ricezione dell'informazione di lunghezza

L'informazione sulla lunghezza effettiva della stringa (VAR_LEN.ACT_LEN) è necessaria per l'assemblaggio del buffer di ricezione (pointer ANY). Qui il buffer di ricezione indicato (pointer ANY) nel richiamo dello FB101 viene verificato con l'effettiva lunghezza dei dati e memorizzato in un pointer ANY temporaneo (VAR_BUF).

Figura 11 Predisposizione del buffer di ricezione

Ricezione dei dati (Segmenti 4, 21- 23)

Vengono infine ricevuti i dati con FC6.

Nel richiamo dello FC6 "AG_RECV" vengono trasferiti i parametri "ID" e "LADDR" dai parametri di ingresso dello FB101. Con "RECV" deve essere indicata la posizione di memorizzazione per i dati (VAR_BUF: pointer ANY temporaneo). I parametri di uscita "NDR", "ERROR" e "STATUS" sono necessari per l'analisi del job e sono validi solo nello stesso ciclo!

Se il blocco è stato eseguito senza errori, la lunghezza dei dati ricevuti viene memorizzata ed inoltrata allo FB101 come parametro di uscita. Se il blocco si è concluso con errori, la parola di stato del blocco viene visualizzata come parametro di uscita sullo FB101.

Figura 12 Ricezione dei dati

  • DB220
    In DB220 si trovano le strutture dei dati che vengono trasmessi con FC5.

Figura 13 DB220 - Struttura dei dati in trasmissione

  • DB221
    Nel DB221 vengono memorizzati i dati che sono stati ricevuti con FC 6.

Il download contiene l'esempio di programma descritto. Esso è stato creato con STEP 7 V5.3 e SIMATIC NET V6.2.

 T_cp_data.exe

Copiare il file "T_cp_data.exe" in una directory separata ed avviarlo con un doppio clic. Il progetto STEP7 viene scompattato automaticamente con tutte le subdirectory. Si può poi aprirlo con SIMATIC Manager e modificarlo.

 

Avvertenze di sicurezza
Per proteggere l’infrastruttura tecnica, i sistemi, i macchinari e le reti da minacce cyber, è necessario implementare (e salvaguardare continuamente) un concetto IT Security complessivo che sia conforme agli standard della tecnica correnti. I prodotti e le soluzioni di Siemens formano solo una parte di tale concetto. Ulteriori informazioni sulla Cyber Security si trovano sotto
https://www.siemens.com/cybersecurity#Ouraspiration.
Valuta articolo
nessuna valutazione
Richieste e feedback
Come vuoi procedere?
Avvertenza: il feedback si riferisce sempre all'articolo/al prodotto attuale. Il tuo messaggio verrà inviato ai redattori dell'Online Support. Se il tuo feedback lo richiede riceverai una risposta entro qualche giorno. Se non sono necessari ulteriori chiarimenti non ti invieremo alcun messaggio.