CJ_*_*CJ_ 6 php hardware-interface qbasic
我正在尝试将以下小型QBASIC程序(可以100%工作)移植到PHP:
OPEN "com1:2400,n,8,1,DS," FOR RANDOM AS #3
OPEN "data.dat" FOR OUTPUT AS #2
REM read 17 chars from the port
scale$ = INPUT$(17, #3)
PRINT scale$
WRITE #2, scale$
CLOSE #2
CLOSE #3
SYSTEM
Run Code Online (Sandbox Code Playgroud)
目前我从PHP(在WAMP5上)以编译(exe)形式调用它,但我想摆脱QBASIC并直接从PHP调用它.
我写了这个PHP函数,但它只是挂在fgets()行:
function read_port($port='COM1:', $length=17, $setmode=TRUE, $simulate='') {
if ($simulate){
$buffer = '"'.strval(rand(1000, 2000));
return $buffer;
}
if ($setmode){
shell_exec('mode com1: baud=2400 parity=n data=8 stop=1 to=on xon=off odsr=on octs=on dtr=on rts=on idsr=on');
}
$fp = fopen($port, "rb+");
if (!$fp) {
file_put_contents('debug1.log','COM1: could not open'."\n",FILE_APPEND);
} else {
$buffer = fgets($fp, $length); // <-- IT JUST HANGS HERE DOING NOTHING !
fclose ($fp);
}
return $buffer;
Run Code Online (Sandbox Code Playgroud)
}
我正在使用这个PHP行来调用上面的函数:
$res = read_port('COM1:', 17, TRUE, SIMULATE_SCALE);
Run Code Online (Sandbox Code Playgroud)
任何帮助都将受到赞赏!我基本上放弃了尝试.如果QBASIC可以完美地完成它,那么我们必须能够使用PHP来完成这项工作!
Mik*_*ike 10
你可能想看一下RémySanchez的PHP Serial.这里有一篇关于它的文章:
另请参阅PHP站点上dctkc dot com的jared提供的示例:
http://php.net/manual/en/function.fopen.php#20935
非常确定默认情况下PHP无法访问硬件端口.它可以访问网络资源,文件资源,但是如果硬件和您尝试阅读的内容之间没有某种传输,则无法看到这种情况.
但是,您可以加载一个特定于平台的扩展程序,这将启用此功能 - 只需调查即可.
e:是的,有 - 检查这个扩展,可能是你想要的.没有这样的东西,它就不会起作用.
"此扩展允许直接访问并行和串行(rs232)端口,在WIN9x/NT/2000/XP下的DLL inpout32.dll中进行读取和写入任何组件.具体的应用程序示例:完整的自动化与Web界面和php,任何性质的连接硬件与端口一样简单或复杂.一个简单但非常实用的想法...扩展和源代码是用Delphi 6编译的PHP5.0到5.1.2,包括源代码和示例."