为了账号安全,请及时绑定邮箱和手机立即绑定

使用Javascript或PHP从数字规模的串行端口获取数据?

使用Javascript或PHP从数字规模的串行端口获取数据?

PHP
侃侃尔雅 2022-08-19 16:33:50
我不知道这是否真的可能,但我需要从带有JavaScript或PHP的卡车的数字秤中获得重量。目前,该秤连接到一台速度极慢的PC上,该PC运行Windows XP以及该公司开发的自定义软件,该软件制作了该秤,以保留每天称重的不同车辆的注册表。不幸的是,PC无法升级,因为我会丢失所有驱动程序,并且该软件在较新版本的Windows上不起作用。我在想,如果我可以通过Javascript或PHP与串行设备进行通信并获取数据,并获得与自定义软件相同的权重,那么我就可以使用PHP和MYSQL后端制作一个小网页,该网页可以执行与自定义软件相同的操作,但具有我实际缺少的所有功能并升级PC。我买了一个串行到USB适配器,并将设备连接到我的Windows 10笔记本电脑,看起来它正在正确传输数据,如您在这张图片中看到的那样我已经搜索了使用Javascript与串行设备进行通信的方法,我认为使用NodeJS可以做到这一点,但我不知道我是否可以在网页上实现它。另外,我没有用C或C++或C#写任何东西,所以我不知道如何从这些语言中做到这一点(我看到的很多答案都是使用其中一种语言来做到这一点)。我还看到有一个名为chrome.serial的chrome应用程序,但我没有找到任何工作示例来指示我如何继续。任何帮助将不胜感激!!!:)
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

一种方法是设置一个Node.js环境,然后尝试 serial.io

https://serialport.io/

我有这个,也许这就是要走的路。

对于实时应用程序,Node.js是与 socket.io 一起进行的方式,以便在您的网站上进行实时更新


查看完整回答
反对 回复 2022-08-19
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

井。。。在尝试脚本并尝试使其在Linux中工作后,我无法使用PHP完成它,因为在Windows中,脚本只能写入而不是从设备读取数据。


我按照Ifaruki的建议与Node和 serial.io(谢谢你!!)并且使用以下脚本,我能够正确读取秤中的数据


var SerialPort = require('serialport');

var io = require('socket.io').listen(3000);


var serialPort = new SerialPort("COM4", {

    baudRate: 9600,

    parser: new SerialPort.parsers.Readline("\n"),

    dataBits: 7,

    parity: 'none',

    stopBits: 1,

    flowControl: false

});


io.sockets.on('connection', function(socket){

    socket.on('message', function(msg){

        console.log(msg);

    });


    socket.on('disconnected', function(){

        console.log('disconnected');

    });

});


var clearData = "";

var readData = "";


serialPort.on('open',function(){

    console.log('open');

    serialPort.on('data', function(data){

        const buf2 = Buffer.from(data)

        let wArray = buf2.toString('utf8');

        //this part just removes characters I don't need from the data

        let wSlice = wArray.slice(3, wArray.length);

        let rawWeight = wSlice.slice(0, -3);

        let fWeight = rawWeight.trim();

        let weight = parseInt(fWeight);

        console.log(weight);

    });

});


setTimeout(function(){

    serialPort.close(function(){

        console.log("Port Closed!");

    });

}, 3000);

我不是很熟悉Node。


我现在需要做的是在浏览器中运行此功能,以便我可以在网页中从设备中吐出数据...如果有人能给我指出正确的方向,请...


查看完整回答
反对 回复 2022-08-19
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我刚刚使用PHP和Powershell完成了这项工作。让powershell读取串行端口并将数据转储到xampp中的文件中。然后PHP可以用来读取文件并用作REST调用处理程序。您可以让Ajax调用localhost来获取数据。


在计算机上设置 xampp 在管理员模式下打开 Poweshell 并执行以下命令。这将释放Powershell限制。否则,ps1 脚本无法在运行时运行。


    Set-ExecutionPolicy Unrestricted

以 xampp/htdocs/weight 格式创建一个目录。我称之为重量,你可以叫任何你想要的东西。使用以下代码在文件夹中创建 .ps1 脚本


Start-Process PowerShell -Verb RunAs

$COM = [System.IO.Ports.SerialPort]::getportnames()

function read-com {

    $port= new-Object System.IO.Ports.SerialPort $COM,9600,None,8,one

    $port.Open()

    do {

        $line = $port.ReadLine() | Out-File -FilePath C:\xampp\htdocs\weight\weight.txt

        Write-Host $line # Do stuff here

    }

    while ($port.IsOpen)

}

read-com

添加一个 PHP 文件。我称之为weightUtil.php。将以下代码添加到其中。


<?php

header("Access-Control-Allow-Origin: *");

    $data = '';

    $myFileName = "weight.txt";

    $myfile = fopen($myFileName, "r") or die("Unable to open file!");

    if(filesize($myFileName) > 0){

        $data = fread($myfile,filesize($myFileName));

    } 

    echo $data;


    fclose($myfile);

?>

您现在已准备就绪。从 Xampp 控制面板运行 tomcat 服务器,您就可以通过 POST 请求接收重量了。您可以拨打电话http://localhost/weight/weightUtil.php


如果您发现访问C驱动器中文件的权限存在任何问题,只需添加对xampp的完全访问权限即可。然后,事情将顺利进行。everyone


查看完整回答
反对 回复 2022-08-19
  • 3 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信