Porta Seriale

Ciao a tutti, sto realizzando un'applicazione per la comunicazione tramite porta seriale. Il mio intento è quello di usare un handshake con CTS/RTS. Infatti quando ricevo "tot" caratteri (ovvero ho i dati per costruire un pacchetto) alzo la linea CTS mentre processo il pacchetto acquisito. Osservando i segnali con l'oscilloscopio ho notato che la seriale non si ferma appena alzo la linea CTS ma continua anche per 4-5 ms che a 9600 baud corrispondono a 4-5 caratteri. Ho cercato su Internet qualcosa riguadro le tempistiche del protocollo 232 ma non ho trovato niente. Che sia colpa del software? Lo stesso problema accade sia con ZOC che con Hyper Terminal. Inoltre, secondo problema, se imposto un ritardo tra un carattere e un altro, la seriale mi manda di solito 4 caratteri in stream e poi fa pause di solito di circa 11 ms anche se il ritardo impostato è minore (anche con 1 ms). Se invece il ritardo è impostato a zero allora mi spedisce lo stream correttamente (ma con i problemi legati a CTS).

Ringrazio anticipatamente per l'aiuto.

Ciao,

Nicola

--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Reply to
Nicola Ponte
Loading thread data ...

Ciao

[...]

Imposta il controllo di flusso su Hardware in Pannello di controllo->sistema->porte->porte seriale che ti interessa->proprietà

Prego

Ciao P.

Reply to
Pelor

??? Comunicazione seriale tra che cosa? Cioè tra un PC (presumo) e che cosa? Non è molto chiaro, ma se ti può aiutare ti riposto la risposta che ho dato a un tizio che tempo fa su it.comp.lang.visual-basic aveva dei problemi con la seriale.

Se non ho capito bene il problema scusami....

ciao Stefano

From snipped-for-privacy@tin.it Mon Jan 26 11:34:30 2004 Path:news4.tin.it!news-out.tin.it!news-in.tin.it!news4.tin.it.POSTED!not-for-mail From: SB Newsgroups: it.comp.lang.visual-basic Subject: Re: VB6 e gestione porte (con XP e' cambiato qualcosa?) Reply-To: snipped-for-privacy@tin.it Message-ID: References:

X-Newsreader: Forte Agent 1.93/32.576 English (American) MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Lines: 65 Date: Mon, 26 Jan 2004 10:34:30 GMT NNTP-Posting-Host: 62.211.35.104 X-Complaints-To: snipped-for-privacy@tin.it X-Trace: news4.tin.it 1075113270 62.211.35.104 (Mon, 26 Jan 2004

11:34:30 MET) NNTP-Post>>utilizzi una seriale o un simulatore/adattatore tipo "bafo" ?

Per mia esperienza in XP hanno cambiato qualcosa....

Appena uscito Xp, su un pc cercavo di connettermi a una scheda con porta RS485 usando un convertitore RS232-RS485 e avevo dei problemi perchè la linea RTS\ terminava alta un poco prima che finisse l'ultimo byte non finendo di trasmettere la linea. (con una 485 è un problema perchè la linea gira)

Il programma utilizza una DLL scritta in C (con le funzioni API CreateFile, SetCommState, ecc.) per poter usare il software di comunicazione con altri linguaggi, e che aveva funzionato bene sui vari W95 W98. (in questa app. non uso MSCOMM, quindi non so se questo problema si verifica anche con lui.)

Posso dirti come è stato risolto dopo diverse peripezie, e una versione di DLL solo per Xp.

il campo fRtsControl in fBitFields di DCB (sono 4 bytes) deve essere messo a RTS_CONTROL_TOGGLE (= 3)

dopodichè RTS\ fa il suo dovere.

Forse è complicato, ma è solo per dire che in Xp hanno effettivamente cambiato qualcosa

Se vuoi documentarti cerca Funzione SetCommState:

Declare Function SetCommState Lib "kernel32" Alias "SetCommState" (ByVal hCommDev As Long, lpDCB As DCB) As Long

e Struttura DCB

Type DCB DCBlength As Long BaudRate As Long fBitFields As Long wReserved As Integer XonLim As Integer XoffLim As Integer ByteSize As Byte Parity As Byte StopBits As Byte XonChar As Byte XoffChar As Byte ErrorChar As Byte EofChar As Byte EvtChar As Byte wReserved1 As Integer End Type

ciao Stefano

Reply to
SB

Si, non mi sono spiegato bene. Ho una schedina con un micro sopra (con MAX232 in mezzo) che legge i dati dalla seriale e permette inoltre l'utilizzo di RTS/CTS con due ulteriori pin dedicati allo scopo.

Adesso vedo il tuo suggerimento.

Grazie,

Nicola

--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
Reply to
Nicola Ponte

Credo sia normale. Nel momento in cui alzi la lina CTS non puoi aspettarti il blocco improvviso dei dati da parte del PC. Per evitare problemi devi implementare sul micro un buffer di ricezione ed alzare la linea CTS quando questo è "quasi pieno", in modo da avere comunque abbastanza spazio per memorizzare eventuali byte di arrivo. Ho supposto logicamente che tu abbia implementato la ricezione seriale sotto interrupt.

Per evitare potenziali problemi devi implementare l'handshake hardware.

Non c'è di che.

Reply to
Domenico

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.