Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VISUAL BASIC 2008 EXPRESS EDITION]Procedura ricevere stringhe da porte seriali

    Buongiorno a tutti,
    Ho un problema nell'utilizzo della procedura di ricezione delle stringhe da porta seriale reperita : http://msdn.microsoft.com/it-it/libr...=VS.90%29.aspx
    Vi illustro la situazione in cui sto usando la procedura : ho due pc uno con sistema operativo Windows 7 ed uno con Vista. Poichè non dispogono di porta seriale ho utilizzato degli usb serial converter. Nel pc con Windows 7 faccio girare il programma in vb2008 mentre nell'altro pc mantengo aperto TeraTerm Pro. In entrambi i pc la porta su cui lavoro è la COM1. Il codice è il seguente:
    codice:
    Imports System
    Imports System.IO
    
    Public Class Leggi_porta
    Private Sub Prova_leggi_porta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
             Dim returnStr As String = ""
    
            Using COM1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1", 9600, Ports.Parity.None, 8, 1)
     Do
                    Dim Incoming As String
                    Incoming = COM1.ReadLine()
                    If Incoming Is Nothing Then
                        Exit Do
                    Else
                        returnStr &= Incoming & vbCrLf
                    End If
                Loop
            End Using
        Return returnStr
        End Sub
    End Class
    Eseguendo un'istruzione per volta invio dei caratteri tramite Tera term dopo aver aperto la porta. L'istruzione che mi crea problemi è Incoming = COM1.ReadLine() in quanto, arrivata a tale punto, non posso più eseguire l'istruzione successiva e l'unica cosa che posso fare è interrompere il debug. Ho provato ad aprire tera term nel pc dove girava il programma in vb2008 e inviando i caratteri dall'altro tutto funziona correttamente.
    Potete aiutarmi?

  2. #2

    Re: [VISUAL BASIC 2008 EXPRESS EDITION]Procedura ricevere stringhe da porte seriali

    Originariamente inviato da saretta12
    L'istruzione che mi crea problemi è Incoming = COM1.ReadLine() in quanto, arrivata a tale punto, non posso più eseguire l'istruzione successiva e l'unica cosa che posso fare è interrompere il debug. Ho provato ad aprire tera term nel pc dove girava il programma in vb2008 e inviando i caratteri dall'altro tutto funziona correttamente.
    Potete aiutarmi?
    Ciao,
    esattamente che problema da? Di solito esce una finestrella con sopra scritto l'errore.

  3. #3
    Ciao,
    non mi da alcun tipo di errore, solo mi disabilità i tasti "esegui istruzione", "esegui istruzione/routine" e "esci da istruzione/routine"e le uniche opzioni disponibili sono "interrompi tutto" e "termina debug". Rimane in questa condizione per un tempo indefinito se non interrompo il debug.

  4. #4
    Probabilmente allora non riceve dati in ingresso.
    Baudrate e canale giusti al 100%?

  5. #5
    Ho verificato che i parametri che ho inserito nel codice quando apro la porta ( COM1, 9600, Ports.Parity.None, 8, 1) fossero uguali anche nelle impostazioni della porta del converter, ed in effetti è così. Ho provato ad utilizzare la procedura per l'invio di stringhe e quella funziona perfettamente. Come ho scritto nel primo messaggio se scambio delle stringhe utilizzando tera term nei due pc tutto funziona.

  6. #6
    Buongiorno a tutti,
    stamani ho provato ad utilizzare la procedura della ricezione di stringhe da seriale usando VB2008 Express Edition in entrambi i pc e per l'invio di stringhe ho usato il seguente codice:
    codice:
    Import System
    Import System.IO
    
    Public Class Form1
    
    Private Sub Form1_Load (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          
     Using COM1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1",   9600,IO.Ports.Parity.None ,8, 1)
                    COM1.WriteLine("prova")
                End Using
       Close()
    
       End Sub
    
    End Class
    In questo secondo caso riesco a leggere la stringa inviata, al contrario di quando utilizzavo Tera Term Pro per l'invio della stringa. Ora il problema sorge quando non invio nulla e all'interno del Do ( vedasi codice del primo messaggio) devo riassegnare il valore a Incoming. Infatti mi si ripresenta il problema originario in cui non posso più eseguire alcuna istruzione. Mi sapreste dire come mai?

  7. #7
    Prova a racchiudere l'istruzione ReadLine() tra un blocco try catch, cercando l'exception TimeoutException.
    codice:
           Try
                Dim message As String = COM1.ReadLine()
            Catch ex As TimeoutException
                'GESTIONE ERRORE
            End Try

  8. #8
    Perfetto, ho appena provato e funziona!!
    Grazie mille!!

  9. #9
    Ho ancora dei problemi con la ricezione di stringhe da porta seriale.
    Dopo aver effettuato le prove che ho descritto nei precedenti messaggi tra due pc, ho applicato il seguente codice allo strumento da cui voglio ricevere dei dati:
    codice:
    Public Class Gestione_dati
        Private Sub Gestione_dati_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Using COM1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1", 9600, Ports.Parity.None, 8, 1)
                COM1.WriteLine("Comando")
                COM1.Close()
            End Using
            Using COM1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM1", 9600, Ports.Parity.None, 8, 1)
                Try
                    COM1.ReadTimeout = 10000
                    Dim Incoming As String = COM1.ReadLine
                    COM1.Close()
                    Label1.Text = Incoming
                    Label1.Update()
      Catch ex As TimeoutException
                    COM1.Close()
                End Try
            End Using
        End Sub
    End Class
    Ho dovuto chiudere e riaprire la porta dopo aver mandato il comando allo strumento poichè altrimenti la label1assumeva il valore 'comando' e non leggeva la stringa generata dal dispositivo. In questa seconda versione che ho riportato ottengo a volte i dati che mi servono (o parte), a volte dei caratteri senza senso, come se ci fosse un problema con la velocità di ricezione. Il fatto è che le porte sono settate con i parametri giusti, sia dal lato del pc che da quello del dispositivo, e se richiedo i dati con Tera Term Pro tutto funziona.

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.