Hi,
ganz einfache Frage eigentlich:
Kann ich beim USB 6501 mehrere IO Kanäle gleichzeitig und zwar völlig unabhängig voneinander (sprich: parrallel in verschiedenen VIs) ansteuern? Mich macht etwas skeptisch, dass die immer zu 8er Blöcken zusammengefasst sind, deswegen habe ich da Befürchtungen, dass das nicht / nur eingeschränkt geht.
Praktisch gesehen würde ich gerne nur isolieren müssen, dass nur ein Prozess gleichzeitig auf einen bestimmten Ausgang zugreift und nicht auch noch, dass auch nur ein Prozess überhaupt (gleichzeitig) auf das Gerät zugreift.
Danke soweit schonmal.
P.S: Ich habe nicht extrem intensiv gegoogelt, aber auf den ersten Blick auch nicht viel gefunden; hier im Forum habe ich nur einiges zur Ansteuerung dieses Teils gefunden, aber nichts zu meinem Problem (deswegen bitte ich um Gnade falls es doch etwas zu finden gegeben hätte).
Gruß Kiesch
Hallo Kiesch,
ein 6501 ließ sich leider in MAX nicht simulieren, deshalb eine allgemeine Antwort:
Was spricht dagegen, die Zugriffe auf die Hardware in einem VI zu bündeln?
Alle anderen VIs können doch prima Daten mit dem "HW-Treiber-VI" austauschen, alle voneinander unabhängig...
Mein Lieblingsvorschlag: Eine FGV, die die DIO-Daten vorhält und verwaltet. Jeder darf (quasi) gleichzeitig zugreifen und lesen/schreiben. Und wir reden hier über Softwaretiming (d.h. max. ~100Hz Samplerate mit der Hardware) und nicht über Highspeed-DIO...
Die Sache ist die: Ich benutze das Ding quasi als Ersatz für nen Parralelport und muss für die Ansteuerung von ner Schrittmotorkarte damit auf bestimmten Ausgängen mit ca. 1kHz Takt Pulse ausgeben (was bisher über Parrallelport super gefunzt hat - aber NI unterstützt ja für neuere Windows die In / Out Port VIs nichtmehr -.- und mein noch tauglicher Rechner ist grade am sterben - Zeit also das ganze Zukunftssicher zu machen).
Soweit ich das verstanden hatte kann der 6501 ja auch mit nem 1kHZ Takt umgehen; und die Systemclock sollte auch auf 1ms arbeiten - entsprechend sehe ich da bei der Softwareseite aktuell noch kein Problem (selbst wenn doch: Wir haben das Teil eh im Haus, also schadet ausprobieren erstmal nicht).
Hardwareseitig wäre es natürlich schön (da vermutlich schneller zu programmieren, weil man bestimmte Sachen einfach rauslassen kann; wie zum Beispiel Verwaltung über eine gemeinsame Schnittstelle wie zum Beispiel eine FGV), wenn jeder Schrittmotor einfach völlig separat behandelt werden kann (sprich: Die kriegen jeweils Ihren Ausgang für die Steuerung zugewiesen und sprechen denn dann wenn sie bewegt werden sollen auch völlig autonom an). Der Vorteil wäre vor allem, dass man ohne viel Aufwand die Motoren parralel betreiben kann. Nur wie gesagt: Mich macht stutzig das die IOs zu 8er Sets zusammengefasst sind. Kenne das vom Parralelport auch so, dass man tatsächlich immer ein Byte setzen musste (sprich: Lesen, setzen). Nehme an bei dem USB Teil fällt zumindest das Lesen auf alle Fälle weg. Wäre aber wie gesagt schön / praktisch wenn auch das setzen über eine einzige Schnittstelle wegfallen würde.
Kann aber auch damit leben wenn nicht - es würde mir wohl nur etwas weniger Arbeit machen.
P.S: Ja hatte in irgendeinem Thread schonmal gelesen, dass man den USB 6501 nicht simulieren kann. Achja, und den Thread wo jemand direkt über das Teil Schrittmotoren angesteuert hat hab ich auch gelesen. Allerdings hängt da bei mir noch ne separate Steuerkarte zwischen. Und ich denke auf die Exakten Timings kommts nicht zwingend an. Sprich wenn ich mal eine Sekunde später erst den nächsten Schritt anstubse ist das nicht so schlimm - so lange die Gesamtzahl stimmt - und dabei hat sich die Hardware bisher als sehr robust erwiesen.
Gruß Kiesch
P.P.S: Ja ich weis das Faulheit kein echtes Gegenargument ist. Ich bitte trotzdem um Nachsicht ^^
Hallo Kiesch,
Zitat:Soweit ich das verstanden hatte kann der 6501 ja auch mit nem 1kHZ Takt umgehen
Lt. Spec arbeitet die USB6501 mit "Softwaretiming", ohne das eine konkrete Samplerate angegeben wird. Bei den "kleinen" USB600x ist man da auf ca. 150Hz beschränkt. Ob die USB6501 da wirklich schneller arbeitet, sollte ein Anruf in München klären...
Zitat:die Systemclock sollte auch auf 1ms arbeiten
Das nützt dir wenig, wenn dein Windows-Rechner nichtdeterministische Pausen einlegt...
Mit 1kHz-Schleifen-"Takt" kannst du übrigens max. 500Hz-Pulse ausgeben...
Zitat:Mich macht stutzig das die IOs zu 8er Sets zusammengefasst sind. Kenne das vom Parralelport auch so, dass man tatsächlich immer ein Byte setzen musste (sprich: Lesen, setzen).
Warum macht dich das stutzig? Es gibt so viele billige Schaltkreise, die das Setzen/Lesen kompletter 8-bit-IO-Ports unterstützen. Warum sollte NI sowas nicht in seinen Low-Cost-USB-Boxen verwenden?
Zitat:aber NI unterstützt ja für neuere Windows die In / Out Port VIs nichtmehr
Das Problem ist hier eher das OS, welches keine Zugriffe mehr zulässt. Die Programmiersprache deiner Wahl kann daran nichts ändern...
Meine Zusammenfassung:
- Wenn du Takte genauer ausgeben willst, als es das OS zulässt, solltest du DAQ-HW mit Hardwaretiming verwenden.
- Wenn du Einzelbits ansprechen willst, solltest du DAQ-HW verwenden, die das unterstützt. (Hier ist eher eine Kostenabschätzung gefragt! Was ist preiswerter: deine Programmierzeit oder der Kauf etwas teurerer Hardware?)
Ruf doch mal in München an und lass dich beraten...
Zitat:Warum macht dich das stutzig? Es gibt so viele billige Schaltkreise, die das Setzen/Lesen kompletter 8-bit-IO-Ports unterstützen. Warum sollte NI sowas nicht in seinen Low-Cost-USB-Boxen verwenden?
Stutzig bezüglich Einzelbits abfragen.
Was den Takt angeht: das schöne ist (und bisher hat das auch zuverlässig funktioniert) - durch die Kommunikation mit der eigentlichen Hardwaresteuerung muss ich nur kurze Pulse ausgeben. Erfahrungsgemäß waren die bisher lang genug wenn ich einfach mit 1ms wait geschaltet habe (sprich: Schalten 1ms warten, schalten; anschließend wird im Zweifel quasi nur mit einem Delay durch das softwareseitige Starten der nächste Puls ausgegeben auf den die Steuerkarte regieren muss (wenn ich mich recht erinnere fährt die jeweils auf die ansteigende Flanke einen Schritt; einzig wenn ich schneller ansteuere als 1kHz kriegt die Probleme und das Timing ist dann natürlich auch nichtmehr definiert). Das läuft jetzt auch zuverlässig seit ~4 Jahren.
Sprich: Ich brauche keine exakt definierten Pulse sondern eigentlich nur Flanken und die dürfen durchaus relativ kurz sein. Entsprechend kann ich quasi den vollen 1kHz Takt der SW Clock nutzen.
nichtdeterministische Pausen machen mir auch keine Sorgen - dann wird eben mal für ein paar ms nicht gefahren, so what? Ich muss in meinem Fall nur wissen wie viele Schritte gesamt gefahren wurden, da es nicht um die Geschwindigkeit sondern um Positionstreue geht.
In praktischen Tests war es glaube so, dass ca. 8 von 10k Fahrten deutlich länger dauern als sie sollten (meine mich zu erinnern dass das Teils sogar im Sekundenbereich war) - aber wie gesagt: Soweit die Positionstreue erhalten bleibt ist das absolut kein Problem (und das tut sie getestetermaßen).
Whatever:
Fazit für mich aktuell:
Im Zweifel also einfach auf eine einzige Softwareschnittstelle begrenzen (wie es bisher auch war). Bevor ich bei NI jemanden erreiche werd ich ja noch alt und grau (zumindest wenn man den Kollegen glauben darf).
Danke soweit schonmal für die Hilfe. :-)
*edit nachgeschoben weil zu langsam:
@In / Out Port VIs
Meines wissens war die Aussage von NI, dass man keine neuen Treiber programmieren wird, die mit der neuen Schnittstellenhandhabung durch Windows klarkommen (da der Parrallelport als zu veraltet und deswegen nichtmehr brauchbar angesehen wird). Kann mich da vertun und das waren nur Aussagen in nem Thread zum Thema, aber so ist mein Kenntnisstand. Das das ganze Problem von der Änderung der Win System Architektur ausgeht ist natürlich klar. Ändert aber nix am Ergebnis ^^
P.S: Wenn es NI geschafft hätte uns funktionierende Labview DVDs für Linus zu schicken und ich vertrauen darin hätte das die weitere Hardware auch unter Linux funktioniert UND ich mehr Erfahrung mit Linux hätte wäre natürlich ein OS Wechsel auch eine Option. Allerdings schien es mir dann doch einfacher stattdessen nur die Hardware zu wechseln ^^
P.P.S: Alles was was kostet ist mehr Wert als meine Programmierzeit (selbst wenn die mehr kosten würde theoretisch, aber ich werd so oder so bezahlt, nen neues Modul nicht...).
Mal schauen, vielleicht versuch ichs ja auch einfach mal mit ner Mail an NI; sollte ich ne Antwort kriegen werd ich die hier dann auch posten, falls noch jemand sucht.
*Update*
Neue HW ist nicht und NI hat noch nicht auf meine Anfrage vom letzten Freitag reagiert. Rechne da jetzt auch nichtmehr mit ner Antwort.
Werde dann dementsprechend wohl einfach davon ausgehen müssen, dass ich die Ausgänge im Zweifel nicht parrallel setzen kann und das über eine gemeinsame Softwareschnittstelle führen muss.
Gruß Kiesch
Nachtrag:
Heute doch noch eine Antwort von jemandem bei NI gekriegt; ich zitiere mal:
Zitat:Ja, es ist grundsätzlich möglich verschiedene
Tasks gleichzeitig zu haben. Die einzige Begrenzung ist, dass Sie nicht verschiedene Tasks haben
können die auf demselben Port zugreifen.
Ob es ratsam oder nicht ist, ist schon ab der Applikation Abhängig, aber wie schon geschrieben, gibt
es kein Grund, von der Nutzung von parallelen Tasks abzuraten.
Das erspart mir dann wohl etwas Arbeit
Gruß Kiesch