Python和C应用程序之间的串行端口数据传输(在Microblaze上运行)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python和C应用程序之间的串行端口数据传输(在Microblaze上运行)相关的知识,希望对你有一定的参考价值。

我正在尝试使用PC上的python控制台来读取和写入在microblaze主机上运行的嵌入式C应用程序。两者之间的连接是USB - > UART通过FTDI芯片。

关于我的技能/背景的简要说明:射频/微波工程师,大量的硬件经验和大量的HDL经验,无论软件经验很少甚至没有,当然没有C或python。

问题/问题:

  1. 我可以使用PuTTy或Termite控制台输入命令(例如'frequency?')并从函数中接收预期的返回值。我甚至可以使用函数的“set”版本设置值。在我的C应用程序中,uart_write_char函数使用'putchar()',我怀疑它只是打印字符和字符串而不是'传输'数据(字节,双精度,浮点数等)。

这是一段描述uart_write函数的代码:

*

void uart_write_char(char data)
{
    putchar(data);
}

*我想知道“打印”数据与控制台和“传输”数据到另一端之间是否存在差异,因此我可以接收它并将其转储到文件中。

  1. 我想知道在我的python端使用pyVISA接收通过串口传输的数据的最佳方法。目前我使用ResourceManager()和openResource()打开端口,我相应地设置了波特率,但我似乎无法“查询”设备。查询是一个pyVISA函数(?),它是一个写入后跟一个读取。在这种情况下,我希望传输命令'频率?'对于嵌入式微型光泽,我希望将结果传回。如果我可以使用PuTTy或Termite等控制台成功完成此操作,使用pyVISA查询功能有何不同?编码也许?

编辑:我也尝试过https://media.readthedocs.org/pdf/pyvisa/1.6/pyvisa.pdf中记录的query_ascii_value()和query_binary_value()结果仍然相同,我在python控制台中收到一个Timeout错误。

更新我使用NI-MAX捕获跟踪IO,超时似乎在读取端。如果我连接到设备,我认为它将完成写入功能,这是真的吗?这是Ni-MAX日志

  1. viOpenDefaultRM(0x00001001)进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:12.0642呼叫持续时间00:00:00.0139状态:0(VI_SUCCESS)
  2. viClose(0x00000000)进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:12.0781呼叫持续时间00:00:00.0000状态:0x3FFF0082(VI_WARN_NULL_OBJECT)
  3. viParseRsrcEx(0x00001001,“ASRL6 :: INSTR”,4(0x4),6(0x6),“INSTR”,“ASRL6 :: INSTR”,“COM6”)进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21 :12.0781通话时间00:00:00.0000状态:0(VI_SUCCESS)
  4. viOpen(0x00001001,“ASRL6 :: INSTR”,0(0x0),0(0x0),0x00000001)进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:12.0792呼叫持续时间00:00:00.0657状态:0( VI_SUCCESS)
  5. viParseRsrcEx(0x00001001,“ASRL6 :: INSTR”,4(0x4),6(0x6),“INSTR”,NULL,NULL)进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:12.1450呼叫持续时间00:00 :00.0000状态:0(VI_SUCCESS)
  6. viWrite(ASRL6 :: INSTR(0x00000001),“tx_lo_freq?...”,14(0xE),14(0xE))进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:24.5897呼叫持续时间00:00: 00.0000状态:0(VI_SUCCESS)
  1. viRead(ASRL6 :: INSTR(0x00000001),0x000001DF461F5420,20480(0x5000),0(0x0))进程ID:0x000082C8线程ID:0x00006F90开始时间:15:21:24.5897调用持续时间00:00:02.0006状态:0xBFFF0015(VI_ERROR_TMO )

我很欣赏有关此问题的任何建议,并很乐意提供更多代码段/信息。也热衷于关于礼仪后的任何反馈和改进邮寄请求的潜力

干杯,

答案

为了完整起见,我设法使用NIMAX来跟踪所有VISA事务和VISA测试面板以实现工作状态,然后我可以在我的代码中实现

问题:我在我的仪器类定义中设置了波特率和读/写终止字符,它们从未得到实现。我似乎试图使用BAUD = 9600的默认设置和不正确的读取终止进行查询。

修复,我移动了设置波特率和读取终止的代码行到我的设备类中,这样当我将设备定义为工具时,它会在任何事务发生之前设置这些属性。现在我可以读写得很好。

干杯,

以上是关于Python和C应用程序之间的串行端口数据传输(在Microblaze上运行)的主要内容,如果未能解决你的问题,请参考以下文章

[c]解析类RFC2217协议

串行端口未正确刷新

在 C 中通过串行/COM 端口发送 MIDI 数据时出现问题

Python串行端口在传输中省略字符

每当有来自串行端口 python 3.x 的新数据时,从串行数据更新 tkinter 标签

Linux下的虚假串行通信