首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与Kenwood TH-D72A的串行端口通信似乎几乎是不可能的。为什么我不能用javascript读取数据?

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

Stack Overflow用户
提问于 2018-07-10 05:33:09
回答 3查看 349关注 0票数 0

这(希望)是一个可怕的旅程的结束。我有通过tty终端程序与串口通信的悠久历史,通常需要5分钟才能将它们全部设置好。

我在试着做什么?

1.通过javascript将命令写入TH-D72A

2.通过javascript从TH-D72A读取数据

成功案例:

答:可以用python读写。然而,TH-D72A进入了一种奇怪的模式,它没有反应。

B:联系了建伍的客户支持,并与他们进行了很长时间的讨论。然而,我已经花了3周的时间,应该只需要5分钟。他们似乎也不知道哪里出了问题。

C:这个操作模式将在Raspberry Pis上运行,但我的开发操作系统是Mac OS。我可以在这两个平台上编写python脚本。

代码

我不确定是否必须使用解析器,还是简单地从端口读取。port.read()不显示任何数据。这段代码可以编译,但没有数据发送给函数:

'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上是开放的,我创建了一个模块(npm)来添加更多的方法:https://www.npmjs.com/package/th-d72-ax25

我希望有一些javascript专家可以看到这个问题(这必须非常简单)。

EN

回答 3

Stack Overflow用户

发布于 2018-07-11 06:56:53

Background我已经成为一名法医专家,试图弄清楚为什么这个简单的任务花了6周的时间,...and我找到了一个解决方案。我认为这是一种变通方法,但我可以继续使用它来继续编写我的更大的解决方案

我的每个支持者都认为javascript是健全的,我倾向于同意他们的观点。但是,系统完全没有响应。这包括串口2.0.6,2.1.2,甚至是v6.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)端口。事实上,当在开发环境中使用它时,它保持在第二个串口‘连接’之后不发出数据的状态。这是一个严重的缺陷,肯伍德应该解决,特别是HT被认为是市场上最昂贵的之一。

解决方法是在每次启动build + run时关闭并关闭TH-D72A的电源。

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

票数 1
EN

Stack Overflow用户

发布于 2018-07-10 05:56:52

我已经使用SerialPort很多次了,没有任何问题(gprs-signal-strengthsuper-duper-serial-gps-system。下面是一些示例代码。

注意:它们使用的是SerialPort v2.0.x。这看起来像是使用了new SerialPort.SerialPort(...)语法,而不是更新的new SerialPort(...)语法。

const port = new SerialPort.SerialPort('/dev/ttyS2', {
    baudrate: 115200,
    parser: SerialPort.parsers.readline( '\r\n' ) // you may just want \r or \n
}, function ( err ) {
    if ( err ) {
        console.error( 'Error opening GPRS serial port: ', err );
    }
} );

port.on('data', function(data) {
    console.log(data)
});
票数 0
EN

Stack Overflow用户

发布于 2019-07-11 17:05:06

如果有人还在尝试这样做,我用下面的代码和serialport@7.1.5让它工作

const SerialPort = require("serialport");

const port = new SerialPort("/dev/tty.SLAB_USBtoUART", {
  baudRate: 9600,
  dataBits: 8,
  parity: "none",
  stopBits: 1,
  rtscts: true
});

我认为诀窍是使用rtscts: true打开硬件流控制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51254319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档