DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Datenstring aus Messgerät auslesen über Script Dac Treiber

Hallo,
ich möchte aus einem Messgeät Messwerte aus einem Dac heraus auslesen. Dazu nutze ich den Scrip-Dac Treiber und lese 4 Kanäle über GPIB aus (Diadem 10.0).
Ich nutze die Funktion SFD_Init( DeviceParam1V, DeviceParam2V, ErrorP) zum initialisieren und zum anfordern der Messwerte (man schreibt welche werte man auslesen möchte und mit "cont on" werden die Werte dann zyklisch nach jedem Messzyklus ausgegeben).
 
Mit der Funktion SFD_GetScan wird dann mittels read-Befehl der Wert aus der Schnittstelle ausgelesen.
Es kommt folgender String zurück: 2.31174E+2;5.00093E+1;2.59054E-1;4.36872E-1     => Es sind vier Werte je durch ; getrennt
 
Nun wird mit der Funktion SFD_ReadChannel ( ChannelNumberP, ParamP, DataP, ErrorP ) der Wert wie folgt aufgesplittet und je nach Wert von ParamP der richtige Wert zurückgegeben.
        MVariablenDF = Split(sDaten, ";", -1, 1)    'String aufsplitten, jeweils am ";"
        uac = oUDIM.Parse(MVariablenDF(0), "%ad")
        freq = oUDIM.Parse(MVariablenDF(1), "%ad")
        p = oUDIM.Parse(MVariablenDF(2), "%ad")
        ep = oUDIM.Parse(MVariablenDF(3), "%ad")
 Select case ParamP
   Case "UAC"     DataP = uac
   Case "FREQ"  DataP = freq
   Case "P"          DataP = p
   Case "EP"       DataP = ep
 end Select

Nun mein 1.Problem:
Hin und wieder kommt kurz nach dem Start der Messung folgende Fehlermeldung zu obiger Zeile "MVariablenDF = Split(sDaten, ";", -1, 1)"
Fehler: Index ausserhalb des gültigen Bereichs: '[number: 1]'
 
2. Problem:
 
als erstes wird in dem Script eine Windows Umgebungsvariable abgefragt:
T1 = GetEnv("Diadem") 
 
Wenn diese Zeile im Script ist, bekomme ich zu Beginn die Fehlermeldung Typen unverträglich: 'GetEnv', das Script läuft aber trotzdem hin und wieder fehlerfrei.
Nehme ich diese Zeile raus, bekomme ich sofort zu dem 1. Problem die Fehlermeldung: Typen unverträglich und es werden keine Werte ausgelesen.
 
 
0 Kudos
Message 1 of 3
(4,180 Views)

Hallo,

1. die Fehlermeldung kommt, wenn sDaten keine Werte, also "" enthält. Bitte überprüfe dies doch einmal.

2. Hast du die Windows Umgebungsvariable angelegt? Wie? Warum?

Den Pfad der aktuell ausgeführten Script-Datei kann man z.B. mit AutoActPath herausfinden.

 

Nochwas:


vData = oUDI.Read()

vArray = oUDI.Parse(vData,"%2R<UAC»%1S%2R<FREQ»%1S%2R<P»%1S%2R<EP»")

vFREQ = oUDI.NamedValueGet("FREQ")

 Sparst du dir hiermit nicht das Splitting?

Es werden dann die Werte hintereinander gelesen und benannt, die ; werden nicht benannt.

 

Thomas

Message Edited by themad on 01-18-2007 06:07 AM

0 Kudos
Message 2 of 3
(4,176 Views)
Hallo,
 
vielen Dank für die Antwort
zu1. ich hatte zwar die Variable mit "0;0;0;0" initialisiert, allerdings wird der Wert scheinbar auf "" gesetzt wenn keine Werte an der Schnittstelle anliegen. Meine Do Loop until <> "0;0;0;0" Abfrage war damit natürlich hinfällig.
Der vorgeschlagene Code oUDI.Parse(vData,"%2R<UAC»%1S%2R<FREQ»%1S%2R<P»%1S%2R<EP»") funktioniert, allerdings müssen die Zeichen
> statt » (steht auch falsch in der Diadem Hilfe!) eingefügt werden
 
Außerdem muss die Formatvorgabe %ad statt %2R  sein (%2R finde ich auch nicht in der Diademhilfe)  => "%ad<UAC>%1S%ad<FREQ>%1S%ad<P>%1S%ad<EP>"
 
Mit der Abfrage, dass der String sDaten <> "" ist dürfte wahrscheinlich auch der Split-Befehl funktionieren.
 
zu2.
Die Windows Umgebungsvariable ist in der Systemsteuerung gesetzt. Damit kann ich Scripte auf verschiedenen Rechnern, bei denen Diadem in verschiedenen Verzecihnissen installiert ist, laufen lassen, unabhängig davon wo mein gerade gestartetes Script steht.
 
Gruß
Erik
 
 
 
 
Message 3 of 3
(4,164 Views)