max485-raspberry-nodejs
Version:
Node.js library for Modbus RTU communication over RS485 using MAX485 transceivers on Raspberry Pi
82 lines (69 loc) • 2.69 kB
JavaScript
const { NewModbusDevice, ReadCoils, ReadDiscreteInputs, ReadHoldingRegisters, ReadInputRegisters, WriteCoil, WriteRegister, WriteMultipleCoils, WriteMultipleRegisters, Close } = require('./build/Release/modbus');
class ModbusRTU {
constructor(port, baudRate, dePin, rePin) {
this.device = NewModbusDevice(port, baudRate, dePin, rePin);
if (!this.device) {
throw new Error('Failed to create Modbus device');
}
}
async readCoils(slaveID, startAddr, count) {
const result = await ReadCoils(this.device, slaveID, startAddr, count);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return JSON.parse(result);
}
async readDiscreteInputs(slaveID, startAddr, count) {
const result = await ReadDiscreteInputs(this.device, slaveID, startAddr, count);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return JSON.parse(result);
}
async readHoldingRegisters(slaveID, startAddr, count) {
const result = await ReadHoldingRegisters(this.device, slaveID, startAddr, count);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return JSON.parse(result);
}
async readInputRegisters(slaveID, startAddr, count) {
const result = await ReadInputRegisters(this.device, slaveID, startAddr, count);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return JSON.parse(result);
}
async writeCoil(slaveID, coilAddr, value) {
const result = await WriteCoil(this.device, slaveID, coilAddr, value);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return result;
}
async writeRegister(slaveID, regAddr, value) {
const result = await WriteRegister(this.device, slaveID, regAddr, value);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return result;
}
async writeMultipleCoils(slaveID, startAddr, values) {
const result = await WriteMultipleCoils(this.device, slaveID, startAddr, values);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return result;
}
async writeMultipleRegisters(slaveID, startAddr, values) {
const result = await WriteMultipleRegisters(this.device, slaveID, startAddr, values);
if (result.startsWith('Error:')) {
throw new Error(result);
}
return result;
}
close() {
Close(this.device);
}
}
module.exports = ModbusRTU;