在实际使用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框图里的参数了。

 

如果不想写代码,在远程再起一个框图

就可以完成控制了。