打开串行端口并等待 modbus 请求:实现良好?
open serial port and wait for modbus request: good implementation?
我是 nodejs 的新手,对以下内容有点困惑:我有一个模块(下面的 modbuslistener)打开一个串行端口并等待 modbus 数据(基本上是从某个从属地址开始的几个字节) .当数据正确(crc 匹配)时,进程(主)应该成功结束并且这有效。
不完全确定:return p.then(v => {})
但似乎有效
现在我想做的是在没有数据(超时确实停止进程)或不正确的数据时抛出异常。我似乎无法抛出主程序异常? (添加拒绝意味着我需要抓住它,然后呢?)
非常感谢任何帮助!
(如果下面的代码可以更好...拜托!)
谢谢
坦率
modbuslistener:
const serial = require('serialport')
const interbytetimeoutparser = require('@serialport/parser-inter-byte-timeout')
const crc = require('crc')
module.exports = async function(device) {
const port = await new serial(device)
let p = new Promise((resolve, reject) => {
setTimeout(function() {
console.log('time is up!')
resolve()
}, 30000)
const parser = port.pipe(new interbytetimeoutparser({
interval: 30
}))
parser.on('data', function(data) {
// message for us?
if (data[0] === config.mb.serverid) {
// correct message?
if (crc.crc16modbus(data) === 0) {
console.log('function: ' + data[1])
console.log('address: ' + (data[2] * 256 + data[3]))
console.log('value: ' + (data[4] * 256 + data[5]))
port.close()
resolve()
} else {
console.log('got corrupted data')
}
}
})
})
return p.then(v => {})
}
主要内容:
const modbuslistener = require('./edge/modbuslistener')
(async function() {
await modbuslistener('/dev/tty.usbserial-AD0JM65Z')
log('done')
process.exit(0)
})()
使用 catch-closure/function 设置您的 Promise
对象,然后异常 throw
n 将由该 closure/function.
捕获和处理
话虽如此,但不使用拒绝闭包来捕获错误状态?
我是 nodejs 的新手,对以下内容有点困惑:我有一个模块(下面的 modbuslistener)打开一个串行端口并等待 modbus 数据(基本上是从某个从属地址开始的几个字节) .当数据正确(crc 匹配)时,进程(主)应该成功结束并且这有效。
不完全确定:return p.then(v => {}) 但似乎有效
现在我想做的是在没有数据(超时确实停止进程)或不正确的数据时抛出异常。我似乎无法抛出主程序异常? (添加拒绝意味着我需要抓住它,然后呢?)
非常感谢任何帮助!
(如果下面的代码可以更好...拜托!)
谢谢 坦率
modbuslistener:
const serial = require('serialport')
const interbytetimeoutparser = require('@serialport/parser-inter-byte-timeout')
const crc = require('crc')
module.exports = async function(device) {
const port = await new serial(device)
let p = new Promise((resolve, reject) => {
setTimeout(function() {
console.log('time is up!')
resolve()
}, 30000)
const parser = port.pipe(new interbytetimeoutparser({
interval: 30
}))
parser.on('data', function(data) {
// message for us?
if (data[0] === config.mb.serverid) {
// correct message?
if (crc.crc16modbus(data) === 0) {
console.log('function: ' + data[1])
console.log('address: ' + (data[2] * 256 + data[3]))
console.log('value: ' + (data[4] * 256 + data[5]))
port.close()
resolve()
} else {
console.log('got corrupted data')
}
}
})
})
return p.then(v => {})
}
主要内容:
const modbuslistener = require('./edge/modbuslistener')
(async function() {
await modbuslistener('/dev/tty.usbserial-AD0JM65Z')
log('done')
process.exit(0)
})()
使用 catch-closure/function 设置您的 Promise
对象,然后异常 throw
n 将由该 closure/function.
话虽如此,但不使用拒绝闭包来捕获错误状态?