Re: Problem beim Senden und Empfangen auf gleicher Connectio
Posted: Wed 6. Nov 2013, 11:53
Besten Dank für den Hinweis.U.Wilhelm wrote:OK, Sie lesen nicht richtig
Code: Select all
' Hier lesen Sei in einer loop die queue des Treiber solange bis eine Nachricht in der Queue gefunden wurde
' genau eine wird dann gelesen und in die CAN Datenstruktur "RcvMsg" kopiert
' #Einverstanden
Do While not RcvMsg.Read ' Eingehende Msg im 10 ms Takt
Wait 10 ' wenn 10 ms dann auch 10 ms verwenden
Loop
' Jetzt haben Sie eine Nachricht empfangen und müssen sehen ob diese gültig war und ob das Datenbyte 1 den Wert 01 hat
' #Einverstanden
If (RcvMsg.LastError = pcanErrorOk) And (RcvMsg.Data(0) = &H01) Then
'jetzt schreiben den Inhalt des Datenbyte 2 in die Variable Wert
' #Einverstanden
Wert= RcvMsg.Data(1) ' Wert aus DB1 lesen
End If
' Wenn das lesen beim ersten Durchlauf nicht OK war, oder das Datenbyte 1 nicht 0x01, dann steht in Wert "irgendwas"
' #Nein, nicht "irgendetwas" sondern der letzte gültige Wert - oder täusche ich mich da?
' #Es ist die Absicht, dass der letzte gültige Wert bleibt bis ein neuer gültiger Wert kommt.
msg.Data(0) = Wert ' Diese Zeile hatte ich, wie mehrmals oben erwähnt, nachträglich eingeführt
' ja ist ja schön - aber was für ein Sinn hat das? msg ist doch eine komplette andere CAN Msg Struktur - Sie schreiben da jetzt halt den Wert rein ..OK?
' #Ja, ich kopiere den Wert von der Empfangs-Struktur in die Sende-Stuktur, wo liegt das Problem darin?
' #Siehe auch Frage weiter unten.
' wenn das zweite mal durch die Loop gegangen wird ist da auch noch der Altwert drin - sie löschen die Werte ja nicht nach einer Loop...
'PrintToOutputWindow "Wert : " & Wert
If (Wert < 6) Then ' Nur wenn Wert <6
If (MyClient.XmtQueueEmpty) Then ' und die Queue leer (macht keinen Sinn Queue ist 32.000 Nachrichten groß - wenn Sie die erreicht haben haben sie ein anders Problem)
' # Es geht gar nicht darum, dass ich Angst habe vor einem vollen Buffer, aber um die Echtzeit.
' # D.h. lieber kein Wert als ein alter Wert auf dem Bus. Trotzdem danke für den Hinweis.
msg.Write PcanConn, 0 ' so -- und nun schreiben Sie die CAN Struktur "msg" NICHT die "RcvMsg" - das sind doch 2 verschiedene Variabeln ...ist doch logisch oder
' # Ja, wo liegt das Problem? Siehe unten.
' klar sendet er jetzt den Wert raus wenn Sie vorher den Wert in diese CAN MSG Struktur geschrieben haben , ansonsten wird er "irgendwas" schreiben - sie haben ja nichts eingestellt
msg.Write PcanConn, (MyClient.GetSystemTime + 5) ' und hier nochmal , halt nur 5ms später
End If
End If