之前我用node.js写过一个,用SerialPort连接串口,我这个是ModbusRtu协议的,你可以参考看看(我也不怎么弄,全靠ai )
[JavaScript] 纯文本查看 复制代码 /**
* 连接串口
*/
function connectionRs485Port(){
// 配置串口(RS485)
const rs485_port = new SerialPort({
path: global.configInit['rs485LED']['path'], //串口地址
baudRate: parseInt(global.configInit['rs485LED']['baudRate']), // 设置波特率
parity: global.configInit['rs485LED']['parity'], // 设置校验方式
stopBits: parseInt(global.configInit['rs485LED']['stopBits']), // 设置停止位
dataBits: parseInt(global.configInit['rs485LED']['dataBits']), // 设置数据位
autoOpen: global.configInit['rs485LED']['autoOpen'], // 禁止自动打开串口,需要手动打开
})
// 打开串口连接
rs485_port.open(err => {
if (err) {
console.log(err)
return
}
rs485Port = rs485_port
})
rs485_port.on('error', err=> {
rs485Port = null
})
}
[JavaScript] 纯文本查看 复制代码 /**
* 发送完整的数据包(led显示数字)
* @param value
*/
function ModbusRtuWriteLedValue(value){
if(!rs485Port) return
let fullPacket = []
// 01 10 00 00 00 02 04
// 01 机器地址
// 10 功能码
// 00 00 起始寄存器地址
// 00 02 寄存器数量
// 04 字节数
// ···后拼接 四个字节的数据+两个字节的CRC校验码
fullPacket = ['0x01', '0x10', '0x00', '0x00', '0x00', '0x02', '0x04']
fullPacket = fullPacket.concat(IntToInt16(value))
const crcArray = calculateCRC(fullPacket)
fullPacket = fullPacket.concat(crcArray)
rs485Port.write(Buffer.from(fullPacket), res=>{
if(res){
console.log(res)
}
})
}
补充内容 (2025-5-16 17:47):
前提在串口助手上调试没问题 |