gpt4 book ai didi

javascript - 与 Kenwood TH-D72A 的串行端口通信似乎几乎是不可能的。为什么我无法使用 javascript 读取数据?

转载 作者:行者123 更新时间:2023-12-03 01:31:56 25 4
gpt4 key购买 nike

这(希望)是一次可怕的旅程的结束。我长期以来一直通过 tty 终端程序与串行端口进行通信,通常需要 5 分钟才能将它们全部设置完毕。

我想做什么?

<强>1。通过javascript向TH-D72A写入命令
2.通过javascript从TH-D72A读取数据

成功:
答:可以用Python读写。然而 TH-D72A 进入了一种奇怪的模式,它没有响应。
B:联系了 Kenwood 客户支持并与他们进行了长时间的讨论。然而,我已经投入了 3 周的时间来完成原本只需要 5 分钟的事情。他们似乎也不明白出了什么问题。
C:此操作模式将在 Raspberry Pi 上使用,但我的开发操作系统是 Mac OS。我可以在任一平台上执行 python 脚本。

代码

我不确定是否必须使用解析器或只是从端口读取。 port.read() 不显示任何数据。此代码可以编译,但没有数据发送到 func:

'use strict';
var express = require('express');
var router = express.Router();
var util = require("util");
const SerialPort = require('serialport');
const Readline = SerialPort.parsers.Readline;
var devicePath = '/dev/ttyUSB0';
var osvar = process.platform;
console.log(osvar);
if (osvar == 'darwin') {
console.log("Using Mac OS");
devicePath = '/dev/tty.SLAB_USBtoUART';
}else{
devicePath = '/dev/ttyUSB0';
}

const port = new SerialPort(devicePath, {
baudRate: 9600,
parity: 'none',
stopBits: 1,
dataBits: 8,
flowControl: false
}, function(err) {
if (err){
console.log('error: ', err.message);
port.close();
}});

const parser = new Readline({delimiter: '\n'});
port.pipe(parser);

console.log('parser setup');

parser.on('data', function(data) {
console.log('data received: ', data);
});


port.on('data', function(data) { console.log('Date:' +data);
});

port.on('open', function() { console.log('Port Opened');
});

port.on('close', function() { console.log('Port Closed');
});

port.write('DISP\r\n');


router.get('/', function (req,res) {
res.render('terminal', { title: 'Terminal Page' });
});

module.exports = router;

其他

项目在 github 上开放:https://github.com/kcw-grunt/nodetest并且,我 fork 了一个模块(npm)来添加更多方法:https://www.npmjs.com/package/th-d72-ax25

我希望有一些 javascript 专家可以看到这个问题(这一定很简单)

最佳答案

背景我已经成为一名取证专家,试图弄清楚为什么这个简单的任务实际上花了6周......并且我找到了解决方案。我认为这是一种解决方法,但我可以继续使用它来继续编写我更大的解决方案

我的每个支持者都认为 javascript 是合理的,我倾向于同意他们的观点。但是,系统根本没有任何反应。这包括串行端口 2.0.6、2.1.2 甚至 v 6.2.0。

这段代码确实有效(@psiphi75 说它应该有效):

'use strict';
var express = require('express');
var router = express.Router();
var serialport = require('serialport');
var SerialPort = serialport.SerialPort;
var devicePath = '/dev/ttyUSB2';

var port = new SerialPort( devicePath, { // change path
baudrate: 9600
, function ( err ) {
if ( err ) {
console.error('error opening serial port:' , err);
}
}
});

port.on('data', function(data) {

console.log('Data:'+data)
});

port.write('KISS ON\r\n', function(err) {
console.log('KISS ON Turned on');
});

port.write('RESTART\r\n', function(err) {
console.log('Restarted');
});

port.on('open', function() {
console.log('Port Opened');
});

port.on('closed', function() {
console.log('Port Closed');
});

var start = Date.now();
setInterval(function() {
var delta = Date.now() - start; // milliseconds elapsed since start
// alternatively just show wall clock time:
console.log(new Date().toUTCString());
port.write('I\r\n');
}, 5000); // update



router.get('/', function (req,res) {
res.render('terminal', { title: 'Terminal Page' });
});


module.exports = router;

问题实际上出在 Kenwood TH-D72A 串行 (USB) 端口上。事实上,当在开发环境中使用它时,它保持在第二个串行端口“连接”后不发出数据的状态。这是 Kenwood 应该解决的一个严重错误,尤其是 HT 被认为是市场上最昂贵的产品之一。

解决方法是在每次启动构建 + 运行时简单地重新启动 TH-D72A。

我可能会花一些时间来查明是否存在某种持久状态导致此问题。但是,代码会在每次构建中重新启动 HT。对于该领域的非技术用户来说,这将是一个严重的问题,更不用说没有 2 个 Raspberry Pi、一个 Linux、Windows 和 Mac 的人了

关于javascript - 与 Kenwood TH-D72A 的串行端口通信似乎几乎是不可能的。为什么我无法使用 javascript 读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51254319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com