Moxa PLC Integration Guide 2026 | Remote I/O & Industrial Networking
Complete guide to integrating Moxa devices with PLCs. ioLogik remote I/O setup, MGate protocol converters, industrial switches, and step-by-step Modbus TCP configuration.
Moxa is one of the most widely used industrial networking and remote I/O brands in PLC-based automation systems. If you're working with distributed I/O, serial-to-Ethernet protocol conversion, or industrial Ethernet infrastructure, there's a good chance Moxa hardware is involved. This guide covers everything PLC programmers need to know about integrating Moxa devices into control systems.
New to PLC communication protocols? Start with our complete PLC communication protocols guide for foundational knowledge, or see our Modbus protocol tutorial for in-depth Modbus coverage.
What is Moxa and Why PLC Engineers Use It
Moxa Inc. is a Taiwanese industrial networking company that manufactures remote I/O modules, protocol converters, industrial Ethernet switches, serial device servers, and edge computing platforms. Founded in 1987, Moxa has become a go-to brand for PLC engineers who need to extend I/O capabilities, convert between communication protocols, or build reliable industrial Ethernet networks.
Why Moxa is popular with PLC programmers:
- Extends PLC I/O to remote locations via Ethernet without running signal cables
- Converts legacy serial devices (Modbus RTU, RS-485) to Ethernet (Modbus TCP)
- Provides managed industrial switches with PROFINET and EtherNet/IP compatibility
- Works with every major PLC brand through standard protocols (Modbus TCP, MQTT, RESTful API)
- Offers built-in web server for configuration — no proprietary software required for basic setup
Moxa Product Lines for PLC Integration
| Product Family | Purpose | Key Models | PLC Connection Method |
|---|---|---|---|
| ioLogik E1200 | Ethernet remote I/O | E1210 (16 DI), E1211 (16 DO), E1240 (8 AI), E1260 (6 TC) | Modbus TCP, EtherNet/IP, RESTful API |
| ioLogik E2200 | Smart Ethernet I/O with logic | E2210, E2240, E2260 | Modbus TCP, SNMP, MQTT |
| ioLogik R1200 | RS-485 remote I/O | R1210, R1240 | Modbus RTU |
| MGate | Protocol converters | MB3170 (Modbus gateway), MB3660 (PROFINET-Modbus) | Modbus, PROFINET, EtherNet/IP |
| EDS/IKS | Industrial Ethernet switches | EDS-408A, IKS-6726A | Managed Layer 2/3 |
| NPort | Serial device servers | NPort 5110, NPort 5610 | Serial-to-Ethernet (COM port redirection) |
| UC Series | Edge computing | UC-8100, UC-8200 | Linux-based, MQTT, Node-RED |
Moxa ioLogik E1200 — Remote I/O Setup with PLCs
The ioLogik E1200 series is the most common Moxa product PLC programmers encounter. These modules provide remote digital and analog I/O accessible over Ethernet via Modbus TCP.
Step 1: Physical Setup and IP Configuration
- Connect the ioLogik E1200 module to the same Ethernet network as your PLC
- Power the module with 24VDC (standard industrial power supply)
- Default IP address is 192.168.127.254 — access the web console via a browser
- Navigate to Network Settings and assign a static IP in your PLC network subnet
- Set the Modbus TCP port (default: 502) and enable the Modbus TCP slave function
Step 2: Understand the Modbus Register Map
Every ioLogik E1200 model has a fixed Modbus register map. Here are the common mappings:
ioLogik E1210 (16 Digital Inputs):
| Function | Modbus Address | Modbus Type | Description |
|---|---|---|---|
| DI Channel 0 | 00000 | Coil (read) | Digital input status |
| DI Channel 0-15 | 10000-10015 | Discrete Input | Read-only DI status |
| DI Counter 0 | 30000 | Input Register | 32-bit pulse counter (low word) |
| DI Counter 0 (high) | 30001 | Input Register | 32-bit pulse counter (high word) |
ioLogik E1240 (8 Analog Inputs):
| Function | Modbus Address | Modbus Type | Description |
|---|---|---|---|
| AI Channel 0 Raw | 30000 | Input Register | Raw ADC value |
| AI Channel 0 Scaled | 30016 | Input Register | Engineering unit value |
| AI Range Config | 40000 | Holding Register | 0=0-10V, 1=4-20mA, 2=0-20mA |
Important: Always download the specific Modbus address table for your ioLogik model from the Moxa website. Register addresses vary between models.
Step 3: Test Communication
Before programming the PLC, verify communication using Moxa's ioSearch Utility or a Modbus polling tool like Modbus Poll or QModMaster (free):
- Set the tool to Modbus TCP mode
- Enter the ioLogik IP address and port 502
- Read Input Register 30000 — you should see the analog input value
- Read Coils starting at address 10000 — you should see DI states
Connecting Moxa ioLogik to Siemens PLCs (TIA Portal)
Method: MB_CLIENT Function Block (Modbus TCP)
Siemens S7-1200 and S7-1500 support Modbus TCP natively via the MB_CLIENT function block in TIA Portal.
Step 1: Create a Modbus TCP connection
In TIA Portal, add a MB_CLIENT (or MB_CLIENT_DB on S7-1500) function block to your program:
// Modbus TCP read from Moxa ioLogik E1240 (8 analog inputs)
// Function Block: MB_CLIENT
CONNECT := MB_Connection_DB // Connection data block
MB_MODE := 0 // 0 = Read
MB_DATA_ADDR := 30000 // Start register (AI Channel 0)
MB_DATA_LEN := 8 // Read 8 registers (8 analog channels)
MB_DATA_PTR := P#DB10.DBX0.0 WORD 8 // Destination: Data Block 10
Step 2: Configure the connection DB
Create a data block for the Modbus TCP connection:
- InterfaceId: Hardware identifier of the PLC's Ethernet port
- IP Address: The ioLogik module's IP (e.g., 192.168.0.100)
- Connection ID: Unique ID for this connection (e.g., 1)
- Port: 502
Step 3: Scale the analog values
The raw Modbus register values from the ioLogik typically need scaling:
// SCL example: Scale 4-20mA input to 0-100%
#ScaledValue := (REAL#(#RawValue) - 6553.0) / (32767.0 - 6553.0) * 100.0;
Polling Multiple ioLogik Modules
For systems with multiple Moxa modules, use separate MB_CLIENT instances with staggered execution to avoid simultaneous connection attempts. A common pattern is a sequencer that polls one module per scan cycle:
// Poll different Moxa modules in sequence
CASE #PollStep OF
0: // Read Module 1 (ioLogik E1240 - Analog Inputs)
#MB_Client_1.REQ := TRUE;
IF #MB_Client_1.DONE THEN #PollStep := 1; END_IF;
1: // Read Module 2 (ioLogik E1210 - Digital Inputs)
#MB_Client_2.REQ := TRUE;
IF #MB_Client_2.DONE THEN #PollStep := 2; END_IF;
2: // Write Module 3 (ioLogik E1211 - Digital Outputs)
#MB_Client_3.REQ := TRUE;
IF #MB_Client_3.DONE THEN #PollStep := 0; END_IF;
END_CASE;
Connecting Moxa ioLogik to Allen-Bradley PLCs (Studio 5000)
Method 1: Generic Ethernet Module (EtherNet/IP)
The ioLogik E1200 series supports EtherNet/IP in addition to Modbus TCP. This enables direct integration with ControlLogix and CompactLogix PLCs.
Step 1: In Studio 5000, right-click the Ethernet module in the I/O tree and select New Module > Generic Ethernet Module
Step 2: Configure the module:
- Name: Moxa_E1240_AI
- Comm Format: Data - SINT or INT
- IP Address: The ioLogik's IP address
- Assembly Instance / Size: Refer to Moxa's EtherNet/IP configuration guide for your model
Step 3: Access I/O data via the module's input/output tags in your Logix program.
Method 2: MSG Instruction (Modbus TCP via Socket)
For Modbus TCP communication, use a MSG (Message) instruction configured for:
- Message Type: CIP Generic
- Service Type: Custom
- Connection: TCP socket to the ioLogik IP, port 502
This method is more complex but provides full Modbus TCP protocol access.
Connecting Moxa to CODESYS-Based PLCs
CODESYS has a built-in Modbus TCP client library that makes connecting to Moxa I/O straightforward.
Step 1: Add the Modbus TCP Master device to your CODESYS project from the device repository.
Step 2: Add a Modbus TCP Slave under the master, configured with:
- IP Address: ioLogik module IP
- Port: 502
- Unit ID: 1 (default for ioLogik)
Step 3: Add Modbus channels:
// CODESYS Modbus channel configuration
Channel 1: Read Input Registers, Start: 30000, Length: 8 // Analog inputs
Channel 2: Read Discrete Inputs, Start: 10000, Length: 16 // Digital inputs
Channel 3: Write Coils, Start: 0, Length: 16 // Digital outputs
Step 4: Map the Modbus data to your program variables in the I/O mapping tab.
Moxa MGate Protocol Converters
The MGate series bridges communication gaps between serial and Ethernet protocols — essential when connecting legacy RS-485 devices to modern Ethernet-based PLCs.
MGate MB3170 — Modbus RTU to Modbus TCP Gateway
Use case: You have RS-485 Modbus RTU instruments (flow meters, VFDs, power meters) that need to communicate with an Ethernet-based PLC.
Setup:
- Connect RS-485 devices to the MGate's serial port (wiring: A+, B-, GND)
- Connect the MGate to the PLC network via Ethernet
- Access the web console (default IP: 192.168.127.254)
- Configure serial port: Baud rate, parity, stop bits (match your field devices)
- Configure the Modbus gateway mode:
- Agent Mode: The MGate transparently forwards Modbus TCP requests to serial devices. The PLC addresses each serial device by its Unit ID.
- Transparent Mode: Direct protocol translation — best for simple setups.
From the PLC's perspective, the serial devices appear as Modbus TCP slaves at the MGate's IP address. The PLC sends Modbus TCP requests to the MGate, which translates them to Modbus RTU on the serial bus and returns the responses.
MGate MB3660 — PROFINET to Modbus Gateway
Use case: You have a Siemens PROFINET PLC but need to communicate with Modbus TCP or Modbus RTU devices.
This gateway appears as a PROFINET device to the Siemens PLC and as a Modbus master to the field devices. Configure the data exchange mapping through the MGate's web console or GSD file imported into TIA Portal.
Moxa Industrial Ethernet Switches for PLC Networks
Moxa's EDS (Entry) and IKS (Industrial) series switches are commonly used in PLC network infrastructure.
Key Features for PLC Networks
| Feature | Why It Matters for PLCs |
|---|---|
| Turbo Ring (recovery <20ms) | Ensures ring topology redundancy for critical control networks |
| PROFINET compliance | EDS-400A series tested for PROFINET Conformance Class B |
| EtherNet/IP compatible | Passes CIP traffic without modification |
| Port mirroring | Enables protocol analysis with Wireshark for troubleshooting |
| IGMP snooping | Manages multicast traffic in EtherNet/IP networks |
| DIN-rail mounting | Standard industrial panel mounting |
| Wide temp range | -40°C to 75°C operation for harsh environments |
Managed vs Unmanaged for PLC Networks
Use managed switches (EDS-408A, IKS-6726A) when:
- Network segmentation or VLANs are required
- Ring topology redundancy is needed (Turbo Ring)
- PROFINET diagnostics require switch-level visibility
- You need port-level traffic monitoring for troubleshooting
Use unmanaged switches (EDS-205A, EDS-208A) when:
- Simple star topology with fewer than 8 devices
- Budget is constrained and redundancy is not critical
- No network segmentation requirements
Troubleshooting Moxa-PLC Communication Issues
Common Problem: Modbus TCP Connection Timeout
Symptoms: PLC reports timeout error, MB_CLIENT shows error code 8200-series
Checklist:
- Ping the ioLogik from the PLC network — if ping fails, check IP addressing and subnet masks
- Verify port 502 is open — some ioLogik models have Modbus TCP disabled by default in the web console
- Check Unit ID — ioLogik default is 1; make sure PLC request matches
- Verify register addresses — ioLogik uses 0-based addressing; some PLCs use 1-based (40001 = register 0)
- Check maximum connections — ioLogik E1200 supports up to 8 simultaneous TCP connections; exceeding this drops new connections
Common Problem: Incorrect Analog Values
Symptoms: Analog input reads wrong value or stays at 0
Checklist:
- Check input range configuration — access the ioLogik web console and verify the AI channel is set to the correct range (0-10V, 4-20mA, or 0-20mA)
- Verify wiring polarity — 4-20mA connections require correct +/- orientation
- Read the correct register — raw value (30000) vs scaled value (30016) return different numbers
- Check byte order — Siemens PLCs use big-endian; verify the ioLogik byte order setting matches
Common Problem: MGate Serial Communication Failure
Symptoms: Modbus RTU devices behind MGate are not responding
Checklist:
- Match serial parameters — baud rate, parity, data bits, and stop bits must be identical on MGate and all serial devices
- Check RS-485 termination — enable the built-in termination resistor on the MGate if it's at the end of the bus
- Verify Unit IDs — each serial device must have a unique Modbus address; the MGate routes by Unit ID
- Monitor with diagnostics — the MGate web console shows real-time Modbus transaction logs to identify which device is not responding
Frequently Asked Questions
Can Moxa ioLogik replace PLC I/O modules?
The ioLogik is remote I/O, not a PLC. It cannot run control logic — it only provides I/O data to a PLC over Ethernet. Use ioLogik when you need to collect I/O from locations too far from the PLC for direct wiring (hundreds of meters or more). For local I/O within a control cabinet, use your PLC's native I/O modules for better determinism and faster scan times.
Which Moxa model should I use for 4-20mA sensors?
The ioLogik E1240 provides 8 channels of analog input supporting 0-10V and 4-20mA signals. For thermocouple inputs, use the ioLogik E1260 (6 thermocouple channels with cold junction compensation). For RTD inputs, use the ioLogik E1262.
Does Moxa support PROFINET?
Moxa's industrial switches (EDS-400A series) are PROFINET conformance tested, and the MGate MB3660 provides a PROFINET-to-Modbus gateway. However, the ioLogik E1200 series does not natively support PROFINET — it uses Modbus TCP and EtherNet/IP. For PROFINET I/O, consider Siemens ET 200 or Wago 750 series instead.
How many ioLogik modules can one PLC handle?
This depends on your PLC's Modbus TCP client capacity and your scan time requirements. A Siemens S7-1500 can typically handle 16-32 simultaneous Modbus TCP connections. With sequential polling (one module per scan), the practical limit is determined by your acceptable update rate: polling 20 modules at 100ms per poll gives a 2-second update cycle for all modules. For time-critical applications, keep the number of remote I/O modules low or use EtherNet/IP for faster cyclic exchange.


