【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博客

相关推荐
FreakStudio4 小时前
硬件版【Cursor】?aily blockly IDE尝鲜封神,实战硬伤尽显
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
BY组态6 小时前
Ricon组态系统:告别传统组态软件的痛点,开启Web可视化新时代
物联网·信息可视化·iot·web组态·组态
郝学胜-神的一滴6 小时前
Qt 入门 01-01:从零基础到商业级客户端实战
开发语言·c++·qt·程序人生·软件构建
测试员周周6 小时前
【Appium 系列】第06节-页面对象实现 — LoginPage 实战
开发语言·前端·人工智能·python·功能测试·appium·测试用例
RFID科技的魅力6 小时前
国产RFID资产管理系统推荐:信创兼容、稳定可靠、服务响应快
物联网·rfid
摇滚侠6 小时前
@Autowired 和 @Resource 的区别
java·开发语言
CaoMei_HuaCha6 小时前
硬件测试内容之二:VREF(基准电压)
硬件工程
Wy_编程6 小时前
go语言中的结构体
开发语言·后端·golang
SeaTunnel6 小时前
(八)收官篇 | 数据平台最后一公里:数据集成开发设计与上线治理实战
java·大数据·开发语言·白鲸开源
大卡片7 小时前
C++的基础知识点
开发语言·c++