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.
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
- 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.
-
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
- IP address:
-
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. -
Open an SSH session in PuTTY. Launch PuTTY, set Host Name to
192.168.200.1, Port22, Connection type SSH, then click Open. -
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 toroot@iot2000:~#when authenticated. -
Run the setup wizard. Type
iot2000setupand press Enter. The text-mode menu (newt/whiptail based) opens on the serial console or SSH TTY. -
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. - Save and reboot. Confirm with Apply → Save → Reboot. The IoT2040 will come back up on the new address.
-
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 withping 193.16.117.50. - 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
Software stack on the IoT2040
-
Node-RED with the
node-red-contrib-s7palette — 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()
Verification
- From the IoT2040 shell:
ping -c 4 193.16.117.20must show 0% packet loss. - From the IoT2040 shell:
nc -vz 193.16.117.20 102confirms the S7-1200 ISO-on-TCP port is open. - Run the Python snap7 snippet above; the value must print within one second.
- In TIA Portal open Online & Diagnostics → Connection diagnostics on the S7-1200; a connection from the IoT2040 MAC must appear under "Active connections".
- 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.xaddresses to your laptop, breaking the static scheme. Disable viaiot2000setup → Network → DHCP. - Allow at least 60 seconds between power-on and first SSH attempt; the Industrial OS init script waits for
systemd-networkd-wait-onlinebefore 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.