njs-modbus
Version:
A pure JavaScript implemetation of Modbus for NodeJS.
74 lines (73 loc) • 3.03 kB
TypeScript
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 {};