对于专业项目,我必须完全自动化一个过程,该过程涉及在 USRP N210 上播放的 GNURadio python 流程。为了访问 USRP,我在 Windows 计算机上安装了 VMWare Debian 机器(我需要 Windows 才能访问另一个电子设备)但是我的电脑没有以太网端口,所以我插入了来自 USRP 的以太网电缆适配器设置(这是来自 Ettus Research 的 USRP),并更改了以太网接口的 IPIPv4IPv6。我根本不是这个领域的专家,但我已经在 Debian 物理计算机上执行过此操作,并且运行良好(相同的 USRP、相同的电缆、相同的适配器)。然后我尝试通过新的 IP 地址(XXX.XXX.XXX.21)ping USRP,它运行正常。我执行了自动化以查看它是否有效,在日志记录中,我可以看到问题来自 USRP 连接。我再次 ping 它,但没有工作(目标主机无法访问)。
这是我的主要功能的python代码:主要功能代码。没什么变化,它只是一个文本编辑脚本。以下是 sink.py 的代码:
从 gnuradio 导入块 导入 pmt 从 gnuradio 导入 gr 从 gnuradio.filter 导入 firdes 从 gnuradio.fft 导入窗口 导入 sys 导入信号 从 argparse 导入 ArgumentParser 从 gnuradio.eng_arg 导入 eng_float, intx 从 gnuradio 导入 eng_notation 从 gnuradio 导入 uhd 导入时间 导入日志
类 Top(gr.top_block):
def __init__(self):
gr.top_block.__init__(self, "Not titled yet", catch_exceptions=True)
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 500000
self.Freq = Freq = 868700000
journal.log('Frequency and sample rate Ok')
##################################################
# Blocks
##################################################
journal.log("trying to reach usrp")
self.uhd_usrp_sink_0 = uhd.usrp_sink(
",".join(("addr=XXX.XXX.XXX.102", "")),
uhd.stream_args(
cpu_format="fc32",
args='',
channels=list(range(0,1)),
),
'',
)
journal.log("connection with usrp successful")
self.uhd_usrp_sink_0.set_clock_source('external', 0)
self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
# No synchronization enforced.
self.uhd_usrp_sink_0.set_center_freq(uhd.tune_request(Freq,10*samp_rate), 0)
self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
self.uhd_usrp_sink_0.set_gain(1, 0)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(10)
journal.log('trying to load file into flow')
self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, '/home/eutelsat/Bureau/Simu/test2605.bin', False, 0, 0)
journal.log('file loaded successfully')
self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL)
##################################################
# Connections
##################################################
self.connect((self.blocks_file_source_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 0))
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
self.uhd_usrp_sink_0.set_center_freq(uhd.tune_request(self.Freq,10*self.samp_rate), 0)
def get_Freq(self):
return self.Freq
def set_Freq(self, Freq):
self.Freq = Freq
self.uhd_usrp_sink_0.set_center_freq(uhd.tune_request(self.Freq,10*self.samp_rate), 0)
从那时起,当我拔下电源插头时,我有一段短暂的时间来 ping 或连接 GNURadio,但几秒钟/几分钟后,虚拟机仍然无法访问 USRP。从我的主机,我可以映射 USRP。所以问题是我无法用一些代码自动执行需要频繁拔出电源插头的过程。有人能帮我吗?