我怎样才能得到 nodeJS 的权重结果
how can I get the result of a weight with nodeJS
我有一个问题,我正在 Windows 上尝试使用 NodeJS 和 npm 模块 "Serialport" 从秤中获取重量。
我遇到的问题是,我发送给秤的命令并不重要,它不是return任何数据。
我已经为我在 nwJS 上制作的项目编译了模块 serialport,并且我有以下代码:
var SerialPort = require('serialport');
var port = new SerialPort('COM4', {
parser: SerialPort.parsers.readline('W\n'),
baudRate: 9600,
dataBits: 7,
stopBits: 1,
parity: 'even',
bufferSize: 1024
});
function write() {
port.open(function(err) {
console.log("Writing serial data: ");
port.on('data', function(data) {
console.log('Data: ' + data);
});
port.write(resultString, function(err, res) {
if (err) {
console.log(err);
}
port.close();
});
});
}
port.on('error', function(err) {
console.log('Error: ', err.message);
})
setTimeout(write, 1000);
注:
解析器 W\n 是秤发送重量所需的字符串。我用另一个名为 coolterm
的应用程序进行了测试
感谢您的帮助。
问题很可能与解析器的配置有关。而不是 ReadLine 解析器:
parser: SerialPort.parsers.readline('W\n'),
尝试分隔符解析器:
var weight_parser = port.pipe(new Delimiter({delimiter: new Buffer('W\n')}));
...
parser: weight_parser,
...
parser.on('data', console.log);
如果这不起作用,请尝试使用 ByteLength 解析器进行故障排除,以查看是否触发了 'data' 事件。
就我而言
1) I am using hapi JS
2) Using latest serialport package version - 6.2.2
3) Using Essae weighing machine connected to the port '/dev/ttyUSB0'
下面的代码运行良好,一旦物品重量稳定(不变)就会给出正确的结果。
"use strict";
const serialport = require('serialport');
const Readline = require('@serialport/parser-readline')
const getweight = {
auth:false,
handler: function(req, res)
{
const port = new serialport('/dev/ttyUSB0')
const parser = port.pipe(new Readline({ delimiter: '\r\n' }))
parser.on('data', function(w)
{
port.close();
return res({
weight: w.replace(/[^\d\.]*/g, '').trim()
});
});
}
};
exports.routes = [
{
method: 'get',
path: '/getweight',
config: getweight,
},
];
我有一个问题,我正在 Windows 上尝试使用 NodeJS 和 npm 模块 "Serialport" 从秤中获取重量。
我遇到的问题是,我发送给秤的命令并不重要,它不是return任何数据。
我已经为我在 nwJS 上制作的项目编译了模块 serialport,并且我有以下代码:
var SerialPort = require('serialport');
var port = new SerialPort('COM4', {
parser: SerialPort.parsers.readline('W\n'),
baudRate: 9600,
dataBits: 7,
stopBits: 1,
parity: 'even',
bufferSize: 1024
});
function write() {
port.open(function(err) {
console.log("Writing serial data: ");
port.on('data', function(data) {
console.log('Data: ' + data);
});
port.write(resultString, function(err, res) {
if (err) {
console.log(err);
}
port.close();
});
});
}
port.on('error', function(err) {
console.log('Error: ', err.message);
})
setTimeout(write, 1000);
注: 解析器 W\n 是秤发送重量所需的字符串。我用另一个名为 coolterm
的应用程序进行了测试感谢您的帮助。
问题很可能与解析器的配置有关。而不是 ReadLine 解析器:
parser: SerialPort.parsers.readline('W\n'),
尝试分隔符解析器:
var weight_parser = port.pipe(new Delimiter({delimiter: new Buffer('W\n')}));
...
parser: weight_parser,
...
parser.on('data', console.log);
如果这不起作用,请尝试使用 ByteLength 解析器进行故障排除,以查看是否触发了 'data' 事件。
就我而言
1) I am using hapi JS
2) Using latest serialport package version - 6.2.2
3) Using Essae weighing machine connected to the port '/dev/ttyUSB0'
下面的代码运行良好,一旦物品重量稳定(不变)就会给出正确的结果。
"use strict";
const serialport = require('serialport');
const Readline = require('@serialport/parser-readline')
const getweight = {
auth:false,
handler: function(req, res)
{
const port = new serialport('/dev/ttyUSB0')
const parser = port.pipe(new Readline({ delimiter: '\r\n' }))
parser.on('data', function(w)
{
port.close();
return res({
weight: w.replace(/[^\d\.]*/g, '').trim()
});
});
}
};
exports.routes = [
{
method: 'get',
path: '/getweight',
config: getweight,
},
];