作者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/cn.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