用 PHP 寫 RS232 串列通訊程式
從 用 PHP 寫 RS232 串列通訊程式 抄來的~~
相信經常在翻 PHP 手冊的人應該都有察覺,PHP 不只是可以用來開發網頁程式而已,很多其他語言能完成的工作 PHP 也都做的到,例如透過 PHP 的 Direct IO Functions 就可以對 Serial port 溝通,而且可以在 Windows 下執行,一般在 Windows 要實做 com port 通訊程式,大多是透過像 VB/VC++/C++ Builder 這類程式所提供的元件來撰寫,不過用 PHP 就可以很快實做出一般的功能囉!
在開始之前要先讓 PHP 支援 dio 才行,5.1.0 版之後已經將 dio 移至 PECL 了,可以到 PHP 官網下載編譯好的 PECL,解壓縮後將裡面的 php_dio.dll 放到 PHP 目錄的 ext 底下,接著修改 php.ini 加入 extension=php_dio.dll 即可。
(上述連結裡已無編釋好的php_dio.dll可供下載,須自行編釋)
可至http://cn.php.net/get/pecl-5.2.6-Win32.zip/from/a/mirror這裡下載
在 Windows 底下讀取 COM1 的例子:
寫法跟在 Linux 用 C 寫 serial 通訊程式差不多,其中 mode 是 Windows 命令列一個設定 serial port 組態的工具(類似 Linux 的 stty),可以打 mode /? 看詳細說明,設定好傳輸率等,接著用 dio_open 開啟裝置,然後就可以做存取的動作囉!
參考資料:
http://blog.linym.net/archives/187
http://sakerlin.pixnet.net/blog/post/25466334
http://www.chinaunix.net/jh/27/771726.html
http://www.xspace.idv.tw/bo_blog/122
http://www.php.net/manual/zh/ref.dio.php
http://php.mirrors.ilisys.com.au/manual/en/install.pecl.phpize.php
相信經常在翻 PHP 手冊的人應該都有察覺,PHP 不只是可以用來開發網頁程式而已,很多其他語言能完成的工作 PHP 也都做的到,例如透過 PHP 的 Direct IO Functions 就可以對 Serial port 溝通,而且可以在 Windows 下執行,一般在 Windows 要實做 com port 通訊程式,大多是透過像 VB/VC++/C++ Builder 這類程式所提供的元件來撰寫,不過用 PHP 就可以很快實做出一般的功能囉!
在開始之前要先讓 PHP 支援 dio 才行,5.1.0 版之後已經將 dio 移至 PECL 了,可以到 PHP 官網下載編譯好的 PECL,解壓縮後將裡面的 php_dio.dll 放到 PHP 目錄的 ext 底下,接著修改 php.ini 加入 extension=php_dio.dll 即可。
(上述連結裡已無編釋好的php_dio.dll可供下載,須自行編釋)
可至http://cn.php.net/get/pecl-5.2.6-Win32.zip/from/a/mirror這裡下載
在 Windows 底下讀取 COM1 的例子:
<?php
exec('mode COM1: baud=19200 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
while (1) {
$data = dio_read($fd, 1);
if ($data) {
echo $data;
}
}
dio_close($fd);
?>
寫法跟在 Linux 用 C 寫 serial 通訊程式差不多,其中 mode 是 Windows 命令列一個設定 serial port 組態的工具(類似 Linux 的 stty),可以打 mode /? 看詳細說明,設定好傳輸率等,接著用 dio_open 開啟裝置,然後就可以做存取的動作囉!
這裡是公司在用的範例
<?php
import_request_variables("gpc", "");
exec('mode COM1: baud=9600 data=8 stop=1 parity=n');
$fd = dio_open('COM1:', O_RDWR);
date_default_timezone_set( "Asia/Taipei" );
$echoData.="\r\n\r\n\r\n\r\n"; //先空4行
$echoData.=$company_name."\r\n"; //第5行
$echoData.="#".$company_no." ".$company_tel."\r\n"; //第6行
$echoData.=$company_addr."\r\n"; //第7行
$echoData.="\r\n"; //第8行
$echoData.=" ".date("Y/m/d H:i:s")."\r\n"; //日期,買受人,統編
$echoData.=" ".$user_title."\r\n";
$echoData.=" "."統編:".$user_no."\n\r\r\n";
//第12~第27行
$echoData.="網路服務費\r\n";
$echoData.="總共".$totalMoney."元\r\n";
$echoData.="-----------------\r\n";
$echoData.="付款方式:".$pay_method."\r\n";
$echoData.="物件編號:".$object_no."\r\n";
$echoData.="備 註:\r\n"; //1
$echoData.=$line2."\r\n"; //2
$echoData.=$line3."\r\n"; //3
$echoData.=$line4."\r\n"; //4
$echoData.=$line5."\r\n"; //5
$echoData.=$line6."\r\n"; //6
$echoData.=$line7."\r\n"; //7
$echoData.=$line8."\r\n"; //8
$echoData.="-----------------"."\r\n"; //9
//第28,29,30(銷售額,營業稅,總計)
$tax=$totalMoney*0.05;
$no_tax=$totalMoney-$tax;
$echoData.=" ".$no_tax."\r\n";
$echoData.=" ".$tax."\r\n";
$echoData.=" ".$totalMoney."\r\n";
//最後再空四行,以利下一頁再重新列印
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
$echoData.="\r\n";
dio_write($fd,$echoData);
dio_close($fd);
?>
參考資料:
http://blog.linym.net/archives/187
http://sakerlin.pixnet.net/blog/post/25466334
http://www.chinaunix.net/jh/27/771726.html
http://www.xspace.idv.tw/bo_blog/122
http://www.php.net/manual/zh/ref.dio.php
http://php.mirrors.ilisys.com.au/manual/en/install.pecl.phpize.php
沒有留言:
張貼留言