s7-server
Version:
TypeScript S7 PLC Server Simulator
163 lines • 4.33 kB
TypeScript
/**
* Enhanced S7 PLC Server
* Production-ready implementation with proper protocol handling
*/
import { EventEmitter } from 'events';
import { Buffer } from 'buffer';
import { S7Protocol } from '../protocol/s7-protocol';
import { MemoryManager } from '../memory/memory-manager';
import { S7Area, ServerStatus, CpuStatus, ServerParam, S7ServerEvent, RWAreaCallback } from '../types/s7-types';
export interface ServerConfig {
localPort: number;
workInterval: number;
pduRequest: number;
maxClients: number;
resourceless: boolean;
eventMask: number;
}
export declare class S7Server extends EventEmitter {
private protocol;
private memoryManager;
private config;
private cpuStatus;
private _serverStatus;
private _lastError;
private resourceless;
private rwCallback?;
private eventMask;
constructor(config?: Partial<ServerConfig>);
/**
* Setup protocol event handlers
*/
private setupProtocolHandlers;
/**
* Setup memory manager event handlers
*/
private setupMemoryHandlers;
/**
* Start the server
*/
start(): Promise<boolean>;
/**
* Start the server on specific address
*/
startTo(_address: string): Promise<boolean>;
/**
* Stop the server
*/
stop(): Promise<boolean>;
/**
* Set resourceless mode
*/
setResourceless(value: boolean): boolean;
/**
* Get server parameter
*/
getParam(paramNumber: ServerParam): number | false;
/**
* Set server parameter
*/
setParam(paramNumber: ServerParam, value: number): boolean;
/**
* Register memory area
*/
registerArea(areaCode: S7Area, index: number, buffer: Buffer): Promise<boolean>;
/**
* Unregister memory area
*/
unregisterArea(areaCode: S7Area, index: number): Promise<boolean>;
/**
* Get area content
*/
getArea(areaCode: S7Area, index: number): Promise<Buffer | null>;
/**
* Set area content
*/
setArea(areaCode: S7Area, index: number, buffer: Buffer): Promise<boolean>;
/**
* Lock area
*/
lockArea(areaCode: S7Area, index: number): Promise<boolean>;
/**
* Unlock area
*/
unlockArea(areaCode: S7Area, index: number): Promise<boolean>;
/**
* Get server status
*/
serverStatus(): ServerStatus;
/**
* Get clients count
*/
clientsCount(): number;
/**
* Get CPU status
*/
getCpuStatus(): CpuStatus;
/**
* Set CPU status
*/
setCpuStatus(status: CpuStatus): boolean;
/**
* Get last error
*/
lastError(): number;
/**
* Get event mask
*/
getEventsMask(): number;
/**
* Set event mask
*/
setEventsMask(mask: number): void;
/**
* Handle read request
*/
private handleReadRequest;
/**
* Handle write request
*/
private handleWriteRequest;
/**
* Emit event if mask allows
*/
private emitEvent;
/**
* Set read/write callback for resourceless mode
*/
setRWAreaCallback(callback: RWAreaCallback): void;
/**
* Get error code from string
*/
private getErrorCode;
/**
* Get error text
*/
static errorText(errorCode: number): string;
/**
* Get event text
*/
static eventText(event: S7ServerEvent): string;
/**
* Get server statistics
*/
getStatistics(): {
server: ReturnType<S7Protocol['getStatistics']>;
memory: ReturnType<MemoryManager['getStatistics']>;
};
/**
* Cleanup inactive connections
*/
cleanupInactiveConnections(timeoutMs?: number): void;
/**
* Read value from memory using S7 address format
* @param address S7 address string supporting full S7 addressing:
* - DB addresses: "DB1", "DB5,X0.1", "DB23,B1", "DB42,I3", "DB57,W4", "DB13,DI5", "DB19,DW6", "DB21,R7"
* - Bit addresses: "I1.0", "Q2.1", "M3.2", "X0.0"
* - Word addresses: "II10", "QI12", "MI14", "IW16", "QW18", "MW20", "MR38"
* - Byte addresses: "IB0", "QB1", "MB2", "XB2"
* @returns Promise resolving to the value or null if not found
*/
read(address: string): Promise<boolean | number | Buffer | null>;
}
//# sourceMappingURL=s7-server.d.ts.map