无法通过BullkIO端口接收从可执行设备发送的数据包数据

2024-05-19 07:57:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在设备上创建数据并通过BulkIO端口发送到设备上波形内部运行的组件。我相信这是创建从硬件到组件的数据流的正确方法。在

我在设备上有一个usesport:

port_dataChar = usesport(name="dataChar",
                         repid="IDL:BULKIO/dataChar:1.0",
                         type_="data")

我有设备上运行的组件的providesport:

^{pr2}$

我可以使用以下python代码段以编程方式连接这些端口:

comp_port = domain.devMgrs[0].devs[0].getPort('dataChar')
dev_port = domain.apps[0].comps[0].getPort('dataChar')
comp_port.connectPort(dev_port, 'ConnectionId')

这一切都很好,与我在同一个组件/设备对上连接前端2.0数字调谐器端口的方式非常相似。这些fe2.0端口工作良好,通过了所有测试。在

现在,我继续启动设备:

domain.devMgrs[0].devs[0].start()

它正在执行以下代码:

data = ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
ts = time.time()
tstamp = BULKIO.PrecisionUTCTime(BULKIO.TCM_CPU,BULKIO.TCS_VALID,0.0,
                                 int(ts),ts - int(ts))
EOS = False
streamId = "1"
print "Sending data of length", len(data)
self.port_dataChar.pushPacket(data, tstamp, EOS, streamId)
return NOOP

这在开发管理器上打印出来:

Sending data of length 27
Sending data of length 27
Sending data of length 27
Sending data of length 27
Sending data of length 27
Sending data of length 27
...

这一切似乎都很好

然后我继续并启动波形:

wave.start()

它正在执行以下代码:

print "Iteration number ", self.numIter 
data, T, EOS, streamID, sri, sriChanged, inputQueueFlushed = self.port_dataChar.getPacket()

if (data != None):
    print "Got data of length ", len(data)
else:
    print "Got no data, streamId ", streamID    
return NOOP

但是,它从不从dataChar端口获取任何数据包/数据:

Iteration number 1
Got no data, streamId None
Sending data of length 27
Iteration number 2
Got no data, streamId None
Sending data of length 27
Iteration number 3
Sending data of length 27
Got no data, streamId None
Sending data of length 27
Iteration number 4
Got no data, streamId None

我做错什么了吗?是否可以通过BulkIO从设备接收数据?我也在尝试如何监视BulkIO端口,以确定出了什么问题,但我无法在文档中找到如何监视端口。在

我可以使用以下代码接收沙盒中组件的数据:

b = sb.Component("MyComponent")
kw = sb.SRIKeyword("SOME_RF",155000000.0,'double')
keywords = [kw]
i = sb.DataSource()
data = ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
i.connect(b)
sb.start()
i.push(data,SRIKeywords=keywords)

我试图在数据包数据之前推送SRI,但没有成功:

keywords = []
H = BULKIO.StreamSRI(1, 0.0, 0.0, BULKIO.UNITS_TIME, 0, 0.0, 0.0, BULKIO.UNITS_NONE, 0, "1", True, keywords)
self.port_dataChar.pushSRI(H)
self.port_dataChar.pushPacket(data, tstamp, EOS, streamID)

更新:我现在可以自己回答这个问题了。问题在于发送到pushPacket()的格式。它应该是字符串,而不是通过dataChar BulkIO端口发送的字符数组。基本上是这样:

data = ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
self.port_dataChar.pushPacket(data, tstamp, EOS, streamId)

应改为:

data = "testing123"
self.port_dataChar.pushPacket(data, tstamp, EOS, streamId)

Tags: of端口selfdataport组件lengthgot
1条回答
网友
1楼 · 发布于 2024-05-19 07:57:20

问题是您的pushPacket()调用导致了CORBA.BAD_PARAM(omniORB.BAD_PARAM_WrongPythonType, CORBA.COMPLETED_NO)异常并以静默方式失败(使用REDHAWK 1.9.0版本)。dataChar用于字符数据,结果发现底层omniORBpy/BulkIO映射需要一个字符串值,而不是数据变量的字符串列表。如果需要将字符数据从设备发送到组件,应使用:

data = "your text here"
self.port_dataChar.pushPacket(data, tstamp, EOS, streamId)

如果您的目的只是让大量数据流从您的设备到您的组件,我建议使用dataFloat端口。在

如果要监视端口的输出,REDHAWK IDE中的端口监视器数据列表视图对调试非常有用。在

相关问题 更多 >

    热门问题