Programmierung CMU200 und CRTU-RU mit vb.net

OP #5444890
Lesenswert?

Ich versuche gerade über den GPIB-Bus einen CRTU-RU anzusteuern und 
benötige Hilfe.
Ich verwende ein GPIB-Interface von National Instruments und versuche 
über die VISA-GPIB Schnittstelle zuzugreifen. Programmiert wird unter 
vb.net.
Mit einem Beispiel habe ich es schon geschafft *IDN? zu übertragen und 
eine Antwort zu bekommen. Das mit den geräteigenen Befehlen klappt aber 
noch nicht.

Könnt ihr mir vielleicht mit Beispielprogrammen in vb.net von euch 
helfen?
Gast #6300741
Lesenswert?

Tom B. schrieb:
> Hallo,
> gibt es Erfahrungen mit mit Windows-Programmen, die auf den CRTU oder
> CMU200 zugreifen?

A bissl ;)

> Ich würde mich freuen, wenn ich mir Beispieprogramme
> ansehen dürfte. Irgendwie fällt mir der Einstieg schwer.
> Grüße Tom

Also Beispielprogramme findet man im Manual vom CMU200, hast Du das 
nicht?
Gast #6300977
Lesenswert?

Jetzt antworte ich mir selbst. Gemeint ist das PDF "CMU_Rev10_e.pdf" 
Operating Manual. Ich hatte gehofft ein lauffähiges Programm studieren 
zu können, da in der Realität oft noch irgendwelche Hürden zu überwinden 
sind, bis ein Programm wirklich funktioniert und den CRTU ansteuern 
kann.

Einige Fragen hätte ich noch?
- Warum gibt es zwei GPIB Adressen? Und wie wird die ersten und wie die 
zweite Adresse angesprochen?
- Spielt es eine Rolle, welcher GPIB-Adapter verwendet wird? Also 
"NI-GPIB-USB-HS GPIB-USB Adapter" oder "HP Keysight Agilent 82357B 
USB-GPIB Interface High-Speed USB 2.0" oder "Prologix GPIB-USB 
Controller"?
Gast #6302916
Lesenswert?

Tom B. schrieb:
> Jetzt antworte ich mir selbst. Gemeint ist das PDF "CMU_Rev10_e.pdf"
> Operating Manual. Ich hatte gehofft ein lauffähiges Programm studieren
> zu können, da in der Realität oft noch irgendwelche Hürden zu überwinden
> sind, bis ein Programm wirklich funktioniert und den CRTU ansteuern
> kann.

Ah, sorry. Ich habe Vorgestern nicht mehr reingeschaut.

>
> Einige Fragen hätte ich noch?
> - Warum gibt es zwei GPIB Adressen? Und wie wird die ersten und wie die
> zweite Adresse angesprochen?

Zum warum: Geräte können die Möglichkeit bieten, individuell 
Funktionsgruppen* und Testmodi unter einer Secondary-Address 
anzusprechen. Das ist beim CMU200 der Fall (CRTU weiß ich jetzt nicht). 
Der Device-Descriptor sieht dann z.B. bei Primary Address = 10 und 
Secondary Address = 1 so aus: "GPIB0::10::1::INSTR"
Ein Gerät das keine Secondary Address bietet/benötigt, würde das so 
aussehen: "GPIB0::10::INSTR"

> - Spielt es eine Rolle, welcher GPIB-Adapter verwendet wird? Also
> "NI-GPIB-USB-HS GPIB-USB Adapter" oder "HP Keysight Agilent 82357B
> USB-GPIB Interface High-Speed USB 2.0" oder "Prologix GPIB-USB
> Controller"?

Laut CMU-Manual muss man bei Verwendung von NI-Treibern zur Secondary 
Address den Wert 96 addieren. Ich verwende die VISA-Library von 
Keysight, daher kann ich dazu nicht viel mehr sagen.
Der HP82357B Adapter geht auf jeden Fall damit, die Prologix-Teile kenne 
ich nicht.

*) bei meinem CMU200 habe ich z.B. die Module "RF" und "AUDIO" den 
sekundären Adressen 1 und 2 zugewiesen.
Gast #6302941
Lesenswert?

Edson schrieb:
> *) bei meinem CMU200 habe ich z.B. die Module "RF" und "AUDIO" den
> sekundären Adressen 1 und 2 zugewiesen.

Die sekundäre Adresse 0 ist für das CMU-Basissystem reserviert.

d.h. ich benutze je nach Ziel die Device-Descriptor 
"GPIB0::10::0::INSTR", "GPIB0::10::1::INSTR" und "GPIB0::10::2::INSTR"
OP #6302963
Lesenswert?

Hallo,

hier zwei vb.net Codeschnipsel von mir:
1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
2
        Dim ioMgr As Ivi.Visa.Interop.ResourceManager
3
        Dim instrument As Ivi.Visa.Interop.FormattedIO488
4
        Dim idn As String
5
        ioMgr = New Ivi.Visa.Interop.ResourceManager
6
        instrument = New Ivi.Visa.Interop.FormattedIO488
7
        instrument.IO = CType(ioMgr.Open("GPIB0::20::1::INSTR"), Ivi.Visa.Interop.IMessage)
8
        instrument.WriteString("*IDN?")
9
        idn = instrument.ReadString()
10
        MsgBox("The IDN String is: " & idn, vbOKOnly, "IDN Result")
11

12
        'Muss hier nicht auch das "instrument" wieder geschlossen werden?
13
        'Wurden die VISA Bibliotheken richtig eingebunden?
14
    End Sub
15

16
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
17
        Dim ioMgr As Ivi.Visa.Interop.ResourceManager
18
        Dim instrument As Ivi.Visa.Interop.FormattedIO488
19
        Dim idnItems As Object()    'Ist das richtig????
20
        Dim idnItem As Object    'Ist das richtig????
21
        Dim n As Integer
22
        Dim messwerte(1000) As String
23
        'Dim idn As String
24
        'Dim idn2() As String
25

26

27
        ioMgr = New Ivi.Visa.Interop.ResourceManager
28
        instrument = New Ivi.Visa.Interop.FormattedIO488
29
        instrument.IO = CType(ioMgr.Open("GPIB0::20::1::INSTR"), Ivi.Visa.Interop.IMessage)
30
        instrument.WriteString("SPECtrum:FREQuency:STARt ” + "5E+07")
31
        instrument.WriteString("SPECtrum:FREQuency:STOP ” + "1.5E+08")
32
        instrument.WriteString("INITIATE:SPECtrum”)
33
        instrument.WriteString("READ:ARRAY:SPECTRUM:CURRENT?”)
34

35
        idnItems = CType(instrument.ReadList(Ivi.Visa.Interop.IEEEASCIIType.ASCIIType_Any, “,”), Object())
36
        'idnItems = CType(instrument.ReadList(), Object())    ' geht auch
37

38
        For Each idnItem In idnItems
39
            n = n + 1
40
            messwerte(n) = idnItem.ToString
41
        Next idnItem
42

43
        'Hier fehlt noch die Ausgabe
44

45
        Dim sResult As String = ""
46
        For Each elem As String In messwerte
47
            sResult &= elem & " "
48
        Next
49
        MsgBox(sResult)
50
    End Sub

Muss man die Verbindungen am Ende wieder schließen oder ist bie mir 
alles richtig. Wie auch immer - die Ausgaben in dem Infofenster sind 
alle richtig. Ich werde nun alles weiterentwickeln und ein richtiges 
Programm mit grafischer Darstellung schreiben schreiben. Der große 
Programmierheld bin ich nicht und freue mich immer, wenn größere 
Programme das machen was sie sollen. Daher würde ich mich über eine 
Rückmeldung freuen.

In der "Private Sub Button1" wird der Gerätename ausgelesen und in der 
zweiten Sub das Frequenzspektrum als Liste in einem Infofenster. Im 
angehängten Bild habe ich gezeigt, wie ich die Bibliotheken eingefügt 
habe. Im Bild findet ihr auch zwei Fragen die ich noch habe.

Als Bibliothek läuft bei mir die von Keysight. Die Treiber von NI sind 
aber auch auf dem Rechner, werden aber momentan nicht verwendet.
Angehängte Dateien:
OP #6303037
Lesenswert?

Hier das Bild von dem kleinen Testprogramm.Die zugehörigen Frequenzen 
muss man sich dann aus der Start- und Stoppfrequenz und der festen 
Anzahl der Messpunkte ausrechnen.

Wie kann man die Bilder (Hardcopy des Bildschirms) auslesen, die im 
Gerät mit dem Printbefehl erzeugt worden sind? Habt ihr das schon 
hinbekommen?

Muss das mit "New Ivi.Visa.Interop.FormattedIO488" erzeugt objekt am 
Ende der Sub-Routine wieder geschlossen werden?
Angehängte Dateien:
#6303613
Lesenswert?

Joern DK7JB .. schrieb:
> Hier das Bild von dem kleinen Testprogramm.Die zugehörigen Frequenzen
> muss man sich dann aus der Start- und Stoppfrequenz und der festen
> Anzahl der Messpunkte ausrechnen.
>
> Wie kann man die Bilder (Hardcopy des Bildschirms) auslesen, die im
> Gerät mit dem Printbefehl erzeugt worden sind? Habt ihr das schon
> hinbekommen?
1
MMEM:CDIR "\USERDATA\PRINT"
2
MMEM:DATA? "PRINT00.WMF"            (Dateiname bitte anpassen)

Nach dem MMEM:DATA? muss Deine Software die Blockdaten in 3 Schritten 
einlesen:

(1) die ersten zwei Zeichen lesen, das 1.Zeichen muss '#' sein, das 
2.Zeichen sagt Dir im ASCII-Code, wieviele Zeichen die Anzahl folgender 
Bytes bilden. Nehmen wir an, das 2.Zeichen ist 0x34 (='4')
(2) soviele Zeichen einlesen, wie vorhin festgestellt, und diesen String 
als Ganzzahl wandeln
(3) soviele Bytes lesen, wie in Schritt 2 festgestellt. Diese Daten dann 
in eine Datei schreiben (mit passender Dateiendung) - fertig

> Muss das mit "New Ivi.Visa.Interop.FormattedIO488" erzeugt objekt am
> Ende der Sub-Routine wieder geschlossen werden?

Edit:

Kann auf jeden Fall nicht Schaden. Ich schaue mir Dein Programm 
demnächst mal genauer an. Ich mache das (unter VBA) alles etwas anders, 
das hat aber auch mit der Lib zu tun.
#6472407
Lesenswert?

Es dürfte sich laut meiner Information um einen Sw Fehler handeln  das 
Gerät fährt hoch  und findet das dig port nicht es zeigt eine 
fehlermeldung
Sstem Error  Filname tsk.cpp
Line 676
Add Info
Rev./main/5.20/1
Int:154

In eebog hatte ich gefunden dass ev das Problem im A7 Modul liegt
Mfg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren