【问题标题】:Read/Write data returns null - Unable to perform any operations - node serialport读/写数据返回 null - 无法执行任何操作 - 节点串行端口
【发布时间】:2020-04-28 17:19:29
【问题描述】:

我是第一次使用串口,​​并尝试使用以下方法与作为高度调节台控制器的 UART 设备建立读写连接。该应用程序是使用电子的桌面应用程序。

const SerialPort = require('serialport')
const Readline = require('@serialport/parser-readline')
const parser = new Readline()


const port = new SerialPort("COM4",  { 
                baudRate: 9600
 })

这是我使用的代码,port.read() 总是返回空值。

对于写操作,我使用了如下代码:

var buf = new Buffer([ 0XF1, 0XF1, 0X01, 0X00, 0X01, 0X7E]);
    port.write(buf, function(err,n) {
    if (err) {
    return console.log('Error on write: ', err.message)
    }
    console.log(n)
    console.log('message written')
})

缓冲区值是用于移动桌面的值,但没有任何操作发生,它不返回错误或在回调中返回未定义的值。

有关设备和设置的更多详细信息: 使用 RJ45 转 USB 连接器与桌子的控制箱连接。

The definition of the SCI is as below:
(Baud Rate):9600
(Data Mode):8
(Stop Bit):1
(Parity Type):None
Path: COM3

手机是指我的系统。

基本写操作缓冲区值:

上移=0XF1 0XF1 0X01 0X00 0X01 0X7E

下移=0XF1 0XF1 0X02 0X00 0X02 0X7E

停止动作=0XF1 0XF1 0X0c 0X00 0X0c 0X7E

读取功能示例:

当前高度(1000mm-0x03E8) 0XF2 0XF2 0X01 0X02 0X03 0XE8 0XEE 0X7E

(‘Data’中有两个字节,所以‘Data Length’为0x02;‘Checksum’= 0x01 + 0x02 +0x03 +0xE8 = 0xEE)

期望读取功能提供当前高度信息和写入功能以便能够控制设备。

版本、操作系统和硬件:

串口@^8.0.7

Node.js v10.16.0

窗户

硬件和芯片组? COM4

FTDIBUS\VID_0403+PID_6001+AB0JIYQTA\0000

FTDI

【问题讨论】:

    标签: node.js serial-port electron ftdi node-serialport


    【解决方案1】:

    创建一个读取行解析器表明消息由 \n 终止,但您的写入不包括一个,因此可以解释为什么命令没有到达设备。

    对于读取,如果你想使用 read-line 解析器,你需要将 serialPort 传递给它,然后监听来自解析器的数据,例如:

    serialPort.pipe(parser);
    
    parser.on('data', (data) => {
      console.log(data)
    })
    

    注意:数据将是一个缓冲区

    您可以跳过解析器并直接调用 read。我假设你试过了。文档说:

    如果没有数据可供读取,则返回 null。

    https://serialport.io/docs/api-stream#serialport-read

    所以,可能是办公桌只有在收到消息后才输出数据。

    【讨论】:

    • 有了读取功能,我已经开始接收数据了。我必须在解析器或读取函数中进行一些额外的更改才能获得正确的十六进制值吗?目前我正在将接收到的数据添加到数组缓冲区中,但接收到的与文档不匹配。例如,读取方法应始终在前 3 个位置生成以 242、242、1 开头的数据。但就我而言,它们是 127、126、126。
    • NodeSerial 不需要额外的配置。我建议尝试连接另一个串行通信工具。 arduino IDE 有串行监视器,如果你有的话。这将允许您确定这是否是您的 NodeSerial 配置的问题。我会仔细检查文档以确认 buadrate 和消息格式。如果您正在阅读预期长度的消息,并且校验和匹配,并且唯一不匹配的部分是前缀,那么文档和设备版本之间可能存在不匹配。
    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2013-05-26
    • 2020-08-13
    相关资源
    最近更新 更多