[英]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
我找到了這個,也許這是要走的路。
對於實時應用程序,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.