14.01.2013, 18:55
Beitrag #1
|
Sundypha
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Aug 2012
2012
2012
DE
8750
Schweiz
|
Kanal in Task auswählen
Guten Abend allerseits.
Ich habe eine Frage:
Ist es möglich aus einem Task ein Kanal auszuwählen um den Kanal dann in einer FGV zu verwenden?
Die Idee ist, dass ich einen Task erstelle und dann z.B. bei einer Heizungs-FGV oder Klasse die Kanäle gebe, die die FGV/Klasse benutzen darf zum einlesen/ausgeben ihrer Daten.
Ich hab z.B. das Problem, dass ich im Moment in einer FGV die alten digitalen Ausgaben (alle Kanäle als Cluster) speichere und dann bei einer neuen Ausgabe, die alten abrufe und dann mit "Bundle by Name" die einzelnen Werte setze die ich möchte und dann wieder komplett alle Kanäle ausgebe.
Ist es irgendwie möglich wie bei einem Microchip die einzelnen Werte auf bestimmte Pins zu setzen?
mit freundlichen Grüssen
Sundypha
|
|
|
15.01.2013, 09:12
Beitrag #2
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Kanal in Task auswählen
Hallo Sundypha,
- Warum packst du erst mehrere Kanäle in einen Task, wenn du sie einzeln benutzen möchtest?
- Warum bündelst du nicht die Ein-/Ausgabe-Operationen dieses Task an einer Stelle, statt sie auf verschiedene Instanzen zu verteilen?
|
|
|
15.01.2013, 10:12
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2013 10:15 von Sundypha.)
Beitrag #3
|
Sundypha
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Aug 2012
2012
2012
DE
8750
Schweiz
|
RE: Kanal in Task auswählen
Ich habe hier Geräte von NI, die 6 bis 7 Tasks haben können. Also Bündle ich alle AI in ein AI-Task, AO in AO-Task, DI in DI-Task, DO in DO-Task und dann z.B. 3 Counter Task und dann sind alle Tasks hin. Ich habe meist mehr Geräte als Tasks.
nun möchte ich gerne die angesteurten Geräte abstrahieren um z.B. bei einem Testversuch in dem ich dann plötzlich 2 Heizungen benötige, nur eine neue Instanz der Klasse machen müsste und der Instanz dann die Kanäle und die Tasks geben kann über die die Instanz handeln kann.
oder gibt es da andere Frameworks, die ich für DAQmx verwenden kann?
|
|
|
15.01.2013, 10:19
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2013 10:19 von GerdW.)
Beitrag #4
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Kanal in Task auswählen
Hallo Sundypha,
ich würde nicht erst Tasks anlegen, um diese dann später aufwändig zu zerpflücken...
Ich persönlich bevorzuge eine andere Herangehensweise:
- Task anlegen, in eigenen VIs Daten vom Task lesen und in eine FGV packen
- Andere VIs (hier: deine zwei Heizungs-Steuerungen) holen sich die Werte, die sie brauchen, aus der FGV
- gleiche Herangehensweise bei AO/DO-Tasks: diese lesen die zu setzenden Werte aus einer FGV, die von anderen VIs befüllt wird.
Prima Trennung von Daten und Tasks, alle können Daten aus FGVs lesen, alle können Daten in FGVs schreiben, FGV hält Daten konsistent, weitere Funktionalitäten in der FGV, und viele weitere Vorteile...
|
|
|
15.01.2013, 10:27
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2013 10:31 von Sundypha.)
Beitrag #5
|
|
|
15.01.2013, 10:32
Beitrag #6
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Kanal in Task auswählen
Hallo Sundypha,
entweder man legt die Tasks nur mit den benötigten Kanälen an (sowas kann man dynamisch erledigen!) oder man nutzt alle zur Verfügung stehenden Kanäle und liest aus der FGV nur die, die einen interessieren (kann man auch dynamisch erledigen). ("Dynamisch" heisst "zur Laufzeit")
Wo ist das Problem?
|
|
|
15.01.2013, 10:43
Beitrag #7
|
Sundypha
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Aug 2012
2012
2012
DE
8750
Schweiz
|
RE: Kanal in Task auswählen
Das Problem ist, dass ich die Werte "schön" über ein "Unbundle by Name" auslesen können möchte (damit der Code besser verständlich ist).
D.h. bei einer Änderung im Kanal, muss ich das Cluster im FGV auch abändern. Nun weiss ich nicht, wie LabView die Referenz hält. Ich meine damit, dass wenn ich ein Control im Cluster lösche, dass die restlichen "Referenzen" beim "Unbundle By Name" noch stimmen.
Gibt es ein Property oder eine Referenz von so einem Clustercontrol, damit ich in einer Klasse z.B. diese mitgeben kann, worüber diese dann die Werte aus der FGV mit bestimmten Clstercontrol auslesen kann?
|
|
|
15.01.2013, 10:53
Beitrag #8
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Kanal in Task auswählen
Hallo Sundypha,
meine FGVs arbeiten mit dem Namen des Kanals, wie er in einer (Excel-)Konfigurationsdatei vergeben wird.
Man kann solche Dinge mit LookupTables oder mit Variant-Attributen erledigen. Mit Referenzen auf Cluster in irgendwelchen Speicher-VIs würde ich gar nicht erst anfangen...
|
|
|
15.01.2013, 10:57
(Dieser Beitrag wurde zuletzt bearbeitet: 15.01.2013 10:58 von Sundypha.)
Beitrag #9
|
Sundypha
LVF-Grünschnabel
Beiträge: 19
Registriert seit: Aug 2012
2012
2012
DE
8750
Schweiz
|
RE: Kanal in Task auswählen
Also du machst es so, dass ich der Klasseninstanz den Namen des Kanals übergebe, und dann im FGV nach dem Namen suche und entsprechend den Wert ausgebe?
Das würde ich im Textbasierten Programmieren mit einer MAP machen. Wie geht das in LabView?
Oder nein, du suchst nach dem Namen im Array von Signalverläufen?
|
|
|
15.01.2013, 11:03
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Kanal in Task auswählen
Hallo Sundypha,
"MAP" soll wohl das gleiche bedeuten wie "LookupTable"?
Such mal auf Google nach "LabVIEW red-black-tree", da bekommst du gute Erläuterungen, wie man LookupTables bequem mit Variant-Attributen ersetzen kann.
VIs kann ich hierzu nicht anbieten, das ist alles Firmen-"Eigentum"!
|
|
|
| |