猿问

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

我不知道这是否真的可能,但我需要从带有JavaScript或PHP的卡车的数字秤中获得重量。

目前,该秤连接到一台速度极慢的PC上,该PC运行Windows XP以及该公司开发的自定义软件,该软件制作了该秤,以保留每天称重的不同车辆的注册表。

不幸的是,PC无法升级,因为我会丢失所有驱动程序,并且该软件在较新版本的Windows上不起作用。

我在想,如果我可以通过Javascript或PHP与串行设备进行通信并获取数据,并获得与自定义软件相同的权重,那么我就可以使用PHP和MYSQL后端制作一个小网页,该网页可以执行与自定义软件相同的操作,但具有我实际缺少的所有功能并升级PC。

我买了一个串行到USB适配器,并将设备连接到我的Windows 10笔记本电脑,看起来它正在正确传输数据,如您在这张图片中看到的那样

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

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

任何帮助将不胜感激!!!:)


侃侃尔雅
浏览 96回答 3
3回答

慕妹3146593

一种方法是设置一个Node.js环境,然后尝试 serial.iohttps://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。我现在需要做的是在浏览器中运行此功能,以便我可以在网页中从设备中吐出数据...如果有人能给我指出正确的方向,请...

Smart猫小萌

我刚刚使用PHP和Powershell完成了这项工作。让powershell读取串行端口并将数据转储到xampp中的文件中。然后PHP可以用来读取文件并用作REST调用处理程序。您可以让Ajax调用localhost来获取数据。在计算机上设置 xampp 在管理员模式下打开 Poweshell 并执行以下命令。这将释放Powershell限制。否则,ps1 脚本无法在运行时运行。&nbsp; &nbsp; Set-ExecutionPolicy Unrestricted以 xampp/htdocs/weight 格式创建一个目录。我称之为重量,你可以叫任何你想要的东西。使用以下代码在文件夹中创建 .ps1 脚本Start-Process PowerShell -Verb RunAs$COM = [System.IO.Ports.SerialPort]::getportnames()function read-com {&nbsp; &nbsp; $port= new-Object System.IO.Ports.SerialPort $COM,9600,None,8,one&nbsp; &nbsp; $port.Open()&nbsp; &nbsp; do {&nbsp; &nbsp; &nbsp; &nbsp; $line = $port.ReadLine() | Out-File -FilePath C:\xampp\htdocs\weight\weight.txt&nbsp; &nbsp; &nbsp; &nbsp; Write-Host $line # Do stuff here&nbsp; &nbsp; }&nbsp; &nbsp; while ($port.IsOpen)}read-com添加一个 PHP 文件。我称之为weightUtil.php。将以下代码添加到其中。<?phpheader("Access-Control-Allow-Origin: *");&nbsp; &nbsp; $data = '';&nbsp; &nbsp; $myFileName = "weight.txt";&nbsp; &nbsp; $myfile = fopen($myFileName, "r") or die("Unable to open file!");&nbsp; &nbsp; if(filesize($myFileName) > 0){&nbsp; &nbsp; &nbsp; &nbsp; $data = fread($myfile,filesize($myFileName));&nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; echo $data;&nbsp; &nbsp; fclose($myfile);?>您现在已准备就绪。从 Xampp 控制面板运行 tomcat 服务器,您就可以通过 POST 请求接收重量了。您可以拨打电话http://localhost/weight/weightUtil.php如果您发现访问C驱动器中文件的权限存在任何问题,只需添加对xampp的完全访问权限即可。然后,事情将顺利进行。everyone
随时随地看视频慕课网APP
我要回答