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!
Schade, das mein erster Beitrag hier mit einer Anfängerfrage beginnt....
Wir haben hier folgendes Problem:
im Rahmen einer Projektarbeit (Sortieranlage) verwenden wir LabVIEW zur Steuerung und Auswertung der zu sortierenden Objekte. Da wir bis vor kurzem noch keine Hardware hatten, haben wir die VI´s roh aufgesetzt und als simulierte Ausgänge a´la
Digitalausgang einfach LEDs im Panel hergenommen in der Vermutung, das es danach kein Problem sein sollte, mit dem Signal letztendlich die TTL-Ausgänge der Karte anzusteuern. Als Eingabeelemante haben wir Schalter oder For-Schleifen für Rechtecksignale verwendet.
Das Problem ist nun, wie wir die Karte dazu bringen, unsere Signale auszugeben oder einzulesen.
Die Treiber der Karte sind installiert, werden auch in der Systemsteuerung (Xp) angezeigt. Aber aus den (html-jpeg)-VI´s
als Beispiel werden wir nicht wirklich schlau.
Ich möchte keine komplettlösung, wäre aber dankbar für einen kleinen Stoß in die richtige Richtung.
Die Beispiel VI´s gehen irgendwie alle in die Richtung, komplette Bytes (also 8...?) Eingänge zu lesen oder entsprechend
Ausgänge zu schreiben. Muß ich meine Einzelsignale entsprechend Umrechnen ? Wäre etwas nachteilig, da wir nichts synchronisiert haben. Oder kann ich auch die Ein/Ausgänge einzeln ansprechen ? Wenn ja, wie implementieren wir das ?
Habe etwas über DAQmx gelesen, ist das schon die Richtung ?
ohne Anhänge und genauer Bezeichnung der Karte - wird eher schwierig hier sinnige Antworten zu bekommen...
Allerdings, wenn Du einzelne Bits in einem Byte Schreiben bzw. Löschen willst, kann man das so lösen, dass man das bestehende Ausgangsbyte mit einem Eingang verodert, der nur an der Stelle eine 1 hat, die man setzen will, zum löschen eines Bits verundet man mit einem Eingang, der nur an der STelle eine 0 hat, die rückgesetzt werden will...
Mit so einer KOnstruktion kannst Du Deine Ausgänge immer einzeln setzen, brauchst dann nur über ein Event, kontinuierlich o.ä. das Update auf die Karte zu realisieren. Brauchst also eine Zwischenvariable, auf die Du schreibst und die du dann auf die Karte überträgst..
Ich hoffe, man versteht das jetzt, ansonsten könnte man unter bitwise-AND und bitwise-OR im allgemeinen noch ein paar Infos dazu finden...
Karte ist folgende:
Wasco ADIODA PCI16Extended (http://www.messcomp.de/11.htm)
32 single (bzw. 16 Diff) Analog-Eingänge 12 Bit
2 Analoge Ausgänge 12Bit
16 TTL In / 16 TTL Out
...
Das Handbuch zur Karte gibt im großen und ganzen nicht viel mehr her als die Informationen auf der Seite (+Jumperungen für Versorgungsspannungen, Betriebsart usw.)
Es gibt Herstellerseitig einige Beispiel-VI´s (im Passwortgeschützen Bereich und auf CD, deswegen möchte ich diese nicht hier öffentlich machen). Diese VI´s sind aber scheinbar für alle Wasco-PCI-Karten universell verwendbar.
Eine speziell auf unser Programm zugeschnittene Lösung wäre leider nicht sinnvoll, da dann die Leute, die nach uns mit den Karten arbeiten, auf das selbe Problem stoßen werden.
Ich suche also etwas in der Richtung "Wie am Panel, so an der Karte"
Ich gehe jetzt mal theoretisch von folgendem Szenario aus:
1. LabVIEW stellt mir keine Schnittstelle für diesen Kartentyp zur Verfügung.
(zumindest habe ich nichts entsprechendes gefunden), also baue ich mir diese selbst.
2. Die Karte muss initialisiert werden (also brauche ich ein VI, welches dies macht und zum Programmstart ausgeführt wird)
3. Die Kanäle der Karte (unabhängig ob In/Out/Digital/Analog) sollen während der Programmausführung gelesen/geschrieben werden (evtl. auch nur Byte-weise)
Meiner Meinung nach brauche ich für jeden Kanal / jedes Byte ein VI, dem entsprechende Parameter übergeben werden (z.B. Kartenadresse, Kanaladresse, Typ...)
4. Nach Programmende sollte die Karte in einen definierten Zustand gefahren werden.
Also müsste ich mir nach dieser Überlegung 3 VI´s bauen, eines zum starten, ein universelles zum schreiben/lesen und eines zum beenden. Sollte das soweit noch irgend etwas mit der Wirklichkeit zu tun haben, stellt sich mir die Frage: "wie?" .
Vielleicht sehe ich auch einfach den Wald vor lauter Bäumen nicht
Bernd
19.11.2008, 15:45 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2008 15:47 von Kvasir.)
Ich glaube du stellst dir das leider zu einfach vor. Ansteuerung von Hardware ist nunmal kein Trivialfall, der universell für alles klappt.
Eine Schnittstelle zur Karte bauen stelle ich mir auch schwierig vor. Wenn du nicht zumindest Treiber vom Hersteller für LV (oder eine andere Ansteuerungsmöglichkeit für LV, z.B. dll) hast, wirds kompliziert.
Hast du Treiber, dann kommt es darauf, wie diese die Karte ansteuern. Ganz einfach ist das dann aber auch nie:
- Willst du kontinuierlich schreiben / lesen oder nicht?
- Sampling Rate?
- Spannungsbereich?
- Analog / Digital?
All das fordert differenzierte Ansteuerung.
Ich fürchte daher auch, dass dir hier niemand bei deinem Problem helfen können wird, es sei denn er hat eine Karte vom selben Hersteller, da die Ansteuerung nunmal vom Treiber abhängt.
Es ist übrigens nicht unüblich, dass man nur komplette Ports (also Bytes oder mehr) schreiben kann. In diesem Fall musst du dir halt dein Byte basteln. Du kannst auch ohne Probleme dann mehrere Kanäle auf diesen Port (Byte) legen. Aber halt nur gemeinsam zur selben Zeit entweder lesen oder schreiben.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
' schrieb:Vielleicht sehe ich auch einfach den Wald vor lauter Bäumen nicht
Also, noch würde ich das so sehen.
Nimm halt die LabVIEW-Treiber vom Hersteller und nimm die als Basis für das was du machen willst: ""Wie am Panel, so an der Karte".
Eigentlich bleibt dir gar nichts anderes übrig, als es so zu machen. Ganz am Anfang muss mal jemand die PCI-Adressen heraussuchen. Willst du das von hand machen? Ich gehe davon aus, es gibt in der Wasco-Lib ein VI (wie auch immer), das dieses für dich macht: Heißt gemeinhin INIT.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
ich hatte zwischenzeitlich zwei Telefonate mit dem Hersteller.
Die zum Download zur Verfügung gestellten VI´s sind nach dessen Aussage Funktionsfähig für alle Wasco-Karten, mit
Ausnahme der von uns verwendeten PCI16ext. Anscheinend ein Glückstreffer. Hat etwas mit dem auf dieser Karte
eingesetzten Chipsatz zu tun.
Ich habe die Treiber ausprobiert, bekam aber außer Systemabstürzen oder keine Ein- / Ausgabesignale nicht wirklich
etwas brauchbares Zustande.
Soweit ich das verstanden habe, greifen diese VI´s auf die Treiber-DLL der Karte zurück.
Die Hersteller-VI´s sind momentan durch Krankheitsbedingten Ausfall Zeitlich etwas verlegt worden,
was uns bei der Projektarbeit leider nicht weiterhilft
Meine Frage nun:
Könnte jemand von euch (da mir ganz ehrlich gesagt das Wissen dazu fehlt) mit diesen DLL´s etwas anfangen ?
Ich kenn mich nicht wirklich damit aus, aber vielleicht hilfts ja doch.
http://www.pcmesstechnik.eu/treiber/down...nxp130.pdf liefert Informationen über verschiedene Funktionen und Namen der Übergabeparameter.
Rufst Du die dll in LV auf, solltest die jeweilige Funktion (wasco_getBoardInfo usw) auswählen können. Zur Nutzung nun noch die jew. Parameternamen, entnommen aus dem pdf-file) inkl. Datentyp eingeben. Falls des so funktioniert (wie gesagt, noch nie gemacht, bisher gabs immer Hersteller-vi´s oder ne gute Doku), kannst so nach und nach die benötigten Funktionen realisieren.
Aber finds vom hersteller irgendwie...komisch... So ne Info (ätsch, bei Ihrer Karte geht des nich) is ja nich gerade unwichtig.
' schrieb:Könnte jemand von euch (da mir ganz ehrlich gesagt das Wissen dazu fehlt) mit diesen DLL´s etwas anfangen ?
Naja, zumindest einen Download-Link - natürlich so einen, der kein Passwort erwartet - zur DLL oder auch zu den nicht funktionierenden VIs müsstest du schon abgeben.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).