UNPKG

njs-modbus

Version:

A pure JavaScript implemetation of Modbus for NodeJS.

74 lines (73 loc) 3.03 kB
import type { AbstractApplicationLayer } from '../layers/application'; import type { AbstractPhysicalLayer } from '../layers/physical'; import type { FConvertPromise, ServerId } from '../types'; import EventEmitter from 'node:events'; export interface ModbusSlaveModel { unit?: number; /** * Intercept read and write behavior. * * If provide the return value, use this value as data of `PDU` to respond. * Otherwise keep the default read and write behavior. */ interceptor?: FConvertPromise<(fc: number, data: number[]) => number[] | undefined>; readDiscreteInputs?: FConvertPromise<(address: number, length: number) => boolean[]>; readCoils?: FConvertPromise<(address: number, length: number) => boolean[]>; writeSingleCoil?: FConvertPromise<(address: number, value: boolean) => void>; /** * If omitted, defaults to loop and call `writeSingleCoil`. */ writeMultipleCoils?: FConvertPromise<(address: number, value: boolean[]) => void>; readInputRegisters?: FConvertPromise<(address: number, length: number) => number[]>; readHoldingRegisters?: FConvertPromise<(address: number, length: number) => number[]>; writeSingleRegister?: FConvertPromise<(address: number, value: number) => void>; /** * If omitted, defaults to loop and call `writeSingleRegister`. */ writeMultipleRegisters?: FConvertPromise<(address: number, value: number[]) => void>; /** * If omitted, defaults to call `readHoldingRegisters` and `writeSingleRegister`. */ maskWriteRegister?: FConvertPromise<(address: number, andMask: number, orMask: number) => void>; reportServerId?: FConvertPromise<() => ServerId>; readDeviceIdentification?: FConvertPromise<() => { [index: number]: string; }>; getAddressRange?: () => { discreteInputs?: [number, number] | [number, number][]; coils?: [number, number] | [number, number][]; inputRegisters?: [number, number] | [number, number][]; holdingRegisters?: [number, number] | [number, number][]; }; } interface ModbusSlaveEvents { error: [error: Error]; close: []; } export declare class ModbusSlave<A extends AbstractApplicationLayer, P extends AbstractPhysicalLayer> extends EventEmitter<ModbusSlaveEvents> { private applicationLayer; private physicalLayer; models: Map<number, ModbusSlaveModel>; get isOpen(): boolean; get destroyed(): boolean; constructor(applicationLayer: A, physicalLayer: P); private handleFC1; private handleFC2; private handleFC3; private handleFC4; private handleFC5; private handleFC6; private handleFC15; private handleFC16; private handleFC17; private handleFC22; private handleFC23; private handleFC43_14; private responseError; add(model: ModbusSlaveModel): void; remove(unit: number): void; open(...args: Parameters<P['open']>): Promise<void>; close(): Promise<void>; destroy(): Promise<void>; } export {};