Salve a tutti,
iIo stavo realizzando un programma che fa le seguenti cose:
-il mio programmino dovrebbe ricevere i dati da un pc esterno tramite una connessione seriale sulla COM1
-i dati sono in formato file txt(piccolissimi, 1 kb)
-una parte dei dati viene visualizzata sul pc ricevente ed immessa in un record.
Funziona tutto bene se non fosse che, ad esempio, dopo aver spedito 13 volte lo stesso file, al 14° invio mi appare "Errore di run-time '13' Tipo non corrispondente" e il programma si pianta.
Come mai? Cioe' perche' a volte l'invio riesce perfettamente e a volte mi compare l'errore invece?
Questo e' il codice Form_Load:
Questo e' il codice del Form_Timer:codice:Private Sub Form_Load() Reload: ' Int seriale Set Comm = New DatiBilancia Comm.CommPort = 1 Comm.Settings = "19200,N,8,1" Comm.OpenPort If Comm.State = 0 Then MsgBox "Impossibile aprire la porta" Comm.ClosePort GoTo Reload End If p = 0 ' Attiva il timer per la lettura periodica sulla porta seriale Me.TimerInterval = 1000 End Sub
E questo e' il codice della funzione Rx del modulo DatiBilancia:codice:Private Sub Form_Timer() dato = Comm.Rx If (dato <> 0) Then nuovo_record: If (x < MaxBB) Then DoCmd.GoToRecord , , acNewRec Me.Lotto.Value = Form_MasInsacco.Lotto.Value Me.Numero.Value = Form_MasInsacco.Numero.Value ' Me.CodiceProdotto.Value = Form_MasInsacco.Prodotto.Value Me.Peso.Value = dato Me.BigBag.Value = x x = x + 1 ' qui devo aspettare di ricevere i dati data, ora e peso Else DoCmd.GoToRecord , , acNewRec Me.Lotto.Value = Form_MasInsacco.Lotto.Value Me.Numero.Value = Form_MasInsacco.Numero.Value ' Me.CodiceProdotto.Value = Form_MasInsacco.Prodotto.Value Me.Peso.Value = dato Me.BigBag.Value = x GoTo fine End If GoTo end_sub fine: DoCmd.Close end_sub: End If End Sub
Vi ringrazio in anticipocodice:'Lettura della porta seriale Public Function Rx() As Double Const BufferLen = 66 Dim ReceivedBytes As Long Dim Buffer(BufferLen - 1) As Byte Dim fSuccess As Integer Dim ferror As Integer Dim PesoReceive As String Dim Testo As String Dim Ok As Integer Dim Conf1 As Integer Dim Conf2 As Integer Dim Autotara As Double Dim Soglia1 As Double Dim Soglia2 As Double Dim PesoFinale As Double Dim CorrStat As Double Dim SogliaFinale As Double Dim TempoCiclo As Double Dim TempoVeloce As Double Dim TempoLento As Double Dim CodicePeso As String Ok = 0 'Se la porta non è aperta esco If Not (hCom > 0) Then Exit Function End If ' legge dalla porta seriale; in particolare, imposta a 0 (NULL) ' l'ultimo parametro della ReadFile, poiche' la comunicazione ' sara' sincrona (non overlapped) fSuccess = ReadFile(hCom, Buffer(0), BufferLen, ReceivedBytes, 0) If (ReceivedBytes = 0) Then Exit Function End If If (fSuccess <> 0) Then 'if ((Buffer(0) = "0x13)&(Buffer(1) = "0x10)) PesoReceive = Left(StrConv(Buffer(), vbUnicode), ReceivedBytes) Testo = Left(PesoReceive, 3) Conf1 = StrComp(Testo, Chr$(13) & Chr$(10) & "+", 1) Conf2 = StrComp(Testo, Chr$(13) & Chr$(10) & "-", 1) If ((Conf1 = 0) Or (Conf2 = 0)) Then Ok = 1 Autotara = CDbl(Mid$(PesoReceive, 2, 7)) Soglia1 = CDbl(Mid$(PesoReceive, 9, 7)) Soglia2 = CDbl(Mid$(PesoReceive, 16, 7)) PesoFinale = CDbl(Mid$(PesoReceive, 23, 7)) CorrStat = CDbl(Mid$(PesoReceive, 30, 7)) SogliaFinale = CDbl(Mid$(PesoReceive, 37, 7)) TempoCiclo = CDbl(Mid$(PesoReceive, 44, 7)) TempoVeloce = CDbl(Mid$(PesoReceive, 51, 7)) TempoLento = CDbl(Mid$(PesoReceive, 58, 7)) CodicePeso = Mid$(PesoReceive, 66, 1) End If Else ferror = Err.LastDllError ' gestione errore End If If (Ok = 1) Then Rx = PesoFinale End If End Function![]()

Rispondi quotando