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 相关文章推荐
社区(php&amp;&amp;mysql)六
Oct 09 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
使用淘宝IP库获取用户ip地理位置
Oct 27 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 PHP
php实现的用户查询类实例
Jun 18 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 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
再说下636单管机
2021/03/02 无线电
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
完整显示当前日期和时间的JS代码
2007/09/17 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
浅析node.js的模块加载机制
2018/05/25 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
基于Python解密仿射密码
2019/10/21 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
党的群众路线教育实践方案
2014/05/11 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
刑事上诉状范文
2015/05/22 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python