Oppure

Loading
19/04/10 14:41
Serra_castelli
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


CLS
OPEN "com1:9600,n,8, ,cs,ds,cd" FOR RANDOM AS #1 'si apre la PORTA SERIALE maniera bidirezionale
PRINT #1, "vdc; format 1"  'SI CHIEDE COSA MISURARE:vdc,vac,adc,aac,ohms,freq
                           'format 1 senza unit… di mis., format 2 con U.d.M.

LINE INPUT #1, p$           'SONO DUE STRINGHE CHE IL MULTIMETRO
LINE INPUT #1, q$           'INVIA PER CONTOLLI NON UTILIZZATE QUI
10
PRINT #1, "meas?"           'SI CHIEDE PERIODICAMENTE LA MISURA
LINE INPUT #1, p$           'STRINGA NON UTILIZZATA QUI
LINE INPUT #1, r$           'STRINGA CON I VERI DATI
LINE INPUT #1, q$           'STRINGA NON UTILIZZATA QUI
LOCATE 1, 1: PRINT r$
a$ = INKEY$
IF a$ = "e" GOTO 200        'SONO STATE RICEVUTE TUTTE LE STRINGHE INVIATE
GOTO 10                     'SI TORNA A CHIEDERE IL DATO
200

Questo invece è il mio elaborato in visual(ho usato l'mscomm)
Dim r$
Dim q$
Dim p$

Private Sub Command1_Click() 'seriale
MSComm2.CommPort = 1 'Selezioniamo la COM1
MSComm2.Settings = "9600,n,8," 'Le impostazioni della seriale
If MSComm2.PortOpen = False Then MSComm2.PortOpen = True 'Apriamo la porta.
MSComm2.Output = "vdc; format 1"
p$ = MSComm2.Input
q$ = MSComm2.Input
MsgBox "Porta aperta"
End Sub

Private Sub Command2_Click()
MSComm2.Output = "meas?"
p$ = MSComm2.Input
r$ = MSComm2.Input
q$ = MSComm2.Input
Text1.Text = r$
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 19/04/10 14:48
aaa
17/06/11 13:17
1n4148
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.
aaa