最近需要用PHP实现串口通信,由于通信对方发送数据没有结束标志,DIO函数总是阻塞,设置其O_NOBLOCK模式也不管用,想用MSCOMM32吧,还不能发16进制数(127以下可用ASCII),最后自己用DELPHI和SPCOMM做了一个,现在是能发送数据,但是其内部ONRECEIVEDATA事件接收的数据要如何才能送到PHP这个问题,一直解决不了,
PHP做这些明显感到不行了,控件的数据输出也得做成字符串,否则PHP还是接收不了,哪 位大侠做过类似的工作,给点帮助或提示,真是着急啊,PHP+烂通信协议要没招了。
PHP做这些明显感到不行了,控件的数据输出也得做成字符串,否则PHP还是接收不了,哪 位大侠做过类似的工作,给点帮助或提示,真是着急啊,PHP+烂通信协议要没招了。
<?php
$Engine = new COM("SAPI.SpVoice");
$File = new COM("SAPI.SpFileStream");
?>
$comm_obj=new COM("rs232comproj.rs232com");
$comm_obj->sportname="COM1";
$comm_obj->baudrate=2400;
$comm_obj->databits=8;
$comm_obj->stopbits="1";
$comm_obj->parity="none";
echo "初始化串口完毕<br>";
$comm_obj->opencom();
echo "打开串口<br>";
sleep(1);//打开串口后需要延时1秒才能发送数据
$sdata="abccddeeff";
echo $comm_obj->send_data($sdata);
sleep(1);
while(1){
if($comm_obj->sendbufempty){echo "发送完毕<br>";break;}else echo "正在发送<br>";sleep(1);
}
echo "<hr>";
echo "接收标志".$comm_obj->rcvdataflag."\.<br>";
sleep(1);
$j=0;
while(1){
if($comm_obj->rcvdataflag!=0){echo $comm_obj->rcv_data();$j=0;}else{sleep(1);$j++;if($j>=50)break;}
}sleep(5);/*
echo "数据接收完毕<br>";
*/
$comm_obj->closecom();
echo "关闭串口<br>";