PDA

Visualizza la versione completa : [C] Gestione seriale tramite linguaggio C


Trader
03-09-2001, 18:04
Ciao
qualcuna saprebbe darmi una dritta su come poter leggere e scrivere dalle porte seriali tramite C ?
L' ambiente dove dovrei effettuare tali letture e'Win'98, Win2000 o WinNT4
Se riusciste a darmi qualche dritta su funzioni che gestiscono le porte seriale o quanto meno se conoscete dei libri che trattato tale argomento, ve ne sarei infinitamente grato....

La mia domanda e' troppo complessa ?
Per me si, ma sono sicuro che tra voi si nasconde qualche genio....http://forum.html.it/forum/faccine/005.gif

fradefra
12-09-2001, 01:21
Fare qualcosa di semplice non difficile. Se invece devi andare sul professionale, allora diverso.

Una porta seriale si apre e si legge, in C, come un file qualunque. Il nome Com1, Com2, ecc. ecc.

In molti libri trovi esempi.

Tieni presente, per, che per un programma serio, ti tocca quasi sempre avere dei buffer e dei semplici protocolli di comunicazione.
Se il programma lavora assieme ad altri, potresti essere costretto a scrivere delle parti che reagiscono ad eventi Windows che arrivano dalla porta.
Inoltre se la cosa ti serve per interfacciare un FEP, allora devi avere anche la sua documentazione.

Cosa vuoi fare, esattamente?

Trader
15-09-2001, 12:33
Ciao,
innanzitutto grazie per l' interessamento.
Lo scopo del programma era di configurare e leggere delle interfacce per barcode readers tramite COM1 e COM2 e contemporaneamente acquisire dati provenienti da un modulo ASCII-PLC connesso alla porta COM3.

Parlo al passato in quanto il programa l'ho quasi ultimato. Ho semplicemente utilizzato le funzioni WriteFile, ReadFile ecc..

Se pero' volessi gestire la seriale a basso livello (quindi ricostruire completamente il protocollo RS232, timing ecc.) Sapresti dove e' possibile prelevare tale informazioni, o titoli di libri che mi potrebbero aiutare in futuro a preparare un driver per seriali ?
Grazie Ancora
Ciao.

fradefra
15-09-2001, 12:59
Vedo che senza saperlo hai usato proprio le funzioni a cui pensavo!
Per la gestione a basso livello, non so. Non sono mai arrivato a tale livello (non mi serviva).
Non so dove abiti. Ti consiglio la visita ad una buona libreria informatica. Troverai sicuramente. Se trovi una libreria della catena Hoepli, di solito sono ben forniti sull'informatica.
Buono studio.

X-r3nd3r
03-08-2002, 16:27
se posso volevo fare una domanda: Quando vado a leggere sulla seriale (anche la mia collegata ad un PLC) il buffer, non so perk ma ci sono anke dei karatteri ke nn centra 1 kaxxo kon kuelli ke mi aspetto dal plc, kome faccio a fare un bel clear del buffer?

Trader
05-08-2002, 19:16
La funzione che potrebbe aiutarti e' la seguente:

int fflush( FILE *stream );

inclusa in <stdio.h>
Ti allego una veloce spiegazione delhelp on-line di Visual Studio.
Ciao
Sergio

************************************************** ********************
Return Value

fflush returns 0 if the buffer was successfully flushed. The value 0 is also returned in cases in which the specified stream has no buffer or is open for reading only. A return value of EOF indicates an error.

Note If fflush returns EOF, data may have been lost due to a write failure. When setting up a critical error handler, it is safest to turn buffering off with the setvbuf function or to use low-level I/O routines such as _open, _close, and _write instead of the stream I/O functions.

Parameter

stream Pointer to FILE structure

Remarks

The fflush function flushes a stream. If the file associated with stream is open for output, fflush writes to that file the contents of the buffer associated with the stream. If the stream is open for input, fflush clears the contents of the buffer. fflush negates the effect of any prior call to ungetc against stream. Also, fflush(NULL) flushes all streams opened for output. The stream remains open after the call. fflush has no effect on an unbuffered stream.

Buffers are normally maintained by the operating system, which determines the optimal time to write the data automatically to disk: when a buffer is full, when a stream is closed, or when a program terminates normally without closing the stream. The commit-to-disk feature of the run-time library lets you ensure that critical data is written directly to disk rather than to the operating-system buffers. Without rewriting an existing program, you can enable this feature by linking the program's object files with COMMODE.OBJ. In the resulting executable file, calls to _flushall write the contents of all buffers to disk. Only _flushall and fflush are affected by COMMODE.OBJ.

For information about controlling the commit-to-disk feature, see Stream I/O, fopen, and _fdopen.

Example




/* FFLUSH.C */

#include <stdio.h>
#include <conio.h>

void main( void )
{
int integer;
char string[81];

/* Read each word as a string. */
printf( "Enter a sentence of four words with scanf: " );
for( integer = 0; integer < 4; integer++ )
{
scanf( "%s", string );
printf( "%s\n", string );
}

/* You must flush the input buffer before using gets. */
fflush( stdin );
printf( "Enter the same sentence with gets: " );
gets( string );
printf( "%s\n", string );
}

Output




Enter a sentence of four words with scanf: This is a test
This
is
a
test
Enter the same sentence with gets: This is a test
This is a test

Stream I/O Routines

(See Also fclose, _flushall, setvbuf)

Loading