PHP实现连接设备、通讯和发送命令的方法
本文实例讲述了PHP实现连接设备、通讯和发送命令的方法。分享给大家供大家参考。具体如下:
开发的BS架构的软件(PHP),需要跟设备进行通讯,在此记录一下,欢迎各位指正:
1.采用phpsocket技术使用TCP/IP连接设备
参数$service_port连接端口
参数$address发送IP地址
参数$in发送命令
functionSend_socket_connect($service_port,$address,$in){ //创建TCP/IPsocket$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)ordie("couldnotcreatesocket!"); //设置超时时间 $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为返回值
functionSend_socket_xdcoder($service_port,$address,$in){ //创建TCP/IPsocket $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)ordie("couldnotcreatesocket!"); //设置超时时间 $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.采用phpsocket技术使用UDP协议连接设备,实现通讯和发送命令
参数$service_port连接端口
参数$address发送IP地址
参数$in发送命令
functionSend_socket_connect_udp($service_port,$address,$in){ //采用phpsocket技术使用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为返回值
functionSend_socket_xdcoder_udp($service_port,$address,$in){ //采用phpsocket技术使用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发送命令
functionrs232_connect($com,$baudrate,$in){ @set_time_limit(10); //使用'windows下设置窜口参数'; exec("mode".$com."BAUD=".$baudrate."PARITY=nDATA=8STOP=1odsr=off"); //"打开端口串口$com"; $f=@fopen($com,'w+'); //判断串口是否正常打开 if(!$f){ //echo"<script>alert('Errorwhenopen$com!!');</script>"; die("Errorwhenopen$com"); } //向串口发送数据; fwrite($f,$in); //关闭端口 fclose($f); //串口操作结束 }
还有一个关于命令16进制转换的:
functionhexToStr($hex){ $string=""; for($i=0;$i<strlen($hex)-1;$i+=3){ $string.=chr(hexdec($hex[$i].$hex[$i+1])); } return$string; }
希望本文所述对大家的php程序设计有所帮助。