Server
The pure Python server implementation provides a simulated S7 server for testing.
To start a server programmatically:
from snap7.server import Server, mainloop
# Quick start with mainloop helper
mainloop(tcp_port=1102)
# Or create and configure manually
server = Server()
server.start(port=1102)
Pure Python S7 server implementation.
Provides a complete S7 server emulator without dependencies on the Snap7 C library.
- class snap7.server.Server(log: bool = True, **kwargs: object)[source]
Pure Python S7 server implementation.
Emulates a Siemens S7 PLC for testing and development purposes.
Examples
>>> import snap7 >>> server = snap7.Server() >>> server.start() >>> # ... register areas and handle clients >>> server.stop()
- __exit__(exc_type: Type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None) None[source]
Context manager exit.
- __init__(log: bool = True, **kwargs: object) None[source]
Initialize S7 server.
- Parameters:
log – Enable event logging
**kwargs – Ignored. Kept for backwards compatibility.
- event_text(event: SrvEvent) str[source]
Get event text description.
- Parameters:
event – Server event
- Returns:
Event description string
- get_mask(mask_kind: int) int[source]
Get event mask.
- Parameters:
mask_kind – Mask type (0=Event, 1=Log)
- Returns:
Event mask value
- get_param(param: Parameter) int[source]
Get server parameter.
- Parameters:
param – Parameter type
- Returns:
Parameter value
- Raises:
RuntimeError – If parameter is not valid for server
- get_status() Tuple[str, str, int][source]
Get server status.
- Returns:
Tuple of (server_status, cpu_status, client_count)
- lock_area(area: SrvArea, index: int) int[source]
Lock a memory area.
- Parameters:
area – Memory area type
index – Area index
- Returns:
0 on success
- Raises:
RuntimeError – If area is not registered
- pick_event() SrvEvent | bool[source]
Pick an event from the queue.
- Returns:
Server event if available, False if no events
- register_area(area: SrvArea, index: int, userdata: bytearray | Array) int[source]
Register a memory area with the server.
- Parameters:
area – Memory area type
index – Area index/number
userdata – Initial data for the area (bytearray or ctypes array)
- Returns:
0 on success
- set_cpu_status(status: int) int[source]
Set CPU status.
- Parameters:
status – CPU status code (0=Unknown, 4=Stop, 8=Run)
- Returns:
0 on success
- Raises:
ValueError – If status is invalid
- set_events_callback(callback: Callable[[SrvEvent], Any]) int[source]
Set callback for server events.
- Parameters:
callback – Event callback function
- Returns:
0 on success
- set_mask(kind: int = 0, mask: int = 0) int[source]
Set event mask.
- Parameters:
kind – Mask type (0=Event, 1=Log)
mask – Mask value
- Returns:
0 on success
- set_param(param: Parameter, value: int) int[source]
Set server parameter.
- Parameters:
param – Parameter type
value – Parameter value
- Returns:
0 on success
- set_read_events_callback(callback: Callable[[SrvEvent], Any]) int[source]
Set callback for read events.
- Parameters:
callback – Read event callback function
- Returns:
0 on success
- set_rw_area_callback(callback: Callable[[Any], int]) int[source]
Set callback for read/write area operations.
This is a stub for API compatibility with the C library’s Srv_SetRWAreaCallback. In the native implementation, read/write operations are handled directly.
- Parameters:
callback – RW area callback function
- Returns:
0 on success
- start(tcp_port: int = 102) int[source]
Start the S7 server.
- Parameters:
tcp_port – TCP port to listen on
- Returns:
0 on success
- start_to(ip: str, tcp_port: int = 102) int[source]
Start server on a specific interface.
- Parameters:
ip – IP address to bind to
tcp_port – TCP port to listen on
- Returns:
0 on success