Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486

    [VB.NET] Porta Seriale e Problemi IO.IOException: Periodo di timeout scaduto

    Salve a tutti
    ho un problema che mi affligge e mi sfianca da parecchio tempo.
    Premetto che non sono un buon programmatore ma per necessità ho dovuto realizzare un software per la lettura di dati tramite seriale virtualizzata.
    La macchina in questione è una bilancia industriale, è passiva quindi bisogna interrogarla ogni volta per avere il dato/peso.

    l'ho strutturato come segue:

    ho impostato un timer che ogni 2 secondi interroga la pesa per recuperare il peso, questa è la SUB

    codice:
    Private Sub TimerPesa1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerPesa1.Tick
    Dim Request_Pesata1 As String
    If Port1.IsOpen = False Then Port1.Open()
    Request_Pesata1 = "?#0119" & vbCrLf
    Port1.Write(Request_Pesata1) 
    End Sub
    Poi ho creato un altra sub che riceve il dato e lo elabora:
    codice:
     
    Private Sub port_DataReceived1(ByVal sender As Object, ByVal e As _
                System.IO.Ports.SerialDataReceivedEventArgs) Handles Port1.DataReceived
            Dim SerialData1 As String
            Control.CheckForIllegalCrossThreadCalls = False
            If Port1.BytesToRead > 0 Then
                SerialData1 = ""
                Do
                    SerialData1 = SerialData1 & Chr(Port1.ReadByte)
                    If Port1.BytesToRead = 0 Then
                        Exit Do
                    End If
                Loop
                Port1.Close()
    ....
    ....
    ...
    In questa parte che non posto continuo, elaborando il dato e salvandolo in un file di log e nel database.
    Ora sembrerebbe funzionare tutto correttamente ma ad un certo punto non meglio specificato mi si presenta un errore

    System.IO.IOException: Periodo di timeout del semaforo scaduto.

    at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
    at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
    at System.IO.Ports.SerialPort.Open()
    at Main.TimerPesa2_Tick(Object sender, EventArgs e)
    at System.Windows.Forms.Timer.OnTick(EventArgs e)
    at System.Windows.Forms.Timer.TimerNativeWindow.WndPr oc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    Questo errore si verifica da quando ho inserito una seconda pesa su una seconda seriale sempre virtualizzata.

    come faccio a fare catch dell'errore e gestiro facendo andare avanti il tutto?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486
    aggiungo una informazione non banale
    Questo è il software per la virtualizzazione della com

    http://www.icpdas.com/products/Softw...omm/vxcomm.htm

    e mi sono accorto di usare una vecchia release 1.x
    mentre l'ultima è la 2.x

    quante probabilità ho che il problema sia legato al driver di virtualizzazione?

    visto che l'errore sopra indicato non si presenta tutti i giorni?



  3. #3
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486
    uppettino

  4. #4
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486
    riuppettino

    nessuno riesce a darmi una mano?


  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    1,263
    purtroppo non ho molta esperienza a riguardo, pero' ci provo...
    hai come campo Port1 (credo, con vb.net non ho molta confidenza) che usi nella sub, ma su quale porta è impostato? voglio dire, quando accedi alla porta controlli che sia quella giusta? (tipo com1 o 2 ecc.) oppure ogni volta la reimposti prima di chiamare la sub? e se è cosi' (la reimposti) non è che il timer delle due si accavallano in alcuni momenti?

  6. #6
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486
    Originariamente inviato da U235
    purtroppo non ho molta esperienza a riguardo, pero' ci provo...
    hai come campo Port1 (credo, con vb.net non ho molta confidenza) che usi nella sub, ma su quale porta è impostato? voglio dire, quando accedi alla porta controlli che sia quella giusta? (tipo com1 o 2 ecc.) oppure ogni volta la reimposti prima di chiamare la sub? e se è cosi' (la reimposti) non è che il timer delle due si accavallano in alcuni momenti?
    intanto grazie per averci provato...
    aggiusto il tiro e spiego meglio

    allora le porte vengono inizializzate all'avvio del programma

    port1 corrisponde a com11
    port2 corrisponde a com12
    etc,etc

    ogni porta ha un suo timer distinto e separato timer1,timer2, etc,etc questo perchè vengono avviati dopo una procedura di setup della linea di produzione e c'è la possibilità di stopparli per poi avviarli.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    1,263
    usi dei thread sincronizzati? magari il componente che usi è progettato per l'accesso a una singola porta e non riesce a gestire l'eventuale altra porta se chiamata in contemporanea

    o magari qualcosa che crea conflitto in una porta.

    ad esempio una cosa del genere mi era capitata con il bluetooth che quando girava col mio programma era sulla com1 ma se facevo partire il software del pennino dopo il mio mi impostava a com2 (il pennino) e il mio programma la continuava a cercare su com1 (chiaramente era un problema che dovevo risolvere a livello di codice che era scritto male)

  8. #8
    Utente di HTML.it L'avatar di heroes3
    Registrato dal
    Aug 2001
    Messaggi
    2,486
    Originariamente inviato da U235
    usi dei thread sincronizzati? magari il componente che usi è progettato per l'accesso a una singola porta e non riesce a gestire l'eventuale altra porta se chiamata in contemporanea

    o magari qualcosa che crea conflitto in una porta.

    ad esempio una cosa del genere mi era capitata con il bluetooth che quando girava col mio programma era sulla com1 ma se facevo partire il software del pennino dopo il mio mi impostava a com2 (il pennino) e il mio programma la continuava a cercare su com1 (chiaramente era un problema che dovevo risolvere a livello di codice che era scritto male)
    proverò a vedere per il momento ho trovato giusto un upgrade firmware del convertitore seriale ethernet e un upgrade del software di virtualizzazione delle porte com
    provo su questa strada x il momento anche perchè l'errore è troppo randomico e non meglio identificato tipo ogni un giorno si 3 no poi 4 no poi 2 di fila si insomma un macello e non ho manco l'ambiente di test adeguato visto he lavoro direttamente in produzione con i casini che ne conseguono (produzione ferma etc,etc)

    se hai altre dritte fanno sempre comodo


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 © 2020 vBulletin Solutions, Inc. All rights reserved.