fondarex Inserito: 8 maggio 2014 Segnala Share Inserito: 8 maggio 2014 (modificato) 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: 8 maggio 2014 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 8 maggio 2014 Segnala Share Inserita: 8 maggio 2014 (modificato) Sinceramente faccio fatica a capire il problema 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: 8 maggio 2014 da dan64100 Link al commento Condividi su altri siti More sharing options...
fondarex Inserita: 9 maggio 2014 Autore Segnala Share Inserita: 9 maggio 2014 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 More sharing options...
dan64100 Inserita: 9 maggio 2014 Segnala Share Inserita: 9 maggio 2014 (modificato) 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. 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" 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: 9 maggio 2014 da dan64100 Link al commento Condividi su altri siti More sharing options...
fondarex Inserita: 9 maggio 2014 Autore Segnala Share Inserita: 9 maggio 2014 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 More sharing options...
fondarex Inserita: 9 maggio 2014 Autore Segnala Share Inserita: 9 maggio 2014 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 More sharing options...
dan64100 Inserita: 9 maggio 2014 Segnala Share Inserita: 9 maggio 2014 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 More sharing options...
dan64100 Inserita: 9 maggio 2014 Segnala Share Inserita: 9 maggio 2014 In effetti il telegramma SZL 0131 index 003 non c'entra con il PDU, ho proprio visto male 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 More sharing options...
fondarex Inserita: 9 maggio 2014 Autore Segnala Share Inserita: 9 maggio 2014 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 More sharing options...
dan64100 Inserita: 9 maggio 2014 Segnala Share Inserita: 9 maggio 2014 (modificato) 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: 9 maggio 2014 da Giuseppe Signorella Link al commento Condividi su altri siti More sharing options...
dan64100 Inserita: 10 maggio 2014 Segnala Share Inserita: 10 maggio 2014 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 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 . 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 Link al commento Condividi su altri siti More sharing options...
fondarex Inserita: 16 maggio 2014 Autore Segnala Share Inserita: 16 maggio 2014 Grazie... Come pensavo, sembre problemi dalla parte siemens... Link al commento Condividi su altri siti More sharing options...
Marco_Udine Inserita: 8 maggio 2016 Segnala Share Inserita: 8 maggio 2016 Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora