当前位置:网站首页>Shell script realizes the reading of serial port and the parsing of message

Shell script realizes the reading of serial port and the parsing of message

2022-07-05 08:10:00 Nanbolwan

Recently, I am reading the message from the serial port and judging whether the message content is valid , Originally used C++ Wrote a little program . How board card sftp The service is always disconnected , So consider using shell Scripts do this . use shell Script implementation of these functions faces the following problems :

1. How to set and read the serial port from the command line ?

stty yes Linux A good terminal setting tool under the platform , Various terminal properties can be set . In essence, the serial port is also Linux A terminal in a system . So the first step is to set the baud rate of the serial port :

stty -F /dev/ttyO1 raw speed 9600

Then read the serial port , We use cat The command can easily read and print out the serial port information from the terminal , But in the script, we want to read a line of serial port messages into string variables , So there is the following code :

cat /dev/ttyO1 | while read LINE
do
	echo LINE
	#do something
	...
done

2. How to intercept and compare strings ?

str="hello world"
# Intercept hello
h=${str:0:5}
# first : After that is the position ; the second : The following number indicates the number of characters 

# There are many ways to compare strings , Here is one of them 
if [ $h == 'hello' ]; then
	#do something
	...
fi

3. How to be in shell Count in script

shell All variables in the script are strings by default , So when we declare variables, we should explicitly assign values :

num=0
# to num Add 1
num=`expr $num + 1`
# Judge num Is it greater than 10
if [ $num -ge 10 ]; then
	#do something
	...
fi

4. Script implementation

The script reads the serial port message , Intercept the message header and valid as and judge , After passing the judgment, the counter adds 1, Timer exceeded 10 Program exit after ;

#!/bin/sh

stty -F /dev/ttyO1 raw speed 9600
num=0
cat /dev/ttyO1 | while read LINE
do
	head=${LINE:0:6}
	valid = ${LINE:17:1}
	if [ $head == '$GPRMC' ] && [ $valid == 'A' ]; then
		echo $num
		num = `expr $num + 1`
		if [ $num -ge 10 ]; then
			exit
		fi 
	fi
done
原网站

版权声明
本文为[Nanbolwan]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140545440142.html