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?
Hallo Joern, möglicherweise hilft Dir das weiter: Beitrag "Re: CMU200 Erfahrungen und Modifikationen" Markus DL8MBY
Hallo, gibt es Erfahrungen mit mit Windows-Programmen, die auf den CRTU oder CMU200 zugreifen? Ich würde mich freuen, wenn ich mir Beispieprogramme ansehen dürfte. Irgendwie fällt mir der Einstieg schwer. Grüße Tom
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?
Hmmm welches PDF meinst du genau? Ich habe in den PDFs bisher keine Beispielprogramme finden können.
Auch habe ich nicht verstanden, wie das Handling mit der ersten und der zweiten GPIB Adresse funktioniert.
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"?
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.
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"
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.
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?
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
Fertige Routinen zum Einlesen der Bilder oder sonstiger Dateien würde mich interessieren, da ich bisher keine Möglichkeit gefunden habe die Länge des Einlesens zu steuern.
Evtl. würde es helfen deine Projektmappe hier hochzuladen, als ZIP.
Manfred L. schrieb: > Versteh ich ni ht? Die Nachricht galt dem TO, das hier ist ein Thread bei dem es um Software geht. Du kannst ja einen eigenen Thread aufmachen. mfg
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.