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 相关文章推荐
CodeIgniter php mvc框架 中国网站
May 26 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php下载远程文件类(支持断点续传)
Nov 14 PHP
PHP6 mysql连接方式说明
Feb 09 PHP
php笔记之:AOP的应用
Apr 24 PHP
php去除HTML标签实例
Nov 06 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP中两个float(浮点数)比较实例分析
Sep 27 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
laravel 判断查询数据库返回值的例子
Oct 11 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
php 常用字符串函数总结
2008/03/15 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
常用的Javascript数据验证插件
2015/08/04 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
JQuery 实现文件下载的常用方法分析
2019/10/29 jQuery
js判断密码强度的方法
2020/03/18 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
python基本语法练习实例
2017/09/19 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
表达自我的市场:Society6
2018/08/01 全球购物
党的群众路线教育实践方案
2014/05/11 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
网吧消防安全责任书
2014/07/29 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
Java8中接口的新特性使用指南
2021/11/01 Java/Android
使用javascript解析二维码的三种方式
2021/11/11 Javascript