小编Mat*_*att的帖子

如何使用PHP写入串口?遇到缓冲问题

编辑:我已经使用以下脚本进行了一些测试(在此处找到:从Arduino返回的PHP串口数据).即使使用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);
Run Code Online (Sandbox Code Playgroud)

原始问题:

我正在使用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();
Run Code Online (Sandbox Code Playgroud)

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

Tx: AT
Tx: AT&F
Tx: ATE0
Tx: AT+IPR=9600
Tx: AT
Tx: AT
Tx: AT …
Run Code Online (Sandbox Code Playgroud)

php buffer serial-port stty

7
推荐指数
1
解决办法
9115
查看次数

opentbs 同时合并 Word 文档表中的 2 行

这是我要实现的目标的示例: 在此处输入图片说明

这是我的模板的样子: 在此处输入图片说明

这是我的最终结果: 在此处输入图片说明

我相信这是因为我将块定义为 w:tr,它仅指单行。有没有办法告诉 opentbs 该块由 2 行组成?谢谢。

php ms-word opentbs

3
推荐指数
1
解决办法
1179
查看次数

标签 统计

php ×2

buffer ×1

ms-word ×1

opentbs ×1

serial-port ×1

stty ×1