簡體   English   中英

我正在通過python的串行端口發送命令,但它們被發送了多次而不是一次

[英]i am sending commands through serial port in python but they are sent multiple times instead of one

我正在使用com端口發送一些具有特定響應的命令..命令保存在文件中..我正在逐行讀取文件中的每個命令並通過com端口串行發送..但是當我看到它時從接收器端使用Magic Terminal(Software).. i發現,每個命令執行多次。.我僅發送一次。.我在pycharm中編寫了代碼..在控制台中,我看到了該命令只運行一次,但是從uart接收端開始,故事又是另外一回事了。.我堅持這個問題..我保持了相同的波特率,並且一切都無法診斷出問題。.github的代碼鏈接是: https ://github.com/AkshatPant06/Akshat-Pant/blob/master/cmd%20list

def recvResponse():
ser.write(serial.to_bytes(intCmd))
time.sleep(1)
data_recv=ser.read(2)
return data_recv

這我曾經收到2字節的響應..

您的代碼似乎沒有錯。 至少在我可以復制的范圍內,它僅發送一次命令(在環回中設置了串行端口后,我嘗試了您的功能)。

我不能肯定地說,但可能是您使用的終端有兩個窗口,一個用於輸入,另一個用於輸出,並且您不知何故與端口的進出混淆。

解決此類問題的一種簡單方法是在端口上使用嗅探器。 您可以在Windows上結合com0com和Termite來做到這一點,正如我最近在這里解釋的那樣。

如您所見,此終端上只有一個窗口,設置轉發后,您將可以進入和退出端口的所有內容。 那應該使查看您的代碼正在編寫和閱讀變得更加容易。

為了給您提供使用嗅探器技巧的常規方案,您可以參考以下屏幕截圖:

傳統串行端口方案

在這種情況下,我們在計算機上有兩個真實的串行端口。 在第一個( COM9 )上,我們正在運行Modbus服務器(您可以將其想象為一堆內存地址,每個內存地址存儲一個16位數字)。 COM10我們有一個客戶COM10在發送查詢,詢問前10個地址的內容(使用Modbus術語稱為寄存器)。 在一般使用情況下,我們有一個電纜連接的端口,所以我們知道(理論上)是在客戶端COM10被發送數據幀,要求對那些10個寄存器和服務器COM9與存儲在這些寄存器中的數字回答。 但是我們只能看到服務器上的內容(圖片的左側)和客戶端正在接收的內容(右側)。 我們看不到的是總線上正在傳輸的內容(是的,我們知道它是什么,但是我們不完全了解內部的Modbus協議的樣子)。

如果我們想點擊總線以查看雙方發送和接收的內容,則可以使用com0com創建幾個虛擬端口,並使用Termite創建端口轉發連接,如下圖所示:

Termite和com0com進行端口轉發設置

現在,我們已將Modbus服務器移至虛擬串行端口之一(在本例中為COM4 )。 在安裝com0com之后,我們得到了(默認情況下,但是您可以更改名稱或添加更多端口對)一對轉發端口( COM4<-->COM5 )。 現在,如果我們想查看端口之間正在流通的內容,我們打開Termite(圖片的右下角)並設置另一個端口轉發方案,在這種情況下,從虛擬端口COM5到真實端口COM9

最后(完全按照之前我們嗅探相同),我們有COM9連接在一起與COM10用電纜。 但是現在我們可以看到總線上來回的所有數據(您在Termite上看到的所有十六進制值都以綠色/藍色字體顯示)。

如您所見,這將提供與使用更專業的工具可以實現的功能類似的功能。

暫無
暫無

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

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