php串口反复读写,如何使用PHP写入串口?遇到缓冲问题

在PHP中使用php-serial库与串口设备通信时遇到问题,设备会重复输出命令。尝试使用fwrite和stty命令清除缓冲区无效。问题在于设备在接收到新命令时仍显示旧命令。解决方案可能是调整串口设置以防止命令缓冲,或在发送新命令前正确关闭和重新打开串口。
摘要由CSDN通过智能技术生成

编辑:我用以下脚本做了一些测试(在这里找到:

PHP serial port data return from Arduino).即使使用fwrite到/ dev / ttyUSB0,也会输出我的新命令以及从设备发送的最后一个命令.这让我觉得可能没有正确设置串口(例如可能需要使用stty来更改设置以清除缓冲区)或者还有其他我需要做的事情(使用php)来清除/ dev /中的缓冲区ttyUSB0在发送新命令之前.任何帮助将不胜感激,谢谢.

$fp =fopen("/dev/ttyUSB0", "w+");

if( !$fp) {

echo "Error";die();

}

fwrite($fp, $_SERVER['argv'][1] . 0x00);

echo fread($fp, 10) . "\n";

fclose($fp);

原始问题:

我正在使用php-serial通过串口与设备通信.该设备具有在屏幕上显示所有输入和输出到串行端口的功能.当我运行以下脚本时,我可以在设备上看到脚本正在接收设备输出的每个命令并将其重复回设备.我相信这会导致一个问题,我只想回答“OK”回到设备,不重复输出然后说’OK’.首先重复相同的命令似乎混淆了它然后它将不遵守’OK’命令.我可以通过在循环上每0.1秒输出’OK’来解决这个问题,但我宁愿从设备读取输出然后相应地响应它.我不相信我的脚本中有任何东西告诉它重复命令.这是任何人都经历过的php-serial类的问题吗?我试过设置$autoflush = false;没有区别.

我的剧本:

require_once('php_serial.class.php');

$serial = new phpSerial;

$serial->deviceSet('/dev/ttyUSB0');

$serial->confBaudRate(9600);

$serial->confParity("none");

$serial->confCharacterLength(8);

$serial->confStopBits(1);

$serial->confFlowControl("none");

$serial->deviceOpen();

while (true) {

$read = $serial->readPort();

if ($read) {

echo date("r") . ' ' . $read;

// $serial->sendMessage("\r\nOK\r\n");

}

}

$serial->deviceClose();

在运行脚本之前在设备屏幕上输出示例:

Tx: AT

Tx: AT&F

Tx: ATE0

Tx: AT+IPR=9600

Tx: AT

Tx: AT

Tx: AT

Tx: ATH0

Tx: AT+CMGF=1

我的脚本运行时设备屏幕上的示例输出:

Tx: AT

Rx: AT

Tx: AT&F

Rx: AT&F

Tx: ATE0

Rx: ATE0

Tx: AT+IPR=9600

Rx: AT+IPR=9600

Tx: AT

Rx: AT

Tx: AT

Rx: AT

Tx: AT

Rx: AT

Tx: ATH0

Rx: ATH0

Tx: AT+CMGF=1

Rx: ^[AT+CMGF=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值