import { CRCOrder, F32Encode, F64Encode, I16Encode, I32Encode, I64Encode, ModbusDataType } from './constant';
/** 线圈值 */
type CoilValue = 0 | 1;
/** 编解码参数 */
interface EncodeOptions {
    /** 16位整型编码（有符号+无符号） */
    i16?: I16Encode;
    /** 32位整型编码（有符号+无符号） */
    i32?: I32Encode;
    /** 32位浮点型编码（FLOAT） */
    f32?: F32Encode;
    /** 64位整型编码（有符号+无符号） */
    i64?: I64Encode;
    /** 64位浮点型编码（Double） */
    f64?: F64Encode;
}
/** 初始化参数 */
interface Options extends EncodeOptions {
    /** 从机地址，可填写`0-255`，标准规定合法的地址是`0–247` */
    slaveId: number;
    /**
     * CRC 顺序
     * @default CRCOrder.LH 小端模式
     */
    crcOrder?: CRCOrder;
}
/** 生成指令额外参数 */
interface GetCMDOptions extends StaticGetCMDOptions {
    /** 从机地址，可填写`0-255`，标准规定合法的地址是`0–247` */
    slaveId?: number;
}
/** 使用静态方法生成指令额外参数 */
interface StaticGetCMDOptions {
    /**
     * CRC 顺序
     * @default CRCOrder.LH 小端模式
     */
    crcOrder?: CRCOrder;
    /**
     * 指令字符是否小写
     * @description 传入`true`，返回示例：`010100010001ac0a`；
     * @description 传入`false`或不传，返回示例：`010100010001AC0A`
     * @default false
     */
    lowerCase?: boolean;
    /**
     * 分隔符
     * @description 不传返回示例：`010100010001AC0A`；
     * @description 传入`' '`空格返回示例：`01 01 00 01 00 01 AC 0A`；
     * @description 传入`'-'`返回示例：`01-01-00-01-00-01-AC-0A`；
     */
    separator?: string;
}
/** 返回值解析额外参数 */
interface ResolveResOptions extends EncodeOptions {
    /**
     * CRC 顺序
     * @default CRCOrder.LH 小端模式
     */
    crcOrder?: CRCOrder;
}
export declare class ModbusRTU {
    /** 从机地址 */
    private slaveId;
    /** CRC 顺序 */
    private crcOrder;
    /** 16位整型编码（有符号+无符号） */
    private i16Encode;
    /** 32位整型编码（有符号+无符号） */
    private i32Encode;
    /** 32位浮点型编码（FLOAT） */
    private f32Encode;
    /** 64位整型编码（有符号+无符号） */
    private i64Encode;
    /** 64位浮点型编码（Double） */
    private f64Encode;
    /**
     * 实例化ModbusRTU类
     * @param params 初始化参数
     */
    constructor(params: Options);
    /**
     * 读线圈寄存器——01功能码
     * @param startAddress 起始地址
     * @param count 线圈数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readCoilCMD(startAddress: number, count: number, options?: GetCMDOptions): string;
    /**
     * 读离散输入寄存器——02功能码
     * @param startAddress 起始地址
     * @param count 离散输入寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readDiscreteInputCMD(startAddress: number, count: number, options?: GetCMDOptions): string;
    /**
     * 读保持寄存器——03功能码
     * @param startAddress 起始地址
     * @param count 保持寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readHoldCMD(startAddress: number, count: number, options?: GetCMDOptions): string;
    /**
     * 根据数据类型读保持寄存器——03功能码
     * @param startAddress 起始地址
     * @param dataType 想要读取的数据类型
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readHoldCMDByDataType(startAddress: number, dataType: ModbusDataType, options?: GetCMDOptions): string;
    /**
     * 根据数据类型列表读保持寄存器——03功能码
     * @param startAddress 起始地址
     * @param dataTypeList 想要读取的数据类型列表（按顺序排列哦）
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readHoldCMDByDataTypeList(startAddress: number, dataTypeList: ModbusDataType[], options?: GetCMDOptions): string;
    /**
     * 读输入寄存器——04功能码
     * @param startAddress 起始地址
     * @param count 输入寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readInputCMD(startAddress: number, count: number, options?: GetCMDOptions): string;
    /**
     * 根据数据类型读输入寄存器——04功能码
     * @param startAddress 起始地址
     * @param dataType 想要读取的数据类型
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readInputCMDByDataType(startAddress: number, dataType: ModbusDataType, options?: GetCMDOptions): string;
    /**
     * 根据数据类型列表读输入寄存器——04功能码
     * @param startAddress 起始地址
     * @param dataTypeList 想要读取的数据类型列表（按顺序排列哦）
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    readInputCMDByDataTypeList(startAddress: number, dataTypeList: ModbusDataType[], options?: GetCMDOptions): string;
    /**
     * 读取指令统一实现
     * @param codeHex 功能码
     * @param startAddress 起始地址
     * @param count 寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    private getReadCMD;
    /**
     * 读线圈寄存器——01功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param count 线圈数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readCoilCMD(slaveId: number, startAddress: number, count: number, options?: StaticGetCMDOptions): string;
    /**
     * 读离散输入寄存器——02功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param count 离散输入寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readDiscreteInputCMD(slaveId: number, startAddress: number, count: number, options?: StaticGetCMDOptions): string;
    /**
     * 读保持寄存器——03功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param count 保持寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readHoldCMD(slaveId: number, startAddress: number, count: number, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型读保持寄存器——03功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param dataType 想要读取的数据类型
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readHoldCMDByDataType(slaveId: number, startAddress: number, dataType: ModbusDataType, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型列表读保持寄存器——03功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param dataTypeList 想要读取的数据类型列表（按顺序排列哦）
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readHoldCMDByDataTypeList(slaveId: number, startAddress: number, dataTypeList: ModbusDataType[], options?: StaticGetCMDOptions): string;
    /**
     * 读输入寄存器——04功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param count 输入寄存器数量
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readInputCMD(slaveId: number, startAddress: number, count: number, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型读输入寄存器——04功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param dataType 想要读取的数据类型
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readInputCMDByDataType(slaveId: number, startAddress: number, dataType: ModbusDataType, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型列表读输入寄存器——04功能码
     * @param slaveId 从机地址
     * @param startAddress 起始地址
     * @param dataTypeList 想要读取的数据类型列表（按顺序排列哦）
     * @param options 生成指令额外参数
     * @returns 读取命令——十六进制字符串
     */
    static readInputCMDByDataTypeList(slaveId: number, startAddress: number, dataTypeList: ModbusDataType[], options?: StaticGetCMDOptions): string;
    /**
     * 解析01功能码返回内容
     * @description 未考虑从机地址校验
     * @param resHex 发送读取线圈指令（01功能码）后modbus从机返回内容，十六进制字符串
     * @param options 解析额外参数
     * @returns 解析结果
     */
    resolveCoilRes(resHex: string, options?: ResolveResOptions): CoilValue[];
    /**
     * 解析02功能码返回内容
     * @description 未考虑从机地址校验
     * @param resHex 发送读取输入寄存器指令（02功能码）后modbus从机返回内容，十六进制字符串
     * @param options 解析额外参数
     * @returns 解析结果
     */
    resolveDiscreteInputRes(resHex: string, options?: ResolveResOptions): CoilValue[];
    /**
     * 解析03功能码返回内容
     * @description 未考虑从机地址校验
     * @param resHex 发送读取保持寄存器指令（03功能码）后modbus从机返回内容，十六进制字符串
     * @param options 解析额外参数
     * @returns 寄存器原始值，十六进制字符串
     */
    resolveHoldResRaw(resHex: string, options?: ResolveResOptions): string;
    resolveHoldResByDataType(resHex: string, dataType: ModbusDataType, options?: ResolveResOptions): string | number;
    /**
     * Modbus读取返回内容合法性校验
     * @param codeHex 功能码十六进制字符串
     * @param resHex 读取返回内容
     * @param options 额外参数
     */
    private resCheck;
    /**
     * 写单个线圈——05功能码
     * @param startAddress 线圈寄存器地址
     * @param value 线圈值
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeCoilCMD(startAddress: number, value: CoilValue, options?: GetCMDOptions): string;
    /**
     * 写入单个线圈寄存器——05功能码
     * @param slaveId 从机地址
     * @param startAddress 线圈寄存器地址
     * @param value 线圈值
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeCoilCMD(slaveId: number, startAddress: number, value: CoilValue, options?: StaticGetCMDOptions): string;
    /**
     * 写多个线圈——0F功能码
     * @param startAddress 线圈寄存器起始地址
     * @param valueList 线圈值列表（按顺序哦）
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeMultiCoilCMD(startAddress: number, valueList: CoilValue[], options?: GetCMDOptions): string;
    /**
     * 写多个线圈——0F功能码
     * @param slaveId 从机地址
     * @param startAddress 线圈寄存器起始地址
     * @param valueList 线圈值列表（按顺序哦）
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeMultiCoilCMD(slaveId: number, startAddress: number, valueList: CoilValue[], options?: StaticGetCMDOptions): string;
    /**
     * 写单个保持寄存器——06功能码
     * @param startAddress 保持寄存器的地址
     * @param valueHex 保持寄存器的值，十六进制字符串格式
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeHoldCMD(startAddress: number, valueHex: string, options?: GetCMDOptions): string;
    /**
     * 写单个保持寄存器——06功能码
     * @param slaveId 从机地址
     * @param startAddress 保持寄存器的地址
     * @param valueHex 保持寄存器的值，十六进制字符串格式
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeHoldCMD(slaveId: number, startAddress: number, valueHex: string, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型写单个保持寄存器——06功能码
     * @param startAddress 保持寄存器的地址
     * @param data 数据值
     * @param dataType 数据类型
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeHoldByDataTypeCMD(startAddress: number, data: number, dataType: ModbusDataType, options?: GetCMDOptions & EncodeOptions): string;
    /**
     * 根据数据类型写单个保持寄存器——06功能码
     * @param slaveId 从机地址
     * @param startAddress 保持寄存器的地址
     * @param data 数据值
     * @param dataType 数据类型
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeHoldByDataTypeCMD(slaveId: number, startAddress: number, data: number, dataType: ModbusDataType, options?: StaticGetCMDOptions & EncodeOptions): string;
    /**
     * 写多个保持寄存器——10功能码
     * @param startAddress 保持寄存器起始地址
     * @param valueHex 保持寄存器的值，十六进制字符串格式
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeMultiHoldCMD(startAddress: number, valueHex: string, options?: GetCMDOptions): string;
    /**
     * 写多个保持寄存器——10功能码
     * @param slaveId 从机地址
     * @param startAddress 保持寄存器起始地址
     * @param valueHex 保持寄存器的值，十六进制字符串格式
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeMultiHoldCMD(slaveId: number, startAddress: number, valueHex: string, options?: StaticGetCMDOptions): string;
    /**
     * 根据数据类型写多个保持寄存器——10功能码
     * @param startAddress 保持寄存器起始地址
     * @param data 数据值
     * @param dataType 数据类型
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeMultiHoldByDataTypeCMD(startAddress: number, data: number, dataType: ModbusDataType, options?: GetCMDOptions & EncodeOptions): string;
    /**
     * 根据数据类型写多个保持寄存器——10功能码
     * @param startAddress 保持寄存器起始地址
     * @param data 数据值
     * @param dataType 数据类型
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeMultiHoldByDataTypeCMD(slaveId: number, startAddress: number, data: number, dataType: ModbusDataType, options?: StaticGetCMDOptions & EncodeOptions): string;
    /**
     * 根据数据列表写多个保持寄存器——10功能码
     * @param startAddress 保持寄存器起始地址
     * @param dataList 要写入的数据和类型元组的列表
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    writeMultiHoldByDataTypeListCMD(startAddress: number, dataList: [number | string, ModbusDataType][], options?: GetCMDOptions & EncodeOptions): string;
    /**
     * 根据数据列表写多个保持寄存器——10功能码
     * @param startAddress 保持寄存器起始地址
     * @param dataList 要写入的数据和类型元组的列表
     * @param options 生成指令额外参数
     * @returns 写入命令——十六进制字符串
     */
    static writeMultiHoldByDataTypeListCMD(slaveId: number, startAddress: number, dataList: [number | string, ModbusDataType][], options?: StaticGetCMDOptions & EncodeOptions): string;
}
export {};
