在Linux中如何使用命令進行RS-232串口通信和數據包解析


文章首發於浩瀚先森博客

1. 獲取串口號

在Linux系統中一切皆為文件,所以串口端口號也不例外,都是以設備文件的形式出現。也就是說我們可以用訪問文本文件的命令來訪問它們。

a. 一般串口都是以/dev/ttyS#的格式顯示,所以第一個連接的串口就是/dev/ttyS0,第二個連接的串口就是/dev/ttyS1…以此類推。

b. USB轉串口適配,沒有額外驅動,它們會顯示為/dev/ttyUSB#,如/dev/ttyUSB0

2. 配置串口屬性

我們可以使用stty命令來更改配置串口屬性(詳情查看”man sty”),比如我們設置串口/dev/ttyS0波特率為57600和odd parity,命令如下

stty -F /dev/ttyS0 57600 parodd

3. 串口數據讀寫操作

使用echo向串口發送數據,如

echo "command" > /dev/ttyUSB0

可以使用cat來讀取串口中的數據,如

cat /dev/ttyUSB0

讀取數據並保存到txt文本文件中,如

cat /dev/ttyUSB0 > file.txt

4. 解析數據

說到解析數據,我們可以使用一個強大的文本分析工具awk,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指gawk,gawk 是 AWK 的 GNU 版本。

詳細說明請參考http://www.gnu.org/software/gawk/manual/gawk.pdf

下面使用gawk舉個栗子,在終端以H:M:S格式輸出當前時間和來自串口的每一行前3個字符,命令如下:

cat /dev/ttyUSB0 | gawk ’{print strftime("%T"), substr($1 ,1,3)}’

5. 后台運行

可以講串口數據讀寫操作設置為后台進行,通過一個簡單命令或者shell 腳本就可以實現。命令可以用nohup。即使關閉終端或者注銷賬戶,進程還是在進行着,比如

nohup cat /dev/ttyS0 | gawk ’{substr($1 ,1,3)}’ > result.txt

使用下面命令可以刪除進程,但是會刪除所有的cat進程。

killall cat

我們可以用“ps ax”來查看當前運行的進程,選擇你要刪除的,記下PID,刪除即可,如下

kill -9 PID

6. 繪制數據

如果你希望繪制實時獲取到的數據,我這里推薦一個軟件叫做KST(http://kst.kde.org/),它能夠實時的獲取text文件數據並繪制出來,可以瀏覽官網查看詳細說明。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM