- 论坛徽章:
- 1
|
四:演示代码:
- <?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 (honestqiao@hotmail.com/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
- // --------------------------------------------------------------------------
- // File name : RS232_Client.php
- // Description : RS232演示下位机程序
- // Requirement : PHP 5.1.4 (cli) (http://www.php.net)
- //
- // Copyright(C), HonestQiao, 2006, All Rights Reserved.
- //
- // Author: HonestQiao (honestqiao@hotmail.com/QQ:5601680)
- //
- // 程序简介:
- // 本程序与RS232_Server构成一个完整的演示系统,展示了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 COM2: baud=115200 data=8 stop=1 parity=n xon=on');
- $fd = dio_open('COM2:', O_RDWR);
- if(!$fd)
- {
- die("Error when open COM2");
- }
- $ff = dio_stat($fd);print_r($ff);
- echo "HQB232 CLIENT is start on COM2\n";
- dio_write($fd,chr(0).chr(1));echo "C_SEND:01\n";
- $len = 2;
- $t=0;while(($t++)<1000)
- {
- $data = dio_read($fd, $len);
- if($data==chr(0).chr(2)){
- echo "C_RECV:02\n";
- break;
- }
- }
- $len = 2;
- $t=0;while(($t++)<10)
- {
- $sdata = sprintf("%03d",$t) . "=" . microtime() . " (" . randomkeys(rand(0,35)) . ")";
- $slen = strlen($sdata);
- $stxlen = sprintf("%02d",$slen);
- dio_write($fd,"$stxlen");
- dio_write($fd,"$sdata");echo "C_SEND:($stxlen)$sdata\n";
- //sleep(1);
- }
- dio_write($fd,chr(0).chr(3));echo "C_SEND:03\n";
- dio_close($fd);
- function randomkeys($length)
- {
- $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
- for($i=0;$i<$length;$i++)
- {
- $key .= $pattern{rand(0,35)};
- }
- return $key;
- }
- ?>
复制代码
[ 本帖最后由 HonestQiao 于 2006-6-12 22:21 编辑 ] |
|