Forum: PC-Programmierung matlab oder labview zur datenaufnahme von mikrocontroller?


von Gerald G. (gerald_g)


Lesenswert?

Hallo,

Ich bin im Moment am überlegen mit welcher Software ich folgendes tun 
kann:

Daten werden vom Mikrocontroller via virtual COMPort gesendet.
Die Daten sind Punkt für Punkt aufnahmen eines Bildes.
Dieses Bild muss aus diesen Datenpunkten erstellt werden, und 
anschließend bearbeitet werden. Es werden Schwingungen zu sehen sein 
(also FFT nötig) das Bild muss "integriert" werden ( also das Bild das 
aufgenommen wird entspricht immer der Steigung statt der tatsächlichen 
Höhe)
Außerdem muss ein schönes Panel erstellt werden indem die Parameter für 
den Mikrocontroller eingestellt werden können.

Das Programm muss also vom COMPort lesen können, und direkt über einen 
interrupt oder event auf ein eingehendes Zeichen reagieren.

Als Grundprogramme würden sich hier denke ich Matlab  oder Labview 
eignen.

Jetzt komme ich aus der C-Ecke, und finde beide Programme (erstmal) 
unintuitiv. Bei dem einen müssen Bilder zusammengeklickt werden, bei 
Matlab finde ich die Syntax etwas komisch. Auch dass für jede Funktion 
ein eigenes M-File erstellt werden muss finde ich komisch. Und warum 
Funktionen hier anders deklariert werden als in allen anderen Sprachen 
habe ich bis jetzt nicht verstanden.
Nun wollte ich die vielleicht etwas erfahreneren Leute fragen, in 
welches Programm ich mich am besten dafür "reinfuchsen" soll.

Danke schonmal

von genervt (Gast)


Lesenswert?

Gerald G. schrieb:
> Jetzt komme ich aus der C-Ecke,

Dann bleib doch da und schau dir mal folgendes an:

http://de.wikipedia.org/wiki/Opencv

von Amateur (Gast)


Lesenswert?

Bilder bzw. Bilddaten und die serielle Schnittstelle vertragen sich 
nicht besonders gut.

Eh Du Dich versiehst, hast Du X mal Y mal Farbtiefe mal Widerholrate auf 
dem Tablett und damit ein Zeitproblem.

von Gerald G. (gerald_g)


Lesenswert?

Danke euch beiden schon einmal.
Opencv sieht sehr interessant aus. Matlab und labview hatte ich aber 
unter anderem deshalb gewählt, da sich hier immer mal wieder jemand 
finden lässt der sich damit auskennt und das gewünschte implementiert. 
(Die Grundversion soll quasi mitgeliefert werden, sobald jemand etwas 
ändern möchte kann er das dann selber tun)

Bei den Bilddaten handelt es sich eher um ein Bild, das zwischen Minuten 
und Stunden entsteht.
Eine Zeile hat maximal 1024 pixel und die Höchstgeschwindigkeit soll 
10Hz pro Zeile betragen. Bei maximaler Auflösung von 16bit ergibt sich 
eine absolute maximalrate von 160kbit/s, was mit USB CDC handlebar sein 
sollte.
Das sind wie gesagt die Maximalgeschwindigkeiten.

von genervt (Gast)


Lesenswert?

Matlab würd da auch gehen, das hat auch eine recht mächtig Toolbox:

http://www.mathworks.de/products/image/

OpenCV ist halt kostenlos, ebenfalls sehr mächtig und vor allem taugt es 
für schnelle Bildverarbeitung(Klingt aber eher nach Laborprojekt eine 
UNI, also sollte der Matlabzugang da sein.)

von Gerald G. (gerald_g)


Lesenswert?

Japp, richtig erkannt.
Universität und Zugang zu beiden Programmen.

von Amateur (Gast)


Lesenswert?

Auch wenn ich nicht damit arbeite, sollten die angegebenen Programme 
Matrizen behandeln können.

Unter dem Strich geht es also darum dem Programm zu sagen: Lies das 
Gerümpel von COMx als Matrix ein. Da in fast allen Systemen COMx als 
Datei  oder Datenstrom angesprochen werden kann, sollte dies kein 
Problem sein.

Ein kleines Problem könnte die Erkennung des Anfangs und des Endes in 
einem kontinuierlichen Datenstrom sein und die Verhandlung des Formates.
Danach kann das Programm alle Kunststücke, die mit Matrizen vorgesehen 
sind.

Da diese Programme oft mit einem Dingsbums verbunden werden, sollte auch 
dem Import eine besondere Schnittstelle gewidmet worden sein.

von Gerald G. (gerald_g)


Lesenswert?

Ja genau. Die Bilder sind Matrizen. Das wird aber in jedem Programm so 
gehandhabt ( auch Photoshop)

3d Darstellungen wären auch wünschenswert, bei dem im Moment genutzten 
wavemetrics Igor pro kann beispielsweise auch auf die 3d Topografie eine 
Farbe, die zum Beispiel dem elektrischen Potenzial an dem Punkt 
entspricht, gelegt werden.
An die Daten kann natürlich auch der jeweilige Punkt, der gerade 
gesendet wird, mit angehängt werden. Das verdoppelt zwar die gebrauchte 
Bandbreite, aber wie gesagt, es sollte noch Luft sein. Im Notfall muss 
eben die hertzzahl oder Auflösung gedrosselt werden.
Das ist ja das schöne an der eigenen Software, stört einen etwas, kann 
es relativ einfach geändert werden (wobei 10Hz Messungen wahrscheinlich 
nie mit 1024 pixel gefahren werden, das widerspricht dem Sinn der 
schnellen Messung für den Überblick. Für schöne Messungen ist man im 
Bereich von 0,1Hz pro Zeile)

: Bearbeitet durch User
von Didi S. (kokisan2000)


Lesenswert?

Hallo Gerald,

ich arbeite beruflich mit beiden Programmen. Für die Datenübertragung 
mit µC bevorzuge ich jedoch LV. Die hinterlegte Mathematik ist sehr 
mächtig und 3D fällt nebenbei ab. Zwischen PC und µC benutze ich keine 
Handshakes, sondern verwende spezielle Steuersequenzen, die der µC statt 
den Stream an Rohdaten sendet. LV analysiert den Datenstrom und wenn 
eine Steuersequenz kommt, wird entsprechen darauf reagiert, wie zum 
Beispiel die Anzeige, dass jetzt ein neuer Stream startet. Über USB 
Virtuell Com Port erreiche ich Geschwindigkeiten bis 900 kByte/s, also 
deutlich mehr, als Deine geforderten 20 kByte/s.
Da der Comport bei mir bidirektional programmiert wurde, steuer ich 
parallel zum Stream auch den µC mit LV. Zum Beispiel breche ich 
Messungen vorzeitig ab, wenn ich in LV sehe, dass die Daten Müll sind.

Gruß
Didi

: Bearbeitet durch User
von Dieter (Gast)


Lesenswert?

Hallo,

ich arbeite beruflich sowohl mit LabView wie auch Matlab und habe schon 
einige größere Projekte damit im Bereich der LAborautomatisation 
umgesetzt. C und C++ kenne ich noch aus Studienzeiten.

Alles hat Ihre Vor- und Nachteile. Mit LabView kann man schnell einfache 
Programme erstellen. ABER Programme so zu schreiben dass es keine Tapete 
voll VIs wird und nicht zu unübersichtlich (und unwartbar) wird ist ein 
anderes Thema. Hier sollte man sich zumindestens mit Queues 
auseinandersetzen und im Idealfall ist ein VI nicht viel größer als eine 
Bildschirmseite.
Was ich bei LabView kompliziert finde und was meiner Meinung nach 
schnell unübersichtlich wird ist eine große Stringverarbeitung von 
externen Daten. Beispielsweise ASCII Protokoll suchen, zerlegen, 
zusammensetzen, etc.
Auch finde ich es schwierig in LabView die Übersicht von Codeänderungen 
nachzuvollziehen.

Matlab ist zum Rechnen, etc. sehr gut. Auch lassen sich GUIs damit 
erstellen. Aber insbesondere bei komplizierteren GUIs mit mehrern 
Fenstern wird es schnell unübersichtlich. Matlab kann, zumindest noch in 
Version 7.1, kein Call by Reference und somit übergibt man notgedrungen 
einiges an Daten über die GUI Elemente (Google: Guidata, handle). Aber 
vielleicht gibt es hier Neuerungen die ich noch nicht kenne.
Auch richtige Hintergrundtasks oder Events sind in Matlab kaum möglich. 
Sicherlich gibt es hier Tricks, aber mach es Dir von vornerein nicht 
kompliziert.

Ich würde das Problem daher trennen.
Mach die Hardwareanbindung in C oder C++ als DLL. Dies kümmert sich um 
das Einlesen und Vorverarbeiten der Daten.
Zur Visualisierung nimmst Du dann LabView (alternativ LabWindows) und 
arbeitest hier mit einer sauberen Struktur (siehe oben).
Bei den eigentlichen mathematischen Funktionen ist die Frage ob dieses 
schnell Änderungen unterworfen werden sein kann.
Wenn ja würde ich probieren in LabView die mathematischen Funktion (je 
nach LabView Version unterschiedlich komplex) zu nutzen.
Alternativ, wenn nicht zu komplex, kannst Du die Mathematik auch in 
C/C++ als DLL schreiben (btw. wenn Du den Matlab Compiler hast kannst du 
auch dort DLLs mit erstellen) . Ich glaube sogar man in LabView 
einfachen C und Matlab Code einpflegen.
Wenn Du die Mathematik in LAbView machst, dann trenne Sie dort auch von 
der GUI. Am besten als eine Art eigenen Prozess, oder auch als eigenes 
LabView Programm als Client/Server (was sehr schön mit LabView geht).

Warum das ganze?
Ich kenne LabView bis Version 8, aber eine vernünftige 
Versionsverwaltung hat es nicht.
Aber gerade das Dateneinlesen sowie die Mathematik sind Dinge in denen 
viel Intelligenz steckt und was ordentlich getestet werden muss.
In LabView kann man ganz schnell sich durch diverse Sub-VIs klicken. 
Aber sobald ich ein VI einen Millimeter verschiebe will LabView es 
speichern. Gerade wenn mehrere Leute an dem Projekt arbeiten (auch 
später) ist mir die Gefahr zu groß dass an gut getesteten Funktionen 
irgendeine Verbindung aus Versehen gekappt wird oder Referenzen zu einem 
SubVI verloren gehen.

Und wenn Du es orgentlich trennst, kann der nächste Student nur den Teil 
modifizieren den er braucht.
Will er nur die GUI umbauen macht er das in LabView direkt und man kann 
sich sicher sein, dass nichts anderes modifiziert wird. Dasselbe gilt 
natürlich für die anderen Bereiche.

Gruß
Dieter

von Gerald G. (gerald_g)


Lesenswert?

So, vielen Dank vor allem an die letzten beiden Antworten.

Ich habe mich heute noch einmal näher mit matlab beschäftigt. 
Kommunikation mit mikroconttoller ist gut. Bitoperationen sind hier 
einfach möglich. Mit bitget(a:b) kann ich direkt die gesuchten bits aus 
dem gesendeten Datenpaket aussuchen ( xpos, ypos, value)
Am Montag werde ich mit dem Mikrocontroller eine Messung simulieren, und 
schauen ob ich das so bei matlab Angezeigt bekomme.

Dienstag und Mittwoch werde ich das gleiche in labview versuchen. 
Bitshift und bitand gibt es auch als VIs, weshalb das decodieren hier 
auch gut funktionieren sollte. (Bitget gibt es auch, ich habe allerdings 
noch nicht gefunden ob man gleich mehrere bits bekommt, muss ich testen)

Danach werde ich mich entscheiden, je nachdem wie gut das lief und wie 
gut das handling mit den 2d arrays (Bildern) läuft (hier habe ich ja 
Beispiele aus echten Messungen).

Eventuell kommt noch hinzu, dass bei Stellenausschreibungen öfters mal 
nach labview Erfahrung gefragt wird als nach matlab.

Danke noch einmal, ich melde mich wenn ich mich entschieden habe.

von Lukas K. (carrotindustries)


Lesenswert?

Gerald G. schrieb:
> Bitoperationen sind hier
> einfach möglich.

Kann ich so nicht unterschreiben: Bitweises and/or/xor hat man in matlab 
mit den Funktionen bitand/or/xor drangebastelt, der Rest der welt hat 
dafür die Operatoren & | ^. Bitshifts sind ebenfalls ne Funktion. 
Hexadezimale (und sicherlich auch binäre) Literale kann matlab auch 
nicht, man muss hex2dex("ff") verwenden. Das zieht sich so weiter. Für 
rechnen mit matrizen und DSP mag matlab ja noch ganz annehmbar sein, 
aber als 'general purpose' Skriptsprache reichlich zurückgeblieben.

Meine Empfehlung: Python mit numpy. Serielle Schnittstelle und OpenCV 
gibt's auch.

von chris_ (Gast)


Lesenswert?

In Labview gibt es ein VI mit dem man Matlab direkt einbinden kann.

Die Kombination LabView für die Oberfläche und Matlab für die 
Algortihmik ist ideal.

von Amateur (Gast)


Lesenswert?

Was mich an Matlab und Labview ein bisschen stört ist die 
Schlankheitskur für den Kontostand.
Ich bin vor Jahren mal über Maxima gestolpert und bisher ganz gut damit 
gefahren.

von Franz (Gast)


Lesenswert?

Amateur schrieb:
>Was mich an Matlab und Labview ein bisschen stört ist die
>Schlankheitskur für den Kontostand.

Es sind ja auch Tools für Profis.

von Gerald G. (gerald_g)


Lesenswert?

Franz schrieb:
> Es sind ja auch Tools für Profis.

Und Universitäten :D
Also die matlab Version läuft soweit. Nur der PC is zu langsam, und 
beschränkt auf 200 Datenpakete pro Sekunde. Ist aber auch eine Krücke 
und ich versuche es morgen an einem modernerem.

von chris_ (Gast)


Lesenswert?

Wie schon erwähnt, Du kannst Matlab und LabView ziemlich leicht 
kombinieren. Das Matlab Scribt kannst Du direkt in das dafür vorgesehene 
VI-schreiben. Dann wird Matlab automatisch von LabView gestartet und man 
kann auch in der Matlabkommandozeile auf die von LabView gelieferten 
Variablen und Daten zugreifen und diese interactive in Matlabe 
bearbeiten.

http://www.youtube.com/watch?v=I1O51toCKGM

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.