24.02.2006, 19:13
Beitrag #1
|
|
|
27.02.2006, 10:20
Beitrag #2
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Positionen auslesen
Hallo Bertl,
ich habe mir dein VI angeguckt. Was genau läuft denn nicht?
Ich habe gesehen du hastnur eine While-Schleife in der du einen Eventhandling machst. Wobei 200 ms als Timeuot angeschlossen ist. Du wolltest aber doch 20 ms ?!
Ich würde vorschlagen, du machst noch eine zusätzliche While-Schleife (Task), die nur alle 20 ms einen K zum uC sendet. Und eine weitere Task zum Auslesen der seriellen Schnittstelle.
Die Aufgabe an sich ist nicht schwer, ich mache schon seit einem Jahr solche Aufgaben (wobei ich mit bis zu 8 Units gleichzeitig kommuniziere). Und ich will dir dazu sagen, dass du ohne Multithreading nicht weiter kommst. Also benutze die Suchfunktion des Forums und lese was darüber.
Gruss, Eugen
|
|
|
28.02.2006, 22:41
Beitrag #3
|
|
|
01.03.2006, 10:38
Beitrag #4
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Positionen auslesen
Hallo Bertl,
dieses VI ist zum Parsen eines Strings, den du z.B. von der seriellen Schnittstelle empfängst. Am Ausgang gibt dieses VI alle Strings, die durch Zeilenende voneinander getrennt sind und mit einem Doppelpunkt anfangen. Natürlich kannst du dieses VI in deins einbinden (warum nicht?).
Die Frage ist nur:
ist dein String, den du vom uC empfängst genauso oder so ähnlich aufgebaut?
Dann ist zu beachten, dass du über serielle Schnittstelle nicht nur komplette Nachrichten empfängst, sondern auch abgebrochene (hängt davon ab, wie schnell du die serielle ausliest und wie der uC sendet). Du hast also mit einem Datenstrom zu tun. Deshalb müssen die abgebrochenen Zeilenteile evtl. "gepuffert" werden. Zu diesen Resten soll dann eine neue Portion Daten hinzukommen. Dafür eignet sich sehr gut eine Queue (Synchronisationspalette) oder ein Schieberegister in der Parsetask.
Wie ist das Protokoll? ASCII oder binär?
Ich empfehle dir, wie schon gesagt verschiedene Aufgaben in getrennte Tasks zu aufzuteilen. Bei dir wären das:
1. Eventhandling
2. Sendetask
3. Lesetask (evtl. mit dem Parsen und Anzeigen zusammen)
4. evtl. Parsetask
5. evtl. Anzeigetask
Das heist du machst 3 bis 5 parallellaufende Whileschleifen, die miteinander z.B. über lokale Variablen kommunizieren.
Wenn du es gemacht hast, wirst du sehen, wie übersichtlich und einfach dein Programm wird.
Alles, was ich bis jetzt gesagt habe, ist mehr für grosse Projekte gedacht, ist aber auch für kleine anwendbar.
Wenn in deinem Projekt nur ein paar Strings vom uC empfangen, gesendet und angezeigt werden müssen, dann programmiere weiter so, wie bis jetzt. Es ist natürlich fraglich was am schnellsten ist. Meine Methode ist auf jeden Fall effizienter.
Gruss, Eugen
|
|
|
05.03.2006, 12:18
Beitrag #5
|
|
|
06.03.2006, 10:44
Beitrag #6
|
|
|
12.03.2006, 13:38
Beitrag #7
|
|
|
13.03.2006, 14:18
Beitrag #8
|
|
|
17.03.2006, 22:49
Beitrag #9
|
Bertl
LVF-Grünschnabel
Beiträge: 16
Registriert seit: Feb 2006
kA
|
Positionen auslesen
Hallo Eugen!
Danke für deine Mithilfe!!!Ich habe es heute ausprobiert. Es funktioniert. Es hat noch einen kleinen Fehler. Wenn ich in die 2. Haltestelle einfahre gibt mir der Tank kurz die 2 aus. Hast du einen Vorschlag wie man so etwas lösst? Wie kann man mehrere Halltestellen herausfiltern aus dem vi, wenn ich die restlichen Haltestellen auf meinem Tank ansehen möcht?
Gruß Bertl
|
|
|
| |