Porta seriale e VB2005

martedì 19 dicembre 2006 - 17.16

lordwaizard Profilo | Senior Member

Ho un dispostivo che utilizza la COM4, se lo apro tramite hyper terminal funziona correttamente se uso la "serialPort1" non riesco a connettermi.
Non da errori, ma non fa nulla.
Ho provato anche con il modem a lanciarli un ATI3, ma, niente non funziona.
Ho provato oltra agli esempi MS anche altri progetti vb, tutti con lo stesso risultato tranne uno codeworks, che però non legge il dato in modo corretto.
Scusate per la domanda banale ma non so dove sbattere la testa.
Grazie
Davide

alextyx Profilo | Expert

Io uso VB2005 con più seriali contemporaneamente e non ho problemi.
Bisognerebbe tu postassi un po' di codice per capire dove è il problema.
Intanto ti segnalo questa discussione che potrebbe esserti utile:

http://forum.masterdrive.it/showthread.php?t=15754

Ciao

lordwaizard Profilo | Senior Member

Ti volevo ringraziare per il consiglio, però c'è ancora un piccolo problema.
Mi sono connesso alla COM3 (collegato un modem56k), gli ho dato un ATI3, lui mi ha risposto correttamente.
Ora con il dispositivo che sto realizzando non funziona.

Il dispositivo è un apparecchio di rilevamento, effettuata la misura e se si preme un tasto, lui la comunica il dato direttamente al pc.

ES con hyperterminal
Mi connetto
Eseguo la misura
premo il tasto
RISULTATO:
+XX.XX

Credo che il problema sia quello di leggere i dati.
Perchè nel caso del modem mando un comando e ricevo risposta, mentre in questo caso dovrebbe restare sempre in attesa di una eventuale risposta.
E' possibile?
Grazie e scusa ancora per il disturbo

alextyx Profilo | Expert

Nessun disturbo, ci mancherebbe!
Faccio quello che posso, sperando che tanto basti

Credo che tu debba ispirarti a questo codice che ti passo, estrapolandolo dalla mia applicazione. Dovrebbe essere tutto ciò che ti serve per implementare una seriale in ascolto. All'arrivo di 'notizie', dovrebbe passare dalla sub 'Ricevi'. Il giochino della stringa 's' che vedi in fondo alla routine, lo uso x visualizzare ciò che ho ricevuto. Il ciclo nel try catch, dovrebbe evitare che la procedura riceva solo 'porzioni di messaggio', cosa che mi accadeva puntualmente con messaggi un po' più lunghi. Ora esce solo se si verifica un timeout (o un altro errore).

Dim WithEvents serialPort As New IO.Ports.SerialPort
Dim ArrDomanda() As Byte = {&H7E, &H80, &H4, &H10, &H20, 0, 0, &H7E}
Dim ArrRispostaByte() As Byte
Dim IndirizzoMittente As Byte = 128 'iMX21A
Dim FlagStartStop As Byte = &H7E
Dim FlagDomandaRisposta As Byte = &H10 'Domanda
Dim ArrTLG1(19) As Byte
Dim ArrTLG2(19) As Byte
Dim ArrTLG3(19) As Byte


Public Delegate Sub myDelegate()


Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serialPort.DataReceived
txtRisposta.Invoke(New myDelegate(AddressOf Ricevi), New Object() {})
End Sub

Public Sub Ricevi()

ReDim ArrRispostaByte(0)
serialPort.ReadTimeout = 10

Try
Do
serialPort.Read(ArrRispostaByte, ArrRispostaByte.Length - 1, 1)
ReDim Preserve ArrRispostaByte(ArrRispostaByte.Length)
Loop
Catch ex As Exception

End Try
If ArrRispostaByte.Length < 3 Then
Exit Sub
Else
'Dal loop di acquisizione, si esce con l'array più lungo del dovuto
'Va tolta l'ultima posizione, che tra l'altro sarà = 0
ReDim Preserve ArrRispostaByte(ArrRispostaByte.GetUpperBound(0) - 1)
End If


Dim s As String = ""
For i As Integer = 0 To ArrRispostaByte.GetUpperBound(0)
s &= ArrRispostaByte(i).ToString
s &= ", "
Next
txtRisposta.Text = s

End Sub

Vediamo se si riesce a far partire questa seriale!

P.S. do per scontato ceh tu provveda al codice per la connessione e il settaggio del baudrate, ovviamente!

almax Profilo | Junior Member

Salve avrei bisogno di un piccolo aiutino ... Ho visto il tuo post e vorrei chiederti questo ....
Io ho questo problema .. Ho creato un terminalino che si connette alla com dove c'è collegato un centralino telefonico .. NON ricevo dati .. Il terminalino fucniona l'ho testato con virtual port appena scrivo lui riceve tutti i caratteri ... Sapresti dirmi perchè ?
Provando con il programmino di corrado cavalli preso da http://www.codeworks.it/net/VBNetRs232.htm legge solo se premo il bottone leggi .. dovrei fare tutto in automatico .. sapresti spiegarmi perchè?

Grazie

lordwaizard Profilo | Senior Member

Ormai è passato un bel pò di tempo ma ricordati che i dati sono nell'array e devi scaricarlo se vuoi leggerlo.
Dovrebbe esserci un tasto che stampa tutto quello che arriva dalla comunicazione.
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