使用XMLRPC来对GNURadio进行远程调用
在实际使用gnuradio-companion的过程中,我们经常需要对GNURadio的框图的各个参数进行动态地修改。
在本地使用的时候,我们可以在grc框图中使用Slider来进行本地的参数改变。
但是,在需要使用程序远程地通过网络对grc框图控制,本地控制就会很麻烦,例如需要使用远程桌面的方式登过去操作。
于是,XMLRPC Server应运而生。
XMLRPC的意思是XML格式的远程过程调用。
首先,我们搭建如下框图,文件可以在/usr/local/share/gnuradio/examples/grc/xmlrpc/xmlrpc_server.grc 处得到

然后添加一个XMLRPC Server模块,监听在本地的1234端口。
然后,我们就可以写一个Python程序来对它进行控制,代码在/usr/local/share/gnuradio/examples/grc/xmlrpc/xmlrpc_client_script.py
#!/usr/bin/env python
import time
import random
import xmlrpclib
#create server object
s = xmlrpclib.Server("http://localhost:1234")
#randomly change parameters of the sinusoid
for i in range(10):
#generate random values
new_freq = random.uniform(0, 5000)
new_ampl = random.uniform(0, 2)
new_offset = random.uniform(-1, 1)
#set new values
time.sleep(1)
s.set_freq(new_freq)
time.sleep(1)
s.set_ampl(new_ampl)
time.sleep(1)
s.set_offset(new_offset)
我们可以看到,只需要简单地调用xmlrpclib库,然后就可以对应的函数来控制grc框图里的参数了。
如果不想写代码,在远程再起一个框图

就可以完成控制了。