簡體   English   中英

pyserial Python2 / 3字符串頭痛

[英]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字符串的方式不同有關。 我發現許多其他線程建議該解決方案應該是在我的消息前添加一個bmsg=b""\\xFE\\x44\\x00\\x08\\x02\\x9F\\x25" )以將其指定為二進制字符串,但是這不適用於我的情況。

有什么見解嗎? 我應該在Python 3中發送什么信息,以便傳感器接收到相同的信號? 我機智的盡頭...

我應該補充一點,我對串行連接是完全陌生的(嗯...一個星期大),並且(盡管閱讀了很多東西)我仍在努力理解不同的字符/字符串格式...因此在上面的評論中出現了問號。 請適當地回答:)。

提前致謝!

write期望參數是str ,而不是bytes ,因此直接將b"\\xFE\\x44\\x00\\x08\\x02\\x9F\\x25"傳遞給它將不起作用。 您需要先將bytes轉換為strc.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.

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