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


Posted in PHP onOctober 13, 2015

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

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

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

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

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为返回值

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 发送命令

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 为返回值

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 发送命令

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进制转换的:

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

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

PHP 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
Dec 06 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
php cli换行示例
Apr 22 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
如何使用php实现评委评分器
Jul 31 PHP
详解PHP数组赋值方法
Nov 07 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 #PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 #PHP
apache和PHP如何整合在一起
Oct 12 #PHP
php实现Mysql简易操作类
Oct 11 #PHP
php实现微信公众平台账号自定义菜单类
Oct 11 #PHP
php实现微信公众号无限群发
Oct 11 #PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
Oct 10 #PHP
You might like
国内咖啡文化
2021/03/03 咖啡文化
基于PHP文件操作的详解
2013/06/05 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
js 调整select 位置的函数
2008/02/21 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
js模拟hashtable的简单实例
2014/03/06 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解jQuery选择器
2016/12/21 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
python遍历类中所有成员的方法
2015/03/18 Python
Python实现KNN邻近算法
2021/01/28 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
python中的tcp示例详解
2018/12/09 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
善意的谎言事例
2014/02/15 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
工作会议简报
2015/07/20 职场文书
信息技术课教学反思
2016/02/23 职场文书
读《工匠精神》有感:热爱工作,精益求精
2019/12/28 职场文书
Python进度条的使用
2021/05/17 Python