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 

Producer/Consumer Problem bei Refnum Übergabe



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!

03.05.2007, 14:49
Beitrag #1

baesi Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Sep 2005

7.11
2000
kA


Schweiz
Producer/Consumer Problem bei Refnum Übergabe
Hallo zusammen

Ich hoffe es kann mir jemand weiterhelfen.

Ich habe eine Producer Consumer Struktur. Falls der Wert eines Frontpanelelemtes geändert wird übergebe ich das Refnum des dazugehörenden Elementes und lese alle notwendigen Werte via Property Node aus.
Zu meinem Problem:

Wenn ich die Referenz eines ersten Elementes (Drehregler) übergebe funktioniert alles einwandfrei. Beim zweiten Element (Bool) kommt immer Fehlermeldung 91(LabVIEW: Der Datentyp des Variant ist nicht kompatibel mit dem Datentyp, der mit dem Eingang verbunden ist)

Wenn ich beide Elemete lösche und in umgekehrter Reihenfolge wieder Aufbaue funktionierts mit dem Bool dafür nicht mehr mit dem Drehregler.

Für ein besseres Verständnis habe ich eine abgespeckte Version meines Vi angehängt.

Ich hoffe es kann mir jemand helfen.

Besten Dank

Gruss

Baesi

Sonstige .vi  test.vi (Größe: 113,36 KB / Downloads: 333)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.05.2007, 15:25
Beitrag #2

VDB Offline
LVF-Stammgast
***


Beiträge: 426
Registriert seit: Oct 2005

2010-2011
1997
kA

52134
Deutschland
Producer/Consumer Problem bei Refnum Übergabe
' schrieb:Hallo zusammen

Ich hoffe es kann mir jemand weiterhelfen.

Ich habe eine Producer Consumer Struktur. Falls der Wert eines Frontpanelelemtes geändert wird übergebe ich das Refnum des dazugehörenden Elementes und lese alle notwendigen Werte via Property Node aus.
Zu meinem Problem:

Wenn ich die Referenz eines ersten Elementes (Drehregler) übergebe funktioniert alles einwandfrei. Beim zweiten Element (Bool) kommt immer Fehlermeldung 91(LabVIEW: Der Datentyp des Variant ist nicht kompatibel mit dem Datentyp, der mit dem Eingang verbunden ist)

Wenn ich beide Elemete lösche und in umgekehrter Reihenfolge wieder Aufbaue funktionierts mit dem Bool dafür nicht mehr mit dem Drehregler.

Für ein besseres Verständnis habe ich eine abgespeckte Version meines Vi angehängt.

Ich hoffe es kann mir jemand helfen.

Besten Dank

Gruss

Baesi
[attachment=33031:test.vi]

Du must die References noch "casten", dazu benutzt man "To More Generic Class":

   


VDB
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.05.2007, 15:30
Beitrag #3

marker Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 226
Registriert seit: Feb 2005

8.2.1
2002
kA


Deutschland
Producer/Consumer Problem bei Refnum Übergabe
Hallo Baesi,

ich hab nur mal kurz dein VI überflogen.
Da stellt sich mir sofort die Frage warum man so etwas macht.
Die Struktur (Producer/Consumer wie du sie nennst) ist ja ein guter Programmierstil, aber
alles über die Referenzen zu übergeben ist ja ziemlich unübersichtlich.
Wäre es nicht einfacher Cluster zu verwenden?

Gruß,
Marko

"Make it simple, make it strong!"
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.05.2007, 15:51
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Producer/Consumer Problem bei Refnum Übergabe
Hallo,

habe ebenfalls mal kurz einen Blick draufgeworfen. Was ich mich frage: Wieso steckst du die Ctrl-Refnum nochmal in einen Cluster? Ich hab's mal ohne Cluster probiert, sprich direkte Übergabe der Refnums, dann hat's gefunzt.

MfG, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.05.2007, 16:21
Beitrag #5

baesi Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Sep 2005

7.11
2000
kA


Schweiz
Producer/Consumer Problem bei Refnum Übergabe
' schrieb:Hallo,

habe ebenfalls mal kurz einen Blick draufgeworfen. Was ich mich frage: Wieso steckst du die Ctrl-Refnum nochmal in einen Cluster? Ich hab's mal ohne Cluster probiert, sprich direkte Übergabe der Refnums, dann hat's gefunzt.

MfG, Jens


Hallo zusammen

Besten Dank für die schnellen Antworten.

Habe die Lösung soeben selber gefunden:
http://wiki.lavag.org/index.php/Image:Type...notherclass.png

Warum der Cluster:
Das Bsp war natürlich abgespeckt. In meiner Applikation musste ich noch zusätzlich ein Enum übergeben Darum der Cluster.

Warum die Referenzen:
Mit der Applikation werden in Zukunft indirekt diverse FahrzeugSteuergeräte via CAN CCP ferngesteuert werden können. Weil die FP Elemte dynamisch via einer a2l Datei (Steuergeräte Beschreibungsdatei) konfiguriert werden müssen und eine allfälige Erweiterung ohne grossen Programmieraufwand möglich sein muss, habe ich den Weg mit den Refnums gewählt. Bei früheren Applikationen habe ich auch mit Clustern gearbeitet. Aber ich denke (kann sein, dass ich mich irre) dass in ich mir in diesem Fall bei einer zukünftigen Erweiterung Zeit spare.

Nochmals Danke

Falls Ihr anderer Meinung seid lasse ich gerne belehren.

Gruss

Baesi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.05.2007, 16:59 (Dieser Beitrag wurde zuletzt bearbeitet: 03.05.2007 18:18 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Producer/Consumer Problem bei Refnum Übergabe
Habe mir das VI auch mal angesehen, und glaube da eine grundsätzliche Schwachstelle dieser Konstruktion zu erkennen (hat aber mit dem Fehler nichts zu tun).
Die Sinn einer solchen Konzeption ist eigentlich, daß über die Queue (Wobei hier ein Melder auch ausgereicht hätte) die Daten zwischen Producer Consumer ausgetauscht werden. Das ist aber hier gar nicht der Fall, die Queue enthält gar kein Daten. Du hast lediglich ein Element in der Queue mit "Daten" bezeichnet, welches nur eine Referenz ist.
D.h. wenn Du in der Consumer-Schleife (oder dem Consumer-VI) die Daten wirklich empfängst - bei Dir ist das ja gar nicht der Fall - dann mußt Du sie Dir über die Referenzen, die in der Queue stehen, besorgen. Das ist aber ineffektiver, weil langsamer, als wenn sie in der Queue selbst stehen würden.

Ich habe mal eine Änderung gemacht, die ganz ohne Referenzen auskommt. Die Information, um welchen Datentyp es sich bei dem Variant handelt, wird über das Enum-Element übertragen. Anstelle des Elementes "Change" enthält es die beiden Elemente "Knob" und "Boolean".

Edit: Natürlich ist es kein direkter Fehler, wenn man über die Queue nur Referenzen schickt und keine Daten. Wenn man das aber tut, dann ist die Konvertierung von Referenz zu Cluster zu String zu Variant und wieder zurück überflüssig wie ein Kropf, und die Bezeichnung des Clustern mit "Daten" klassifiziert das Ganze dann noch als Mogelpackung. Dein VI mit Wertübergabe über Referenzen - wie gesagt nicht zu empfehlen - würde in abgespeckter Form so aussehen wie das zweite VI.


Angehängte Datei(en)
Sonstige .vi  test_Wa.vi (Größe: 42,51 KB / Downloads: 232)

Sonstige .vi  test_WA2.vi (Größe: 44,97 KB / Downloads: 245)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
04.05.2007, 12:55
Beitrag #7

baesi Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Sep 2005

7.11
2000
kA


Schweiz
Producer/Consumer Problem bei Refnum Übergabe
' schrieb:Habe mir das VI auch mal angesehen, und glaube da eine grundsätzliche Schwachstelle dieser Konstruktion zu erkennen (hat aber mit dem Fehler nichts zu tun).
Die Sinn einer solchen Konzeption ist eigentlich, daß über die Queue (Wobei hier ein Melder auch ausgereicht hätte) die Daten zwischen Producer Consumer ausgetauscht werden. Das ist aber hier gar nicht der Fall, die Queue enthält gar kein Daten. Du hast lediglich ein Element in der Queue mit "Daten" bezeichnet, welches nur eine Referenz ist.
D.h. wenn Du in der Consumer-Schleife (oder dem Consumer-VI) die Daten wirklich empfängst - bei Dir ist das ja gar nicht der Fall - dann mußt Du sie Dir über die Referenzen, die in der Queue stehen, besorgen. Das ist aber ineffektiver, weil langsamer, als wenn sie in der Queue selbst stehen würden.

Ich habe mal eine Änderung gemacht, die ganz ohne Referenzen auskommt. Die Information, um welchen Datentyp es sich bei dem Variant handelt, wird über das Enum-Element übertragen. Anstelle des Elementes "Change" enthält es die beiden Elemente "Knob" und "Boolean".

Edit: Natürlich ist es kein direkter Fehler, wenn man über die Queue nur Referenzen schickt und keine Daten. Wenn man das aber tut, dann ist die Konvertierung von Referenz zu Cluster zu String zu Variant und wieder zurück überflüssig wie ein Kropf, und die Bezeichnung des Clustern mit "Daten" klassifiziert das Ganze dann noch als Mogelpackung. Dein VI mit Wertübergabe über Referenzen - wie gesagt nicht zu empfehlen - würde in abgespeckter Form so aussehen wie das zweite VI.


Besten Dank für die Inputs. Ich übergebe nun nicht mehr die Refnums sondern direkt die Werte und andere Parameter in einem Cluster. Der Code wurde dadurch sogar übersichtlicher.

Gruss

Baesi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Queue verwendung in komplexer Producer/Consumer Abhängigkeit Ksanto 8 5.749 03.04.2017 20:14
Letzter Beitrag: Ksanto
  Übergabe Anzeigeelement zwischen VIs (Referenz/globale Variable?) lipster 1 4.298 03.02.2017 14:27
Letzter Beitrag: GerdW
  typedef refnum's to string and back GT123 8 5.707 09.09.2016 14:25
Letzter Beitrag: GT123
  Übergabe einer Referenz vom HauptVI in das SubVI alan 1 3.732 09.03.2015 16:11
Letzter Beitrag: jg
  Übergabe-Problem zweier While-Schleifen mit Queue onsight8c 1 3.712 10.10.2014 16:42
Letzter Beitrag: jg
  SubVi - Referenz Refnum vescon 2 5.270 01.10.2014 08:44
Letzter Beitrag: vescon

Gehe zu: