簡體   English   中英

使用Javascript或PHP從數字秤的串口獲取數據?

[英]Getting data from serial port of a digital scale with Javascript or PHP?

我不知道這是否真的可能,但我需要使用 JavaScript 或 PHP 從卡車的數字秤中獲取重量。

目前,該秤連接到一台運行 Windows XP 的 PC 上,該 PC 運行 Windows XP 以及該公司開發的定制軟件,該軟件使該秤保持每天稱重的不同車輛的注冊表。

不幸的是,PC 無法升級,因為我會丟失所有驅動程序,而且該軟件無法在較新版本的 Windows 上運行。

我在想,如果我可以通過 Javascript 或 PHP 與串行設備通信並獲取數據,並獲得與自定義軟件相同的權重,那么我可以使用 PHP 和一個 MYSQL 后端制作一個小網頁與自定義軟件所做的相同,但具有我實際上缺少的所有功能並升級了 PC。

我購買了一個串行轉 USB 適配器並將該設備連接到我的 Windows 10 筆記本電腦,它似乎正在正確傳輸數據,如您在此圖片中所見

我已經搜索了使用 Javascript 與串行設備進行通信的方法,我認為使用 NodeJS 可以做到,但我不知道是否可以將其實現到網頁上。 此外,我還沒有用 C 或 C++ 或 C# 寫過任何東西,所以我不知道我將如何使用這些語言中的任何一種來編寫它(我看到的很多答案都是使用其中一種來編寫的)。

我還看到有一個名為 chrome.serial 的 chrome 應用程序,但我沒有找到任何可以指示我如何進行的工作示例。

任何幫助將不勝感激!!! :)

一種方法是設置一個 Node.js 環境,然后嘗試 serial.io

https://serialport.io/

我找到了這個,也許這是要走的路。

對於實時應用程序,Node.js 是與 socket.io 一起使用的方法,用於在您的網站上進行實時更新

嗯...在嘗試了一個腳本並試圖讓它在 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.js 不是很熟悉。

我現在需要做的是在瀏覽器中運行這個功能,這樣我就可以在網頁中吐出設備中的數據......如果有人能指出我正確的方向......

我剛剛使用 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即可。 然后事情會順利進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM