UNPKG

s7-server

Version:
192 lines 5.52 kB
/** * S7 Protocol Data Unit (PDU) Implementation * Handles S7 protocol message structures and parsing */ import { Buffer } from 'buffer'; import { S7Area, S7WordLength } from '../types/s7-types'; export declare const S7_PROTOCOL_ID = 50; export declare const S7_PDU_TYPE_REQUEST = 1; export declare const S7_PDU_TYPE_RESPONSE = 3; export declare const S7_PDU_TYPE_USERDATA = 7; export declare const S7_FUNC_READ = 4; export declare const S7_FUNC_WRITE = 5; export declare const S7_FUNC_NEGOTIATE = 240; export declare const S7_FUNC_CONTROL = 40; export declare const S7_FUNC_UPLOAD = 29; export declare const S7_FUNC_DOWNLOAD = 30; export declare const S7_FUNC_GET_CLOCK = 1; export declare const S7_FUNC_SET_CLOCK = 2; export declare const S7_ERROR_NO_ERROR = 0; export declare const S7_ERROR_RESOURCE_NOT_AVAILABLE = 10; export declare const S7_ERROR_INVALID_PARAMETER = 11; export declare const S7_ERROR_ADDRESS_OUT_OF_RANGE = 5; export declare const S7_ERROR_DATA_SIZE_MISMATCH = 6; export declare const TS_RES_BIT = 3; export declare const TS_RES_BYTE = 4; export declare const TS_RES_INT = 5; export declare const TS_RES_REAL = 7; export declare const TS_RES_OCTET = 9; export interface S7ReqHeader { P: number; PDUType: number; AB_EX: number; Sequence: number; ParLen: number; DataLen: number; } export interface S7ResHeader { P: number; PDUType: number; AB_EX: number; Sequence: number; ParLen: number; DataLen: number; Error: number; } export interface S7ReadRequest { FunRead: number; ItemCount: number; Items: S7ReadItem[]; } export interface S7ReadItem { TransportSize: number; Length: number; DBNumber: number; Area: number; Addr: Buffer; } export interface S7ReadResponse { FunRead: number; ItemCount: number; Items: S7ReadResponseItem[]; } export interface S7ReadResponseItem { ReturnCode: number; TransportSize: number; DataLength: number; Data: Buffer; } export interface S7WriteRequest { FunWrite: number; ItemCount: number; Items: S7WriteItem[]; } export interface S7WriteItem { TransportSize: number; Length: number; DBNumber: number; Area: number; Addr: Buffer; Data: Buffer; } export interface S7WriteResponse { FunWrite: number; ItemCount: number; Items: number[]; } export interface S7NegotiateRequest { FunNegotiate: number; Unknown: number; ParallelJobs_1: number; ParallelJobs_2: number; PDULength: number; } export interface S7NegotiateResponse { FunNegotiate: number; Unknown: number; ParallelJobs_1: number; ParallelJobs_2: number; PDULength: number; } export interface S7ControlRequest { FunControl: number; Unknown: number; ControlCode: number; } export interface S7ControlResponse { FunControl: number; Unknown: number; } export interface S7ClockRequest { FunClock: number; Unknown: number; Data?: Buffer; } export interface S7ClockResponse { FunClock: number; Unknown: number; Data: Buffer; } export declare class S7PDUParser { /** * Parse S7 request header */ static parseRequestHeader(data: Buffer): S7ReqHeader | null; /** * Parse S7 response header */ static parseResponseHeader(data: Buffer): S7ResHeader | null; /** * Parse S7 read request */ static parseReadRequest(data: Buffer): S7ReadRequest | null; /** * Parse S7 write request */ static parseWriteRequest(data: Buffer): S7WriteRequest | null; /** * Parse S7 negotiate request * Supports both 6-byte (nodes7 client) and 8-byte (standard SNAP7) formats */ static parseNegotiateRequest(data: Buffer): S7NegotiateRequest | null; /** * Parse S7 control request */ static parseControlRequest(data: Buffer): S7ControlRequest | null; /** * Create S7 read response */ static createReadResponse(sequence: number, items: S7ReadResponseItem[]): Buffer; /** * Create S7 write response */ static createWriteResponse(sequence: number, returnCodes: number[]): Buffer; /** * Create S7 negotiate response * Creates response in standard SNAP7 format (8 bytes) to match C++ implementation */ static createNegotiateResponse(sequence: number, pduLength: number): Buffer; /** * Create S7 control response */ static createControlResponse(sequence: number, controlCode: number): Buffer; /** * Create S7 clock response */ static createClockResponse(sequence: number, clockData: Buffer): Buffer; /** * Get response transport size and data length from request transport size * This matches the C++ SNAP7 implementation exactly */ static getResponseTransportSizeAndLength(requestTransportSize: number, dataSize: number): { transportSize: number; dataLength: number; }; /** * Get transport size code from word length (legacy function) */ static getTransportSizeCode(wordLen: S7WordLength): number; /** * Get byte count from word length */ static getByteCountFromWordLen(wordLen: S7WordLength): number; /** * Validate S7 address */ static validateAddress(area: S7Area, dbNumber: number, start: number, size: number): boolean; /** * Parse address from 3-byte buffer (matches C++ SNAP7 implementation) */ static parseAddress(addr: Buffer): number; } //# sourceMappingURL=s7-pdu.d.ts.map