目录
一、前言
二、 效果图
三、安装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代码
/*** 发送数据 页面*/
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>
<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博客