16.01.2007, 23:40
Hallo zusammen!
Zuerst einmal grundsätzliches zu meinen Problem.
Benutze eine PCI-1202 (Pci-Karte) von ICPDAS zum Erfassen von analogen Signalen.
Da die Karte nicht über den DAQ-Assistenten angesprochen werden kann, benutze ich die Funktionen des Treibers (direkter Zugriff auf die Scan-Funktionen über die dll-Datei).
Der Ablauf zum Scannen eines Kanals ist folgender.
Ich benötige grundsätzlich 3 Funktionen, die in einer bestimmten Reihenfolge aufgerufen werden müssen. Dazu benutze ich eine Stacked Sequence.
Die erste Funktion dient dazu einen Kanal zum Scannen vorzubereiten. (Funktion addToScan)
Dann folgt eine Methode Savescan, der ich ein leeres Array zum Speichern der Messdaten zur Verfügung stellen muss. Der Rückgabewert dieser Funktion enthält die gescannten Daten, wobei zu diesem Zeitpunkt noch nicht gescannt wurde. Daher wird dieser Rückgabewert als Sequence Local in der Stacked Sequence kurzzeitig "gespeichert".
Im nächsten Schritt wird die Methode startscan aufgerufen, die den scan dann letztendlich durchführt. Einen Schritt weiter kann ich dann die Sequence Local auslesen und und die gescannten Daten verarbeiten.So weit so gut.. Bis hierhin klappt noch alles.
Nun scanne ich nicht einen Kanal sondern max. 16 Kanäle, wobei ich abhängig von einer Konfiguratio bestimmte Kanäle scannen möchte und andere nicht. Gesagt getan...
Nun geht es darum den o.g. Aufruf der Scan-Funktionen mit meiner Konfiguration abzustimmer. Also habe ich die ersten beiden Frames der Stacked Sequence, wo ich die Methoden addToScan und saveScan aufrufe, um eine Case-structure erweitert. Abhängig von einer boolschen Variablen (nämlich ob dieser Kanal gescannt werden soll) rufe ich dann innerhalb der case structure die beiden Methoden auf. Jetzt zum eigentlich Problem. Der Rückgabewert der Funktion saveScan muss ich nun über die CaseStructure tunneln, um sie als SequenceLocal zu speichern und sie später auszulesen. Das Problem: es kommen nun keine Daten mehr an, nachdem ich die Methode startScan aufgerufen habe. Das hört sich vieleicht unheimlich kompliziert an, ist aber recht simpel.
Es dreht sich eigentlich nur um die Funktion saveScan, die als Rüchkabewert die gescannten Daten liefert, welche aber zum Zeitpunkt des Funktionsaufrufes noch nicht zur Verfügung stehen. Welche daher als Sequence Local gespeichert und nach dem Aufruf der startScan-Funktion einen Frame später, die gescannten Daten enthält. Rufe ich die Funktion savescan aber innerhalb einer case Structure auf und tunnele den Rückgabewert durch die CaseStructure, um diese als SequenceLocal zu speichern, klappts nicht mehr. ...und ich hab keine Ahnung warum.
ich konnte das Vi jetzt leider nicht bereitstellen, da jede ScanFunktion über ein SubVi aufgerufen wird. Wenn also jemand wirklich Interesse an meinem Problem hat, oder meine Beschreibung nicht ganz verstanden hat (ist auch leider schwierig zu erklären , wie ich finde), dem schicke ich gerne ein Beispiel per mail.
Hoffe jemand hat eine Idee oder einen Tip,
Danke
Tom
Zuerst einmal grundsätzliches zu meinen Problem.
Benutze eine PCI-1202 (Pci-Karte) von ICPDAS zum Erfassen von analogen Signalen.
Da die Karte nicht über den DAQ-Assistenten angesprochen werden kann, benutze ich die Funktionen des Treibers (direkter Zugriff auf die Scan-Funktionen über die dll-Datei).
Der Ablauf zum Scannen eines Kanals ist folgender.
Ich benötige grundsätzlich 3 Funktionen, die in einer bestimmten Reihenfolge aufgerufen werden müssen. Dazu benutze ich eine Stacked Sequence.
Die erste Funktion dient dazu einen Kanal zum Scannen vorzubereiten. (Funktion addToScan)
Dann folgt eine Methode Savescan, der ich ein leeres Array zum Speichern der Messdaten zur Verfügung stellen muss. Der Rückgabewert dieser Funktion enthält die gescannten Daten, wobei zu diesem Zeitpunkt noch nicht gescannt wurde. Daher wird dieser Rückgabewert als Sequence Local in der Stacked Sequence kurzzeitig "gespeichert".
Im nächsten Schritt wird die Methode startscan aufgerufen, die den scan dann letztendlich durchführt. Einen Schritt weiter kann ich dann die Sequence Local auslesen und und die gescannten Daten verarbeiten.So weit so gut.. Bis hierhin klappt noch alles.
Nun scanne ich nicht einen Kanal sondern max. 16 Kanäle, wobei ich abhängig von einer Konfiguratio bestimmte Kanäle scannen möchte und andere nicht. Gesagt getan...
Nun geht es darum den o.g. Aufruf der Scan-Funktionen mit meiner Konfiguration abzustimmer. Also habe ich die ersten beiden Frames der Stacked Sequence, wo ich die Methoden addToScan und saveScan aufrufe, um eine Case-structure erweitert. Abhängig von einer boolschen Variablen (nämlich ob dieser Kanal gescannt werden soll) rufe ich dann innerhalb der case structure die beiden Methoden auf. Jetzt zum eigentlich Problem. Der Rückgabewert der Funktion saveScan muss ich nun über die CaseStructure tunneln, um sie als SequenceLocal zu speichern und sie später auszulesen. Das Problem: es kommen nun keine Daten mehr an, nachdem ich die Methode startScan aufgerufen habe. Das hört sich vieleicht unheimlich kompliziert an, ist aber recht simpel.
Es dreht sich eigentlich nur um die Funktion saveScan, die als Rüchkabewert die gescannten Daten liefert, welche aber zum Zeitpunkt des Funktionsaufrufes noch nicht zur Verfügung stehen. Welche daher als Sequence Local gespeichert und nach dem Aufruf der startScan-Funktion einen Frame später, die gescannten Daten enthält. Rufe ich die Funktion savescan aber innerhalb einer case Structure auf und tunnele den Rückgabewert durch die CaseStructure, um diese als SequenceLocal zu speichern, klappts nicht mehr. ...und ich hab keine Ahnung warum.
ich konnte das Vi jetzt leider nicht bereitstellen, da jede ScanFunktion über ein SubVi aufgerufen wird. Wenn also jemand wirklich Interesse an meinem Problem hat, oder meine Beschreibung nicht ganz verstanden hat (ist auch leider schwierig zu erklären , wie ich finde), dem schicke ich gerne ein Beispiel per mail.
Hoffe jemand hat eine Idee oder einen Tip,
Danke
Tom