Connection

The connection module implements the ISO on TCP transport layer (TPKT/COTP) used for S7 communication.

ISO on TCP connection management (RFC 1006).

Implements TPKT (Transport Service on top of TCP) and COTP (Connection Oriented Transport Protocol) layers for S7 communication.

classsnap7.connection.ISOTCPConnection(host:str, port:int=102, local_tsap:int=256, remote_tsap:int|bytes=258, tpdu_size:TPDUSize =TPDUSize.S_1024)[source]

ISO on TCP connection implementation.

Handles the transport layer for S7 communication including: - TCP socket management - TPKT framing (RFC 1006) - COTP connection setup and data transfer - PDU size negotiation

__enter__() ISOTCPConnection [source]

Context manager entry.

__exit__(exc_type:Type[BaseException]|None, exc_val:BaseException|None, exc_tb:TracebackType|None) None[source]

Context manager exit.

__init__(host:str, port:int=102, local_tsap:int=256, remote_tsap:int|bytes=258, tpdu_size:TPDUSize =TPDUSize.S_1024)[source]

Initialize ISO TCP connection.

Parameters:
  • host – Target PLC IP address

  • port – TCP port (default 102 for S7)

  • local_tsap – Local Transport Service Access Point

  • remote_tsap – Remote Transport Service Access Point (int for 2-byte TSAP, bytes for variable-length TSAP like b"SIMATIC-ROOT-HMI")

  • tpdu_size – TPDU size to request during COTP negotiation

check_connection() bool[source]

Check if the TCP connection is still alive.

Uses a non-blocking socket peek to detect broken connections.

connect(timeout:float=5.0) None[source]

Establish ISO on TCP connection.

Parameters:

timeout – Connection timeout in seconds

data_available(timeout:float=0.0) bool[source]

Check if data is available to read without blocking.

Uses select() to poll the socket for readable data.

Parameters:

timeout – How long to wait in seconds (0.0 = immediate poll).

Returns:

True if data is available on the socket.

disconnect() None[source]

Disconnect from S7 device.

receive_data() bytes[source]

Receive data from ISO connection.

Returns:

S7 PDU data

send_data(data:bytes) None[source]

Send data over ISO connection.

Parameters:

data – S7 PDU data to send

set_routing(subnet_id:int, dest_rack:int, dest_slot:int) None[source]

Configure S7 routing parameters for multi-subnet access.

When routing is enabled, the COTP Connection Request includes additional parameters that instruct the gateway PLC to forward the connection to a target PLC on another subnet.

Warning

This method is experimental and may change in future versions.

Parameters:
  • subnet_id – Subnet ID of the target network (2 bytes)

  • dest_rack – Rack number of the destination PLC

  • dest_slot – Slot number of the destination PLC

classsnap7.connection.TPDUSize(*values)[source]

TPDU sizes per ISO 8073 / RFC 905.

The value is the exponent: actual size = 2^value bytes.