UNPKG

@iot9x.com/ipc-utils

Version:

九星云、九星小程序、九星配置工具所共用的库方法

382 lines (381 loc) 16.8 kB
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 {};