㈠ 如何用php調用自己編寫的COM組件
首先寫ActiveX Dll:
新建一個VB6工程,ActiveX Dll將工程命名為P_test,類名為c_test ,類的文件內容如下:
Option Explicit
Private MyscriptingContext As scriptingContext
Private MyApplication As Application
Private MyRequest As Request Private MyResponse As Response
Private MyServer As Server
Private MySession As Session Public
Sub OnStartPage(PassedscriptingContext As scriptingContext)
Set MyscriptingContext = PassedscriptingContext
Set MyApplication = MyscriptingContext.Application
Set MyRequest = MyscriptingContext.Request
Set MyResponse = MyscriptingContext.Response
Set MyServer = MyscriptingContext.Server
Set MySession = MyscriptingContext.Session
End Sub
Public Sub OnEndPage()
Set MyscriptingContext = Nothing
Set MyApplication = Nothing
Set MyRequest = Nothing
Set MyResponse = Nothing
Set MyServer = Nothing
Set MySession = Nothing
End Sub
Public Function Test_Number(num) As Variant
If num 0 Then Get_Number_Attrib = 1
If num = 0 Then Get_Number_Attrib = 0
End Function
編譯生成p_test.dll文件
注冊
提示符下運行:regsvr32 p_test.dll
編寫php文件,test.php4代碼如下:
<?php
$b=new COM("p_test.c_test");
$a=$b->Test_Number(-454);
echo $a;
?>
可能碰到的問題是,編譯工程時通不過,要將Microsoft Active Server Pages Object Library引用進來,具體實現"Project->References"找到改庫,並勾上 。
㈡ php可以對硬體操作嗎
完全可以的,php可以操作串口rs232的。
例子如下:
<?php
// --------------------------------------------------------------------------
// File name : RS232_Server.php
// Description : RS232演示上位機程序
// Requirement : PHP 5.1.4 (cli) (http://www.php.net)
//
// Copyright(C), HonestQiao, 2006, All Rights Reserved.
//
// Author: HonestQiao ([email protected]/QQ:5601680)
//
// 程序簡介:
// 本程序與RS232_Client構成一個完整的演示系統,展示了PHP在RS232串口通訊上的應用。
// 程序之中實現了一個基礎但是完整的RS232通訊協議(HQB232),通訊協議格式如下:
// 協議內容:
// C->S 01 //請求通訊
// S->C 02 //響應通訊
// C->S LEN DATA //LEN表示數據(DATA)長度 DATA表示實際數據
// C->S 03 //結束通訊
// 說明:S表示上位機 C表示下位機
// HQB232表示HonestQiao演示的基礎(Base)RS232通訊協議,包含了協議的
// 請求和響應,數據幀的結構。
// 演示過程為通訊的請求和響應,十次數據幀的發送, 通訊的結束
// 數據幀的結構為當前的序號,microtime(),隨機字元串
//
// 歡迎探討PHP在RS232串口通訊上的應用。
// --------------------------------------------------------------------------
set_time_limit(0);
exec('mode COM1: baud=115200 data=8 stop=1 parity=n xon=on');
$fd = dio_open('COM1:', O_RDWR);
if(!$fd)
{
die("Error when open COM1");
}
$ff = dio_stat($fd);print_r($ff);
echo "HQB232 SERVER is listenning on COM1\n";
/// read
$len = 2;
$t=0;while (($t++)<1000)
{
$data = dio_read($fd, $len);
if ($data) {
if($data==chr(0).chr(1)){
echo "S_RECV:01\n";
echo "S_SEND:02\n";
dio_write($fd,chr(0).chr(2));
break;
}
}
}
/// read
$len = 2;
$t=0;while (($t++)<1000)
{
$len = 2;
$data = dio_read($fd, $len);
if($data==chr(0).chr(3)){
echo "S_RECV:03\n";
break;
}
elseif ($data) {
$len = intval($data);
$data = dio_read($fd, $len);
if($data){
echo "S_RECV:($len)$data\n";
}
}
}
dio_close($fd);
?>
㈢ 怎麼用php與串口進行通信
1.通過php擴展dio。
下載dio擴展:http://www.cyberspice.org.uk/downloads/dio-0.0.4rc3.tgz
在php.ini打開dio擴展。
dio開啟後可以通過dio_open dio_read等函數進行通信。但dio默認只是在Linux下的,好像pecl也有編譯後的php_dio.dll,但我在win下測試其實無法正常使用,可能是我php版本太高(5.3.3)。
dio擴展如果能打開,網上自然有很多實例
<?php
$c = stream_context_create(array('dio' =>
array(『data_rate』 => 115200,
『data_bits』 => 8,
『stop_bits』 => 1,
『parity』 => 0,
『is_canonical』 => 1)));
if (PATH_SEPARATOR != 「;」) {
$filename = 「dio.serial:///dev/ttyS0″;
} else {
$filename = 「dio.serial://COM1″;
}
?>
2.PHP_SER擴展
這是一個第三方擴展,可以在php5.3.3上正常使用,我測試結果是比較穩定,提供了單位元組流通信和非同步通信。對於單位元組流通信我還專門請教了作者,發現原來可以通過loop讀取數據流的。需要注意的是ser_write()的數據是字元型,但是ser_read()的數據則是10進制。所以發送的時候最好轉換為hex,接收後由十進制再轉為十六進制才能正常使用。
還有就是php_ser作為第三方擴展,作者是收費的。免費版本沒有功能限制,只是每次收發位元組數不能超過1024位元組。
function x_get_cgqbh() {
$str = 『at+ver?』;
$str = hexToStr($str);
ser_open( 「COM1″, 9600, 8, 「None」, 「1″, 「None」 );
if (ser_isopen()) {
return 「opened, post data ……」;
}else{
return false;
}
ser_write(「$str」);
sleep(1);
$str = ser_read();
ser_close();
return $str;
}
㈣ 用PHP如何接收串口的數據
假設http://booking.56nb.com/ip.php這個頁面有一個功能需要操作並返回某字元串,還用一下代碼可以實現執行並讀取返回值。
$fp = fopen("http://booking.56nb.com/ip.php","r");
$ret= fgetss($fp,255);
echo $ret."<br>";
fclose($fp);