LOCUTUSKiller Inserito: 9 ottobre 2007 Segnala 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
David.Stefanutti Inserita: 9 ottobre 2007 Segnala 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
LOCUTUSKiller Inserita: 9 ottobre 2007 Autore Segnala 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
BAntonio Inserita: 9 ottobre 2007 Segnala 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.
LOCUTUSKiller Inserita: 12 ottobre 2007 Autore Segnala 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
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