Чтение / запись данных возвращает ноль - Невозможно выполнить какие-либо операции - узел serialport - PullRequest
0 голосов
/ 28 апреля 2020

Я впервые работаю с serialport и пытаюсь установить sh соединение для чтения и записи с устройством 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

enter image description here

Трубка - это то, что относится к моему system.

Basi c Значения буфера операций записи:

Move Up = 0XF1 0XF1 0X01 0X00 0X01 0X7E

Move Down = 0XF1 0XF1 0X02 0X00 0X02 0X7E

Стоп-действие = 0XF1 0XF1 0X0 c 0X00 0X0 c 0X7E

Прочитать пример функциональности:

Текущая высота (1000 мм -0x03E8) 0XF2 0XF2 0X01 0X02 0X03 0XE8 0XEE 0X7E

(в «данных» два байта, поэтому «длина данных» равна 0x02; «Chec» ksum '= 0x01 + 0x02 + 0x03 + 0xE8 = 0xEE)

Ожидается, что функция чтения предоставит информацию о текущей высоте и функцию записи для возможности управления устройством.

Версии , Операционная система и оборудование:

SerialPort @ ^ 8.0.7

Node.js v10.16.0

Windows

Оборудование и Набор микросхем? COM4

FTDIBUS \ VID_0403 + PID_6001 + AB0JIYQTA \ 0000

FTDI

1 Ответ

0 голосов
/ 01 мая 2020

Создание синтаксического анализатора строки чтения предполагает, что сообщения завершаются \ n, но ваша запись не включает его, что может объяснить, почему команды не попадают на устройство.

Для операций чтения, если вы хотите использовать синтаксический анализатор строки чтения, вам нужно передать к нему serialPort, а затем прослушать данные из синтаксического анализатора, например:

serialPort.pipe(parser);

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

Примечание: данные будут представлять собой буфер

Вы можете пропустить парсер и вызвать чтение напрямую. Я полагаю, вы попробовали это. В документах говорится:

Если данные для чтения недоступны, возвращается ноль.

https://serialport.io/docs/api-stream#serialport -читание

Таким образом, возможно, что стол выводит данные только после получения сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...