[英]pyserial Python2/3 string headache
我正在使用pyserial與一些使用Modbus協議的傳感器進行通信。 在Python 2.7中,這可以完美地工作:
import serial
c = serial.Serial('port/address') # connect to sensor
msg = "\xFE\x44\x00\x08\x02\x9F\x25" # 7 hex bytes(?)
c.write(msg) # send signal
r = c.read(7) # read 7 hex bytes (?).
在Python 3中,這不起作用。 我知道這與Python 2/3處理二進制字符串和Unicode字符串的方式不同有關。 我發現許多其他線程建議該解決方案應該是在我的消息前添加一個b
( msg=b""\\xFE\\x44\\x00\\x08\\x02\\x9F\\x25"
)以將其指定為二進制字符串,但是這不適用於我的情況。
有什么見解嗎? 我應該在Python 3中發送什么信息,以便傳感器接收到相同的信號? 我機智的盡頭...
我應該補充一點,我對串行連接是完全陌生的(嗯...一個星期大),並且(盡管閱讀了很多東西)我仍在努力理解不同的字符/字符串格式...因此在上面的評論中出現了問號。 請適當地回答:)。
提前致謝!
write
期望參數是str
,而不是bytes
,因此直接將b"\\xFE\\x44\\x00\\x08\\x02\\x9F\\x25"
傳遞給它將不起作用。 您需要先將bytes
轉換為str
: c.write(b"\\xFE\\x44\\x00\\x08\\x02\\x9F\\x25".decode())
應該可以工作。
原來,將輸入指定為字節字符串(msg = b“” \\ xFE \\ x44 \\ x00 \\ x08 \\ x02 \\ x9F \\ x25“)確實有效。初始錯誤是由於msg字符串中的錯字引起的。
次要錯誤是由如何處理輸出引起的-在Python 2中,必須將ord()應用於索引輸出以返回整數,在Python 3中,可以通過索引直接從輸出中提取3整數(即,無需ord())。
希望這可以在將來對某人有所幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.