【问题标题】:No response from serial communication write command串行通信写命令无响应
【发布时间】:2020-06-08 14:30:18
【问题描述】:

我有一个串行端口,我想使用节点 js 与之通信。这是成功通信交互的转储。 这是我的规范(异步串行协议) spec doc

(Windows 中的 COM1) successful serial port communication screenshot

但是,当我使用 nodejs 复制该交互时,我没有从端口得到任何响应。 (macOS 中的 /dev/tty.usbserial-14420)

var serialport = require("serialport"); 

const port = "/dev/tty.usbserial-14420";

const ACK = 0x06;
const NAK = 0x15;
const ENQ = 0x05;
const EOT = 0x04;
const STX = 0xF2;
const ETX   = 0x03;
const CMT = "C";


let f3 = new serialport(port, {
  baudRate: 9600
})

var Readline = serialport.parsers.Readline; // make instance of Readline parser
var parser = new Readline(); // make a new parser to read ASCII lines
f3.pipe(parser); // pipe the serial stream to the parser

f3.on('open', () => {
    console.log('port open');
    f3.write(makeMessage1());
    f3.write(makeMessage0());
    f3.write(makeMessage2());
});

parser.on('data', (data) => {
    console.log("data received "+data);
});

f3.on('error', (error) => {
  console.log('error: ' + error);
})

function makeMessage0() {
  return new Buffer.from('05');
}

function makeMessage1() {
  return new Buffer.from('f2 00 00 03 43 30 33 03 b2');
}


function makeMessage2() {
  return new Buffer.from('f2 00 00 03 43 32 03 ba');
}

输出:

port open

【问题讨论】:

  • 我不知道您使用的语言,但显然异步协议是二进制的(即不是文本),而您似乎正在发送一个由字母数字字符组成的文本字符串。并不是说它真的很重要,但 makeMessage2 没有足够的“字节”来形成至少 9 个字节的最小消息(即它应该与 msg1 的长度相同但更短)。
  • @sawdust 啊,这是有道理的,所以我下一步是弄清楚如何对二进制文件中的内容进行逆向工程
  • "二进制文件里有什么" -- 嗯??!!看你的“串口通信成功”的截图。请注意,左侧具有写入的二进制数据字节的十六进制表示。另请注意,右侧有这些字节的 ASCII 转换。 IOW 您已经拥有(某些)消息的二进制值(以十六进制表示)。您的“下一步”应该是弄清楚/学习如何从十六进制值构造二进制消息缓冲区。
  • BTW 文本字符串具有固有长度,而字节数组必须以特定大小声明/分配,并且您的程序必须显式跟踪该数组中的数据量(即因为没有分隔符字节)。

标签: node.js arduino serial-port serial-communication


【解决方案1】:

假设这是节点,我可以看到您编写的代码存在两个主要问题:

  • Buffer.from 的第一个参数中的十六进制值之间不应有空格
  • 您应该向 Buffer.from 提供第二个“hex”参数:Buffer.from('f200000343303303b2', 'hex');

【讨论】:

    猜你喜欢
    • 2017-10-15
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多