LOCUTUSKiller Inserito: 9 ottobre 2007 Segnala Share Inserito: 9 ottobre 2007 (modificato) HO STABILITO UN COLLEGAMENTO TRA UNA 343-1 ED UN SISTEMA DI SUPERVISIONE, UTILIZZANDO IL PROT. TCP.I TELEGRAMMI DA SCAMBIARE SONO DI 2 TIPI, 1 DA 1000 BYTE ED UN ALTRO DA 40.HO USATO UN SOLO CALL FC6 INDICANDO UN DB DI 1000 BYTE DOVE SCRIVERLI ENTRAMBI, E MI SEMBRA DI CAPIRE CHE L'FC INIZIA A SCRIVERE I BYTE INCOMINCIANDO DAL PUNTATORE INDICATO NELL'AREA RECV, SOVRASCRIVENDO IL DB PER I SOLI BYTE RICEVUTI (INDICATI NELL'USCITA LEN DELL'FC) CON I MESSAGGI DA 1000 BYTE NON C'E NESSUN PROBLEMA, MENTRE CON QUELLI DA 40, CAPITA CHE L' FC LI SCRIVA SHIFTATI (NON INIZIANDO DAL POINTER) IN MODO ARBITRARIO, A VOLTE DI 40 ,DI 80 E NON SEMPRE MULTIPLI DI 40INOLTRE SEMBRA CHE DA QUESTO MOMENTO TUTTI I TELEGRAMMI SI SHIFTINO, INCLUSI QUELLI DA 1000 CHE PRIMA NON DAVANO PROBLEMICHIEDO SE QUALCUNO HA ESPERIENZA DI QUESTO FATTO E SE E' CAUSATO DA UN MIO ERRORE EVENTUALMENTE SE MI DA' UNA DRITTA PER RISOLVERLO, OPPURE SE, COME PENSO IO, PUO' CONFERMARMI CHE E' DOVUTO A QUALCHE SETTAGGIO\ERRORE DEL SISTEMA DI SUPERVISIONEGRAZIE SIMONE Modificato: 9 ottobre 2007 da LOCUTUSKiller Link al commento Condividi su altri siti More sharing options...
David.Stefanutti Inserita: 9 ottobre 2007 Segnala Share Inserita: 9 ottobre 2007 (modificato) 1) Non scrivere in MAIUSCOLO!2) Penso che non abbia impostato correttamente il buffer sul pc per ricevere 1000 byte su una porta e 40 sull'altra. E' capitato anche a me. L'altro consiglio è, per evitare problemi di questo tipo, di cercare di raggruppare i dati da inviare su un solo pacchetto (nel tuo caso di 1040 byte)...buona fortuna Modificato: 9 ottobre 2007 da David.Stefanutti Link al commento Condividi su altri siti More sharing options...
LOCUTUSKiller Inserita: 9 ottobre 2007 Autore Segnala Share Inserita: 9 ottobre 2007 grazie della rispostail problema lo trovo sulla mia cpu in ricezione tramite l'fc6, quando mi inviano telegrammi di grandezza diversa per l'fc , una volta impostata la grandezza max dei dati da ricevere, non fa differenza quanti siano i byte in ingresso, purche' siano minori o uguali alla grandezza del buffer.il problema sta credo alla spedizione da parte del pc , probabilmente accavallano 2 telegrammi e li spediscono insiemeper ovviare al problema ho proposto di usare due connessioni con ID e porte diverse, appoggiando i 2 fc6 su 2 db diversi ma mi e' stato detto sul programma di supervisione non e' possibile spedire allo stesso ind IP su 2 porte diverse (o meglio credo che non abbiano voglia di modificarsi il sw!!)grazie Link al commento Condividi su altri siti More sharing options...
BAntonio Inserita: 9 ottobre 2007 Segnala Share Inserita: 9 ottobre 2007 Il protocollo TCP non permette di sapere quale è l'inizio e la fine di un telegramma.Quando abiliti la receive di pacchetti TCP passi alla FC anche la dimensione del pacchetto da ricevere (ipotesi 100 byte), da quel momento la CP inizia a ricevere i pacchetti, quando ha raggiunto i 100 byte ipotetici te li scarica sul db configurato. Se ne arrivano solo 50 questi non li vedi fino a quando non ne arrivano altri 50 per completare i 100.Se ne aspetti 100 e te ne arrivano 50 e poi altri 100 sul db di receive ti compariranno i 50 byte iniziali seguiti dai primi 50 byte del secondo pacchetto e la CP si mantiene in buffer i 50 byte che non ti ha scaricato sul db fino a quando non arrivano ancora pacchetti per completare i 100 byte.Purtroppo con il TCP devi sapere in anticipo quanti byte stai per ricevere per configurare la receive correttamente.Quindi o lavori a pacchetti di dimensione fissa ed uguale oppure prima di ogni invio ti fai spedire un pacchetto standard con contenute le informazioni di dimensione del prossimo pacchetto. Link al commento Condividi su altri siti More sharing options...
LOCUTUSKiller Inserita: 12 ottobre 2007 Autore Segnala Share Inserita: 12 ottobre 2007 grazie BAntoniousando la tua dritta, ho provato a far comunicare 2 cpu via tcp usando AGsend e AGreceive ed in effetti succede come dici tu, se spedisco da una cpu un telegramma con lunghezza inferiore al db sull agreceive dell'altra cpu, quest'ultimo non scrive il blocco fino a che non ho riempito tutti gli spazio disponibili, inoltre i byte in eccesso dell'ultimo telegramma li sovrascrive all'inizio, ecco la ragione dello shift che ho vistole uniche 2 soluzioni possibili sono, credo, la prima come dici ricevere un tel iniziale con incluse le caratteristiche del successivo, oppure creare 2 connessioni differenti sulle quali ricevere i due tel diversigraziesimone 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