wordpress网站导出,porto 4wordpress下载,如何ps做网站首页,砀山哪有做网站的一、前言
目的#xff1a;借助虚拟串口软件#xff08;VSPD#xff09;模拟硬件串口发送数据#xff0c;使用PHP语言实现接收硬件发送的数据。
我这里的需求是连接天平#xff0c;把天平的称量数据实时的传送到PHP使用。
使用工具#xff1a;vspd串口调试工具
使用语…一、前言
目的借助虚拟串口软件VSPD模拟硬件串口发送数据使用PHP语言实现接收硬件发送的数据。
我这里的需求是连接天平把天平的称量数据实时的传送到PHP使用。
使用工具vspd串口调试工具
使用语言PHP
二、效果图 三、准备
1、虚拟串口软件
使用到的工具有VSPD和串口调试工具其中VSPD是模拟硬件串口串口调试工具是模拟硬件发送数据两者配合使用工具已打包可直接下载使用vspd串口调试工具
2、安装PHP扩展
下载并安装dio扩展下载地址PECL :: Package :: dio 0.2.0 for Windows注意要与使用的PHP版本保持一致下载后将php_dio.dll文件拷贝到/Extensions/php/php7.0.9nts/ext/目录下再打开php.ini删除掉“extensiondio”前面的分号如果没有则直接添加即可最后重启Apache
四、VSPD和串口调试工具使用
1、VSPD
VSPD可通过上面链接下载下载解压后直接运行vspd.exe按提示安装即可。
安装成功后在右侧添加端口注意端口是成对添加或删除的两个端口可以互相收发数据。端口添加成功后打开电脑“设备管理器”中的端口就可以看到新添加的两个端口。 2、串口调试工具
无需安装直接运行文件夹里的exe文件即可在左侧设置好参数串口号、波特率、数据位、停止位等这些一般由设备供应商提供。最后点击“打开串口”按钮。 3、测试串口是否可以互相收发数据
再打开一次串口调试工具选择串口COM4注意必须是再VSPD里添加的串口组对之间才能互相通信互相发送、接收数据设置波特率等参数与COM3一致在右侧下面的发送数据区输入数据点击发送则在COM3端口就会收到发送的数据同样在COM3的发送数据区输入数据则在COM4的接收数据区也可以接收到数据两个是互相的。
如果能互相收发数据表示两个端口是正常的。 五、PHP实时接收COM串口的数据 后端实现逻辑 1、使用php_dio扩展读取串口传送来的数据 2、设置参数com4、baud、data、stop参数要与上传串口调试工具上的参数一致 3、开始连接串口并循环读取数据以获得实时变化的数据 4、关闭串口 5、下面代码较为简单要考虑更多会出现错误的情况比如说com端口连接失败的情况读取数据为空时的情况等 5、apiResponse()是自己写的一个返回json格式的函数 前端实现逻辑 1、使用定时器轮询请求结接口并把返回的数据实时的更新到input上 2、定义全局变量change用来标识新请求回来的数据是否和上次一致即串口传送的数据是否发生变化 3、定义全局变量flag用来标识数据未发生变化时请求的次数 4、其实第一步已经实时获取到了串口发送的数据如果没有特殊的后续操作第2和3步可以不用。因为我这里的需求是接收天平的实时数据当天平数据稳定时说明天平上没有再添加重量所以加了这两步用来触发其他事件比如说如果连续5次请求数据都没有发送变化即flag5时此时就可以判定天平上的重量没有发生变化就可以进行后续操作了。 PHP代码
/**前端显示页面 */
public function index(){return $this-fetch();
}/*** 读取天平数据 前端通过ajax请求以获取实时数据*/
public function getCom(){//定义com口 接收端口 COM3发送则COM4位接收反之亦然baud 波特率 data 数据位 stop 停止位 由供应商提供$comCOM4; $baud 9600; $data8; $stop 1;set_time_limit(0);exec(mode .$com.: baud.$baud. data.$data. stop.$stop. parityn xonon,$output);//打开串口 O_RDWR读写模式 O_RDONLY只读$ck dio_open($com . :, O_RDWR);//如果打开串口失败停止脚本并输出“打开串口COM3失败”if(!$ck){return apiResponse(110,打开串口 . $com . 失败);}//读取串口数据//读取长度$len 80;//当数据为空时do{// 读取串口数据并将读取到的数据赋给变量$shuju$shuju dio_read($ck,$len);}while($shuju null);// 获取浮点值并反转 如果传过来的数据为83.100我们需要的正确的数据是1.38// $shuju floatval(strrev($shuju));// 关闭串口dio_close($ck);//读取发送串口的数据return apiResponse(200,success,$shuju);}
前端代码
html
headtitle实施接收COM串口数据/titlescript typetext/javascript src/static/index/js/jquery-1.11.3.min.js /scriptscript typetext/javascript src/static/index/layui/layui.js/scriptlink relstylesheet typetext/css href/static/index/layui/css/layui.css
/head
bodyfieldset classlayui-elem-field layui-field-title stylemargin-top: 20px;legend实施接收COM串口数据/legend/fieldsetform classlayui-form layui-form-pane action stylewidth:60%; margin: 0 auto;div classlayui-form-item div classlayui-block label classlayui-form-labelCOM数据/labeldiv classlayui-input-block input typetext namedata autocompleteoff classlayui-input value/div/div/divdiv classlayui-form-item style padding: 10px; background-color: #F2F2F2; div classlayui-carddiv classlayui-card-header stylefont-size: 18px与上一次是否发送变化/divdiv classlayui-card-body idresult stylefont-size: 16px/div/div/div /form/bodyscriptlayui.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() {$.ajax({url:getCom,type:GET,dataType:JSON,success:function (res) {console.log(res)if (res.code 200) {$(#result).empty();var html $(input[namedata]).val(res.data)if (change res.data) {// 未发生变化flaghtml span stylecolor:green未发生变化:flag/span}else{// 发生了变化flag 0 //数据发生变化后重置变化次数change res.datahtml span stylecolor:red发生了变化/span}$(#result).append(html)}else{layer.msg(res.data)}}})}
})/script
/html