作者Federer5566 (費德勒5566)
看板Programming
標題[問題] RS232通訊問題
時間Wed May 1 13:42:50 2024
大家好
最近拿到一台設備
會透過RS232丟資料出來
丟出來的資料都是簡單的數字帶一個「:」
所以寫了一支程式去接收數據
大概每0.1秒read一次
但發現有時候取得的資料長度會不一樣
也就是說,取得的資料格式沒有很固定
大部分時候都是正常的,像是
000:
036:
157:
但有時會讀到下面這種
0:
00:
甚至有時候會讀到空字串
不曉得是不是接收程序上有什麼問題?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.196.28 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1714542172.A.41B.html
1F:推 cancelpc: rs232容易受干擾,至少用rs484118.161.193.244 05/01 13:56
2F:推 oisi: 是不是斷句斷錯位置,通常是開頭碼固定,你 1.160.166.16 05/04 23:31
3F:→ oisi: 的設備通訊開頭碼是:,後面才是內容。試試 1.160.166.16 05/04 23:31
4F:→ oisi: 看改用定時讀取封包,判斷到開頭碼之後的3碼 1.160.166.16 05/04 23:31
5F:→ oisi: 是內容。 1.160.166.16 05/04 23:31
6F:推 alex70266: linux的話用poll去抓event,有POLL_IN 42.70.192.222 06/20 17:18
7F:→ alex70266: event的時候再去read,read進來的長度 42.70.192.222 06/20 17:18
8F:→ alex70266: 不一定會是剛好完整的一筆,所以你要先 42.70.192.222 06/20 17:18
9F:→ alex70266: 丟去暫存buffer,再從暫存找合理的一包 42.70.192.222 06/20 17:18
10F:→ alex70266: data再做解析 42.70.192.222 06/20 17:18
11F:→ alex70266: 通常會建議這種走在serial或者tcp通道 42.70.192.222 06/20 17:19
12F:→ alex70266: ,自己訂的protocol要做開頭跟結尾的pa 42.70.192.222 06/20 17:19
13F:→ alex70266: ttern 42.70.192.222 06/20 17:20
14F:→ alex70266: windows還是其他平台應該都會有類似類 42.70.192.222 06/20 17:20
15F:→ alex70266: 似poll的system api可以用,細節我就相 42.70.192.222 06/20 17:20
16F:→ alex70266: 對不熟了 42.70.192.222 06/20 17:20
17F:推 tomjpsun: 先不要跑你的程式,先用minicom 類似的 114.43.64.134 06/28 14:32
18F:→ tomjpsun: terminal 程式來觀察。 114.43.64.134 06/28 14:33
19F:推 infernoT: 間隔不要低於200ms 111.251.198.64 08/24 20:30