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作为Shell脚本语言使用
Oct 09 PHP
php简单静态页生成过程
Mar 27 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
Mar 02 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
php中使用cookie来保存用户登录信息的实现代码
Mar 08 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
ThinkPHP CURD方法之where方法详解
Jun 18 PHP
ThinkPHP之getField详解
Jun 20 PHP
php内嵌函数用法实例
Mar 20 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
百度留言本js 大家可以参考下
2009/10/13 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
JQueryEasyUI之DataGrid数据显示
2016/11/23 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
2019/05/09 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
python装饰器练习题及答案
2019/11/01 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
Python如何生成xml文件
2020/06/04 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
大学生村官典型材料
2014/01/12 职场文书
学习保证书
2015/01/17 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书