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.CPUState(*values)[source]

S7 CPU states.

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()
__enter__() Server[source]

Context manager entry.

__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.

clear_events() int[source]

Clear event queue.

Returns:

0 on success

create() None[source]

Create the server (no-op for compatibility).

destroy() None[source]

Destroy the server.

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

stop() int[source]

Stop the S7 server.

Returns:

0 on success

unlock_area(area: SrvArea, index: int) int[source]

Unlock a memory area.

Parameters:
  • area – Memory area type

  • index – Area index

Returns:

0 on success

unregister_area(area: SrvArea, index: int) int[source]

Unregister a memory area.

Parameters:
  • area – Memory area type

  • index – Area index

Returns:

0 on success

class snap7.server.ServerISOConnection(client_socket: socket)[source]

ISO connection wrapper for server-side communication.

__init__(client_socket: socket)[source]

Initialize server ISO connection.

accept_connection() bool[source]

Accept ISO connection from client.

receive_data() bytes[source]

Receive data from client.

send_data(data: bytes) None[source]

Send data to client.

class snap7.server.ServerState(*values)[source]

S7 server states.

snap7.server.mainloop(tcp_port: int = 1102, init_standard_values: bool = False) None[source]

Initialize a pure Python S7 server with default values.

Parameters:
  • tcp_port – Port that the server will listen on

  • init_standard_values – If True, initialize some default values