【发布时间】:2015-12-25 16:17:55
【问题描述】:
我有一个甚高频收音机,它通过串行端口连续发送状态消息,我需要将我得到的消息作为十六进制数据存储在文本文件中
我尝试了如下所示的 hexdump 命令,并且我从 vhf 无线电获得的数据是正确的,但是这个脚本的问题是当我执行它时,它直到我按 ctrl-c 才结束
d -A n -t x1 -w128 /dev/ttyS0 > file.txt
所以我尝试了另一个命令,读取命令如下:
COUNTER=0
while [ $COUNTER -lt 10 ]; do
read -r -t1 -N128 DATA < /dev/ttyS0
echo $DATA >> file1.txt
od -A n -t x1 -w128 file1.txt >> file2.txt
let COUNTER=COUNTER+1
done
但是file2.txt中存储的数据不正确。
我从收音机收到的消息不是我可以根据收音机协议文档解释的格式。所以当我说数据不正确时,我的意思是无法解释消息(它是随机接收的)
请注意,我在执行这两个脚本之前已经设置了串行端口,如下所示:
stty -g /dev/ttyS0 raw
stty -F /dev/ttyS0 9600
所以,请帮我解决这个问题。或者给了我另一种从串口读取的方式。
问候,
【问题讨论】:
-
那么您希望脚本何时终止?一旦到达一定数量的字节,或者?
-
是的,我希望脚本在收到一定数量的字节后终止。收音机的状态消息大约是 45 个字节,但由于收音机在连续传输,我想确保我收到了完整的状态消息。所以假设我需要接收 100 个字节然后终止脚本。
-
对于您获取所需数据的第一个命令,您能否在您的问题中发布数据样本(比如 100 个字节)?
-
数据是ASCII码吗?需要 CTRL+C 很可能是因为“数据”不包含 EOF(文件结尾)标记。如果您知道“消息开始”和“消息结束”标记是什么,那么您可以通过查找这些模式来提取。您也可以尝试 'tail -c (--bytes=K) 并将其通过管道传输到您的 hexdump 工具。 :)
标签: bash shell serial-port hexdump stty