08.02.2010, 10:09
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
Du kannst Dateien auch zippen.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
08.02.2010, 20:47
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
Also: Ich hab mirs mal angekuckt.
Zuerst muss ich sagen: Die Programmierung bietet viel Optimierungsmöglichkeiten. Da wimmelt es von Race-Conditions, die alle entfernt werden müssten! Genauso wie die vielen unnötigen Lokalen Variablen! Einiges sollte unbedingt sequenziert werden, anderes unbedingt mit Event-Struktur gelöst werden.
Nun zur Problemlösung:
Das VI "ps10demo_1axis.vi" soll - und kann - also eine einzelne Achse steuern. Du willst nun zwei solche Achsen steuern. Ob das alleine dadurch geht, dass du dieses VI zweimal aufrufst (invariant oder nicht) kann ich z.Z. nicht entscheiden. Ein Problem kann darin liegen, dass beide VIs das selbe Device - Serielle Schnittstelle - verwenden könnten. (Verwenden zwei Instanzen das selbe Device, so müssen die Instanzen synchronisiert werden - was den Vorteil der Instanzen zu nichte macht.)
Wie werden denn die Achsen angesteuert: jede Achse eine eigene Serielle Schnittstelle? Oder hängen beide Achsen an der selben COM-Schnittstelle?
Und mach dich mal schlau über die Event-Sequenz: Die Cases, die von Start, Go, GoRef und SwitchFree angesteuert werden, gehören in eine Event-Struktur.
Alle Cases, die von INC abhängen, sollten alle in nur einem einzigen Case liegen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
08.02.2010, 21:06
|
Jayden
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Feb 2010
8.6
2010
de
88563
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
ok, interessant zu hören...
jede Achse, also jeder Motor, hat eine eigene com-Schnittstelle, muss man eben immer umstellen wenn man den anderen Motor verwendet.
|
|
|
08.02.2010, 21:33
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
' schrieb:ok, interessant zu hören...
Was hat das jetzt für Konsequenzen?
Zitat:jede Achse, also jeder Motor, hat eine eigene com-Schnittstelle, muss man eben immer umstellen wenn man den anderen Motor verwendet.
Das wirft aber doch ein Problem auf.
Ich gehe davon aus, dass die DLL PS10.dll prinzipiell schon in der Lage ist, mehrere Motoren zu steuern. Auch dann noch, wenn die Motoren an unterschiedlichen Schnittstellen hängen. (Hingen sie an der selben Schnittstelle, wäre die Schnittstelle vom Typ RS485/RS422).
Woher aber weiß das Modul (also die DLL) welchen Motor es jetzt gerade ansprechen soll? Hängen die Motoren an der selben Schnittstelle, könnte das über den Parameter "Axis Number" gehen, den jeder DLL-Knoten als Eingang hat. Hängen die Motoren aber an unterschiedlichen Schnittstellen, würde das so nicht mehr gehen. Da Schnittstellen initialisiert werden müssen, muss die DLL bereits im SubVI PortInit mitgeteilt bekommen, welcher Motor an welcher Schnittstelle hängt. Da gibt es aber nur den Eingang "Control Unit ID". Ich gehe jetzt davon aus, dass du überall zusätzlich zu Axis Number den Eingang "Control Unit ID" verwenden musst.
Axis Numer hat grundsätzlich den Wert 1. Die eine Schnittstelle, also der eine Motor, bekommt "Control Unit ID=1". Die andere Schnittstelle, also der zweite Motor, bekommt "Control Unit ID=2). Jetzt solltest du das VI ps10demo_1axis.vi zweimal starten können (entweder reentrant oder umbenannt).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
09.02.2010, 09:32
|
Jayden
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Feb 2010
8.6
2010
de
88563
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
"ok..interessant zu hören..."
also ich habe das Programm nicht geschrieben. deshalb interessant dass der Entwickler da so viel Fehler reinmacht :-)
Also heißt das, dass ich die Contraol Unit ID fest auf 1 setzten muss, dann das Programm speichern, dann die ID fest auf 2 setzen und das Programm unter einem anderen Namen speichern?
Wenn ich die Motoren immer einzeln ansteuere haben sie immer Control UNit ID 1.
|
|
|
09.02.2010, 10:30
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
' schrieb:Also heißt das, dass ich die Contraol Unit ID fest auf 1 setzten muss, dann das Programm speichern, dann die ID fest auf 2 setzen und das Programm unter einem anderen Namen speichern?
Besser so:
Ein Programm machen, das als Eingang den Wert von Control Unit ID hat. Diesen wert dann auf alle (!) entspechenden DLL-Knoten etc geben. Dieses VI dann unter zwei Namen abspeichern und ein Haupt-VI machen, das beide SubVIs aufruft.
Wenn du dann eine Änderung machen musst, brauchst du das Programm nur noch unter den anderen Namen speichern - und schon gehen wieder beide Motoren.
Zitat:Wenn ich die Motoren immer einzeln ansteuere haben sie immer Control Unit ID 1.
"Control Unit ID" könnte sowas wie ein Handle sein. Der tatsächliche numerische Wert ist egal. Wichtig ist nur, dass immer genau dieser Wert an den DLL-Knoten übergeben wird.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
11.02.2010, 19:46
|
Jayden
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Feb 2010
8.6
2010
de
88563
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
ok... hat geklapt!
VIELEN DANK AN EUCH ALLE !
|
|
|
12.02.2010, 08:07
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Kopie meines VI enthält nicht alle subVIs
Naja, ich habe schon Hardware gekauft (ich will den Namen nicht nennen), da wurde der LabVIEW-Treiber (DLL-Aufrufe,...) von einem Praktikanten erstellt. Da war auch nicht alles so konform, wie es sein sollte. Manche Dinge habe ich da auch nachträglich geändert / ändern müssen.
Du siehst, dass das leider kein Einzelfall ist.
Gruß Markus
' schrieb:deshalb interessant dass der Entwickler da so viel Fehler reinmacht :-)
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
| |