【PHP】PHP实现与硬件串口交互,向硬件设备发送指令数据(下)

目录

一、前言

[二、 效果图](#二、 效果图)

三、安装PHP扩展

四、添加模拟串口

五、PHP发送数据给硬件

PHP代码

前端代码


一、前言

上篇文章写到PHP怎么与硬件串口交互之实时接收硬件发送的数据,这里同样是以天平为例,介绍怎么向硬件设备发送数据,

需求:向硬件发送指令等数据,同时能够再次接收到硬件发送回来的信息

【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据(上)_php串口通信-CSDN博客

二、 效果图

每隔1.5s发送一次数据(右侧),再每个1.5s接收一次数据(左侧)

三、安装PHP扩展

下载并安装dio扩展,下载地址PECL :: Package :: dio 0.2.0 for Windows,注意要与使用的PHP版本保持一致,下载后将php_dio.dll文件拷贝到/Extensions/php/php7.0.9nts/ext/目录下,再打开php.ini,删除掉"extension=dio"前面的分号,如果没有则直接添加即可,最后重启Apache

四、添加模拟串口

使用"VSPD"添加两个模拟串口,详细可参看"【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据(上)_php串口通信-CSDN博客"

五、PHP发送数据给硬件

后端逻辑:

1、接收前端发送的数据

2、设置参数:com4、baud、data、stop,参数要与上传串口调试工具上的参数一致

3、打开串口,并发送数据

前端逻辑:

1、设置定时器,每1.5s自动发送一次数据

2、计算发送次数

PHP代码

php 复制代码
/**
 * 发送数据 页面
 */
public function put()
{

	return $this->fetch();
}

/**
 * 发送指令
 * com8接收端
 */
public function putCom(){
	$in = input('post.data');
	$end = '\r\n';	//结束符
	
	//定义com接收端口  baud 波特率 data 数据位 stop 停止位  由供应商提供
	$com='COM8'; $baud = '9600'; $data='8';  $stop = '1';

	set_time_limit(0);

	exec('mode '.$com.': baud='.$baud.' data='.$data.' stop='.$stop.' parity=n xon=on',$output);

	//打开串口  O_RDWR读写模式 O_RDONLY只读
	$ck = @fopen($com, 'w+');

	//如果打开串口失败,停止脚本,并输出"打开串口COM3失败"
	if(!$ck){
		return apiResponse('110',"打开串口" . $com . "失败");
	}

	//向串口发送数据;
  	fwrite($ck, $in);

	//关闭端口    
	fclose($ck);
	
	return apiResponse('200','success');

}

前端代码

html 复制代码
<html>
<head>
	<title>实时发送COM串口数据</title>
	<script type="text/javascript" src="/static/index/js/jquery-1.11.3.min.js" ></script>
	<script type="text/javascript" src="/static/index/layui/layui.js"></script>
	<link rel="stylesheet" type="text/css" href="/static/index/layui/css/layui.css">
</head>
<body>
	<fieldset class="layui-elem-field layui-field-title" style="margin-top: 20px;">
	  <legend>实时发送COM串口数据</legend>
	</fieldset>
	 
	<form class="layui-form layui-form-pane" action="" style="width:60%; margin: 0 auto;">
	  
	  	<div class="layui-form-item" >
		    <div class="layui-block" >
		      	<label class="layui-form-label">COM数据</label>
		      	<div class="layui-input-block" >
		        	<input type="text" name="data"  autocomplete="off" class="layui-input" value="">
		      	</div>
		    </div>
	  	</div>

	  	<div class="layui-form-item"  style=" padding: 10px; background-color: #F2F2F2; " >
		  	<div class='layui-card'>
			    <div class='layui-card-header' style="font-size: 18px">发送次数</div>
			    <div class='layui-card-body' id="result" style="font-size: 16px">
				    
			    </div>
		  	</div>
		</div> 

	</form>

</body>

<script>


layui.use(['form','element'], function(){
  var form = layui.form
  ,$ = layui.jquery
  ,element = layui.element;

 // setTimeout(getCom, 1000);
  $(document).ready(function(){
		c = setInterval(getCom,1500);   //每1.5秒执行一次
  });

  // 记录数据是否发生变化
  var change = '0';
  // 记录未发生变化次数
  var flag = 0;

  function getCom() {

  	var data = $("input[name='data']").val()
	  $.ajax({
	  	url:'putCom',
	  	type:'post',
	  	dataType:'JSON',
	  	data:{data:data},
	  	success:function (res) {
	  		// console.log(data)
	  		console.log(res)
	  		if (res.code == '200') {

	  			$('#result').empty();
	  			var html = ''

	  			if (change == res.data) {
	  				flag = 0  //数据发生变化后重置变化次数
	  				// 未发生变化
	  				html = '<span style="color:green">未发送:'+flag+'</span>'
	  			}else{
	  				// 发生了变化
	  				flag++
	  				html = '<span style="color:red">已发送:'+flag+'</span>'
	  			}
	  			$('#result').append(html)
	  		}else{
	  			layer.msg(res.data)
	  		}
	  	}
	  })
  }
})

</script>
</html>

PHP实时接收硬件发送的数据,可查看

【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据(上)_php串口通信-CSDN博客

相关推荐
白帽攻防录6 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛6 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya8 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务8 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
打工仔折腾 AI10 小时前
用 Dashlet 把极空间 NAS 服务入口整理成统一导航首页的实践
java·开发语言·人工智能·后端·python·rpc·ai agent 实战
注塑机数据采集联网10 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析
MATLAB代码顾问10 小时前
Simulink PI 参数扫描与批量仿真完整 MATLAB 代码
开发语言·matlab