Vai al contenuto
PLC Forum


Hmi Tp 700 Confort E Snap7 1.2.1


Messaggi consigliati

Savle,

sto diventando pazzo con un panel TP700 e il snap7 server sul PcDuino2,

Il server sembra lavorare bene, con il cliente snap7 posso accedere senza problemi,

pero, con sto dannato siemens, non va legere il block di dati per lo trend,

le string li legge con un offset da 1 e va anche a piantare.

Chi a gia avuto problemi ?

Grazie

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti


Sinceramente faccio fatica a capire il problema :huh:

Il server parte e con Snap7 client riesci a connetterti e a leggere e scrivere i dati, giusto ?

Poi colleghi un TP700 ed hai problemi. Cosa intendi per il block del trend ? è una DB che si aspetta di trovare ? L'hai condivisa sul server ? (Srv_RegisterArea())

Il server rende accessibile all'esterno le aree dati che tu crei nel tuo programma come array o strutture ma non sa nulla dei tipi S7 string o quant'altro, devi essere tu nel tuo programma a formattare i dati in memoria affinchè siano "comprensibili" dal pannello.

Il tipo S7 string ad esempio è formato da due byte, che indicano la lunghezza e l'occupazione (vado a memoria) ed una serie di caratteri, per cui se vuoi che una stringa sia riconosciuta come S7 String deve questi due byte in testa.

Diverso è il discorso di un'array of char che contiene solo caratteri.

Che significa si pianta ? e chi soprattutto, il TP o il server ?

Hai condiviso tutte le aree di memoria che poi hai progettato come tag nel pannello ?

Hai progettato la connessione correttamente ? Prova a lanciare il server di esempio (che alloca e condivide DB1, DB2 e DB3), poi sul pannello metti qualche campo intero tipo DB1.DBW0 e DB1.DBW2, visualizzi correttamente i valori o vedi i cancelletti (####) ?

Ti consiglio una prova molto semplice :

Lascia stare per il momento pcDuino (tanto i sorgenti del server sono sempre gli stessi) e lancia su un PC ServerDemo che trovi nella cartella /rich-demos/win32, però non farlo dal PC su cui hai Step7/TIA portal perchè la porta 102 è occupata, usa un'altro PC.

Il demo presenta un LOG dettagliato dell'attività, elimina la spunta a tutti gli eventi tranne che a quelli di lettura e scrittura.

Dovresti vedere cosa stà chiedendo il pannello cioè a quali aree vuole accedere, quindi verifica che nel tuo codice le hai create e condivise

Fidati che funziona ;)

Ciao

Davide.

Modificato: da dan64100
Link al commento
Condividi su altri siti

Sisi, il server non e il problema... a la Siemens il problema

l'initialisation del server:

int initS7(void )
{
if( globals == NULL )
return -1;
Server = new TS7Server;
if( Server == NULL ) // may be not created
{
fprintf( stderr, "Error creating S7 server \n" );
return -1;
}
if( globals )
Server->RegisterArea(srvAreaDB, GLOBAL_SLAVE, globals->getBaseAddress(), globals->getBlockSize() );
if( axeX )
{
axeX->buildBlock();
Server->RegisterArea(srvAreaDB, axeX->getChannelID(), axeX->getBaseAddress(), axeX->getBlockSize() );
}
for( int i = 0; i < globals->getNumChan(); i++ )
{
printf("Initialising S7 Channel %d \n",i);
if( ( axeArray[ i ] = new DB_AxeData( SIZE_CHANNEL_DATA, i, globals ) ) )
Server->RegisterArea(srvAreaDB, axeArray->getChannelID() + CHANNEL_SLAVE_BASE , axeArray->getBaseAddress(), axeArray->getBlockSize() );
else
fprintf( stderr, "Error creating S7 channel data ID = %d \n", i );
}
Server->SetEventsCallback(EventCallBack, Server);
return 0;
};
il bloco globals DB1 si initialisa cosi:
DB_Global::DB_Global()
{
strncpy( (char *)&Version_data, (char *)ARDUINO_SOFT_VERSION, sizeof( Version_data ) );
Version[0] = sizeof( Version_data );
Version[1] = sizeof( ARDUINO_SOFT_VERSION );
PartName[0] = sizeof( PartName_data );
PartName[1] = 0;
ReadWrite[0] = sizeof( ReadWrite_data );
ReadWrite[1] = 0;
Cmd[0] = sizeof( Cmd_data );
Cmd[1] = 0;
T1 = 0;
T2 = htobe16( 1500 );
T3 = htobe16( 1000 );
NumChan = htobe16( 1 );
SampleRate = htobe16( 20 );
ReqCurve = 0;
LoadCurve = 0;
}
penso che non ci sia problemi..
il DB99 e DB1xx sono configurati:
DB1xx.DBW0 Word minValue
DB1xx.DBW2 Word maxValue
DB1xx.DBW4 Word calibration
DB1xx.DBW6 Word Flags
DBX8.0, array 0.998 of Word, trend data axe Y for graph.
il DB1 a
DB1.DBX0.0 String lengh 78
DB1.DBW336 Word ReqCurve
DB1.DBW338 Word Laord Curve
non vedo error neanche li.
poi il log del server:
2014-05-08 13:12:41 [192.168.10.88] Client added [0 - 0 - 0 - 0]
2014-05-08 13:12:41 [192.168.10.88] The client requires a PDU size of 240 bytes [240 - 0 - 0 - 0]
2014-05-08 13:12:41 [192.168.10.88] Read SZL request, ID:0x0131 INDEX:0x0003 --> OK [305 - 3 - 0 - 0]
2014-05-08 13:12:41 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:41 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 1, Size : 80 --> OK [132 - 1 - 1 - 80]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 4, Size : 2 --> OK [132 - 100 - 4 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 2, Size : 2 --> OK [132 - 100 - 2 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 0, Size : 2 --> OK [132 - 100 - 0 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 160, Size : 4 --> OK [132 - 1 - 160 - 4]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 250, Size : 2 --> OK [132 - 1 - 250 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 248, Size : 2 --> OK [132 - 1 - 248 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 246, Size : 2 --> OK [132 - 1 - 246 - 2]
2014-05-08 13:12:41 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 1, Size : 80 --> OK [132 - 1 - 1 - 80]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 4, Size : 2 --> OK [132 - 100 - 4 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 2, Size : 2 --> OK [132 - 100 - 2 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 0, Size : 2 --> OK [132 - 100 - 0 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 160, Size : 4 --> OK [132 - 1 - 160 - 4]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 250, Size : 2 --> OK [132 - 1 - 250 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 248, Size : 2 --> OK [132 - 1 - 248 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB1, Start : 246, Size : 2 --> OK [132 - 1 - 246 - 2]
2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 8, Size : 462 --> OK [132 - 100 - 8 - 462]
2014-05-08 13:12:41 [192.168.10.88] Client disconnected by peer [0 - 0 - 0 - 0]
2014-05-08 13:12:45 [192.168.10.88] Client added [0 - 0 - 0 - 0]
2014-05-08 13:12:45 [192.168.10.88] The client requires a PDU size of 240 bytes [240 - 0 - 0 - 0]
2014-05-08 13:12:45 [192.168.10.88] Read SZL request, ID:0x0131 INDEX:0x0003 --> OK [305 - 3 - 0 - 0]
2014-05-08 13:12:45 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:45 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 1, Size : 80 --> OK [132 - 1 - 1 - 80]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 4, Size : 2 --> OK [132 - 100 - 4 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 2, Size : 2 --> OK [132 - 100 - 2 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 0, Size : 2 --> OK [132 - 100 - 0 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 160, Size : 4 --> OK [132 - 1 - 160 - 4]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 250, Size : 2 --> OK [132 - 1 - 250 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 248, Size : 2 --> OK [132 - 1 - 248 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 246, Size : 2 --> OK [132 - 1 - 246 - 2]
2014-05-08 13:12:45 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 1, Size : 80 --> OK [132 - 1 - 1 - 80]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 4, Size : 2 --> OK [132 - 100 - 4 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 2, Size : 2 --> OK [132 - 100 - 2 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 0, Size : 2 --> OK [132 - 100 - 0 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 160, Size : 4 --> OK [132 - 1 - 160 - 4]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 250, Size : 2 --> OK [132 - 1 - 250 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 248, Size : 2 --> OK [132 - 1 - 248 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 246, Size : 2 --> OK [132 - 1 - 246 - 2]
2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB100, Start : 8, Size : 462 --> OK [132 - 100 - 8 - 462]
2014-05-08 13:12:45 [192.168.10.88] Client disconnected by peer [0 - 0 - 0 - 0]
Dopo alcuni read, il runtime del TP700 esche e va in modo transferta
Yvo
Link al commento
Condividi su altri siti

Ciao Yvo,

adesso è tutto più chiaro, o meglio, ho capito il problema ma dobbiamo capire cosa succede ;)

2014-05-08 13:12:45 [192.168.10.88] Read request, Area : DB1, Start : 1, Size : 80 --> OK [132 - 1 - 1 - 80]

Questo è normale.

Il tipo stringa S7 nella memoria del PLC lo devi immaginare così :

char Size;          // Dimensione della stringa
char Length;        // Numero di caratteri effettivamente presenti
char String[...];   // Caratteri della stringa

In WinCC definisci la lunghezza massima della stringa, poi il runtime legge a partire da offset 1, e nel primo byte si aspetta di trovare quanti caratteri "validi" ci sono nella stringa, quindi ogni volta che modifichi la stringa devi inserire in quel byte il numero di caratteri validi.

Come alternativa, per semplificarti la vita puoi usare il tipo StringChar specificando la lunghezza massima e lo fai puntare direttamente al primo carattere della stringa in memoria.

Se la stringa che vai a costruire è di lunghezza variabile usa un memset a 0 del buffer prima di riempirlo.

Questo invece è molto brutto. :o

2014-05-08 13:12:41 [192.168.10.88] Read request, Area : DB100, Start : 8, Size : 462 --> OK [132 - 100 - 8 - 462]
2014-05-08 13:12:41 [192.168.10.88] Client disconnected by peer [0 - 0 - 0 - 0]

WinCC ha richiesto un trasferimento dati di dimensione maggiore del PDU negoziato (240 byte).

2014-05-08 13:12:41 [192.168.10.88] The client requires a PDU size of 240 bytes [240 - 0 - 0 - 0]

Ho paura di capire perchè si è preso questa libertà, credo di avere male interpretato il concetto di pdu_local e pdu_remote che si trova nel manuale System Software for S7-300/400 System and Standard Functions, dato che a proposito di SZL 0131 si parla esplicitamente di "The maximum transferable data length per SFC" :wacko: che non c'entra un c...

Nel firmware del server quindi ho scritto:

  byte SZL_ID_0131_IDX_0001[52] = {
    0xFF,0x09,0x00,0x30,0x01,0x31,0x00,0x01,0x00,0x28,0x00,0x01,0x00,0x01,
    0x08,0x00,   // PDU SIZE        : We expose 2048      00F0
    0x04,0x00,   // Max Commections : We expose 1024      0010
    0x00,0xB7,0x1B,0x00,0x00,0x02,0xDC,0x6C,0x05,0xF5,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  };

Informazione che WinCC ha avuto quì

2014-05-08 13:12:41 [192.168.10.88] Read SZL request, ID:0x0131 INDEX:0x0003 --> OK [305 - 3 - 0 - 0]

Credendo che 2048 fosse il massimo PDU negoziabile e non il massimo utilizzabile.

Dato che programmi in C++ ti chiedo se possibile di fare una prova molto rapida (non ho pcDuino2):

Prova a sostituire 0x08,0x00 con 0x00,0xF0 alla riga 1194 di s7_firmware.h e poi ricompila la libreria.

Il pannello non dovrebbe più disconnettersi.

Nel frattempo analizzo meglio il problema perchè vorrei comunque permettere un trasferimento maggiore del PDU per migliorate l'efficienza nel caso di grafici e quant'altro ma è importante evitare effetti collaterali.

Fammi sapere ;)

Davide

Modificato: da dan64100
Link al commento
Condividi su altri siti

Caio Davide,

o provato, cambia niente, per mi chiedo, Wincc chiede ID 0x0131, index 3, abiamo provato a modificare l'ID 1?

2014-05-09 09:17:46 [192.168.10.88] Client added [0 - 0 - 0 - 0]
2014-05-09 09:17:46 [192.168.10.88] The client requires a PDU size of 240 bytes [240 - 0 - 0 - 0]
2014-05-09 09:17:46 [192.168.10.88] Read SZL request, ID:0x0131 INDEX:0x0003 --> OK [305 - 3 - 0 - 0]
2014-05-09 09:17:46 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-09 09:17:46 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-09 09:17:46 [192.168.10.88] Write request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB1, Start : 338, Size : 2 --> OK [132 - 1 - 338 - 2]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB1, Start : 336, Size : 2 --> OK [132 - 1 - 336 - 2]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB100, Start : 8, Size : 462 --> OK [132 - 100 - 8 - 462]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB100, Start : 470, Size : 462 --> OK [132 - 100 - 470 - 462]
2014-05-09 09:17:46 [192.168.10.88] Read request, Area : DB100, Start : 932, Size : 462 --> OK [132 - 100 - 932 - 462]
2014-05-09 09:17:46 [192.168.10.88] Client disconnected by peer [0 - 0 - 0 - 0]
io o fato cosi per la string:
unsigned char Version[2];
unsigned char Version_data[ SIZE_ASCII - sizeof( Version ) ]; // # 000 version string of the pcduino firmware
Link al commento
Condividi su altri siti

o provato a modificare anche l'altro e il numero di connessione, non cambia niente:

byte SZL_ID_0131_IDX_0001[52] = {
0xFF,0x09,0x00,0x30,0x01,0x31,0x00,0x01,0x00,0x28,0x00,0x01,0x00,0x01,
0x00,0xf0, // PDU SIZE : We expose 2048 00F0; Modified for TESTING
0x00,0xf0, // Max Commections : We expose 1024 0010
0x00,0xB7,0x1B,0x00,0x00,0x02,0xDC,0x6C,0x05,0xF5,0xE1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
byte SZL_ID_0131_IDX_0002[52] = {
0xFF,0x09,0x00,0x30,0x01,0x31,0x00,0x02,0x00,0x28,0x00,0x01,0x00,0x02,0xBE,0xFD,0x4F,0x00,0x00,
0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x3C,0x01,0x08,0x00,0x00,0x00,0x7D,0x00,0x00,0x05,0x03,0x0F,
0x00,0x00,0x08,0x00,0x00,0x0C,0x00,0x0A,0x00,0x00,0x00,0x01,0x00,0x00
};
byte SZL_ID_0131_IDX_0003[52] = {
0xFF,0x09,0x00,0x30,0x01,0x31,0x00,0x03,0x00,0x28,0x00,0x01,0x00,0x03,0x00,0xf0,0x00,0xf0,0x00, // WAS 0x7F,0xFC,0x83,0x01 changed to 0x00, 0xF0,0x00,f0
0xF0,0x00,0x10,0x00,0x01,0x02,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
Link al commento
Condividi su altri siti

In effetti il PDU negoziato è 480 byte (nel log c'è quello richiesto da wincc).

Lui fa 3 trasferimenti da 462 byte (462 = 480-18 dove 18 è l'header) poi si disconnette

E' come se WinCC si aspetti una dimensione maggiore della DB.

Ripristina i vecchi valori in s7_firmware.h

e prova ad aumentare nel tuo programma in C la dimensione allocata di DB100 lasciando il programma WinCC così com'è.

cosa succede ?

Link al commento
Condividi su altri siti

In effetti il telegramma SZL 0131 index 003 non c'entra con il PDU, ho proprio visto male :wacko:

Sto provando a richiedere al server (prova che avevo già fatto) una dimensione maggiore di quella allocata e lui risponde giustamente con l'errore Out of range

Non capisco proprio perchè il pannello si disconnette.

Link al commento
Condividi su altri siti

Avevo provato a metere una dimensione di 240 alla DB dentro WinCC, stesso problema.

il panel nel log mi a dato un errore 0x80000105 ma no so che a vedere con la communicassione.

o provato a fare un reset totale del panel con nouveau firmware, cambia niente. e con una db del doppio nemeno

Link al commento
Condividi su altri siti

Mi puoi inviare il progetto TIA portal del pannello ? provo a dargli un'occhiata in un TP700 comfort.

Inviami un MP con il tuo indirizzo e-mail

Modificato: da Giuseppe Signorella
Link al commento
Condividi su altri siti

Ho trovato l'inghippo (che sinceramente non riesco ad attribuire a Snap7 come problema).

Il protocollo ISO-TCP prevede la negoziazione del protocollo : il client "propone" una lunghezza di PDU ed il server l'accetta o ne "impone" un'altra. Il client ne prende atto e l'accetta o saluta (disconnessione TCP) e va via.

Il server può avere un range d'accettazione o un valore fisso è comunque lui a decidere.

I PLC Siemens hanno un valore fisso di 240 bytes per le CPU 300 e 480 bytes per le CPU 400/WinAC o quelle integrate nel Sinamics. Si parla anche di un 960 bytes ma non mi è mai capitato di vederlo.

In genere, ma non è dichiarato, la dimensione della finestra di consistenza è pari al PDU size.

Simatic Manager in fase di connessione propone 480 bytes, poi il PLC (a seconda dei modelli) l'accetta o risponde con 240. Simatic Manager si adegua e vive felice.

I pannelli operatore Siemens ragionano così : se io propongo il PDU più basso di gamma non troverò mai una CPU che me lo rifiuta e così non mi devo sbattere a capire che PLC ho di fronte, al limite mi faccio dire qualcosina sulla consistenza.

Snap7 server ha un range di PDU, il minimo è 480 bytes, il massimo è 4096 (o quello che si inserisce in fase di compilazione per le dimensioni del buffer). E' nel suo diritto (secondo RFC1006).

Il pannello di cui sopra si connette e propone 240, Snap7 risponde che se vuole continuare questa mano deve mettere sul piatto 480 bytes e Il pannello accetta.

Fin quando i tag rimangono di bassa dimensione tutti vivono felici.

Quando si cerca di trasferire quantità maggiori di dati (da 1024 bytes in su) lo scambio avviene correttamente in blocchi da 480 bytes ma ad un certo punto il pannello s'intristisce e dopo il trasferimento dell'ultimo segmento e va in crash :blink:

Wireshark non rileva nulla di anomalo.

I pannelli nuovi tipo il TP700 si riprendono, quelli vecchi vanno in modo trasferimento (appena ho un minuto per curiosità vedo cosa combina il runtime PC based).

Ho come l'impressione che il layer comunicazione sia correttamente parametrizzato ma che ci sia qualche struttura di memoria "tarata" sui 240 bytes.

La scelta dei 480 bytes minimi l'ho fatta per avere delle performances migliori (non esistono solo i pannelli operatori Siemens).

Adesso ho eliminato il limite inferiore : Snap7 server accetta qualunque valore al di sotto della dimensione del buffer, non si sa mai che esca qualche pannello low-cost con un PDU di 128 bytes :wacko:.

Ovviamente essendo multi-thread ogni worker potrà avere una dimensione differente di PDU.

Yvo, appena ritorni dalla trasferta avvisami che ti invio i sorgenti modificati (praticamente una riga di codice). Facciamo altri test e poi provvederò al bugfix ufficiale, grazie per la collaborazione ;)

E' un mondo difficile :( ma almeno ha smesso di piovere :smile:

Link al commento
Condividi su altri siti

  • 1 year later...

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...