我正在努力从设备中读取数据。我用许多不同的关键字搜索了这个问题,但找不到我的案例。
我是串行通信的初学者。提前感谢专家的帮助和建议。
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 天(!))。有人可以帮我解决这些问题吗?谢谢你。