Forum: PC-Programmierung Netzteilansteuerung per Python


von Soder D. (soderdaen)


Lesenswert?

Hi zusammen,

ich möchte gerade ein Netzteil der Firma Elektro Automatik per Python 
ansteuern. Leider gibt es seitens des Herstellers keine Beispiele 
ausserhalb von LabVIEW.
Die Programmierung soll per Python erfolgen und über die SCPI 
Kommunikation per TCP/IP stattfinden.
Es ist eine uralt Schnittstellenkarte verbaut, wodurch man nicht einfach 
die SCPI Kommandos schicken kann, sondern es braucht vorher noch ein 
Paket mit der Länge des nachfolgenden Kommandos.
Die Vorgehensweise ist hier beschrieben:
https://elektroautomatik.com/wp-content/uploads/an008_tcpip_access_ifex_ethernet_card.pdf

Allerdings komme ich da mit meinen bisherigen Versuchen das in Python zu 
bewerkstelligen nicht weit.
Da ich leider nicht mal Wireshark installieren darf um den Transfer zu 
checken bleibt mir nur Try & Error oder euer Fachwissen.
Hättet ihr eine Idee wie ich die Kommunikation aufbauen muss, damit das 
Ansteuern des Netzteils klappt?

Aktueller code:
1
import socket
2
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3
s.settimeout(2)
4
s.connect(('169.254.227.240', 80))
5
data = bytes.fromhex('00000006')
6
s.sendall(data)
7
s.sendall(b'LOCK 1\n')
8
print(s.recv(1024))

Damit bekomme ich immerhin eine Fehlermeldung des Keil Compilers als 
Antwort, die besagt, dass das Kommando nicht bekannt ist.

von mitleser (Gast)


Lesenswert?

Moin,

ich glaube Wireshark gibt es auch als Portable. Ich weiß aber nicht, ob 
es dann ohne Adminrechte oder mit ner ggf. alten Version funktioniert.

Ist die die Umwandlung von LOCK1 in Byte so in Ordnung?
Was sagt den der Compiler? Ggf. muss da nen Encoding angegeben werden?

Grüße

von Einer geht noch (Gast)


Lesenswert?

Soder D. schrieb:
> Damit bekomme ich immerhin eine Fehlermeldung des Keil Compilers als

Python vs. Keil Compiler - ich hab noch nicht alles auf dieser Welt 
gesehen, vielleicht sollte ich doch mal aus meinem Keller kriechen...


Soder D. schrieb:
> s.connect(('169.254.227.240', 80))

Ich hoffe dass APIPA-Addressen Dir keine unnötigen Umstände machen (aus 
welchen Gründen auch immer...)

Da es um Port 80 geht: ist das HTTP[S]? (ich habe nicht ins verlinkte 
PDF geguckt)
Falls ja: Bekommst Du da irgendwas nützliches hin mit wget oder curl 
? (ausserhalb Python natürlich!)

von Dirk B. (dirkb2)


Lesenswert?

Soder D. schrieb:
> s.sendall(b'LOCK 1\n')

Das \n gehört da nicht hin.

> Damit bekomme ich immerhin eine Fehlermeldung des Keil Compilers als
> Antwort, die besagt, dass das Kommando nicht bekannt ist.

Schon mal direkt mit einem Python-Interpreter probiert?

von Einer geht noch (Gast)


Lesenswert?

(keine Reaktion vom Fragesteller seit ~3h)

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

Es macht keinen Sinn eine Implementierung zu versuchen, wenn man nicht 
mal weiß, wie der Netzwerktraffic aussehen soll.
Wie weiter oben steht: Wireshark gibt es portable.

Wenn das nicht erlaubt ist wäre unter linux tcpdump, unter Windows 
pktmon, noch eine Möglichkeit, Taffic mitzuschneiden.

Wenn beides nicht geht würde ich mit der IT reden, die sollen sich was 
einfallen lassen. Ein Extra-Rechner, ein Testnetz, irgendwas. 
Informationssicherheitsmanagement ist wichtig, aber wo gehobelt wird da 
fallen Späne.

von Sebastian (Gast)


Lesenswert?

Dirk B. schrieb:
> Soder D. schrieb:
>> s.sendall(b'LOCK 1\n')
> Das \n gehört da nicht hin.

In der Tat, das '\n' hat in dem Kommando nichts zu suchen, UND macht den 
String 7 Zeichen lang anstelle der angekündigten 6.

Aber du machst glaube ich noch einen anderen Fehler. Das Manual sricht 
von einem raw socket. Du benutzt aber einen AF_INET SOCK_STREAM socket, 
also den vollen TCP stack. Dieser Stack wird aber deine zwei sendall zu 
einem Frame zusammenfassen wenn du dazwischen keine Wartezeit einbaust. 
Und das Manual sagt es sollen zwei Frames sein ...

LG, Sebastian

von Soder D. (soderdaen)


Lesenswert?

Hi zusammen, danke für die vielen Kommentare soweit.

Erst mal zur Entwirrung hinsichtlich des KEIL Compilers. Die Meldung mit 
dem unbekannten Kommando bekomme ich nicht von Python, sondern vom 
Netzteil als Antwort auf meine Anfrage. Bei ähnlichen Abfragen kam 
bisher nur ein timeout.
Grundsätzlich geht die Kommunikation unüblicherweise über Port 80. Das 
liegt wohl an der Schnittstellenkarte für die es eben jene angehängte 
AppNote gibt.
Man kann auch per Browser auf ein Interface zugreifen, aber wie gesagt, 
ich möchte es mit Python automatisieren. Bei dieser Netzwerkkarte läuft 
wohl auch die Ansteuerung alles über einen Raw Socket und Port 80.

Ich verwende gerade auch keine Programmierumgebung aktuell sondern 
reines Python in der command shell. Wenn die Kommunikation läuft werde 
ich zu VisualStudio Code wechseln denke ich.

mitleser schrieb:
> Ist die die Umwandlung von LOCK1 in Byte so in Ordnung?

Das weiß ich leider nicht. Ich hoffe hier auf die Antwort zu stoßen :)

Einer geht noch schrieb:
> Falls ja: Bekommst Du da irgendwas nützliches hin mit wget oder curl

Bin auf nem Windows PC, gibts da Alternativen?

Dirk B. schrieb:
> Soder D. schrieb:
>> s.sendall(b'LOCK 1\n')
>
> Das \n gehört da nicht hin.

Stimmt, guter Punkt. Ich hatte es - soweit in Erinnerung- auch mal ohne 
\n probiert und dann kam auch entweder der KEIL fehler oder ein timeout.
Am Donnerstag bin ich wieder vor Ort am Gerät und kann gern etwas 
ausprobieren.

Einer geht noch schrieb:
> (keine Reaktion vom Fragesteller seit ~3h)

Ja Feierabend und ne Runde laufen. :)

Tilo R. schrieb:
> Wie weiter oben steht: Wireshark gibt es portable.
>
> Wenn das nicht erlaubt ist wäre unter linux tcpdump, unter Windows
> pktmon, noch eine Möglichkeit, Taffic mitzuschneiden.

Das werde ich mal probieren.

Sebastian schrieb:
> Aber du machst glaube ich noch einen anderen Fehler. Das Manual sricht
> von einem raw socket. Du benutzt aber einen AF_INET SOCK_STREAM socket,
> also den vollen TCP stack. Dieser Stack wird aber deine zwei sendall zu
> einem Frame zusammenfassen wenn du dazwischen keine Wartezeit einbaust.
> Und das Manual sagt es sollen zwei Frames sein ...

Das klingt plausibel, das schaue ich mir auch gern am Donnerstag am 
Gerät vor Ort an.

Vielen herzlichen Dank soweit für eure Anregungen

von Ein Ratschlag (Gast)


Lesenswert?

> Da ich leider nicht mal Wireshark installieren darf...
> Bin auf nem Windows PC, gibts da Alternativen?

Ja.

Du sagst deinen Chef -- wenn er einen Deppen sucht, der mit ungeeigneten 
Werkzeugen alten Schrott zum laufen bringt -- dann soll er halt so einen 
Deppen einstellen.

Du machst doch den Eindruck, als würdest du sofort eine bessere Stelle 
finden.

von Boris (Gast)


Lesenswert?

Sigrok kann scpi...

von Einer geht noch (Gast)


Lesenswert?

> Einer geht noch schrieb:
>> Falls ja: Bekommst Du da irgendwas nützliches hin mit wget oder curl
>
> Bin auf nem Windows PC, gibts da Alternativen?

Diese Rückfrage ist jetzt aber nicht ernst gemeint, oder?

Klar gibt es CURL.EXE und WGET.EXE  m-) ausserdem auch WSL2...
Und erwachsene Netzerkbetriebssysteme als Alternative zu GameLoader mit 
Mausbedienung!

von Dirk B. (dirkb2)


Lesenswert?

Einer geht noch schrieb:
> Klar gibt es CURL.EXE und WGET.EXE

 curl gehört mittlerweile zu Windows (seit 7).

Man muß evtl. mit dem Proxy aufpassen.

von Soder D. (soderdaen)


Lesenswert?

Einer geht noch schrieb:
>> Einer geht noch schrieb:
>>> Falls ja: Bekommst Du da irgendwas nützliches hin mit wget oder curl
>>
>> Bin auf nem Windows PC, gibts da Alternativen?
>
> Diese Rückfrage ist jetzt aber nicht ernst gemeint, oder?
>
> Klar gibt es CURL.EXE und WGET.EXE  m-) ausserdem auch WSL2...
> Und erwachsene Netzerkbetriebssysteme als Alternative zu GameLoader mit
> Mausbedienung!

Schande über mein Haupt.
Ich guck am Donnerstag mal mit curl.exe was man so findet auf dem Gerät.

von Soder D. (soderdaen)


Angehängte Dateien:

Lesenswert?

Die Meldung, die ich mit dem initial Code zurück bekomme ist:
1
b'HTTP/1.1 501 Not Implemented\r\nServer: Keil-EWEB/2.1\r\nContent-type: text/html\r\nConnection: close\r\n\r\n<head><title>Server Error</title></head><body><h2>Error 501 - Not Implemented</h2>The requested Method is not supported.<hr><br><i>Keil Embedded WEB Server V2.00, 2011<br><a h_ref=http://www.keil.com>www.keil.com </a> - Embedded Development Tools</i></body>'

ohne das angesprochene
1
 \n
 bekomme ich die selbe Meldung zurück.

Wenn ich den Socket ändere zu:
1
s = socket.socket(socket.AF_INET, socket.SOCK_RAW)

denn bekomme ich ein timeout (auch ohne \n).

Kleine Info noch: über den Browser werde ich mit der Geräte IP auf
1
http://169.254.227.240/Home.cgi
weitergeleitet.

Per curl Befehl bekomme ich bei Eingabe der IP und Port zu folgender 
Rückmeldung:
1
<html><head><meta http-equiv="content-type" content="text/html;charset=iso-8859-1"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="refresh" content="1; URL=Home.cgi"><title>Network Access</title></head><body style="height: 120px; color: rgb(0, 0, 0); background-color: rgb(100, 132, 173); direction: ltr;"></body></html>

Wireshark schaut genau so aus wie beim verlinkten Dokument von Elektro 
Automatik:
Bilder 1-3 (sorry Bild 1 noch eiin paar weitere Male hochgeladen..)
Zeile. 4 -> Anzahl des nachfolgenden Packetes
Zeile. 5 -> Antwort von Netzteil
Zeile. 6 -> Kommando
Zeile. 7 -> Antwort von Netzteil
Zeile. 8 -> Die Keil Fehlermeldung

Jetzt stellt sich mir noch die Frage ob das jetzt eigene Packete oder 
ein Stream ist was Sebastian gesagt hat. Damit kenn ich mich leider 
weder mit Wireshark noch mit Paketen/Frames und TCP Stacks zu wenig aus.

Jemand eine Idee?

Edit:
mit
1
s = socket.socket(socket.AF_INET, socket.SOCK_RAW)
wird gar kein einziges Paket verschickt.

: Bearbeitet durch User
von Netzwerker (Gast)


Lesenswert?

Soder D. schrieb:
> Die Meldung, die ich mit dem initial Code zurück bekomme ist:

Da läuft ein Webserver, der normale HTTP-Kommandos haben will.

Soder D. schrieb:
> The requested Method is not supported

Klar. "LOCK1" ist kein HTTP-Kommando.

von Hans (Gast)


Lesenswert?

Mach mal einen Portscan mit nmap. Du bist da auf dem falschen Port.

von Hans (Gast)


Lesenswert?

Soder D. schrieb:
> Kleine Info noch: über den Browser werde ich mit der Geräte IP
> aufhttp://169.254.227.240/Home.cgi
> weitergeleitet.

Und was kannst du da machen? Ggf. kannst du ja auch einfach einen HTTP 
Request an das Device schicken

von Soder D. (soderdaen)


Lesenswert?

Netzwerker schrieb:
> Soder D. schrieb:
>> Die Meldung, die ich mit dem initial Code zurück bekomme ist:
>
> Da läuft ein Webserver, der normale HTTP-Kommandos haben will.
>
> Soder D. schrieb:
>> The requested Method is not supported
>
> Klar. "LOCK1" ist kein HTTP-Kommando.

Laut Application Note soll Port 80 verwendet werden und SCPI Kommandos 
sollen funktionieren, siehe Beispiel in der AppNote.

Hans schrieb:
> Mach mal einen Portscan mit nmap. Du bist da auf dem falschen Port.

Ich bin wie in der AppNote beschrieben auf Port 80.

Hans schrieb:
> Soder D. schrieb:
>> Kleine Info noch: über den Browser werde ich mit der Geräte IP
>> aufhttp://169.254.227.240/Home.cgi
>> weitergeleitet.
>
> Und was kannst du da machen? Ggf. kannst du ja auch einfach einen HTTP
> Request an das Device schicken

Auf dem Interface werden mir die Confiuration, Ist und Soll Werte der 
Spannungen/Ströme etc angezeigt. Dort gibt es auch ein Eingabefeld wo 
ich SCPI Kommandos (wie "LOCK 1" oder "*IDN?") schicken kann. Im 
Antwortfenster bekomme ich auch die Rückmeldungen für Abfragen und 
Anforderungen werden auch durchgeführt (wie Output On/Off).

von Sebastian W. (wangnick)


Lesenswert?

Soder D. schrieb:
> Jetzt stellt sich mir noch die Frage ob das jetzt eigene Packete oder
> ein Stream ist was Sebastian gesagt hat. Damit kenn ich mich leider
> weder mit Wireshark noch mit Paketen/Frames und TCP Stacks zu wenig aus.
> Jemand eine Idee?

Die Kommunikation sieht im Prinzip gut aus und wie in AN008 beschrieben. 
Es werden einzelne Pakete versandt und nicht wie von mir befürchtet vom 
TCP-Stack zusammengefasst.

Was mich etwas stutzig macht ist das Bestehen auf "raw socket" und dann 
die seltsame MAC-Adresse des Netzteils (37:35:30:30:30:36) in den 
Beispielpaketen ...

Soder D. schrieb:
> Dort gibt es auch ein Eingabefeld wo
> ich SCPI Kommandos (wie "LOCK 1" oder "*IDN?") schicken kann. Im
> Antwortfenster bekomme ich auch die Rückmeldungen für Abfragen und
> Anforderungen werden auch durchgeführt (wie Output On/Off

Eine Alternative wäre es also die Bedienung dieses Eingabefeldes mit 
Python zu automatisieren, also die URL so aufzurufen wie sie bei 
Absenden des SCPI-Kommandos aus dem Eingabefeld heraus aufgerufen wird 
...

LG, Sebastian

von Hans (Gast)


Lesenswert?

Soder D. schrieb:
> Ich bin wie in der AppNote beschrieben auf Port 80.

Dann ist die AppNote falsch und du immer noch auf dem falschen Port.

Soder D. schrieb:
> Auf dem Interface werden mir die Confiuration, Ist und Soll Werte der
> Spannungen/Ströme etc angezeigt. Dort gibt es auch ein Eingabefeld wo
> ich SCPI Kommandos (wie "LOCK 1" oder "*IDN?") schicken kann. Im
> Antwortfenster bekomme ich auch die Rückmeldungen für Abfragen und
> Anforderungen werden auch durchgeführt (wie Output On/Off).

Perfekt. Dann sende deine SCPI Kommandos über HTTP. Dafür kannst du 
Python Requests nehmen.

von Christian R. (supachris)


Lesenswert?

Soder D. schrieb:
> Dort gibt es auch ein Eingabefeld wo
> ich SCPI Kommandos (wie "LOCK 1" oder "*IDN?") schicken kann.

Lässt sich das Teil dann eventuell ganz klassisch über VISA ansteuern? 
Da gibts PyVISA, das nutzen wir und das klappt sogar für uralte GPIB 
Messgeräte prima.

https://pyvisa.readthedocs.io/en/latest/

von Dirk B. (dirkb2)


Lesenswert?

Christian R. schrieb:
> Da gibts PyVISA, das nutzen wir und das klappt sogar für uralte GPIB
> Messgeräte prima.

Wenn man eine GPIB Schnittstelle am PC hast, ist das ok.

Wenn man direkt übers Netzwerk geht eher nicht.

von Soder D. (soderdaen)


Lesenswert?

So Leute ich glaubs nicht, will hier nochmal Rückmeldung geben weil ihr 
so fleißig am miträtseln seid.

Mir ist heute Nachmittag gekommen, dass ich mit dem Test Netzteil nicht 
unbedingt die gleiche Schnittstellenkarte habe wie am eigentlichen 
Prüfstand.

Habe das überprüft und wie ich vom Support erfahren habe gilt die App 
Note nur für die Geräte mit Ethernetkarte IF-E1 und nicht für die mit 
IF-E1B.
Aus dem Grund hab ich beim Testnetzteil den Port aus der eigentlichen 
Dokumentation für das Netzteil genommen (1001). Und damit gehts super 
easy.

Allerdings gibts noch ein paar Probleme auf dem Netzteil im eigentlichen 
Prüfstand. Klar kann ich einfach die Schnittstellenkarten austauschen, 
aber mein Ehrgeiz will auch mit der IF-E1 und der AppNote zum Ziel 
kommen.
Die Kommunikation funktioniert, ich kann ein bis zwei Kommandos 
schicken, die Verbindung ist aber dann nach wenigen Sekunden 
geschlossen. Ein provisorisches gegoogeltes Keep Alive in der 
Socketdefinition hilft bisher nicht. Ausserdem bekomme ich teilweise 
keine Antworten auf meine requests. Mal sehen.

Aber das gucke ich mir mal morgen in einer einsamen Minute an.

von Soder D. (soderdaen)


Lesenswert?

Dirk B. schrieb:
> Christian R. schrieb:
>> Da gibts PyVISA, das nutzen wir und das klappt sogar für uralte GPIB
>> Messgeräte prima.
>
> Wenn man eine GPIB Schnittstelle am PC hast, ist das ok.
>
> Wenn man direkt übers Netzwerk geht eher nicht.

Mal kurz bei pyvisa geschaut (damit will ich auch die Multimeter 
einbinden, klappt soweit). Dort gibt es wohl auch TCPIP Socket 
Verbindungen. Wenn ich mal zwei einsame Minuten habe werde ich das auch 
mal abchecken ob ich da einzelne packages schicken kann

von Dirk B. (dirkb2)


Lesenswert?

Soder D. schrieb:
> Habe das überprüft und wie ich vom Support erfahren habe gilt die App
> Note nur für die Geräte mit Ethernetkarte IF-E1 und nicht für die mit
> IF-E1B.

Nun ja, das steht ja nur in rotem Text oben in der Note.
Sogar mit einem "Achtung!"

Braucht man für PyVisa noch Ni-Visa als Gerätreiber?

von Soder D. (soderdaen)


Lesenswert?

Dirk B. schrieb:
> Soder D. schrieb:
>> Habe das überprüft und wie ich vom Support erfahren habe gilt die App
>> Note nur für die Geräte mit Ethernetkarte IF-E1 und nicht für die mit
>> IF-E1B.
>
> Nun ja, das steht ja nur in rotem Text oben in der Note.
> Sogar mit einem "Achtung!"

Also das wusste ich vom Support schon davor, der hat mich auf die 
AppNote verwiesen. Aber ich ging davon aus, dass unsere gleichen 
Netzteile auch die gleichen Schnittstellenkarten haben.


> Braucht man für PyVisa noch Ni-Visa als Gerätreiber?

Hab NI MAX und auch Ni Visa drauf, sollte also schon gehen. Aber ob 
pyvisa ohne dem NI Visa Gerätetreiber läuft weiß ich leider auch nicht

von Christian R. (supachris)


Lesenswert?

Klar geht Visa auch über LAN, auch über USB und alles mögliche andere.
Wir nutzen das für LAN, USB und GPIB. Das schöne ist, dass der Top Level 
Code immer gleich ist.

Laut der pyVisa Homepage kann man auch das pyvisa-py Backend nehmen 
anstatt das NI. Bei Lan dürfte das ziemlich egal sein denn das braucht 
ja keinen Treiber. Bei USB Geräten sieht das eventuell anders aus.

Wir haben NI VISA drauf, weil wir noch andere Software haben, die die NI 
Libs nutzt.

von Soder D. (soderdaen)


Lesenswert?

Christian R. schrieb:
> Klar geht Visa auch über LAN, auch über USB und alles mögliche
> andere.
> Wir nutzen das für LAN, USB und GPIB. Das schöne ist, dass der Top Level
> Code immer gleich ist.
>
> Laut der pyVisa Homepage kann man auch das pyvisa-py Backend nehmen
> anstatt das NI. Bei Lan dürfte das ziemlich egal sein denn das braucht
> ja keinen Treiber. Bei USB Geräten sieht das eventuell anders aus.
>
> Wir haben NI VISA drauf, weil wir noch andere Software haben, die die NI
> Libs nutzt.

Ohne NI VISA die USB Geräte ansteuern zu können wär schon klasse. Das 
kommt auch noch auf die irgendwann to do Liste.

von Dirk B. (dirkb2)


Lesenswert?

Soder D. schrieb:
> Ohne NI VISA die USB Geräte ansteuern zu können wär schon klasse. Das
> kommt auch noch auf die irgendwann to do Liste.

USB ist blöd, weil man immer einen angepassten Treiber für das 
Betriebssytem braucht.
Bei RS232 und Ethernet braucht man das nicht.
Bei GPIB braucht man nur Treiber für die Schnittstellenkarte

Da kann man Geräte auch noch nach 50 Jahren programmieren.

: Bearbeitet durch User
von MeinName (Gast)


Lesenswert?

Dirk B. schrieb:
>
> Braucht man für PyVisa noch Ni-Visa als Gerätreiber?

Klares Nein. Es gibt das Paket PyVisa-py das ist eine pure Python 
Implementierung von VISA. Andere VISA Bibliotheken könnten schneller 
sein, aber für ein paar Messgerät zur Steuerung reicht es.
Bei mir läuft da fast alles drüber und Hersteller die kein vernünftiges 
Interface bieten das ich Problemlos mit Python ansprechen kann kaufe ich 
einfach nicht mehr. Die Vertreter kommen dann gerne mit kostenlosen 
LabView zeug, aber damit bin ich durch.
Es gibt auch noch eine PyMeasure Bibliothek fur einfache Messungen, 
benutze ich allerdings nicht da ich etwas ähnliches schon selber 
programmiert hatte bevor ich das gefunden hatte und noch weitreichender 
Anforderungen von PA und QM habe.

Die meisten Geräte stellen per USB ja nur einen VCP zur Verfügung, den 
kann man doch wunderbar per PyVisa nutzen.

von Christian R. (supachris)


Lesenswert?

Viele der USB Messgeräte haben die USB Test and Measurement Class 
(USBTMC) implementiert, das geht zumindest unter Windows direkt so. Aber 
ob pyVISA dann ohne das NI VISA drauf arbeiten kann weiß ich nicht.
Unsere Tektronix AFG3000 waren an USB ziemlich unzuverlässig, mit LAn 
und PyVISA klappt das bestens.

von Soder D. (soderdaen)


Lesenswert?

Christian R. schrieb:
> Viele der USB Messgeräte haben die USB Test and Measurement Class
> (USBTMC) implementiert, das geht zumindest unter Windows direkt so. Aber
> ob pyVISA dann ohne das NI VISA drauf arbeiten kann weiß ich nicht.
> Unsere Tektronix AFG3000 waren an USB ziemlich unzuverlässig, mit LAn
> und PyVISA klappt das bestens.

Genau, solche Geräte die USB als VCP oder TMC arbeiten haben wir auch, 
da wärs praktisch ohne NI VISA. Das werd ich mal mit dem Rechner vom 
Kollegen ohne NI Visa probieren.

MeinName schrieb:
> Die meisten Geräte stellen per USB ja nur einen VCP zur Verfügung, den
> kann man doch wunderbar per PyVisa nutzen.

Zumindest über VCP scheint es ja wohl zu gehen. Das wär echt klasse :)

von Soder D. (soderdaen)



Lesenswert?

Hi zusammen,

ich hab mich mal eben noch an das alte Schnittstellengerät gehockt.
Per
1
import socket
2
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3
s.connect(('169.254.227.244', 80))

verbinde ich mich einfach nur und nach wenigen Sekunden wird die 
Verbindung vom Netzgerät abgebrochen.

Irgendwelche Ideen?

Ich habe das Gefühl der Socket ist falsch konfiguriert, wenn ich aber 
"socket.SOCK_RAW" statt "socket.SOCK_STREAM" verwende gibt es gar keine 
Kommunikation laut Wireshark.

Wenn ich nach dem connecten sofort eine weitere Anweisung an des Gerät 
sende wird es auch ausgeführt, allerdings wird früher oder später die 
Verbindung danach dennoch abgebrochen (circa. 5 sek)

von Sebastian (Gast)


Lesenswert?

Der Server auf Port 80 scheint die Verbindung abzubrechen wenn er 
innerhalb von 3 Sekunden kein Kommando erhält ...

LG, Sebastian

von Soder D. (soderdaen)


Lesenswert?

Sebastian schrieb:
> Der Server auf Port 80 scheint die Verbindung abzubrechen wenn er
> innerhalb von 3 Sekunden kein Kommando erhält ...
>
> LG, Sebastian

Der Server ist in diesem Fall das Netzteil. Laut 
Schnittstellenbeschreibung bricht das Gerät die Verbindung nach 10 min 
Inaktivität auf dem Port erst ab.

Wenn ich direkt noch ein Kommando schicke, dann braucht es danach so 
8-10 Sekunden bis das Netzteil die Verbindung abbricht.

von Soder D. (soderdaen)


Lesenswert?

Ansteuern mit pyvisa ohne Visa Bibliothek ging schonmal auch mit dem 
Netzteil.
Man musste aber den write und read end character "\n" noch definieren 
damit es klappt.

Jetzt fehlts noch das Netzteil mit der alten Schnittstelle mit den zwei 
Paketen anzusteuern ohne dass die Verbindung direkt abgebrochen wird.
Leider fehlt mir da jegliche Idee.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

zu Wireshark: Schalte einn Switch dazwischen, bei dem sich ein Port in 
den Monitoring-Modus schalten lässt (quasi Hub-Modus). Da hängst du dann 
einen privaten Rechner mit Wireshark dran ...

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.