Elsist Sistemi in elettronica dal 1983   English  Bandiera Inglese   
 
ELSIST - Sistemi in elettronica dal 1983 PLC serie SlimLine - L'automazione made in Italy Terminali Operatore Conversione interfaccia Wireless LAN Prodotti e soluzioni GSM/GPRS/UMTS Prodotti e soluzioni di monitoraggio IP
 LOGIN  
Username
Password
 Ricorda dati
Visualizza pagina registrazione al sito Registrati ora
Visualizza pagina iscrizione alla mailing list Iscriviti alla Newsletter
Permette accesso di emergenza al sito Dimenticato password?
 VAI A TOPIC
 NOVITA'
Visualizza pagine aggiornate di recente Pagine nuove o riviste
Visualizza i nuovi prodotti Nuovi prodotti
Visualizza i nuovi downloads Nuovi downloads
Visualizza i nuovi posts Nuovi post sul Forum
 SERVIZI
Invia una Email con la richiesta di informazioni Richiesta informazioni
Visualizza il modulo richiesta quotazioni Richiesta quotazioni
 VETRINA
600540 Ares 12 Bulk
600540 Ares 12 Bulk
UBIQUITI ToughSwitch PoE (5 porte)
UBIQUITI ToughSwitch PoE (5 porte)
Bullet M5 Titanium
Bullet M5 Titanium
Radiomodem Radiant 868 base
Radiomodem Radiant 868 base
SlimLine Terminale Touch screen 4.3" MT6050iV3
SlimLine Terminale Touch screen 4.3" MT6050iV3
AirCam Dome - Videocamera IP montaggio a soffitto
AirCam Dome - Videocamera IP montaggio a soffitto
600533  I/O Controller II
600533 I/O Controller II
600218 IP WatchDog Lite
600218 IP WatchDog Lite
SlimLine Modulo esp. I/O Analogico 5In + RS232
SlimLine Modulo esp. I/O Analogico 5In + RS232
SlimLine Modulo esp. I/O uscite statiche 16In 8Out
SlimLine Modulo esp. I/O uscite statiche 16In 8Out
 OFFERTE Vai alla pagina prodotti in offerta 
Convertitore I/F RS232/422/485-Fibra multimodale
Convertitore I/F RS232/422/485-Fibra multimodale
€ 189.00
Prezzo ribassato € 159.00
 Voi siete qui: Elenco forums  Controllori programmabili IEC61131-3: SlimLine, n... ed informazioni  Gestione... da connessione UDP Aggiungi la pagina ai preferiti Invia la pagina via Email Stampa il contenuto della pagina
Elenco messaggi
 FORUM
SlimLine, novità ed informazioni
Annunci, novità ed informazioni utili sulla famiglia di prodotti SlimLine
Discussione
Gestione stringhe da seriale e da connessione UDP
Informazioni sulla gestione delle stringhe da porta seriale e da connessione UDP
Autore:  Mic71 Data (GMT):  18/06/2012 10:10:39
Flags Messaggio
Messaggio in Italiano
 
Data (GMT):  18/06/2012 10:10:39  
Autore:  Mic71
Salve, ho un problema con le stringhe, devo ricevere dalla seriale 2Kb di dati, inseririli in una variabile ed inviarli via UDP. Ho definito una var STRINGA RxStr a 2048 ma non ricevo tutti i 2KB che dal PC invio.
 
Ho controllato l'output seriale del PC con un analizzatore logico e vedo passare tutti i 2KB quindi il problema sta sullo slimline. Ecco il codice
 
i:=Sysfread(ADR(RxStr ), 2048, 1, Fp[0]); (* Fp[0]  è il ptr handle della seriale *)
NrOfCh:=SysUDPSktSend(Fp[1], ADR(RxStr ), LEN(RxStr ), '192.168.0.10', 120);
 
Sul PC tramite LAN riprendo i dati letti dalla seriale ma ricevo un solo carattere.
Messaggio in Italiano
 
Data (GMT):  18/06/2012 09:44:51  
Autore:  Mic71
Aggiungo al post precedente, oggi trovo sul manuale dello slimline la funzione SysGetRxBSize che torna la dimensione del buffer seriale ed eseguendo:
 
BuffLen:=SysGetRxBSize(Fp[0]);
 
Ho effettivamente un valore di 256. Ovviamente iBuffLen è un INT. Come posso aumentare tale buffer seriale visto che devo ricevere almeno tra i 2 e 3 KByte.
Messaggio in Italiano
 
Data (GMT):  18/06/2012 10:16:31  
Autore:  Utente in linea Bertaser
C'è un pò di confusione, vediamo di chiarire il concetto della gestione delle comunicazioni seriali sullo SlimLine. Il buffer seriale è effettivamente di 256 bytes, ma non è necessario aumentarne la dimensione. Il buffer seriale serve a contenere i dati che arrivano dalla seriale solo per dare il tempo al programma utente di leggerli.
 
Quindi considerato che il programma utente (Task di background) ha come tempi di esecuzione valori tipici di pochi mS è evidente che in quel tempo può essere ricevuto solo qualche carattere. Ora il tuo problema è di leggere i dati dal buffer di ricezione e di trasferirli nella stringa che hai definito.
 
Se vuoi ricevere l'intera stringa, il problema è capire quando la stringa è terminata, può essere utilizzato un carattere delimitatore (Se esiste), oppure attendi un timeout, se non ricevuti caratteri per un tempo definito si considera la stringa ricevuta e si invia sul socket UDP.
 
Attenzione anche in trasmissione devi eseguire uno spooling dei dati in uscita caricando nel buffer di trasmissione solo i caratteri che possono essere contenuti. Per darti una idea di qaunto detto ti allego la stampa ed il programma sorgente di un dimostrativo.
Messaggio in Italiano
 
Data (GMT):  18/06/2012 14:54:24  
Autore:  Mic71
Scusa ma non riesco ad ottenere il risultato voluto. Non riesco a prendere tutti i byte che arrivano dalla seriale. La funzione SysGetIChars(Fp) mi torna sempre 255 e mai ad esempio 1024 se invio 1024 byte alla seriale dello slimline il problema e che anche creando un repository non vado oltre 255 anche il sw di test che gentilmente mi hai creato si ferma sempre a 255.
 
Ho notato che anche il buffer di uscita della funzione SysUDPSktSend è sempre al massimo 255 se vado oltre il device si resetta.
Messaggio in Italiano
 
Data (GMT):  19/06/2012 10:29:11  
Autore:  Utente in linea Bertaser
Andiamo con ordine e vediamo di risolvere i problemi sulla ricezione seriale, poi analizzeremo quelli sulla connessione UDP. Il fatto che la funzione SysGetIChars torni al massimo 255 l'ho spiegato prima, quindi è normale. Il programma che ho postato infatti esegue il buffering dei dati ricevuti proprio per poter suddividere la ricezione dei tuoi 2048 bytes in pacchetti massimo di 255 bytes.
 
Per quanto riguarda la trasmissione UDP puoi trasmettere pacchetti di 1000 bytes, quindi se il pacchetto ricevuto è di dimensioni maggiori dovrai suddividerlo. Ti allego la stampa ed il programma sorgente di un programma che bufferizza i dati in ricezione e trasmette il pacchetto ricevuto su UDP.
 
Utilizzando Toolly puoi inviare un file testo da 2040 caratteri (20 righe da 100 caratteri <CR><LF>) sulla seriale verso lo SlimLine e dal server UDP vedrai i dati ricevuti dalla connessione UDP (Vedi screenshot). I dati sono trasmessi dallo SlimLine dopo 1 secondo che non riceve più dati dalla porta seriale. Come puoi notare  dallo screenshot il debug della variabile TxChrs indica i bytes ricevuti e poi ritrasmessi su connessione UDP.
Pagina:  (1)      
 © Copyright 1996-2013 ELSIST Srl - C.F./P.IVA: 01122830068