簡體   English   中英

Python和C應用程序之間的串行端口數據傳輸(在Microblaze上運行)

[英]Serial Port data transfer between Python and C application (Running on Microblaze)

我正在嘗試使用PC上的python控制台讀取並寫入運行在microblaze主機上的嵌入式C應用程序。 兩者之間的連接是通過FTDI芯片的USB-> UART。

關於我的技能/背景的簡要說明 :RF /微波工程師,具有豐富的硬件經驗和HDL經驗,但是幾乎沒有軟件經驗,當然也沒有C或python的經驗。

問題

  1. 我可以使用PuTTy或Termite控制台輸入命令(例如“ frequency?”)並從函數中接收預期的返回值。 我什至可以使用函數的“設置”版本來設置值。 在我的C應用程序中,uart_write_char函數使用的是'putchar()',我懷疑它只是在打印字符和字符串,而不是在“傳輸”數據(字節,雙精度數,浮點數等)。

這是描述uart_write函數的代碼片段:

*

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

*我想知道“打印”到控制台的數據和“向另一端傳輸”數據之間是否有區別,所以我可以接收它並將其轉儲到文件中。

  1. 我想知道在python端使用pyVISA接收通過串行端口傳輸的數據的最佳方法。 當我使用ResourceManager()和openResource()打開端口時,我相應地設置了波特率,但是似乎無法“查詢”設備。 查詢是一個pyVISA函數(?),它是一個寫入操作,之后是一個讀取操作。 在這種情況下,我希望發送命令“ frequency?” 嵌入微火,我希望結果能傳回去。 如果我可以使用PuTTy或Termite等控制台成功完成此操作,那么使用pyVISA查詢功能有什么區別? 編碼也許?

編輯:我也嘗試過https://media.readthedocs.org/pdf/pyvisa/1.6/pyvisa.pdf中記錄的query_ascii_value()和query_binary_value()結果仍然相同,我在python中收到超時錯誤安慰。

更新我已經使用NI-MAX捕獲了Trace 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的默認設置和不正確的讀取終止進行查詢。

Fix ,我將設置波特率並讀取終止的代碼行移到設備類中,以便當我將設備定義為Instrument時,它將在發生任何事務之前設置這些屬性。 現在我可以讀寫了。

干杯,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM