与ESG信号发生器的Telnet会话

时间:2016-11-06 00:03:34

标签: python

我正在尝试使用python控制信号发生器。我只需要改变幅度和频率。我的代码如下:

import telnetlib
HOST = "169.145.1.1"
timeout     = 5
PORT    = 5023
tn = telnetlib.Telnet(HOST, PORT , timeout)
tn.read_until("SCPI>", timeout)
tn.write('FREQ 3ghz\r\n')
tn.read_until("SCPI>", timeout)
tn.write('AMPL 10dbm\r\n')
tn.read_until("SCPI>", timeout)
tn.close()`

当我直接在端口5023上打开telnet会话时,我可以更改Freq和Amp,但不能使用上面的脚本。调试会话显示telnet连接成功,它确实发送了命令,但没有任何更改信号Gen.谢谢

2 个答案:

答案 0 :(得分:1)

我明白了。我需要在每个命令之后添加\ r \ n而不仅仅是\ n。实施此更改后,Sig Gen值已更改。我更新了脚本。感谢

答案 1 :(得分:0)

测试

我针对监听nc运行您的代码,而Python 2.7抱怨对telnetlib.Telnet(HOST, PORT , timeout, Debug)的调用错误 - 应该省略参数Debug

实际上,在documentation中,Debug参数不存在:

  

Telnet.open(host [,port [,timeout]])

Connect to a host. The optional second argument is the port number, which defaults to the standard Telnet port (23). The optional
     

timeout参数指定阻塞的超时秒数   连接尝试等操作(如果未指定,则为全局   将使用默认超时设置。)

Do not try to reopen an already connected instance.

Changed in version 2.6: timeout was added.

一旦修复了,但是,在原始模式和代码中telnet发送的命令相同。这可能是一些奇怪的时间问题,但除此之外它应该有效。

为了安全起见,如果我是你,我仍会运行tcpdump。

旧答案

您没有终止命令,因此它们没有被执行。 .write() does not auto-terminate个命令。

tn.write('FREQ 1.92ghz' + "\n")

另外,请在结束前等待答案,以防万一。

tn.read_until("some answer", timeout)
tn.close()