Salve,
sto facendo i primi passi nel mondo VB6, non senza difficoltà.
In questo momento sto cercando di far comunicare il pc con un dispositivo, un sensore, che acquisisce dati continuativamente ad una frequenza di campionamento fissata e li memorizza in una memoria ram. Tramite comunicazione basata su rs-232 effettuata per mezzo di un cavo con le sole linee di TX, RX e GND (niente linee CTS, RTS, etc... per intenderci) e tramite la trasmissioine di determinati caratteri devo indirizzare ogni cella di memoria delle 8 totali e richiedere l'invio del byte in queste contenuto. Il sensore, non appena riceve il carattere relativo alla richiesta di trasmissione, trasmette al pc il contenuto della cella di memoria indirizzata.
Questa operazione deve essere ripetuta ciclicamente per tutte le celle di memoria e per un numero di volte infinito (spero di essere stato abbastanza chiaro).
Con l'oscilloscopio mi sono assicurato che iI pc (DCE) e il sensore (DTE) comunichino.
PROBLEMA:
Ho associato ad un evento di click su un pulsante l'iterazione che indirizza ciclicamente tutte le celle di memoria e richiede la trasmissione dei byte in esse presenti. Osservando sull'oscilloscopio la comunicazione noto che il pc trasmette ma il sensore no (nonostante sia indirizzato correttamente e nonostante gli venga richiesto di trasmettere).
Non riesco a fare in modo che quando il pc trasmette, il sensore non trasmetta e, viceversa, quando il sensore trasmette il pc non trasmetta. Una sorta di problema di temporizzazione.
Vorrei che una volta indirizzata una cella e richiesta la trasmissionie del dato in essa presente, il pc attenda che il dato venga ricevuto sul buffer e letto (cancellandolo dal buffer) per poi riprendere con l'indirizzamento della cella successiva e con la richiesta di trasmissione del dato in essa presente, e così per infinite volte.
Per rendere tutto ancora più chiaro, vi posto il codice.
Option Explicit
Dim startstop As Boolean
Dim buffer As Integer
Dim wordlow As String
Dim a As Integer
Dim i As Integer
Private Sub Command1_Click()
MSComm1.Output = Chr$(85) + Chr$(129) + Chr$(129) 'Attivazione sensore
End Sub
Private Sub Command3_Click() 'Iterazione di indirizzamento e richiesta trasmissione
startstop = True
i = 0
Do While startstop = True
buffer = MSComm1.InBufferCount
Do While buffer = 0
For a = i To 25 Step 1
Select Case a
Case 0
MSComm1.Output = Chr$(&H0)
MSComm1.Output = Chr$(&H1)
MSComm1.Output = Chr$(&H0)
MSComm1.Output = Chr$(&H2)
MSComm1.Output = Chr$(&HA)
MSComm1.Output = Chr$(&H5)
MSComm1.Output = Chr$(&H2)
i = (a + 1)
Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
MSComm1.Output = Chr$(&H2)
i = (a + 1)
Case 14, 15
i = (a + 1)
Case 15
MSComm1.Output = Chr$(&H0)
MSComm1.Output = Chr$(&H1)
MSComm1.Output = Chr$(&H0)
MSComm1.Output = Chr$(&H12)
MSComm1.Output = Chr$(&HA)
MSComm1.Output = Chr$(&H5)
MSComm1.Output = Chr$(&H2)
i = (a + 1)
Case 16, 17, 18, 19, 20, 21, 22, 23, 24
MSComm1.Output = Chr$(&H2)
i = (a + 1)
Case 25
MSComm1.Output = Chr$(&H2)
i = 0
End Select
Exit For
Next a
Loop
Loop
End Sub
Private Sub Command4_Click()
startstop = False
End Sub
Private Sub Form_Load()
MSComm1.RThreshold = 1
MSComm1.InputLen = 0
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
wordlow = MSComm1.Input
End If
End Sub

Rispondi quotando