Comunicazione sulla stessa porta seriale

lunedì 27 febbraio 2006 - 15.56

lcabrin Profilo | Newbie

Salve a tutti,
sto realizzare un programma che utilizza una libreria di comunicazione seriale. Questa libreria dovrà comunicare sulla stessa porta seriale, ma non so come posso fare per scrivere e ricevere dati utilizzando la stessa COM.. Se provo a istanziare un nuovo oggetto porta mi da errore e mi dice, ovviamente che la porta è già utilizzata.. Qualcuno mi saprebbe dare un aiuto o dirmi dove trovare materiale a riguardo?

Grazie e ciao a tutti..
Loris

Brainkiller Profilo | Guru

>Salve a tutti,
>sto realizzare un programma che utilizza una libreria di comunicazione
>seriale. Questa libreria dovrà comunicare sulla stessa porta
>seriale, ma non so come posso fare per scrivere e ricevere dati
>utilizzando la stessa COM.. Se provo a istanziare un nuovo oggetto
>porta mi da errore e mi dice, ovviamente che la porta è già utilizzata..
>Qualcuno mi saprebbe dare un aiuto o dirmi dove trovare materiale
>a riguardo?

Ciao Loris,
che io sappia una volta che l'handle di una COM è aperto non possono usarlo anche altri processi. Se tu sei connesso ad Internet e provi a spedire un fax non ce la fai perchè la COM è bloccata.

Per lavorare sulla COM devi anadre di botta e risposta (io almeno lavoro così perchè è più semplice). Scrivi sula COM e leggi, scrivi e leggi e così via.

Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

lcabrin Profilo | Newbie

Ciao David,
grazie per la risposta. Purtroppo non sono molto informato sulla programmazione delle porte seriali.

Il mio problema infatti è che mi aspetto di sscrivere e leggere direttamente dalla COMx utilizzando i metodi: oggettoMiaPorta.Write(byte[]) e oggettoMiaPorta.Read(Data), utilizzando la stessa WinForm in cui tale oggetto viene creato. Purtroppo non è cosi..

Quello che devo creare è una comunicazione tra palmare e PC che su COM3 legga e scriva dati.. Se hai un buon consiglio te ne sarei grato...

Ciao e buona giornata.
Loris

Brainkiller Profilo | Guru

>Il mio problema infatti è che mi aspetto di sscrivere e leggere
>direttamente dalla COMx utilizzando i metodi: oggettoMiaPorta.Write(byte[])
>e oggettoMiaPorta.Read(Data), utilizzando la stessa WinForm in
>cui tale oggetto viene creato. Purtroppo non è cosi..

oggettoMiaPorta che oggetto è ? Di che libreria ?

>Quello che devo creare è una comunicazione tra palmare e PC che
>su COM3 legga e scriva dati.. Se hai un buon consiglio te ne
>sarei grato...

Io so che l'ActiveSync è lì per quello. Non puoi passare tramite ActiveSync ?
Ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

lcabrin Profilo | Newbie

Ciao David,
allora la libreria è della Franson, "private SerialNET.Port port", con queste impostazioni:

port = new SerialNET.Port();

port.OnRead += new SerialNET.OnRead(port_OnRead);
port.OnWritten +=new SerialNET.OnWritten(port_OnWritten);
port.OnForceClose += new SerialNET.OnForceClose(port_OnForceClose);

port.Parent = this;

port.ComPort = 3;
port.BufferSize = 0;

string s = "9600";
port.BaudRate = Convert.ToInt32(s);

port.Timeout = 1000;

port.Enabled = true;

Ecco, tutto funziona bene su due porte seriali distinte (es COM3 e COM4), ma come faccio a ricevere e ad inviare sulla stessa com?? Ho un form1 e un un form2 che in qualche modo si devono scambiare dati in base ad una richiesta: form1 richiede di leggere o scrivere dei dati e form2 risponde a questa richiesta inviando i dati sempre utilizzando la COM3. Come posso fare? Non so più che pesci pigliare!!

Grazie ancora.
Ciao loris

Brainkiller Profilo | Guru

> tutto funziona bene su due porte seriali distinte (es COM3
>e COM4), ma come faccio a ricevere e ad inviare sulla stessa
>com??

Ripeto, prima invii Write, e poi ricevi Read.

>Ho un form1 e un un form2 che in qualche modo si devono
>scambiare dati in base ad una richiesta: form1 richiede di leggere
>o scrivere dei dati e form2 risponde a questa richiesta inviando
>i dati sempre utilizzando la COM3. Come posso fare? Non so più
>che pesci pigliare!!

Se hai due Form che usano la stessa COM non è possibile.
O ti passi l'handle da una Form all'altra ma sempre in modalità Leggi e poi scrivi, leggi e poi scrivi. Oppure devi chiudere la COM su una form e riaprirla sull'altra.

Una porta COM non è come un Socket TCP.
Ciao


David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

lcabrin Profilo | Newbie

Si, ho provato a fare come dici, ma quando leggo sulla stessa porta mi dice che non sono presenti dati da inviare e Data(variabile passata) è vuota.. Non è che sai dove trovare un esempio anche scritto con una libreria diversa che mi spieghi come ragiona la porta seriale?

Scusami e grazie per la disponibilità
Ciao Loris.

Brainkiller Profilo | Guru

>Si, ho provato a fare come dici, ma quando leggo sulla stessa
>porta mi dice che non sono presenti dati da inviare e Data(variabile
>passata) è vuota.. Non è che sai dove trovare un esempio anche
>scritto con una libreria diversa che mi spieghi come ragiona
>la porta seriale?

Non ha funzionamenti particolari la porta seriale, inviaa e riceve dati come tutte le altre.
Quello che devi sapere tu è come funziona il device collegato alla seriale che è un altro paio di maniche. Cioè quando invia i dati ? Se li invia ? Come, in che formato ? Allora tu a quel punto dall'altro capo sai anche che funzioni chiamare, se sai che invia dei dati allora li puoi leggere con la Read, viceversa se non arriva niente sai che devi andare a scrivere.

Solitamente una porta risponde se invocata. Se tu ti colleghi a un qualsiasi porta di un qualsiasi server, HTTP, POP3, o altro, finchè tu non parli, lui non ti dice niente, escludendo il messaggio di benvenuto appena ti colleghi (che sarebbe una sorta di "pronto!" telefonico).

Ciao
David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5