Bash:在设备上写入然后从中读取

标签 bash device read-write

我正在开发一个非常小的程序,其中有一个连接到 S0 的重量传感器。下面是我如何初始化串口:

stty -F /dev/ttyS0 9600 min 60 time 1 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke parenb -ixon

我已经测试了几种写入设备然后从中读取的方式:

echo IDN? >> /dev/ttyS0
read -t1 output < /dev/ttyS0   # waits for ever here.

我也试过:

echo IDN? >> /dev/ttyS0 && read -t1 output < /dev/ttyS0  # waits too

但是没有成功。总之,它不会改变任何东西。

until read -t1 < /dev/ttyS0; do
    echo IDN? > /dev/ttyS0
done
identity=$(echo $REPLY | tr -d $'\r')

这在设备连接时有效。


对于我的测试,我这样做了并且有效:

$ cat /dev/ttyS0 &
[1] 9188
$ echo IDN? >> /dev/ttyS0
HBM-xxxyyyzzz$

我试过的三种方式都不成功。也许是因为设备的响应速度比 bash 解释的快?如果是这种情况,我该如何避免这种情况,以便从设备获得完美的定时答复?

我实际上要搜索的是,如果设备在 1 秒内没有应答,则跳过读取,但如果它在 200 毫秒读取,则继续而不等待最后 800 毫秒

最佳答案

以读/写模式打开设备应该可以。

exec 3<> /dev/ttyS0
echo "IDN?" >&3
read -t1 output <&3

像这样用 exec 打开文件意味着文件在多个命令中保持打开状态,而不是被每个命令打开和关闭。

关于Bash:在设备上写入然后从中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32968728/

相关文章:

objective-c - 需要 iOS 引用来了解 sleep 、待机和/或空闲模式下发生的情况

ios - 应用程序未在设备中自动启动并在 xcode 上出现错误

java - 是否可以使用 java 在不读取行的情况下合并两个文本文件?

multithreading - “reads before reads”在内存排序中是什么意思?

mysql - 如何使用 bash 脚本转储远程 mysql 数据库并在本地导入它

linux - 为什么 `read -t` 在 RHEL 上的 bash 中没有超时?

android build/envsetup.sh addcompletions() "local T dir f"是什么意思?

linux - 返回包含指定字符串的全局变量列表的脚本

android : Error com. parse.ParseException : at least one ID field (installationId, deviceToken) 必须在此操作中指定

java - java中读取动态文件路径