0

我正在努力从设备中读取数据。我用许多不同的关键字搜索了这个问题,但找不到我的案例。

我是串行通信的初学者。提前感谢专家的帮助和建议。

minicom(和 picocom)的第一个问题

当我M;\r\n多次发送来自设备手册的命令(在本例中为 )时,我希望输出类似于+0000.00;+0000.00;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000.

但是,我收到的是不完整的字符串和带有一些奇怪字符的字符串,例如��ÚZڂ²Êʢinminicom▒▒▒▒in picocom。我只能收到几次完整的数据。picocom 看起来更稳定,但仍然不完整。

输出

通过迷你康:

Welcome to minicom 2.7.1

OPTIONS: I18n
Compiled on May  6 2018, 08:30:41.
Port /dev/ttyS0, 02:19:52

Press CTRL-A Z for help on special keys

;;+0000.0ÿÛۃ��kþ;;+0000.00;+0000.00;+0694.10;+0694.12;+20.6;+000;�²ê¢~ꢊ�û+0694.12;+20.6;+000;+000
;;+0000.00;+0000.00;+0694.11;+0694.12;+20.6;+000;+000
;ëÿ;+0000.®ÿ»¿▒ÿ¿r��ÚZڂ²Êʢr��ÚZڒ�r²ÚZڂ��ÚZڂ��j¤ø;;+0000.00;+0000.00;+0694.11;+0694.12;+20.6;+000;+000
;;+0000.00;+0000.00;+0694.11;+0694.12;+20.6;+000;+000
;;+0000.0»û��û;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+00;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.6;+000;+000
;ë;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
ÿû+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.11;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;ëÿ;+0694.10;+0694.11;+20.7;+000;+000
ÿû/0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.8;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.8;+000;+000
|;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.8;+000;+000
»ÿ;+0000.0뻫»Ëˣsÿû+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.8;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.11;+20.7;+000;+000
»+0694.10;+0694.11;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.10;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.10;+0694.10;+20.7;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.10;+0694.10;+20.7;+000;+000
ÿû+0694.10;+0694.10;+20.7;+000;+000
°¹▒¿³ÏϿó��ÚZ�rºÚZڂ��ÚZڂ��j¤ø+0000.00;+0000.00;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000»ÿ;+0000.0;;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
»+0694.09;+0694.10;+20.7;+000;+000
ÊþåÏ9¦▒%&L�7;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;ëÿ;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000
;;+0000.00;+0000.00;+0694.09;+0694.10;+20.7;+000;+000

通过 picocom:

picocom v3.1

port is        : /dev/ttyS0
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready
;▒▒;+0000.00;+0000.00;+0694.08;+0694.10;+20.9;+000;+000
▒▒▒▒>00;+0694.08;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.08;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.08;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.08;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
▒▒;+0000.00;+0000.00;+0694.08;+0694.10;+20.9;+000;+000
+0000.00▒ۣs▒▒▒▒20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
;▒▒;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
▒▒;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
;▒▒;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000
+0000.00;+0000.00;+0000.00;+0000.00;+0694.07;+0694.10;+20.9;+000;+000

pyserial的第二个问题

我认为第二个问题可能与第一个问题有关。最终我想从设备中读取数据并通过 python ( pyserial) 记录它。这是我读取数据的代码的一部分。

ser = serial.Serial(port='/dev/ttyS4', baudrate=9600)
ser.write(str.encode('M;\r'))
time.sleep(.2)
data = ser.readline()
data = data.decode("utf-8")
ser.close()

此代码块每 N 秒运行一次。基本上,此代码在收到第一个数据后就可以工作,但需要意外的长时间延迟才能接收到第一个完整的数据。

换句话说,print(len(data))总是0在成功接收到第一个数据之前给出。在用 zero 等待很长时间后len(data),它有时会很好地接收数据(非零len(data),没有任何奇怪的字符)。成功接收数据后,代码将继续正常工作,而不会出现我想要的任何问题。

这里的问题是我必须等待很长时间才能收到完整的数据字符串(甚至超过 3 天(!))。有人可以帮我解决这些问题吗?谢谢你。

4

0 回答 0