2016-06-21 49 views
1

我想使用python訪問SRI中的關鍵字。在python中沒有這樣做的例子或文檔。在python中訪問SRI(redhawksdr)

我想抓住SRI,檢查關鍵字,如果存在,請複製相應的值。

我認爲SRI將複製爲一個元組,但有可能是CF轉換,我無法找到任何示例。

我會怎麼做呢?

回答

0

正如您可能已經看到的那樣,您可以像使用HardLimit python實現here一樣接收Python中的SRI對象。

數據,T,EOS,流ID,SRI,sriChanged,inputQueueFlushed = self.port_dataFloat_in.getPacket()

一旦有SRI對象,關鍵字的列表。我們來看一下python沙箱中的一個例子。我正在使用REDHAWK 2.0.1和SigGen 2.0.1,如果設置了屬性,它將輸出關鍵字CHAN_RF和COL_RF。

 
>>> from ossie.utils import sb 
>>> src = sb.launch('rh.SigGen') 
>>> src.chan_rf = 1e6 
>>> src.col_rf = 1e3 
sink = sb.DataSink() 
>>> src.connect(sink, usesPortName="dataFloat_out") 
>>> sb.start() 
>>> sb.stop() 
>>> sri = sink.sri() 
>>> sri.keywords 
[ossie.cf.CF.DataType(id='CHAN_RF', value=CORBA.Any(CORBA.TC_double, 1000000.0)), ossie.cf.CF.DataType(id='COL_RF', value=CORBA.Any(CORBA.TC_double, 1000.0))] 
>>> sri.keywords[0].id 
'CHAN_RF' 
>>> sri.keywords[0].value 
CORBA.Any(CORBA.TC_double, 1000000.0) 
>>> sri.keywords[0].value.value() 
1000000.0 
0

關鍵字與SRI一起作爲CF數據類型的列表傳遞,它是字符串/ CORBA :: Any對。在Python中,關鍵字可以使用類似的東西訪問:

from omniORB import any 
packet = self.port_myPortName.getPacket() # note that the return value is a little different for REDHAWK versions < 2.0 
if packet.dataBuffer is None: 
    return NOOP 
for keyword in packet.SRI.keywords: 
    if "keywordOfInterest" == keyword.id: 
     myValue = any.from_any(keyword.value)