Muss ich beim Empfangen -> Auswerten -> Senden auf der gleichen Connection etwas bestimmtes beachten? Ich habe nämlich folgende Situation: Ich bekomme auf dem Bus eine Message im 10ms Takt. So lange ein Wert in einem bestimmten Bereich ist, möchte ich eine Nachricht im 5ms Takt absenden. Deshalb sende ich immer nach erfolgreichem Empfang zwei Messages, die eine sofort und die eine 5ms später.
Das Problem ist nun, dass es nur ohne die zweite Message funktioniert (siehe Code). Dann wird Wert scheinbar korrekt ausgelesen und interpretiert. Sobald ich aber auch die zweite Message sende, funktioniert das irgendwie nicht mehr, es wird zwar im 5ms Takt gesendet aber es scheint so als ob mit dem Empfang etwas nicht mehr funktionieren würde. Kann das ein Problem mit der leistungsfähigkeit des Rechners sein?
Code: Select all
Sub Versuch()
Dim MyClient, PcanConn
Set MyClient = CreateObject("PCAN3.PCANClient")
MyClient.Device = "pcan_pci"
MyClient.Name = "Macro"
Set PcanConn = MyClient.Connections.Add("Versuchsbus")
Dim msg
Set msg = MyClient.Messages.Add
With msg
.ID = &H181
.DLC = 2
.Data(0) = &H00
.Data(1) = &H00
End With
PcanConn.RegisterMsg &H400, &H400, False, False
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Dim Wert
Wait 1000
While true
' Endless loop
Do While not RcvMsg.Read ' Eingehende Msg im 10 ms Takt
Wait 1
Loop
If (RcvMsg.LastError = pcanErrorOk) And (RcvMsg.Data(0) = &H01) Then
'read Wert
Wert= RcvMsg.Data(1)
End If
If (Wert < 6) Then
If (MyClient.XmtQueueEmpty) Then
msg.Write PcanConn, 0
msg.Write PcanConn, (MyClient.GetSystemTime + 5) 'OHNE DIESE ZEILE FUNKTIONIERT ES GRUNDSAETSLICH
End If
End If
Wend ' Endless Loop
End Sub
Chris