LabVIEWForum.de - Serielle Schnittstelle

LabVIEWForum.de

Normale Version: Serielle Schnittstelle
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen,
ich bin im 2. Ausbildungsjahr und muss ein Projekt machen mit LabView.
Allerdings hatte ich nur 2 Schulstunden mit LabView vorher zutun.
Ich hänge momentan an der seriellen Schnittstelle fest.
Mein Arbeitskollege soll für das Projekt eine Platine herstellen. Er programmiert diese auch selber.
Das heißt ich kommuniziere über die serielle Schnittstelle mit ihm.
Jetzt ist es so, dass wir ein Programm für einen Argonblock schreiben müssen. Dieses Programm soll dann die 8 vorhandenen Ventile in 9 verschiedenen Messungen testen.
Das funktioniert auch. Das habe ich so gelöst, indem ich anhand der "offenen" Ventile die Binärzahl als Kommunikation benutze. Dies funktioniert auch von beiden Seiten.
Jetzt ist es aber so, dass ich 5 Drucksensoren einbauen soll die bei den jeweiligen Messungen einen min. Wert erreichen muss.
Jetzt soll ich meinem Kollegen über die serielle Schnittstelle von mir Daten geschickt bekommen, welche Drucksensoren welchen Wert mindestens erreichen sollen. Danach soll ich über die serielle Schnittstelle auslesen welche Wertegemessen worden sind durch seinem Programm (schickt mir die Messwerte).

Ich bin da total am verzweifeln und mein Vorgesetzter sagt mir nur, dass ich es alleine rausfinden soll.
Seit einer Woche sitze ich nun daran fest.
Ich hoffe mir kann jemand helfen Big Grin
Hallo Lou,

Zitat:Das habe ich so gelöst, indem ich anhand der "offenen" Ventile die Binärzahl als Kommunikation benutze. Dies funktioniert auch von beiden Seiten.
Zu deinem aktuellen VI:
- ich halte es für unschön (unsauber), immer mehrere VISAWrite-Funktionen parallel aufzurufen, wenn du hier mit einer SharedResource arbeitest. Bitte nutze den Error-Draht, um diese Write-Operationen nacheinander abarbeiten zu lassen! (Oder baue dir einfach einen großen String aus den Einzelkommandos…)
- Um einen Fehler anzuzeigen, muss man nicht jedesmal einen ErrorCluster bauen. Einfach die Fehlermeldung in einem Stringindicator anzeigen sollte auch ausreichen…

Zitat:Jetzt soll ich meinem Kollegen über die serielle Schnittstelle von mir Daten geschickt bekommen, welche Drucksensoren welchen Wert mindestens erreichen sollen. Danach soll ich über die serielle Schnittstelle auslesen welche Wertegemessen worden sind durch seinem Programm (schickt mir die Messwerte).
Du hast doch nun schon mehrere Write-Funktionen in deinem VI, da kann es doch nicht so schwer sein, ein paar weitere für die neuen Befehle (Druckwert=xxx) hinzuzufügen…
(Das gleiche bei der Abfrage der Messwerte.)
Was genau ist dein Problem?
Hallo Gerd,
mein Problem ist:
ich habe in einem neuen VI ein Cluster erstellt mit den 5 Drucksensoren. Die habe ich dann "nach Namen aufschlüsseln" gemacht.
Jetzt weiß ich das dort entweder "true" oder "false" rauskommt. wie mache ich denn weiter, das ich dort die gesendeten Messdaten überprüfe?
Ich kann das ganze ja auch von Boolisch in eine Zahl wandeln lassen, aber dann bekomme ich ja nur 0 oder 1 raus. Ich will aber wissen ob die Drucksensoren den min. Wert erreicht haben oder nicht.

PS: Das mit dem unsauber weiß ich, aber ich will erstmal das Programm so weit fertig haben, das nachher nur noch der "feinschliff" gemacht werden muss. Smile
Hallo Lou,

Zitat:Jetzt weiß ich das dort entweder "true" oder "false" rauskommt. wie mache ich denn weiter, das ich dort die gesendeten Messdaten überprüfe? Ich kann das ganze ja auch von Boolisch in eine Zahl wandeln lassen, aber dann bekomme ich ja nur 0 oder 1 raus. Ich will aber wissen ob die Drucksensoren den min. Wert erreicht haben oder nicht.
Was steht denn in dem Cluster drin? Sind dort die Messwerte drin - oder nur das Ergebnis deines Limit-Tests?
Wenn du wissen willst, ob der Min-Wert erreicht wurde, musst du nur das Maximum der Messwerte berechnen…

Zitat:Das mit dem unsauber weiß ich, aber ich will erstmal das Programm so weit fertig haben, das nachher nur noch der "feinschliff" gemacht werden muss.
Du erstellst also erst einmal ein Programm, das aufgrund deiner Programmierung zu fehlerhaftem Verhalten neigen kann, um dann hinterher, wenn alle anderen (Folge-)Fehler beseitigt wurden, diese zu beheben?
Guten morgen,
ich hoffe mir kann jemand helfen, denn das ganze muss bis 10 Uhr geklärt sein. Big Grin (überhaupt keinen Zeitdruck)
Und zwar kommuniziere ich über die serielle Schnittstelle mit einem Arduino.
Ich schicke dem Arduino eine Binärzahl, denn darüber hat er programmiert welche Schalter für welche Binärzahl geöffnet sein müssen.
Anschließend sende ich das Wort "Wert", denn dann bekomme ich meine Eigentlichen daten die ich haben möchte.
Diese Daten sehen dann so aus:

"DSA=456
DSB=367
DSC=890
DSD=786
DSE=989"

(Die Zahlen variieren!) Anschließend Werte ich das ganze aus, d.h. ich filtere den String bis ich am Ende nur noch die Werte habe. Das funktioniert auch!

Problem:
1) Ich weiß das die Werte komplett als einen Text programmiert wurden in dem Arduino, aber die Daten werden jedes mal nur einzeilig verschickt. Daher filtert mein Programm eine X-beliebige Zeile davon raus, obwohl ich alle zeilen brauche.
2) meine Case-Struktur ist in einer While-Schleife, aber wie beende ich automatisch nach dem "Exit" in der Case-Struktur die While-Schleife, sodass mein Programm weiter läuft und am Ende meinen COM Port schließt und der nicht mehr von Windows geblockt wird. Ich muss jedes mal meinen Computer neu Starten.

Ich hoffe wirklich, dass ich bis 10 Uhr mein Projekt mit den beiden Fehlern behoben bekommen habe Big Grin

Gruß Louisa

Ar_Block_Test = Haupt VI
Die anderen 3 VI's sind unter VI's die ich zum filtern benutze bzw. auch zum umrechnen
Hallo Louisa,

1a) Programmiere den Arduino so, dass er dir alle Werte in einer Zeile sendet. Also statt \r\n nach jedem Wert einfach ein KOmma oder Leerzeichen verwenden!
Zitat:Daher filtert mein Programm eine X-beliebige Zeile davon raus, obwohl ich alle zeilen brauche.
1b) Dann muss man sich eben die zuletzt gelesenen Werte merken (Schieberegister!) und den gerade neu gelesenen Wert in diesem Merker eintragen. So hat man immer alle zuletzt gelesenen Werte parat!

2) Indem du statt des Stop-Buttons einfach eine TRUE-Konstante verwendest! Wall

Zitat:das ganze muss bis 10 Uhr geklärt sein.
Das spricht nicht für eine gute Zeitplanung von deiner Seite…
Jetzt hast du ja noch 1½h Zeit übrig! Big Grin

Edit:
- Es ist eine ganz schlechte Idee, mitten in einem VI die STOP-Funktion zu verwenden. Sowas macht man nicht! (Das wäre in etwa so, als wenn du dir zum Bremsen deines Autos immer den nächsten Straßenbaum suchst.)
- Deine Umwandlung von String nach Zahl sieht schon sehr kompliziert aus. Warum verwendest du nicht einfach ScanFromString?
- Wenn du mit Arrays arbeiten würdest, würdest du keine subVIs mit je 5 Ein- und Ausgängen benötigen. Eine einfache Division würde auch ausreichen:
[attachment=58364]
Danke GerdW das du mir so gut weiter helfen kannst Big Grin
ich muss erhlich zugeben das Problem 2) eine einfache Lösung sein musste, aber manchmal kommt man selbst auf die einfachsten Lösungen nicht Big Grin

Ich probiere das jetzt mal aus und melde mich dann ob es funktioniert hat Big Grin
GerdW mein Programm läuft jetzt Fehlerfrei dank dir Smile

Ich bin Momentan mit dem Fehlerhändling dran, aber das Größere problem ist, dass ich alle gemessenen Werte in eine Exceltabelle packen soll und ich habe bis jetzt nichts wirklich nützbares gefunden dazu und weiß überhaupt nicht wie ich dies mit meinem Programm bewältigen soll. Leider muss es in eine Exceltabelle aufgelistet werden und nicht in eine Textdatei...
Das hatte ich erst programmiert, aber für meinen Vorgesetzten eine Katastrophe das ich überhaupt auf die Idee gekommen wäre das in eine Textdatei schreiben zu lassen....

Ich hoffe du hast eine Idee und kannst mir weiter helfen? Natürlich auch gerne andere User. Smile
Hallo Lou,

Zitat:Leider muss es in eine Exceltabelle aufgelistet werden und nicht in eine Textdatei...
Das hatte ich erst programmiert, aber für meinen Vorgesetzten eine Katastrophe das ich überhaupt auf die Idee gekommen wäre das in eine Textdatei schreiben zu lassen....
Kann dir dein Vorgesetzter auch sagen, warum eine Textdatei eine solche "Katastrophe" darstellt?
Kannst du genauer definieren, wie die "Exceldatei" aussehen soll?
Was stört deinen Chef an einer ordentlich erstellten CSV-Datei?
Die Datei soll so aufgebaut sein:
Messung Nr. / DS1 / DS2 / DS3 / DS4 / DS5 / Fehlermeldung

In Spalte "Messung Nr." soll die Jeweilige Messung aufgelistet sein die Durchgeführt wurde und dann sollen die Werte von DS1 bis DS5 bei der Jeweiligen Messung in die Spalten eingetragen werden.
und taucht in einer Messung ein Fehler auf soll der auch in die Exceltabelle eingetragen werden.
Ich habe an die 1000 Messungen die untereinander aufgelistet werden sollen.

Er meint nur das wäre unübersichtlicher als in Excel.
Seiten: 1 2
Referenz-URLs