PHP实现连接设备、通讯和发送命令的方法

这篇文章主要介绍了PHP实现连接设备、通讯和发送命令的方法,涉及php基于socket实现设备连接及数据通信的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
 

本文实例讲述了PHP实现连接设备、通讯和发送命令的方法。分享给大家供大家参考。具体如下:

开发的BS架构的软件(PHP),需要跟设备进行通讯,在此记录一下,欢迎各位指正:

1. 采用php socket技术使用TCP/IP连接设备

参数$service_port 连接端口
参数$address 发送IP地址
参数$in 发送命令

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function Send_socket_connect( $service_port , $address , $in ) {
//创建 TCP/IP socket$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket!");
   //设置超时时间
   $timeout = 2;
   $time = time();
   //设置非阻塞模式
   @socket_set_nonblock( $socket );
   //超时判断
   while (!@socket_connect( $socket , $address , $service_port )) {
     $err = socket_last_error( $socket );
     // 连接成功,跳出循环
     if ( $err === 10056) {
       break ;
     }
     //连接失败,判断超时时间,停止
     if ((time() - $time ) >= $timeout ) {
       socket_close( $socket );
       print ( '网络异常,请检查网络连接!!' );
       exit ();
     }
     // 刷新频率(250毫秒)
     usleep(250000);
   }
   //设置阻塞模式
   @socket_set_block( $socket );
   //发送命令到设备
   socket_write( $socket , $in , strlen ( $in ));
   //关闭连接
   socket_close( $socket );
}

Send_socker_xdcoder $buffer为返回值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function Send_socket_xdcoder( $service_port , $address , $in ) {
   //创建 TCP/IP socket
   $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die ( "could not create socket!" );
   //设置超时时间
   $timeout = 2;
   $time = time();
   //设置非阻塞模式
   @socket_set_nonblock( $socket );
   //超时判断
   while (!@socket_connect( $socket , $address , $service_port )) {
     $err = socket_last_error( $socket );
     // 连接成功
     if ( $err === 10056) {
       break ;
     }
     //连接失败,判断超时时间,停止
     if ((time() - $time ) >= $timeout ) {
       socket_close( $socket );
       echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
       exit ();
     }
     // 刷新频率(250毫秒)
     usleep(250000);
   }
   //设置阻塞模式
   @socket_set_block( $socket );
   //发送命令到设备
   socket_write( $socket , $in , strlen ( $in ));
   //接收设备命令返回数据
   $buffer = socket_read( $socket , 1024, PHP_NORMAL_READ);
   //关闭连接
   socket_close( $socket );
   //输出返回值
   return $buffer ;
}

2. 采用php socket技术使用UDP协议连接设备,实现通讯和发送命令

参数$service_port 连接端口
参数$address 发送IP地址
参数$in 发送命令

?
1
2
3
4
5
6
7
8
9
10
11
12
function Send_socket_connect_udp( $service_port , $address , $in ) {
   //采用php socket技术使用UDP协议连接设备
   $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
   @socket_set_option( $socket , SOL_SOCKET, SO_RCVTIMEO, array ( "sec" => 2, "usec" => 0));
   //发送命令
   @socket_sendto( $socket , $in , strlen ( $in ), 0, $address , $service_port );
   @socket_recvfrom( $socket , $buffer , 1024, MSG_WAITALL, $address , $service_port );
   //关闭连接
   if ( empty ( $buffer )) {
     echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
   }
}

Send_socket_xdcoder_udp  $buffer 为返回值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function Send_socket_xdcoder_udp( $service_port , $address , $in ) {
   //采用php socket技术使用UDP协议连接设备
   $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
   @socket_set_option( $socket , SOL_SOCKET, SO_RCVTIMEO, array ( "sec" => 2, "usec" => 0));
   //发送命令
   @socket_sendto( $socket , $in , strlen ( $in ), 0, $address , $service_port );
   @socket_recvfrom( $socket , $buffer , 1024, MSG_WAITALL, $address , $service_port );
   //关闭连接
   socket_close( $socket );
   if (! empty ( $buffer )) {
     return $buffer ;
   } else {
     echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
   }
}

3. 采用RS232串口技术连接设备,实现通讯和发送命令

参数$com  串口号
参数$baudratr  波特率
参数$in 发送命令

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function rs232_connect( $com , $baudrate , $in ) {
   @set_time_limit(10);
   //使用 'windows下设置窜口参数';
   exec ( "mode " . $com . " BAUD=" . $baudrate . " PARITY=n DATA=8 STOP=1 odsr=off" );
   // "打开端口串口$com";
   $f = @ fopen ( $com , 'w+' );
   //判断串口是否正常打开
   if (! $f ) {
     //echo "<script>alert('Error when open $com!!');</script>";
     die ( "Error when open $com" );
   }
   //向串口发送数据;
   fwrite( $f , $in );
   //关闭端口   
   fclose( $f );
   //串口操作结束
}

还有一个关于命令16进制转换的:

?
1
2
3
4
5
6
7
function hexToStr( $hex ) {
   $string = "" ;
   for ( $i = 0; $i < strlen ( $hex ) - 1; $i +=3) {
     $string .= chr (hexdec( $hex [ $i ] . $hex [ $i + 1]));
   }
   return $string ;
}

希望本文所述对大家的php程序设计有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值