DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

SFD_ProcessChannel; Zwei Ausgänge über DataP ?

Hallo,
mal wieder kämpfe ich mit der Funktion SFD_ProcessChannel.
 
Folgende Problemstellung: Ich habe an dem Block zwei Ein- und zwei Ausgänge definiert. Jetzt möchte ich mit den beiden Eingängen div. Berechnungen durchführen und zwei Ergebnisse ausgeben, die dann in einer X/Y Darstellung angezeigt werden sollen.
 
Ich bekomme es auch hin die beiden Eingänge über InputListV(0) und InputListV(1) einzulesen und zu verarbeiten, aber wie kann ich mir an dem Block zwei Ergebnisse ausgeben lassen? Ich habe es analog zu InputListV(1) mit DataP(1) versucht aber DataP ist ja leider kein Array?!?
 
Jemand eine Idee?
 
Danke, Tobias 
0 Kudos
Message 1 of 7
(4,403 Views)
Hallo,
zur Ausgabe gibt es nur DataP als skalare Variable.
Wenn mehrere Ausgänge in einem Block definiert sind, wird die SFD_ProcessChannel pro Takt mehrfach aufgerufen, einmal für jeden Ausgang. Den Wert, den man dabei an DataP übergibt, wird dann an den enstprechenden Ausgang weiter geleitet. Die Variable ChannelNumberP gibt dabei an, für welchen Ausgang die Funktion momentan ausgeführt wird.
Testen Sie am Besten esrt mal mit dem einfachen Script  DataP = ChannelNumberP, dann werden sie schnell verstehen wie die Sache funktioniert.
MfG
Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
0 Kudos
Message 2 of 7
(4,382 Views)

Hallo,

danke, dass habe ich soweit nachvollziehen können.

Mein Problem ist jetzt noch, dass ich über ein Script Werte aus zwei Kanälen lesen will um diese dann über ein X/Y Diagramm ausgeben zu lassen. Die Werte werden über einen Retrigger Speicherblock gespeichert. Die Kanäle werden erst nach und nach mit den Weten gefüllt. Ich möchte mir die Werte aber von Anfang an online darstellen lassen.

Meine Idee ist jetzt folgende gewesen, ich schreibe ein Script was ich über einen Script-Treiber-Block einbinde das mir die Werte aus den Kanälen liest und diese dann an das X/YDiagramm gibt.->Dazu die zwei Ausgänge.Mein Script sieht jetzt folgendermaßen aus (Diadem 10.2):

Dim i,a
  DataP = 0

  if ChnStrCnt(ChannelNumberP)=1 or ChnStrCnt(ChannelNumberP)=2 then
    a= ChnLength(ChannelNumberP)
      for i=0 to a
        DataP= ChD(i,ChannelNumberP)
      next
  end if

 

Hierbei bekomme ich aber die Fehlermeldung:  Variable ist nicht definiert :ChnStrCnt    ---> WARUM? 

Tobias

0 Kudos
Message 3 of 7
(4,378 Views)
Hallo,

Ihr Script wird so im Script DAC Block leider nicht funktionieren. Die Funktion ChnStrCnt, die zunächst den Fehler erzeugt, ist dabei nicht einmal das Hauptproblem.
In diesem Fall können Sie die Funktion ganz weglassen.
ChnStrCnt prüft einen Channel Selection String (so etwas wie "1-4,6") auf die Anzahl der beinhalteten Kanäle (im Beispiel: 5). ChannelNumberP ist jedoch kein Channel Selection String, sondern eine Integervariable. Eine Überprüfung funktioniert also einfach mit ChannelNumberP=1. Allerdings zählt die Variable von 0 aufwärts, ChannelNumberP ist also 0 für den ersten Kanal, 1 für den 2. usw. Ein weiteres Problem ist, dass Innerhalb der Ausführung von SFD_Process channel nur einmal ein Wert an DataP übergeben werden kann, sonst würden die Daten hinter dem Script DAC Block ja viel höher getaktet sein. Das Hauptproblem bei Ihrem Ansatz ist jedoch, dass der Script DAC Treiber keinen Zugriff auf die Datenmatrix ermöglicht. Die ChnLength und ChD Variablen sind in diesem Kontext ungültig.

Ich habe noch nicht ganz verstanden, was Sie mit dieser Sache genau erreichen möchten. Bitte beschreiben Sie das Ziel noch einmal etwas genauer, vielleicht kann ich Ihnen dann zu einem alternativen Ansatz raten.

MfG
Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
0 Kudos
Message 4 of 7
(4,374 Views)
Habs mir irgendwie schon gedacht das dies der falsche Ansatz ist.....naja
 
Ich brauche eine Lösung für folgendes Problem: Der Anwender startet eine Messung. Wenn jetzt bestimmte Bedingungen erfüllt sind wird ein Trigger ausgelöst und ein Speicherblock speichert 10 Messwerte in je zwei Kanälen. Aus diesen 10 Werten pro Kanal wird je ein Mittelwert gebildet. Der Mittelwert aus Kanal NR.1 soll als X-Wert an eine X/Y-Anzeige gegeben werden, der aus Kanal Nr.2 als Y-Wert. Nach einer nicht bestimmten Zeit wird erneut ein Trigger ausgelöst ,der wiederum einen Speichervorgang auslöst und die Prozedur beginnt von vorne. Die Daten werden dabei im Datenportal abgelegt und in Abschnitten gespeichert.
 Während der ganzen Zeit läuft das Messprogrammm normal weiter, die X/Y Anzeige  muss nach jedem Speichervorgang aktualisiert werden.
 
Bin etwas ratlos wie ich das als Diadem-Neuling umsetzen kann. 
 
 
0 Kudos
Message 5 of 7
(4,372 Views)
Die Aufgabe ist tatsächlich etwas knifflig. Ich habe mel ein Beispiel erstellt, mit dem das funktionieren sollte. Ich nutze einen Triggerfolgeblock, um die Durchschnittswerte zu erstellen, Das Triggersignal startet und Stoppt dessen Takt über den Taktfreigabeeingang (funktioniert wie ein Gate). Damit bei jedem Trigger nur ein Mittelwert durchkommt, muss die Pulsbreite im Verzögerungsglied angepasst werden. Ein zweiter Takt, der nicht gestartet und gestoppt wird, regelt die Datenerfassung und Anzeige der Originaldaten. In den beiden Taktblöcken ist die gleiche Rate eingestellt.
MfG
Ingo Schumacher
Systems Engineering Manager CEERNational Instruments Germany
0 Kudos
Message 6 of 7
(4,365 Views)

Unglaublich es funktioniert! Wie lange habe ich solch eine Lösung gesucht

Vielen Dank IngoS!!

Gruß,Tobias

0 Kudos
Message 7 of 7
(4,359 Views)