Vai al contenuto
PLC Forum


Problemi Con Fc6 Ag-recv


LOCUTUSKiller

Messaggi consigliati

LOCUTUSKiller

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 40

INOLTRE SEMBRA CHE DA QUESTO MOMENTO TUTTI I TELEGRAMMI SI SHIFTINO, INCLUSI QUELLI DA 1000 CHE PRIMA NON DAVANO PROBLEMI

CHIEDO 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 SUPERVISIONE

GRAZIE

SIMONE

Modificato: da LOCUTUSKiller
Link al commento
Condividi su altri siti


David.Stefanutti

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: da David.Stefanutti
Link al commento
Condividi su altri siti

LOCUTUSKiller

grazie della risposta

il 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 insieme

per 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

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

grazie BAntonio

usando 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 visto

le 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 diversi

grazie

simone

Link al commento
Condividi su altri siti

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