Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    48

    [VB]Conversione file ASCII

    Salve, vi spiego in poche parole il mio dubbio:

    Io ho un programma in VB che tramite una porta seriale riceve da una bilancia elettronica dei dati sottoforma di sequenza di caratteri ASCII. Tra le altre cose io devo estrapolare da questi dati un campo in particolare e inserirlo in un database (e questo e' semplicissimo).

    Il problema qual e'?

    Il problema sta nel fatto che non riesco a convertire la sequenza di caratteri ASCII in qualcosa di leggibile e manipolabile.

    Per spiegarmi, la sequenza di dati che arriva e' fatta cosi' (carattere per carattere):

    "carattare nuova riga(0x13)" + "carattere ritorno carrello(0x10)" + "segno della tara" + "prima cifra della tara" + "seconda cifra della tara" + "terza cifra della tara" + "virgola" + "decimale della tara" + "tab(0x09)" + ....... (altri dati nello stesso formato della tara).... + "tab(0x09) + "carattere di controllo"

    In pratica una sequenza ad esempio e' fatta cosi'

    0x13 0x10 +124,4 TAB +054,6 ............... TAB -234,0 TAB C

    Pero' tutto cio' mi arriva in ASCII e non riesco ad ottenere la stringa appena scritta qua sopra.
    Pensavo banalmente di estrarre un carattere alla volta da cio'che leggo nel buffer e fare

    Chr(n)

    ma ovviamente non funziona cosi'...

    Non so se esiste un algoritmo o una funzione particolare per fare cio', ma io non ho trovato nulla per ora, per questo chiedo a voi

    Grazie in ogni caso.

  2. #2
    Con che versione di VB stai lavorando? Con che componente/classe ottieni i dati dalla porta seriale?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    48
    Giusto, non ne avevo fatto menzione di cio'...

    Visual Basic 6.0

    La componente utilizzata per l'acquisizione dalla seriale e' la MSComm

  4. #4
    Puoi postare il codice che utilizzi?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    48
    Certo, qui di seguito riporto il codice di Form_Load e di MsComm_OnComm:

    codice:
    Private Sub Form_Load()    
     Reload:
        ' Int seriale        
        MSComm6.CommPort = 1     
        MSComm6.Settings = "19200,n,8,1"     
        MSComm6.PortOpen = True     
        MSComm6.RThreshold = 1        
    End Sub  
    
    
    Private Sub MSComm6_OnComm()     
    
    Dim Rx$     
    Dim Buffer$     
    Dim Ok As Integer     
    Dim stLinkCriteria As String     
    Dim stDocName As String     
    Dim stDocName2 As String     
    Dim i As Double     
    Dim last As String     
    Dim autotara As Single     
    Dim soglia1 As Single     
    Dim soglia2 As Single     
    Dim pesofinale As Single     
    Dim corrstat As Single     
    Dim sogliafinale As Single     
    Dim tempciclo As Single     
    Dim tempoveloce As Single     
    Dim tempolento As Single
              
    stDocName2 = "RapportoInsacco"     
    Ok = 0     
    Peso = 0          
    
    Do While (Len(Buffer$) < 68)         
          DoEvents         
          Buffer$ = Buffer$ & MSComm6.Input     
    Loop       
    
    'qui ci vanno le istruzioni per estrarre i dati che mi servono     
    'dal file ASCII              
    
    If (Ok = 1) Then             
          Buffer$ = "" 
          autotara = CSng(Chr(Mid(eccolo, 5, 2)) + Chr(Mid(eccolo, 7, 2)) +   Chr(Mid(eccolo, 9, 2)) + Chr(Mid(eccolo, 11, 2)) + Chr(Mid(eccolo, 13, 2)) + Chr(Mid(eccolo,   15, 2)))               
          soglia1 = ...             
          soglia2 = ...             
          pesofinale = ...             
          corrstat = ...             
          sogliafinale = ...             
          tempciclo = ...             
          tempoveloce = ...             
          tempolento = ...              	   
    
          ' pezzo di codice per la gestione del DB e delle stampe             
          Me.Data = Date             
          Me.Ora = Time             
          p = p + 1             
          If (k < MaxBB) Then                 
                 Me.Lotto.Value = Form_MasInsacco.Lotto.Value                 
                 Me.Numero.Value = Form_MasInsacco.Numero.Value                 
                 Me.Peso.Value = CDbl(Mid$(eccolo, 22, 5))                 
                 eccolo = ""                 
                 Me.BigBag.Value = k                 
                 k = k + 1                 
                 DoCmd.OpenForm "MasBigBag", , , stLinkCriteria                 
                 Form_MasInsacco.BBPesati.Value = Form_MasInsacco.BBPesati.Value + 1                                  
                 stDocName = "QueryEtichette"                 
                 DoCmd.OpenQuery stDocName, acNormal, acEdit                      
                 stDocName = "ReportEtichette"                 
                 DoCmd.OpenReport stDocName, acPreview                 
                 DoCmd.Close acReport, stDocName, acSaveNo                          
          Else                 
                 Me.Lotto.Value = Form_MasInsacco.Lotto.Value                 
                 Me.Numero.Value = Form_MasInsacco.Numero.Value                 
                 Me.Peso.Value = CDbl(Mid$(eccolo, 22, 5))                 
                 eccolo = ""                 
                 Me.BigBag.Value = k                 
                 DoCmd.OpenForm "MasBigBag", , , stLinkCriteria                 
                 Form_MasInsacco.BBPesati.Value = Form_MasInsacco.BBPesati.Value + 1                 
                 stDocName = "ReportEtichette"                 
                 DoCmd.OpenReport stDocName, acNormal                 
                 GoTo fine             
          End If   
              
    GoTo end_sub                   
    
    fine:         
    DoCmd.Close         
    
    end_sub:         
      End If   
    End Sub

  6. #6
    Non ci capisco più niente... se MSComm ti fornisce una stringa (in cui i byte provenienti dalla seriale sono già stati interpretati come caratteri ASCII), dove sta il problema? Cosa contiene buffer$ alla fine del loop?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    DoCmd.OpenQuery

    DoCmd.Close

    ?

    Sicuro che parliamo di VB6 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    48
    Sicuro che parliamo di VB6 ?
    VB6.3 per la precisione...


    Non ci capisco più niente... se MSComm ti fornisce una stringa (in cui i byte provenienti dalla seriale sono già stati interpretati come caratteri ASCII), dove sta il problema? Cosa contiene buffer$ alla fine del loop?
    Contiene caratteri illeggibili, i quadratini vuoti per intendersi, come quando apri con NotePad un file non di testo e ti appare come un testo incomprensibile...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    VB6.3 ?

    Forse parli di VBA per Access e non di "Visual Basic 6" (quello di Visual Studio 6, per capirci ...).

    Quindi stai scrivendo codice dentro Access ? E' cosi' ?

    Comunque, i caratteri che non puoi leggere sono appunto

    0x13 0x10

    e i

    TAB

    di cui parlavi.

    Eliminali dalla stringa se non ti servono ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    48
    Ops non l'avevo detto che era VBA?

    Scusate, la carenza di sonno e' fatale per me...

    Cmq sia ho trovato il bandolo della matassa ovvero... era colpa della bilancia che trasmetteva male!!!

    Roba da matti... :rollo:

    Ora funziona tutto bene, arriva la stringa esattamente come doveva arrivare e tutto fila liscio...

    Grazie per l'attenzione e la cortesia e scusate se vi ho fatto perdere tempo

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.