我已經做了一些搜索和閱讀,但沒有找到確切的答案。我正在製作python應用程序,它將通過串口與另一個進行通信。我一直在使用PySerial來實現這一點。我想發送的數據包的類型是狀態信息和數據讀數。 我建議,形成我的包如下:Python:用PySerial發送狀態位和時間戳的最佳方式是什麼
[ Start Byte ][ Length ][ Message ][ End Byte ][ Checksum ]
雖然我不認爲我需要結束字節,因爲在那裏有一個長度。我對麼?
我想塑造包的「消息」部分的狀態信息像這樣的:
[ MsgTypeID ][ PacketID ][ Status Bits ][ Timestamp ]
這裏的消息ID只是爲了區分,這是一個狀態數據包,而不是一個數據包。狀態信息本身由16位組成,表示發送應用程序中多個子系統的狀態。對於其中一些子系統,單個位將提供足夠的信息('0'表示子系統關閉/低/假,'1'表示開/高/真)。其他則需要2或3位(代表狀態等)。對系統進行原型設計後,我只是簡單地構造一個字符串連接起來形成一個類似'1001110101101100'
的字符串,並將其從串行端口發送出去,校驗和是模256的狀態位。
我對Python和串行通信相當新穎,但我知道這可能是浪費帶寬。我知道PySerial必須發送字符串,但將每個位表示爲「0」或「1」,就像這樣每個位都使用完整的字符串表示形式。我想知道發送這些比特以減少帶寬的最佳方式是什麼?
例如,將予採取各8位,將它們轉換爲十六進制,併發送級聯十六進制字節,如在:
'10011101' + '01101100'
表示爲
'\x9d' + '\x6c'
或者我應該發送它們作爲ASCII ?我也看到了Struct模塊的提及。我應該去那條路線嗎?
我想知道的另一件事是如何表示消息的時間戳部分。
任何幫助,建議你可以給我將不勝感激。
非常感謝:)
感謝您的回覆托馬斯。 – Jack 2010-12-01 19:31:34
@傑克:不客氣。你能做你想做的事嗎? – 2010-12-01 19:33:17