Configuring SIMATIC IoT2040 Network Connection to S7-1200

David Krause8 min read
Industrial NetworkingSiemensTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

The SIMATIC IoT2040 (6ES7647-0AA00-1YA2) is a rugged Intel-based gateway that bridges shop-floor PLCs (such as the SIMATIC S7-1200) and cloud/IT services. Out of the box the device boots from the included SD card with a Siemens Industrial OS (Debian-based) image. The default IP address of the first Ethernet interface (X1P1) is 192.168.200.1, and the device is reachable on TCP/22 (SSH) once the engineering station sits in the same 192.168.200.0/24 subnet. This reference walks through first-time network configuration, SSH access with PuTTY, integration with a S7-1200 CPU, and verification.

Prerequisites

  • SIMATIC IoT2040 with SD card and a fresh Industrial OS image flashed from Siemens IoT2000 SD Card Example Image (Win32 Disk Imager or balenaEtcher).
  • Windows engineering station with PuTTY 0.74 or later (official PuTTY download).
  • One straight-through Cat5e/Cat6 Ethernet cable for the initial commissioning link.
  • SIMATIC S7-1200 (CPU 1211C/1212C/1214C/1215C/1217C) with a known IP address (default 192.168.0.1) and TIA Portal V15.1 or later for verification.
  • Static IPv4 addresses on the engineering PC for both commissioning (192.168.200.x) and plant (193.16.117.x) networks.
Critical: The IoT2040 ships with two independent Ethernet interfaces. X1P1 is the management/LAN port used for first setup; X2P1 is intended for the field network. The default IP 192.168.200.1 is bound to X1P1 only and must not be reused by your PC.

Hardware Identification

Before powering the device, identify the physical interfaces and LEDs on the IoT2040 front panel. This avoids cabling the wrong port and is the most common source of "PuTTY network error" reports.

Label Type Function Default State
X1P1 RJ45, 10/100 Mbit/s LAN / management IP 192.168.200.1, DHCP server disabled
X2P1 RJ45, 10/100 Mbit/s Field / WAN No IP (DHCP client)
P1 Power 24 V DC Supply, screw terminal Off until wired
LED1 (green) Status Power / OS heartbeat Solid green when booted
LED2 (orange) Link Ethernet activity Flashing = traffic on X1P1/X2P1

A solid green LED1 combined with a flashing orange LED2 on the X1P1 port confirms that the OS has fully booted and the link is up. If only the green LED is lit but the orange LED does not blink when you ping, the cable or switch port is faulty.

Step-by-Step: Initial Network Setup

  1. Wire the commissioning link. Connect the engineering PC directly to X1P1 on the IoT2040 with a straight-through Ethernet cable. Do not connect X2P1 yet; this prevents the device from acquiring a DHCP lease that would conflict with the X1P1 default IP.
  2. Configure the PC NIC. Open Control Panel → Network and Sharing Center → Ethernet → Properties → IPv4 and set:
    • IP address: 192.168.200.99 (any value except 1)
    • Subnet mask: 255.255.255.0
    • Default gateway: leave empty
  3. Verify link with ping. From an elevated command prompt run ping 192.168.200.1 -t. You should see replies with times below 1 ms. If "Destination host unreachable" is returned, double-check the X1P1 LED activity, try a different cable, and confirm the PC subnet is /24.
  4. Open an SSH session in PuTTY. Launch PuTTY, set Host Name to 192.168.200.1, Port 22, Connection type SSH, then click Open.
  5. Authenticate. Default credentials on the stock image are root / root. You will be prompted to change the root password on first login. The shell prompt changes to root@iot2000:~# when authenticated.
  6. Run the setup wizard. Type iot2000setup and press Enter. The text-mode menu (newt/whiptail based) opens on the serial console or SSH TTY.
  7. Re-address X1P1. Navigate to Network → Interface eth0 (eth0 = X1P1 on the IoT2040) and replace the default with the plant address supplied by your IT/OT administrator, for example 193.16.117.50 / 255.255.255.0. Apply and exit.
  8. Save and reboot. Confirm with Apply → Save → Reboot. The IoT2040 will come back up on the new address.
  9. Reconfigure the PC NIC. Return the engineering PC to its normal address on the plant network (for example 193.16.117.101 / 24). Verify connectivity with ping 193.16.117.50.
  10. Reconnect PuTTY. Start a fresh PuTTY session against the new IP to confirm the new address is persistent across reboot.

Troubleshooting the "Network Error" in PuTTY

The most common PuTTY failure on a stock IoT2040 is "Network error: Connection timed out" or "Network error: Connection refused". Work through the matrix below before assuming a hardware fault.

Symptom Most Likely Cause Diagnostic Resolution
PuTTY "connection timed out" PC and IoT2040 not in same subnet ipconfig /all on PC; ifconfig on IoT2040 Set PC NIC to 192.168.200.99/24
PuTTY "connection refused" SSH service not started (rare on stock image) Login via serial console (115200 8N1) and run systemctl status sshd systemctl enable --now sshd
PuTTY prompts for host key then disconnects Stale key after re-flash PuTTY event log shows "host key does not match" Remove cached key in regedit path HKCU\Software\SimonTatham\PuTTY\SshHostKeys
ping works, SSH hangs after login MTU mismatch or duplex issue ethtool eth0 on IoT2040 Force 100 Mbit/s full duplex on PC NIC or unmanaged switch
PC IP 193.16.117.101 kept, IoT2040 not reachable Cable still in X2P1 or wrong port Swap cable to X1P1; verify LED Use the labeled X1P1 port

Connecting the IoT2040 to a S7-1200

Once the IoT2040 is reachable on the plant network, point it at the S7-1200. The two devices are typically connected through the X2P1 interface of the IoT2040 into the PROFINET network that already carries the S7-1200 CPU.

Cabling topology

Engineering PC193.16.117.101 SIMATIC IoT2040X1P1: 193.16.117.50X2P1: 193.16.117.51 S7-1200193.16.117.20 SSH/REST S7 / Modbus TCP

Software stack on the IoT2040

  • Node-RED with the node-red-contrib-s7 palette — preferred for OPC UA and MQTT bridging.
  • Python snap7 (python3 -m pip install python-snap7) for cyclic S7 communication in scripts.
  • libnodave as a lightweight C alternative for embedded use cases.

Node-RED S7 read example

// Flow snippet: read DB1.DBD0 (REAL) from S7-1200
[
  {
    "id": "f1",
    "type": "s7 in",
    "z": "abc",
    "endpoint": "193.16.117.20",
    "mode": "single",
    "variable": "Temperature",
    "transport": "iso-on-tcp",
    "rack": 0,
    "slot": 1,
    "address": "DB1,REAL0",
    "poll": 1000
  }
]

snap7 Python read example

import snap7
from snap7.util import get_real

client = snap7.client.Client()
client.connect('193.16.117.20', 0, 1, 102)  # IP, rack, slot, port
client.db_read(1, 0, 4)                       # DB1, byte 0, length 4
value = get_real(client.db_read(1, 0, 4), 0)
print(f'Process value: {value:.2f}')
client.disconnect()
Security: Enable PG/PC access and PUT/GET on the S7-1200 CPU under Properties → Protection → Permit access with PUT/GET communication from remote partner. Without this, snap7 and node-red-contrib-s7 will return 0x8104 connection errors.

Verification

  1. From the IoT2040 shell: ping -c 4 193.16.117.20 must show 0% packet loss.
  2. From the IoT2040 shell: nc -vz 193.16.117.20 102 confirms the S7-1200 ISO-on-TCP port is open.
  3. Run the Python snap7 snippet above; the value must print within one second.
  4. In TIA Portal open Online & Diagnostics → Connection diagnostics on the S7-1200; a connection from the IoT2040 MAC must appear under "Active connections".
  5. On the IoT2040 run iot2000setup → Network → Show status to confirm the X1P1 / X2P1 addresses persisted across reboot.

Fault-Code Reference

Code Source Meaning Fix
0x8104 snap7 / node-red PUT/GET disabled on CPU Enable in TIA Portal protection settings
0x8101 snap7 Wrong rack/slot S7-1200 always rack 0 / slot 1
0x0006 snap7 DB does not exist Recompile S7-1200 project and download
ECONNREFUSED PuTTY / nc SSH service stopped systemctl restart sshd
ENETUNREACH ping No route between subnets Verify VLAN/routing on managed switch
SF (red LED) S7-1200 Hardware or firmware fault Read diagnostic buffer in TIA Portal

Configuration Persistence

Addresses set through iot2000setup are written to /etc/network/interfaces.d/eth0 and to the systemd network state. To verify the file content directly:

cat /etc/network/interfaces.d/eth0
# The static address should look like:
auto eth0
iface eth0 inet static
    address 193.16.117.50
    netmask 255.255.255.0
    gateway 193.16.117.1

Manual edits outside of iot2000setup are not persistent across firmware re-flash; always use the wizard for production commissioning.

Firmware and Image Notes

Siemens periodically refreshes the IoT2000 example image. Image V2.6.0 (released alongside the S7-1200 CPU firmware V4.4) ships with:

  • Industrial OS based on Debian 10 (buster), kernel 4.19.
  • Node-RED 1.3.x pre-installed at http://<ip>:1880.
  • iot2000setup 1.4.4 supporting VLAN tagging and DNS configuration.

When upgrading, reflash the SD card on a PC and verify the SHA-256 checksum from the Siemens download portal. A corrupted image is the most common cause of a green LED1 with no X1P1 link after re-flash.

Field-Proven Caveats

  • The IoT2040 Ethernet PHYs auto-negotiate to 100 Mbit/s full duplex. Some unmanaged industrial switches lock to 10 Mbit/s half duplex; force the PC NIC to 100/full to match.
  • The internal DHCP server is disabled by default, but if a previous student or integrator enabled it, the IoT2040 may hand out 192.168.200.x addresses to your laptop, breaking the static scheme. Disable via iot2000setup → Network → DHCP.
  • Allow at least 60 seconds between power-on and first SSH attempt; the Industrial OS init script waits for systemd-networkd-wait-online before exposing port 22.
  • When connecting to an S7-1200 across a routed subnet, open the firewall on TCP/102 (ISO-on-TCP) and TCP/443 (OPC UA) on the OT segment.

What is the default IP address of the SIMATIC IoT2040?

The default IP is 192.168.200.1 on the X1P1 (eth0) port, with no DHCP server enabled. Configure your PC to a free address in 192.168.200.2–254 for the first SSH session.

Which port do I use for the initial network setup?

Use the X1P1 port (the upper RJ45 labeled "LAN"). X2P1 is intended for the field/PROFINET network and has no default IP. Plugging the cable into X2P1 will cause PuTTY to time out.

How do I fix the "Network error: Connection timed out" in PuTTY?

Confirm the engineering PC has a static 192.168.200.x address (not 1), the cable is in X1P1, the green status LED is solid, and the orange activity LED flashes when you ping. If still failing, connect via serial (115200 8N1) to verify systemctl status sshd.

What credentials does the IoT2040 accept on first login?

The stock Industrial OS image uses root / root. You are forced to change the root password at first SSH login. Create an additional non-root user for operator use.

How do I connect the IoT2040 to a SIMATIC S7-1200?

Connect X2P1 to the PROFINET network that already carries the S7-1200, enable Permit access with PUT/GET on the CPU, and use Node-RED with node-red-contrib-s7 or Python snap7 on TCP/102. Verify with nc -vz <plc-ip> 102 from the IoT2040 shell.

Back to blog