modbus-connect
Version:
Modbus RTU over Web Serial and Node.js SerialPort
57 lines (50 loc) • 1.76 kB
JavaScript
// test-node.js
const ModbusClient = require('./client.js');
const { createTransport } = require('./transport/factory.js');
const logger = require('./logger.js');
const PollingManager = require('./polling-manager.js');
const poll = new PollingManager()
const log = logger.createLogger('main');
async function main() {
const transport = await createTransport('node', {
port: 'COM4',
baudRate: 9600,
parity: 'none',
dataBits: 8,
stopBits: 1,
// writeTimeout: 500,
// readTimeout: 500
});
const client = new ModbusClient(transport, 1, {
timeout: 1000,
crcAlgorithm: 'crc16Modbus',
retryCount: 3, // Кол-во попыток повтора запроса
retryDelay: 300, // Задержка между повторами
});
await client.connect();
// Define a polling task
poll.addTask({
id: 'read-sensors', // Task name
resourceId: 'test', // Stream name
priority: 1, // Priority: method in queue (0...Infinity)
interval: 1000,
fn: [
async () => await client.readHoldingRegisters(0, 10)
],
onData: (data) => {
console.log(JSON.stringify(data))
},
onError: async (error, index, attempt) => {
console.log(error)
},
onStart: () => console.log('Polling measure data started'),
onStop: () => console.log('Polling measure data stopped'),
maxRetries: 3,
backoffDelay: 300,
taskTimeout: 1000
})
poll.startTask('read-sensors');
}
main().catch(err => {
console.error('Fatal error in main:', err);
});