Vai al contenuto
PLC Forum


Problemi Con Fc6 Ag-recv


Messaggi consigliati

LOCUTUSKiller
Inserito: (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 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

David.Stefanutti
Inserita: (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: da David.Stefanutti
LOCUTUSKiller
Inserita:

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

Inserita:

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.

Inserita:

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

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