Read S-parameters from Anritsu MS46122B using python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

Hello Everyone.

i wanna read S11, S12, S21, S22 Parameters from Anritsu MS46122B using tkinter, Ploting.



is anybody can suggest?
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

Tkinter hat damit erstmal nichts zu tun, das ist ja "nur" ein Framework zum Erstellen von GUIs. Was meinst du mit "Ploting"?

Gruß, noisefloor
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das hier ist das Programmierhandbuch: https://dl.cdn-anritsu.com/en-us/test-m ... 0746AA.pdf - laut dem nutzt das Ding Ethernet over USB, und dann SCPI Kommandos.
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

ja ich habe Anritsu Messgerät, und shockline software um den Anritsu einstellen und laufen lassen.
jetzt ich möchte ein python script haben um die messergibnisse (spricht alle vier s parameters)
in python lesen kann. zum beispiel die S parameters im verschidenen formaten wie .CSV oder .S2p speichern. ode ode ode
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

__deets__ hat geschrieben: Mittwoch 5. Oktober 2022, 10:03 Das hier ist das Programmierhandbuch: https://dl.cdn-anritsu.com/en-us/test-m ... 0746AA.pdf - laut dem nutzt das Ding Ethernet over USB, und dann SCPI Kommandos.
ich brauche keine buch alta
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was ist "buch alta"? Beziehst du sich auf das "Buch Alta" (was auch immer das "Buch Alta" ist...), oder wolltest du sagen: "Ich brauche kein Buch, Alter"? Mal abgesehen von der Orthographie ist das Komma dann essentiell wichtig für den Sinn / die Aussage des Satzes. Da gibt es ja das schöne Beispiel "Kommas können leben retten": "Komm wir Essen Opa" vs. "Komm wir Essen, Opa" ;-)

Was du brauchst bzw. suchst ist eine Lösung. Den Weg hat __deets__ dir skizziert. Der beinhaltet nun mal das Studium des Handbuchs. Oder, wie man unter Programmieren sagt: RTFM :-)
Gut, das relevante Kapitel hat ein paar hundert Seiten. Aber so ist das bei der von dir verwendeten Hardware nun mal.

Gruß, noisefloor
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

mureed.niazie hat geschrieben: Donnerstag 13. Oktober 2022, 15:46 ich brauche keine buch alta
Doch, tust du. Und wenn du meinst, mit dem Tonfall hier Freund zu finden - vergiss es, "Alta". Leuten, von denen du Hilfe erwartest, in deiner umfaenglichen Ahnungslosigkeit, vor das Knie zu treten, ist ein ganz bescheidener move. Fang dich mal wieder ein, oder du redest in Zukunft hier nur noch mit dir selbst. Alta.
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

Hi. nein. Sie haben falsch verstanden. eigentlich das war mein (typing) fehler. ich wollte Buch Halter. schreiben aber wenn ich gepostet, erst dann habe ich mitbekommen dass ich nicht richtig geschriben. aber dann war zu spät weil man kann nicht wieder löschen.
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

zum beispiel ich habe diese script und theoritisch kann man S parameter vom Anritsu als .csv speichern, aber weiß ich nicht warum taucht ein fehler.

fehler ist. Traceback (most recent call last):
File "C:/Users/Mureed/PycharmProjects/Anritsu/ubung/grabData.py", line 99, in <module>
grabData(fname)
File "C:/Users/Mureed/PycharmProjects/Anritsu/ubung/grabData.py", line 47, in grabData
for m in range(len(f) + 1):
TypeError: object of type 'NoneType' has no len()



# Script ist.

import visa
import time
import os
import pyvisa.resources
import pyvisa


from past.builtins import raw_input


def grabData(fname):
rm = pyvisa.ResourceManager()

# Input the target instrument IP address
Addr = 'TCPIP0::192.168.200.102::5001::SOCKET'
VNA = rm.open_resource(Addr) # return Anritsu

print("Please wait, retrieving data...")
VNA.write("CH1")
f = VNA.ask_for_values("OFV")
S11 = VNA.ask_for_values("OFD")

VNA.write("CH2")
S21 = VNA.ask_for_values("OFD")

VNA.write("CH3")
S12 = VNA.ask_for_values("OFD")

VNA.write("CH4")
S22 = VNA.ask_for_values("OFD")

# Open the file to save data to
file = open(fname, "w")

## Write a header, to set up each channel
file.write("Frequency,S11 Magnitude,S11 Phase,S21 Magnitude,S21 Phase,S12 "
"Magnitude,S12 Phase,S22 Magnitude,S22 Phase \n")
file.write("GHz,dB,deg,dB,deg,dB,deg,dB,deg \n")
file.write("\n")

## Loop through all the data, writing it line by line to a csv
for m in range(len(f) + 1):
file.write(str(f[m + 1] / 1000000000) + ", " +
str(S11[2 * m + 1]) + ", " + str(S11[2 * m + 2]) + ", " +
str(S21[2 * m + 1]) + ", " + str(S21[2 * m + 2]) + ", " +
str(S12[2 * m + 1]) + ", " + str(S12[2 * m + 2]) + ", " +
str(S22[2 * m + 1]) + ", " + str(S22[2 * m + 2]) + "\n")
file.close()
VNA.close()


# end of grabData def

## Ask for the filename
t = raw_input("Enter name for file and then press RETURN: ")

## Open up a file and start writing
os.mkdir(t)

## Get the VNA data
rm = pyvisa.ResourceManager()

# Input the target instrument IP address
Addr = 'TCPIP0::192.168.200.102::5001::SOCKET'
VNA = rm.open_resource(Addr) # return Anritsu
# VNA = visa.instrument("GPIB::06")

VNA.write("CH1")
refS11t = VNA.ask_for_values("RDT?")

VNA.write("CH2")
refS21t = VNA.ask_for_values("RDT?")

VNA.write("CH3")
refS12t = VNA.ask_for_values("RDT?")

VNA.write("CH4")
refS22t = VNA.ask_for_values("RDT?")

## Open file for extra information
fname = t + "/" + t + ".txt"
file = open(fname, "w")

file.write("Reference Delay - Time (s) \n")
file.write("S11: " + str(refS11t) + " \n")
file.write("S21: " + str(refS21t) + " \n")
file.write("S12: " + str(refS12t) + " \n")
file.write("S22: " + str(refS22t) + " \n")

file.close()

## take the measurement
fname = t + "/" + t + "_1_1.csv"
grabData(fname)
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mureed.niazie: `f` hat anscheinend nicht den Wert den Du denkst das es haben sollte. `f` ist laut Fehlermeldung `None` und nicht wie Du erwartest eine Sequenz mit Werten, und von `None` kann man keine Länge ermitteln:

Code: Alles auswählen

In [80]: len(None)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [80], in <cell line: 1>()
----> 1 len(None)

TypeError: object of type 'NoneType' has no len()
Das ``+ 1`` wäre dann übrigens auch komisch, weil Du damit in der Schleife dann so ziemlich garantiert beim letzten Durchlauf einen `IndexError` bekommen würdest.

Und so eine Schleife ist an sich auch „unpythonisch“, denn der Index `m` wird hier nur verwendet um auf Elemente von Sequenzen zuzugreifen. Man kann aber in Python direkt über die Elemente von Sequenzen iterieren, ohne den Umweg über einen Laufindex. Wenn man über mehrere Sequenten ”parallel” iterieren möchte, dann nimmt man dafür die `zip()`-Funktion. Und um nur jedes zweite, oder allgemein n-te Element aus einer Sequenz zu nehmen, gibt es die Slice-Syntax.

CSV-Dateien schreibt man mit Hilfe des `csv`-Moduls aus der Standardbibliothek. Da bastelt man sich nicht selber Zeichenketten mit Kommas drin.

Beim öffnen von Dateien sollte man die ``with``-Anweisung verwenden. Bei Textdateien immer explizit die Kodierung angeben. Beim `csv`-Modul kommt dann noch das passende `newline`-Argument dazu, wie dort in der Dokumentation beschrieben.

Pfade setzt man nicht mit Zeichenkettenoperationen zusammen. Dafür gibt es das `pathlib`-Modul. Was auch viele Funktionen aus `os` und `os.path` ersetzt.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Namen sollten keine kryptischen Abkürzungen enthalten oder gar nur daraus bestehen, und man nummeriert keine Namen. Wenn man Namen nummeriert, will man sich entweder bessere Namen überlegen, oder gar keine Einzelnamen/-werte, sondern eine Datenstruktur. Oft eine Liste.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

ahh. es bedeutet, dass das gesamte Skript wie falsch ist. Ich kann es wirklich nicht in eine bessere Form bringen. Wenn es möglich ist, helfen Sie mir bitte, es neu zu schreiben.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mureed.niazie: Warum `f` den Wert `None` hat, müsstest Du selbst heraus finden. Ich habe so ein Gerät ja nicht hier, und ich denke die meisten anderen auch nicht.

Zu den anderen Punkten: Was ist konkret unklar?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
mureed.niazie
User
Beiträge: 18
Registriert: Dienstag 22. März 2022, 14:40

@__blackjack__ können Sie bitte das bessere und richtige Code block wie Sie gemeint, hier schreiben um ich ein Augenblink habe. ich habe versucht das zu ändern wie Sie gemeint aber geht nicht. ich bitte Sie den Code block so wie Sie gemeint so es sein soll, mir schreiben.

diese satz habe ich nicht verstanden was Sie genau gemeint. (eine Schleife ist an sich auch „unpythonisch“, denn der Index `m` wird hier nur verwendet)
Antworten