Forum: PC-Programmierung LeCroy - SCPI-Befehle funktionieren nicht


von Joh (Gast)


Lesenswert?

Hallo zusammen.

Ich möchte ein LeCroy-Oszilloskop (WaveRunner), welches SCPI-Befehle 
unterstützt, mit SCPI-Befehlen steuern.

Das Ganze soll von einem PC aus über ein Java-Programm funktionieren, 
wofür ich ein kleines Programm aus dem Netz zum Testen hergenommen habe 
(siehe Code).
Leider funktioniert das Ganze aber nicht, obwohl es funktionieren 
sollte.
Die IP des Rechners ist statisch, die des Oszis eben so.
Der Socket wird auch korrekt erzeugt, mit der jeweiligen IP und dem Port 
des LeCroy-Oszis.

Dass eine Verbindung hergestellt wird, zeigt mir das LeCroy-Gerät auch 
im Log an. Allerdings reagiert es nicht auf die trivialen Befehle wie 
"*OPC?" oder "*IDN?"


Hier der Quellcode:
1
import java.io.*;  
2
import java.net.*;  
3
class ScpiSockTest  
4
{  
5
    public static void main(String[] args)  
6
    {  
7
       String instrumentName = "xxxxx";            // Put your instrument's name here  
8
9
        try  
10
        {      
11
       Socket t = new Socket(instrumentName,5025);        // Connect to instrument 
12
                // Setup read/write mechanism 
13
            BufferedWriter out =  
14
            new BufferedWriter( 
15
            new OutputStreamWriter(t.getOutputStream())); 
16
            BufferedReader in =  
17
            new BufferedReader( 
18
            new InputStreamReader(t.getInputStream())); 
19
            System.out.println("Setting frequency to 1 Ghz..."); 
20
            out.write("freq 1Ghz\n");                     // Set frequency  
21
            out.flush(); 
22
            System.out.println("Waiting for source to settle..."); 
23
            out.write("*opc?\n");                         // Wait for complete 
24
            out.flush(); 
25
            String opcResponse = in.readLine(); 
26
            if (!opcResponse.equals("1"))  
27
{ 
28
       System.err.println("Invalid response to '*OPC?'!"); 
29
       System.exit(1);                       
30
} 
31
       System.out.println("Retrieving instrument ID..."); 
32
       out.write("*idn?\n");                        // Query the id string
33
       out.flush(); 
34
       String idnResponse = in.readLine();            // Read the id string
35
                                                      // Pring the id string
36
       System.out.println("Instrument ID: " + idnResponse); 
37
}  
38
       catch (IOException e) 
39
{  
40
       System.out.println("Error" + e);  
41
     }  
42
   }  
43
}


Hattet ihr schonmal so etwas gemacht bzw. könnt mir helfen, wo das 
Problem liegen könnte, dass das Oszilloskop jegliche Befehle 
"ignoriert"?

Mache ich im Java-Programm etwas falsch?



Vielen Dank schon mal!

Gruß
Joh

von Christian R. (supachris)


Lesenswert?

Soweit ich mich erinnere, muss man im Oszi erst mal das Protokoll von 
LXI auf SCPI umstellen. Irgendwo bei Remote...
Zum Testen eignet sich übrigens hervorragend der NI Krempel, also 488.2 
mit dem Measurement Explorer

von Joh (Gast)


Lesenswert?

>von LXI auf SCPI umstellen

Ja das habe ich natürlich gemacht...trotzdem funktioniert es nicht.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Joh schrieb:
> out.write("*opc?\n");                         // Wait for
> complete

Groß-/Kleinschreibung?

von Rene L. (Gast)


Lesenswert?

>Groß-/Kleinschreibung?

Nein, das habe ich auch schon ausprobiert. Es funktioniert auch nicht 
mit gänzlicher Großschreibung (wobei die Befehle sowieso nicht 
"case-sensitive" sind).

von Christian R. (supachris)


Lesenswert?

Welches Scope hast du denn? Vielleicht haben sie es doch endlich mal 
abgeschafft?
Ich nutze nur noch die neuen Befehle mit"app...).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und wie sieht der vorgeschriebene Zeilenterminator aus? Ist das nur \n?

Hast Du mal ein simples Terminalprogramm ausprobiert, um mit dem Gerät 
zu reden?

Unter Windows geht das mit dem quasi mitgelieferten* Telnet:
1
telnet instrumentname 5025

(Wobei "instrumentname" ein zu einer ip-Adresse auflösbarer Name sein 
muss, aber das ist in Deinem Java-Beispiel ja nicht anders, und 5025 die 
zu verwendende Portnummer ist)

Oder alternativ Teraterm, das kann auch Socketverbindungen aufbauen.

*) Man muss es über Systemsteuerung->Software->Windowskomponenten als 
"Telnet-Client" nachinstallieren. Dazu braucht man keine 
Installations-CD o.ä., die paar hundert kByte Programmcode sind irgendwo 
in den Tiefen des Windows-Verzeichnis schon vorhanden. Warum es dann 
nicht sowieso installiert wird ... entzieht sich meinem Verständnis.

von Christian R. (supachris)


Lesenswert?

Probier mal die VBS Befehle, ich habs eben mal raus gesucht, z.B. ID 
abrufen:
1
"VBS? 'return=app.InstrumentID'"

Kommt da was zurück?

von Joh (Gast)


Lesenswert?

Hallo Leute!

Danke erstmal für eure Antworten. Ihr seid spitze!

Ich werde es nun mal mit einem Terminalprogramm probieren, mal schauen, 
ob dann das Oszi etwas versteht.

Das Oszilloskop ist ein "WaveRunner 604Zi".



Ich melde mich, sobald ich Neues weiß.


Gruß

von Dirk B. (dirkb2)


Lesenswert?

putty kannst du auch nehmen

oder von der Kommandozeile geht netcat

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.