Overview
The SIMATIC IOT2050 is a rugged industrial edge gateway in the SIMATIC family that exposes a single full-size mPCIe slot for cellular (UMTS/LTE) or Wi-Fi expansion cards. The slot accepts USB-based cellular modems from vendors such as Quectel, Telit, and Sierra Wireless, and the cards register on the internal USB bus as a CDC-ACM/CDC-NCM or QMI device rather than a legacy serial modem.
On Industrial OS V3.2.2, the active connection manager is NetworkManager, which handles the wwan0 interface, supervises the modem through ModemManager, and persists the Access Point Name (APN), authentication credentials, and PDP context in a connection profile. When the APN is missing or invalid, the modem reports the bearer as "disconnected" and NetworkManager cycles the radio without ever reaching the IP layer. This article documents the exact sequence to bring the cellular bearer up, verify the assigned IP, and recover from the common "GSM type disconnected" symptom reported when the modem is reachable but the APN profile is empty.
Hardware Prerequisites and Modem Compatibility
Confirm the following before commissioning the cellular link:
-
IOT2050 base unit (6ES7647-0BA00-0YA2 basic, or 6ES7647-0BA00-1YA2 advanced). The advanced variant provides a more powerful SoC and more RAM, but both share the same mPCIe pinout and the same
/dev/ttyACM*enumeration for USB modems. - mPCIe UMTS/LTE card installed in the mPCIe socket on the underside of the device, secured with the single screw on the carrier.
- Active SIM card from a supported carrier, inserted into the nano-SIM holder (Slot X1) on the top side of the enclosure.
- SMA antenna connected to the MAIN U.FL/SMA pigtail; LTE bands require an external antenna for stable registration.
The mPCIe slot is keyed for USB 2.0 only. PCIE-only cards (e.g., Wi-Fi chipsets that expect a true PCIe link) will enumerate but not bring up the network interface. The supported cellular cards are listed in the SIMATIC IOT2050 Operating Instructions entry list, which is updated independently of the firmware.
Software Prerequisites
Industrial OS V3.2.2 ships with the following components. Verify versions before changing anything:
| Component | Package | Minimum Version (V3.2.2) |
|---|---|---|
| NetworkManager | network-manager |
1.42.x or newer |
| ModemManager | modem-manager |
1.20.x or newer |
| ModemManager-QMI plugin | modemmanager-qmi |
1.20.x |
| libqmi / libmbim |
libqmi-utils / libmbim-utils
|
1.30.x / 1.26.x |
| nmtui (TUI frontend) | network-manager-tui |
1.42.x |
| mmcli (CLI frontend) | modemmanager |
1.20.x |
Validate with:
NetworkManager --version
ModemManager --version
systemctl status NetworkManager
systemctl status ModemManager
Both services must be in state active (running). If ModemManager is inactive, start and enable it:
sudo systemctl enable --now ModemManager
sudo systemctl restart NetworkManager
Identifying the Cellular Modem
After the card is seated and the device has booted, the modem must enumerate on the USB bus. Confirm with:
lsusb
ls /dev/ttyACM* 2>/dev/null
ls /dev/cdc-wdm* 2>/dev/null
mmcli -L
A healthy response looks like:
/org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL EC25
If mmcli -L returns "no modems found", the card is either not seated, not powered, or the SIM is missing. Inspect the kernel ring buffer:
sudo dmesg | grep -iE 'cdc|qcserial|qmi_wwan|option|sim|mbim'
sudo journalctl -u ModemManager -n 50 --no-pager
Look for cdc_ncm, qmi_wwan, or cdc_mbim binding to a wwan0 interface. The wwan0 interface is the raw IP transport that NetworkManager will attach the APN profile to.
Configuring the APN with nmtui
nmtui is the simplest path for engineers who prefer a guided text UI on the serial console or over SSH. It writes a connection profile to /etc/NetworkManager/system-connections/.
- Open the TUI:
sudo nmtui - Select "Edit a connection" and press Enter.
- Highlight the cellular connection (the device name typically matches the modem model, e.g., "QUECTEL EC25" or the MAC/IMEI). If no cellular profile is listed, choose "Add" and pick "Mobile broadband"; this triggers the wizard.
- Set the APN field to the value supplied by the carrier (see the APN reference below).
- Set Username and Password only if the carrier requires PAP/CHAP. For most LTE data-only SIMs, leave both fields blank and set Authentication to "None" or "Automatic".
- Set Number to
*99#(default for LTE attach). - Set PDP type to
ipv4unless the carrier explicitly provides IPv6. - Confirm with "OK" and exit.
- Restart NetworkManager so the profile is re-read:
sudo systemctl restart NetworkManager - Bring the link up explicitly:
sudo nmcli connection up "QUECTEL EC25"(substitute the connection name shown in step 3).
If the connection profile was created during a wizard run, the connection name will be something like "T-Mobile Prepaid 1" rather than the modem model. Use nmcli connection show to list all profiles and identify the one bound to wwan0.
Configuring the APN with nmcli (Scriptable Alternative)
For headless commissioning or IaC workflows, nmcli is faster and reproducible. The example below adds a profile named iot2050-cellular bound to the modem's IMEI and configures an APN of internet:
sudo nmcli connection add type gsm ifname cdc-wdm0 \
con-name iot2050-cellular \
apn internet \
gsm.number "*99#" \
gsm.pdp-type ipv4 \
ipv4.method auto \
connection.autoconnect yes \
connection.autoconnect-retries 5 \
connection.autoconnect-interval 30
sudo nmcli connection up iot2050-cellular
Replace cdc-wdm0 with the actual cdc-wdm device printed by:
mmcli -m 0 -K | grep -E 'device|port|driver'
For carriers that require PAP credentials:
sudo nmcli connection modify iot2050-cellular \
gsm.username "apn-user" \
gsm.password "apn-pass" \
gsm.auth-type pap
sudo nmcli connection up iot2050-cellular
Common authentication tokens to set:
| Carrier Family | Auth | Username | Password |
|---|---|---|---|
| Vodafone (DE/EU) | pap | vodafone | vodafone |
| T-Mobile / DT (DE) | pap or chap | tm | tm |
| Telefonica O2 (DE) | pap | o2 | o2 |
| 1&1 (DE) | none | — | — |
| AT&T (US) | none | — | — |
| Verizon (US, LTE) | none | — | — |
| T-Mobile (US) | none | — | — |
Verifying the Connection
After the bearer attaches, validate the entire stack from radio to IP:
# Modem-level state
mmcli -m 0 --signal-get
mmcli -m 0 --location-get
# Bearer / connection state
mmcli -m 0 -b 0 -K | grep -E 'state|address|dns|interface|connected'
# OS interface
ip -4 addr show wwan0
ip route show dev wwan0
# End-to-end
ping -I wwan0 -c 4 1.1.1.1
ping -I wwan0 -c 4 8.8.8.8
resolvectl status wwan0 | head -20
Expected mmcli -m 0 output fields:
| Field | Healthy Value | Indicates |
|---|---|---|
state |
connected |
PDP context active |
signal quality |
50% or higher |
Usable RF link |
access tech |
LTE / HSPA
|
Bearer type |
ipv4 address |
Carrier-allocated /32 | NAT'd public IP visible to internet |
ipv4 dns |
Non-empty | DNS server received from network |
interface |
wwan0 / wwp0s20u4i5
|
Linux netdev |
If state shows connected but no IP is assigned, the APN was accepted by the SGSN/PGW but the PDP context is not yet active. Wait 30-60 s for the bearer to fully negotiate, especially on first attach after power-up.
AT Command and Bearer Diagnostics with mmcli
When nmtui and nmcli only show the user-facing state, drop down to AT-level diagnostics with mmcli:
# Send a raw AT command to the modem
sudo mmcli -m 0 --command="AT+CESQ"
sudo mmcli -m 0 --command="AT+COPS?"
sudo mmcli -m 0 --command="AT+CREG?"
sudo mmcli -m 0 --command="AT+CGDCONT?"
# Force a re-register on the network
sudo mmcli -m 0 --command="AT+CFUN=0"
sudo mmcli -m 0 --command="AT+CFUN=1"
Key AT responses to interpret:
| AT Command | Response | Meaning |
|---|---|---|
AT+COPS? |
+COPS: 0,0,"Vodafone.de",7 |
Registered on named PLMN, LTE |
AT+COPS? |
+COPS: 0 |
Not registered |
AT+CGDCONT? |
+CGDCONT: 1,"IP","internet","",0,0 |
APN defined for PDP context 1 |
AT+CGDCONT? |
(empty) | No APN — bearer cannot attach |
AT+CESQ |
+CESQ: 99,99,255,255,11,42 |
RSRP −88 dBm, RSRQ −12 dB |
The "GSM type disconnected" error originates from NetworkManager when the modem has a valid SIM and is registered on the cell, but the PDP context never opens. The two root causes are:
-
Empty APN:
AT+CGDCONT?returns no entry. - Wrong APN: PDP reject from the PGW with cause 27 (unknown APN) or 33 (requested service option not subscribed).
Both are cleared by writing the correct APN through nmcli and reissuing nmcli connection up.
Troubleshooting Matrix
| Symptom | Likely Cause | Diagnostic Command | Remediation |
|---|---|---|---|
mmcli -L returns nothing |
Card not seated, no antenna, no power rail | dmesg | grep -i usb |
Reseat mPCIe card, check antenna pigtails, verify +3.3 V rail |
Modem found, state: failed
|
SIM PIN locked or no SIM inserted |
mmcli -i 0 --pin=1234 (replace 1234 with the PIN if applicable) |
Disable PIN or insert active SIM |
state: registered but no bearer |
APN empty | mmcli -m 0 --command="AT+CGDCONT?" |
Set APN with nmcli as shown above |
| Bearer attaches, no IPv4 | MTU mismatch, default 1500 too large for LTE | ip link show wwan0 |
sudo ip link set wwan0 mtu 1428 or set ipv4.mtu 1428 in the connection profile |
| DNS resolves but ping fails | Carrier blocks ICMP, or APN only allows whitelisted destinations | curl ifconfig.me |
Use TCP-based test; check carrier APN type (default, mms, supl, dun) |
| Bearer drops every 5-10 min | ModemManager timer mismatch, or LAU/TAU cycling | journalctl -u NetworkManager -f |
Set connection.autoconnect-retries 0 and enable connection.keepalive
|
| GSM type disconnected (Industrial OS V3.2.2) | APN profile empty after wizard escape |
nmcli connection show |
Edit the profile with nmtui or nmcli and populate gsm.apn
|
APN Reference (Carriers Commonly Deployed With IOT2050)
Verify each entry against the carrier's current documentation before deployment. APNs change without notice, and private APNs for M2M SIMs are not listed here.
| Region | Carrier | APN | PDP Type | Auth |
|---|---|---|---|---|
| Germany | Vodafone (M2M) | web.vodafone.de |
ipv4 | pap |
| Germany | Deutsche Telekom | internet.t-d1.de |
ipv4 | pap or chap |
| Germany | Telefónica O2 | internet |
ipv4 | pap |
| Germany | 1&1 Drillisch | internet |
ipv4 | none |
| EU (Roaming) | Many EU carriers | internet |
ipv4 | none |
| US | AT&T (M2M) | m2m.com.attz |
ipv4 | none |
| US | Verizon (M2M) | we01.vzwstatic |
ipv4 | none |
| US | T-Mobile | iot.tmobile.com |
ipv4 | none |
Production Hardening and Persistence
Connection profiles written through nmtui and nmcli are persisted in /etc/NetworkManager/system-connections/<name>.nmconnection as plaintext. Apply the following before leaving the field:
- Restrict permissions:
sudo chmod 600 /etc/NetworkManager/system-connections/*.nmconnection - Enable autoconnect with bounded retries:
sudo nmcli connection modify iot2050-cellular connection.autoconnect yes connection.autoconnect-retries 0 - Disable the
connectivity-checkfeature if the carrier blocks the default probe URL, otherwise NetworkManager will flap the link:sudo nmcli connection modify iot2050-cellular connection.mdns no
(Also addipv4.dns-priority 50to keep the cellular DNS below wired priority.) - Set the MTU to 1428 to match the typical GTP-U overhead on LTE:
sudo nmcli connection modify iot2050-cellular 802-3-ethernet.mtu 1428
(Use thegsmsection's MTU key for cellular profiles:gsm.mtu 1428depending on driver.) - Reboot and confirm the bearer comes up automatically:
sudo reboot mmcli -m 0 -K | grep state
For unattended sites, log the bearer state to a syslog target so failures are recoverable from remote support. A simple watchdog is:
# /usr/local/bin/wwan-watchdog.sh
while true; do
STATE=$(mmcli -m 0 -K 2>/dev/null | awk -F': ' '/^state/ {print $2}')
if [ "$STATE" != "connected" ]; then
nmcli connection up iot2050-cellular
fi
sleep 60
done
Schedule with cron or a systemd timer; do not run two watchdog loops in parallel or they will race and flap the bearer.
Firmware and Industrial OS Lifecycle Notes
Industrial OS V3.2.2 corresponds to the public release line documented in the SIMATIC IOT2050 Industrial OS Release Notes. Major behavior changes to be aware of when upgrading:
- NetworkManager >= 1.42 added
connection.gsm.auto-config, which overrides the manually-set APN if the modem reports one. Disable it withconnection.gsm.auto-config noif you must force a private APN. - ModemManager 1.20+ moved the QMI plugin out of the main package on some distributions. If
mmcli -Lreturns nothing for a QMI-only card (e.g., Quectel EG25-G), installmodemmanager-qmiexplicitly. - On Industrial OS V3.2.x, the
nmclioutput for cellular sections is in thegsmsetting group, notgsm-settingsas on older V2.x releases. Adjust any IaC scripts that grep for the older key name.
Always review the release notes before bumping the OS image on a fielded device. Cellular regression bugs are commonly tied to a single ModemManager point release.
Frequently Asked Questions
What does "GSM type disconnected" mean on the SIMATIC IOT2050?
It indicates the modem has finished cell registration but the PDP context could not be opened. The most common cause is an empty or wrong APN in the NetworkManager profile. Fix it by setting the APN with nmcli connection modify <name> gsm.apn <apn> and re-issuing nmcli connection up <name>.
Where is the IOT2050 cellular profile stored in Industrial OS V3.2.2?
NetworkManager persists the connection at /etc/NetworkManager/system-connections/<name>.nmconnection. The APN, username, password, and PDP type are all in the [gsm] section of that file. Lock the file down to chmod 600 on production systems because credentials are stored in cleartext.
How do I confirm the modem is detected before configuring the APN?
Run mmcli -L. A healthy line looks like /org/freedesktop/ModemManager1/Modem/0 [QUALCOMM INCORPORATED] QUECTEL EC25. If no modem is listed, check dmesg for USB enumeration and reseat the mPCIe card.
Can I use the IOT2050 mPCIe slot for a Wi-Fi card instead of LTE?
The mPCIe slot is keyed for USB 2.0 and will not supply a PCIe link to a true PCIe Wi-Fi card. A USB-WiFi adapter mPCIe card works, but for industrial Wi-Fi the recommended path is a USB-attached WLAN stick in the external USB port rather than the mPCIe socket.
What MTU should I use for an LTE link on the IOT2050?
Set the MTU to 1428 for the wwan0 interface. LTE encapsulation (GTP-U) consumes 20-72 bytes of overhead, and the standard 1500-byte MTU will fragment or drop large packets. Configure it in the connection profile with gsm.mtu 1428 and verify with ip link show wwan0.