Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Fluke 45 con interfaccia RS32
Forum - Visual Basic 6 - Fluke 45 con interfaccia RS32

Avatar
Serra_castelli (Normal User)
Newbie


Messaggi: 2
Iscritto: 19/04/2010

Segnala al moderatore
Postato alle 16:41
Lunedì, 19/04/2010
Salve, e grazie anticipatamente per l'aiuto ho un problema ad interfacciare uno strumento di misura, il fluke 45 con visual, mentre in Qbasic ho fatto un programmino che funziona perfettamente, questo è il programma in QB


Codice sorgente - presumibilmente Visual Basic 6

  1. CLS
  2. OPEN "com1:9600,n,8, ,cs,ds,cd" FOR RANDOM AS #1 'si apre la PORTA SERIALE maniera bidirezionale
  3. PRINT #1, "vdc; format 1"  'SI CHIEDE COSA MISURARE:vdc,vac,adc,aac,ohms,freq
  4.                            'format 1 senza unit… di mis., format 2 con U.d.M.
  5.  
  6. LINE INPUT #1, p$           'SONO DUE STRINGHE CHE IL MULTIMETRO
  7. LINE INPUT #1, q$           'INVIA PER CONTOLLI NON UTILIZZATE QUI
  8. 10
  9. PRINT #1, "meas?"           'SI CHIEDE PERIODICAMENTE LA MISURA
  10. LINE INPUT #1, p$           'STRINGA NON UTILIZZATA QUI
  11. LINE INPUT #1, r$           'STRINGA CON I VERI DATI
  12. LINE INPUT #1, q$           'STRINGA NON UTILIZZATA QUI
  13. LOCATE 1, 1: PRINT r$
  14. a$ = INKEY$
  15. IF a$ = "e" GOTO 200        'SONO STATE RICEVUTE TUTTE LE STRINGHE INVIATE
  16. GOTO 10                     'SI TORNA A CHIEDERE IL DATO
  17. 200


Questo invece è il mio elaborato in visual(ho usato l'mscomm)
Codice sorgente - presumibilmente VB.NET

  1. Dim r$
  2. Dim q$
  3. Dim p$
  4.  
  5. Private Sub Command1_Click() 'seriale
  6. MSComm2.CommPort = 1 'Selezioniamo la COM1
  7. MSComm2.Settings = "9600,n,8," 'Le impostazioni della seriale
  8. If MSComm2.PortOpen = False Then MSComm2.PortOpen = True 'Apriamo la porta.
  9. MSComm2.Output = "vdc; format 1"
  10. p$ = MSComm2.Input
  11. q$ = MSComm2.Input
  12. MsgBox "Porta aperta"
  13. End Sub
  14.  
  15. Private Sub Command2_Click()
  16. MSComm2.Output = "meas?"
  17. p$ = MSComm2.Input
  18. r$ = MSComm2.Input
  19. q$ = MSComm2.Input
  20. Text1.Text = r$
  21. End Sub


l'unica stinga con dentro il vero dato è r$ ma mi risulta una stringa vuota.
Qualcuno può darmi una mano:d?

Ultima modifica effettuata da Serra_castelli il 19/04/2010 alle 16:48
PM Quote
Avatar
1n4148 (Normal User)
Newbie


Messaggi: 7
Iscritto: 10/06/2011

Segnala al moderatore
Postato alle 15:17
Venerdì, 17/06/2011
Salve
Avevo lo stesso problema ed ho risolto cosi:

Private Comando As String
Private StatoComm As Boolean
Private Dato As String
Private Sub Form_Load()
  On Error Resume Next
  'Imposta il titolo dell'applicazione
  App.Title = "PCFluke45"
  ' la posizioe e il titolo del form
  Me.Left = (Screen.Width - Me.Width) / 2
  Me.Top = (Screen.Height - Me.Height) / 2
  Me.Caption = App.Title
  Llabel2.Caption = "-8.8.8.8.8"
  Me.Show
End Sub

Private Sub Command1_Click()
  If StatoComm = False Then
    Command1.Caption = "Sconnetti"
    StatoComm = False
    Call ApriComm(StatoComm)
  Else
    Command1.Caption = "Connetti"
    StatoComm = True
    Call ApriComm(StatoComm)
    Timer1.Enabled = StatoComm
    Label1.Caption = "connesso = " & StatoComm
    Label2.Caption = "" 'pulisce il display
    Exit Sub
  End If
  Call InviaComando
  Label1.Caption = "connesso = " & StatoComm
  Timer1.Interval = 400 'Intervallo tra due letture consecutive
  Timer1.Enabled = StatoComm

End Sub


Private Sub Timer1_Timer()
   FrmFluke45.MSComm1.Output = "val?" + vbCrLf
   Start = Timer
Ripeti:
    Fine = Timer
   If Fine - Start < 0.3 Then GoTo Ripeti
'ritardo tra invio comando e lettura dal buffer
  InBuffer = MSComm1.Input 'Svuota il buffer
  ElaboraDato (InBuffer)
End Sub
'+++++++++++++++++++++++++++++++++++++++++++++++
Private Function Leggi(InBuffer)
On Error Resume Next
   ' Comunica al controllo di leggere l'intero buffer
   ' quando viene utilizzata la proprietà Input.
   ' Apre la porta.
  Comando = "val?; format1"
   ' Invia il comando di connessione e reset.
  MSComm1.Output = Comando + vbCrLf
End Function
'+++++++++++++++++++++++++++++++++++++++++++++
Private Sub ElaboraDato(Lettura)
For i = 1 To Len(Lettura)
  car = Asc(Mid(Lettura, i, 1))
  If car > 42 And car < 60 Or car = 69 Then
    Instring = Instring + Chr(car)
  End If
Next i
Label2.Caption = Instring 'Scrive il dato elaborato
Lettura = ""
End Sub
'+++++++++++++++++++++++++++++++++++++++++++++++++
Private Sub ApriComm(StatoComm)
  If StatoComm = False Then
    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,N,8,1"
    With MSComm1
      .InputLen = 0
      .RThreshold = 1
      .SThreshold = 0
      .InBufferSize = 1024       '1kb
      .InputMode = comInputModeText
      .Handshaking = comNone            'None
    End With
    MSComm1.PortOpen = True
    StatoComm = True
    If MSComm1.DSRHolding = False Then
      Msg = "Apparecchio probabilmente spento." & vbCrLf & _
      "Controllare che sia acceso e in linea."
      Invito = MsgBox(Msg, 1, Titolo, Help, Ctxt)
      MSComm1.PortOpen = False
      Esito = MSComm1.PortOpen
      Exit Sub
    End If
  Else
    MSComm1.PortOpen = False
    StatoComm = False
  End If
End Sub

Private Sub InviaComando()
Dim Comando As String
  ' Invia il comando di connessione e reset.
  Comando = "rems; *rst"
  MSComm1.Output = Comando + vbCrLf
  Buffer = MSComm1.Input 'svuota il buffer
  Comando = "ohms; format 1" + vbCrLf
  ' Predispone il comando che seleziona la misura di resistenza sul display 1.
  MSComm1.Output = Comando + vbCrLf 'invia il comando
  Buffer = MSComm1.Input 'svuota il buffer
End Sub

Spero sia utile.

PM Quote