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
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
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.
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.
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.)
Japp, richtig erkannt. Universität und Zugang zu beiden Programmen.
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.
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
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
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
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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.