我有一个 USB 转 RS485 适配器,连接到 RS485 继电器板,我可以使用某个名为 sscom 的软件正确寻址。通过 sscom,我可以启用/禁用继电器板上的继电器。所以我知道 USB->RS485 适配器和 RS485 继电器板都可以正常工作。
我现在正尝试通过 PHP 执行此操作,因此我在 Windows (10) PC 上安装了 PHP,该 PC 连接了 USB 适配器,并且我已经下载了此https://github.com/toggio/PhpSerialModbus尝试通过 PHP CLI 使其工作。
当我尝试运行它时,我得到了‘必须打开设备才能读取它’,这似乎足够有用,所以我转到了 PHP 代码的这一行:
$modbus->deviceInit('/dev/ttyUSB0',115200,'none',8,1,'none');
假设我获取了错误的信息。我的设备位于 COM7 上(如在 sscom 软件中配置和运行的一样)。
在 Windows 中,如果我运行此命令:
reg query HKLM\HARDWARE\DEVICEMAP\SERIALCOMM
我得到:
\Device\VCP2 REG_SZ COM7
我的问题是,我需要在 deviceInit 行中使用什么语法才能在 PHP 代码中查看此设备?我尝试了各种组合,但都不起作用,而且总是出现错误提示。
提前致谢。
答案1
这应该有效:
<?php
class rapidserial{
function _blocking($device,$mode){
stream_set_blocking($device, $mode);
return true;
}
}
$rapidserial = new rapidserial();
$device = "COM9";
exec("mode $device BAUD=115200 PARITY=n DATA=8 STOP=1 xon=off octs=off rts=on");
$comport = fopen($device, "r+b");
if ($comport === false){
die("Failed opening com port<br/>");
}else{
echo "Com Port Open<br/>";
}
//Set non-blocking mode for writing
$rapidserial->_blocking($comport,0);
$atcmd = "AT+\r";
fputs($comport, $atcmd);
usleep(200000);
// Set blocking mode for reading
$rapidserial->_blocking($comport,1);
echo '<br/>Response:<br/><br/>';
$res = fgets($comport, 4017);
fclose($comport);
echo $res."<br/><br/>";
?>