INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

SNAPI DLL zur Bildaufnahme nutzen. Motorola DS3508



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

18.06.2014, 19:16 (Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2014 19:21 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: SNAPI DLL zur Bildaufnahme nutzen. Motorola DS3508
(18.06.2014 15:07 )Rizek schrieb:  Hallo zusammen,

mithilfe eines Motorola Scanners DS3508 möchte ich ein Bild aufnehmen (jpeg) und dieses für eine Bildverarbeitungssoftware nutzen. Dies soll mithilfe von LABVIEW realisiert werden. Bereits in Achimedes Thema (Achimedes Thema SNAPI DLL einbinden) wurden einige ähnliche Fragestellungen diskutiert.
Die Ansteuerung des Scanners funktioniert mit SNAPI, dazu gibt es bereits eine DLL.


Ich habe auch bereits die vorhandenen Beispiel VI's getestet um mich in das Thema einzuarbeiten.

Die Bildaufnahme ist mir scheinbar gelungen (wenn ich den Piepton des Scanners richtig interpretiere).
Allerdings stellt sich mir jetzt die Frage wie handhabe ich die Übergabe der Bilddaten. Bei SNAPI_SetImageBuffer erhalte ich einen Pointer auf eine Adresse. Doch wie lese ich diese Adresse aus bzw. wie erhalte ich die Datenmatrix des Bildes.

Ein Rätsel ist mir auch wie das Funktioniert mit den Windows Messages. Diese benötige ich um die Signale des Sensors zu interpretieren, wo kann ich aber genaueres dazu lesen?


Ich habe hier mal ein kleines Testprogramm welches ein Bild macht, aber leider kann ich nicht darauf zugreifen. Ich habe ein paar Dinge geändert von Achimedes Programm aber die Windows Messages und die auswertung des Zeigers weiß ich nicht wie das funktioniert.

Ich hoffe ihr könnt mir weiterhelfen!

Viele Grüße

Rizek

Erster Crashgrund: Bei DSNewPtr() allozierst Du einen Pointer mit 50 Byte aber erzählst SNAPI_SetImageBuffer() heiter fröhlich, dass der Buffer 5000 Byte gross ist!!!! Gute Nacht LabVIEW!!!!

Ebenfalls sinnvoll wäre es dann um die Initialize Array Node mit der selben Nummer anzurufen um ein entsprechen grosses Array anzulegen und auch bei MoveBlock() diese Nummer beim 3. Parameter zu verwenden, aber diese Nummer darf sicher nie mehr sein dann was Du in DSNewPtr() an Bytes alloziert hast. Danach sollte man am Ende auch DSDisposePtr() aufrufen, ansonsten produzierst Du ein Speicherleck.

Der Pointer den Du in DSNewPtr() alloziert hast sollte durchgehend in allen Call Library Nodes als Pointer sized Integer definiert sein. Im Momen liefert DSNewPtr() zwar einen Pointer sized Integer zurück aber alle anderen Funktionen verwenden I64. Das geht dann aber in LabVIEW 32 Bit nicht korrekt.

Die Windwos Message Queue Library verwendet momentan Pseudo Refnums für die window Handle (und auch die Message Queue Reference). Aber eine LabVIEW Refnum ist immer 32 Bit gross, ein Windows Handle aber 32 bit unter LabVIEW 32 Bit und 64 Bit unter LabVIEW 64 Bit. Mit der heutigen Windows Message Queue kannst Du also nur unter LabVIEW 32 Bit arbeiten, auch da ich nicht glaube dass die dazugehörende DLL bereits für 64 Bit kompiliert wurde. Aber selbst wenn Du eine 64 Bit DLL hättest ginge es wegen der Verwendung einer LabVIEW Refnum für diese Datentypen ohnehin falsch. Um diese für LabVIEW 64 ko,mpatibel zu machen muss man sowohl die DLL als 64 Bit DLL kompilieren als auch die Queue Reference und die window Handle im Frontpanel als 64 Bit Integer definieren, aber in allen Call Library Nodes überall als Pointer sized Integer definieren.

Zu guter letzt. Die SNAPI ist so gebaut dass sie Dir ein Windows Event schickt wenn ein Scan verfügbar ist. Erst bei Empfang dieser Message macht es Sinn um mit MoveBlock() die Daten aus dem Buffer im Pointer herauszukopieren. Davor ist durch die DLL nichts im Buffer abgelegt, liest Du also die ursrprünglichen Zufallswerte zurück die im Speicher nach Aufruf von DSNewPtr() bereits lagen.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: SNAPI DLL zur Bildaufnahme nutzen. Motorola DS3508 - rolfk - 18.06.2014 19:16

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Java JAR-Bibliothek in Labview nutzen A_Bachmann 2 7.368 16.05.2014 14:28
Letzter Beitrag: A_Bachmann
  LabView DLL in C# nutzen arphex 3 8.956 24.08.2011 07:45
Letzter Beitrag: M@rRy
  SNAPI DLL einbinden. Scanner MS4407 Achimedes 12 15.807 22.06.2010 07:34
Letzter Beitrag: Achimedes
  7zip dll in LabVIEW nutzen theumi 3 8.274 13.03.2009 10:26
Letzter Beitrag: RoLe

Gehe zu: