使用Javascript或PHP从数字秤的串行端口获取数据?
我不知道这是否真的可能,但我需要用JavaScript或PHP从卡车的数字秤上获取重量 目前,电子秤连接到一台速度非常慢的PC上,该PC上运行的是Windows XP以及该公司开发的定制软件。该公司开发了电子秤,用于保存不同车辆的注册表 每天都要称重 不幸的是,这台电脑无法升级,因为我会丢失所有的驱动程序,而且该软件在较新版本的Windows上无法运行 我在想,如果我可以与串行设备通信,通过Javascript或PHP获取数据,并获得与自定义软件相同的权重,那么我可以使用PHP和MYSQL后端制作一个小网页 这与定制软件的功能相同,但我实际上缺少了所有功能并升级了PC 我买了一个串行到USB适配器,并将该设备连接到我的Windows 10笔记本电脑上,看起来它正在正确地传输数据,如图所示 我一直在寻找使用Javascript与串行设备通信的方法,我认为使用NodeJS可以做到这一点,但我不知道是否可以将其实现到网页上。而且我还没有在C或C++或C语言中写任何东西,所以我不知道我会从这些语言中做些什么(我看到的很多答案是用其中的一个来做的)。p> 我还看到了一个名为chrome.serial的chrome应用程序,但我还没有找到任何工作示例来说明如何继续使用Javascript或PHP从数字秤的串行端口获取数据?,javascript,php,serial-port,Javascript,Php,Serial Port,我不知道这是否真的可能,但我需要用JavaScript或PHP从卡车的数字秤上获取重量 目前,电子秤连接到一台速度非常慢的PC上,该PC上运行的是Windows XP以及该公司开发的定制软件。该公司开发了电子秤,用于保存不同车辆的注册表 每天都要称重 不幸的是,这台电脑无法升级,因为我会丢失所有的驱动程序,而且该软件在较新版本的Windows上无法运行 我在想,如果我可以与串行设备通信,通过Javascript或PHP获取数据,并获得与自定义软件相同的权重,那么我可以使用PHP和MYSQL后端制
任何帮助都将不胜感激!!!:) 一种方法是设置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不太熟悉
我现在需要做的是在浏览器中运行此功能,这样我就可以在网页中从设备中吐出数据。。。如果有人能给我指出正确的方向,请告诉我……我刚刚用PHP和Powershell完成了这项工作。让powershell读取串行端口并将数据转储到xampp中的文件中。然后可以使用PHP读取文件并充当REST调用处理程序。您可以对localhost进行Ajax调用以获取数据 在您的计算机上安装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
。然后事情就会顺利进行。你能试着用一下吗?我现在就去看看。谢谢我想我不想通过Node来做这件事,因为我不熟悉它,我必须在几周内完成这件事,最多或者再等6个月,以获得可用的时间,但我已经安装了它,我正在检查它。谢谢你的提示!