首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Javascript或PHP从数字称串口获取数据?

用Javascript或PHP从数字称串口获取数据?
EN

Stack Overflow用户
提问于 2020-01-26 00:39:37
回答 3查看 2.9K关注 0票数 2

我不知道这是否真的可行,但我需要用JavaScript或PHP从卡车的电子衡中获得重量。

目前,该称重连接到一台运行Windows XP且运行速度极慢的个人电脑上,以及该公司开发的一款定制软件,该软件用于记录每天称重的不同车辆。

不幸的是,这台电脑无法升级,因为我会丢失所有驱动程序,而且该软件无法在更新版本的Windows上运行。

我在想,如果我可以与串行设备通信并获得数据,无论是通过Javascript还是PHP,并获得与自定义软件相同的重量,那么我可以用PHP和MYSQL后端制作一个小网页,它做的事情与自定义软件做的事情相同,但具有我实际上缺少的所有功能,并升级PC。

我买了一个串口转USB卡,把它连接到我的Windows10笔记本电脑上,就像你在this picture中看到的那样,它似乎可以正确地传输数据

我已经寻找了使用Javascript与串行设备通信的方法,我认为使用NodeJS可以做到这一点,但我不知道是否可以将其实现为网页。此外,我没有用C、C++或C#写过任何东西,所以我不知道如何使用这些语言(我看到的很多答案都是使用这些语言中的一种)。

我还看到有一个名为chrome.serial的chrome应用程序,但我还没有找到任何可以指导我如何继续操作的工作示例。

非常感谢您的帮助!:)

EN

回答 3

Stack Overflow用户

发布于 2020-01-26 01:06:59

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

https://serialport.io/

我发现了这一点,也许这就是解决之道。

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

票数 1
EN

Stack Overflow用户

发布于 2020-01-28 02:43:25

好吧..。在尝试了一个脚本并试图让它在Linux中工作后,我无法用PHP完成这项工作,因为在Windows中,脚本只能写入而不能从设备读取数据。

我按照Ifaruki的建议使用了Node和serial.io (谢谢!)使用下面的脚本,我能够正确地从天平中读取数据

代码语言:javascript
复制
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并不是很熟悉。

我现在需要做的是在浏览器中运行这个函数,这样我就可以在网页中显示来自设备的数据……如果有人能给我指出正确的方向,请……

票数 0
EN

Stack Overflow用户

发布于 2020-07-19 12:07:22

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

在您的机器上设置xampp,在管理员模式下打开Poweshell,然后执行以下命令。这将释放powershell限制。否则,无法在运行时运行ps1脚本。

代码语言:javascript
复制
    Set-ExecutionPolicy Unrestricted

在xampp/htdocs/weight.中创建目录我把它叫做重量,你想怎么叫都行。使用以下代码在文件夹中创建.ps1脚本

代码语言:javascript
复制
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。将以下代码添加到其中。

代码语言:javascript
复制
<?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进行post调用

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59911277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档