Skip to main content
Industrial automation · CODESYS to MQTT

Get CODESYS-based data to MQTT and the cloud.

If your CODESYS controller can serve Modbus, an AppBlocks gateway polls its registers, scales the values, and publishes them to any MQTT broker, an HTTP API, Azure IoT, or AppBlocks Cloud. The gateway is a separate device next to the controller, and its logic is a flowchart your whole team can read.

What changes on the PLC

One mapping on the PLC, then the gateway does the rest.

A one-time Modbus mapping

You decide which values the PLC exposes as Modbus registers. Everything else in the program stays as it is.

Read-only unless you say so

The gateway only reads. If you choose to send setpoints back, limits are checked in the flow before anything reaches the PLC.

Secure on the way out

MQTT over TLS with QoS 0, 1, or 2, and HTTPS for API calls, so plant-side Modbus never leaves the plant.

How it works

Two steps from register map to broker.

The flow uses real block names. Open the Designer and you’ll find each one in the palette.

Step 1: Serve Modbus from the CODESYS controller

CODESYS includes Modbus TCP and Modbus RTU slave devices. Add one to the device tree, map holding registers to your variables, and the PLC serves them to the gateway.

Because the setup lives in the CODESYS project, it works the same on every controller that runs the CODESYS runtime, whichever vendor built it.

  • Modbus TCP slave on port 502, or Modbus serial slave for RTU
  • Map only the variables you want to expose
  • The PLC program stays in charge; the gateway reads
Modbus master in the docs
PLC variable         Modbus address   Gateway variable
GVL.TankLevel        40001            tank_level
GVL.PumpRunning      40002            pump_running
GVL.LineSpeed        40003            line_speed

Step 2: Poll the registers and publish

A timer sends a Modbus Request. When the PLC answers, On Modbus Response scales the value and publishes it. If the PLC stops answering, On Modbus Timeout publishes a status topic, so your dashboard can tell zero from offline.

  • Function codes 01–06, 15, and 16
  • Fast tags every second, slow ones every minute
  • Report by exception to save cellular data
The full PLC to MQTT guide
On Time Periodevery 1 s
Modbus RequestCODESYS PLC 192.168.1.40 · FC03 · 40001, 3 regs
On Modbus Response
Variable Set/Mathtank_level = value ÷ 10
MQTT Publishplant/tank1/level
On Modbus Timeout
MQTT Publishplant/tank1/status = offline
FAQ

Questions, answered.

Which controllers does this cover?

Any controller that runs the CODESYS runtime and includes the Modbus slave option, from many automation vendors. Check your vendor’s runtime documentation for what’s included.

Can the PLC serve Modbus RTU instead of TCP?

Yes. Add the Modbus serial slave device on a serial port, and connect the gateway’s RS-485 port to it.

Is Modbus TCP secure?

Modbus has no authentication or encryption of its own, so keep the PLC-to-gateway link on the plant network. The gateway then publishes outward over MQTT with TLS or over HTTPS.

What hardware do I use for the gateway?

A Tibbo Project System device with an Ethernet port and an RS-485 module is the usual choice, in a DIN-rail enclosure. Add a 4G LTE module for sites without a network. AppBlocks also runs on Zephyr boards such as the ESP32. Supported boards.

White-glove onboarding included

Ready to connect your first device?

Start free in your browser, follow the tutorials, or book a free one-on-one session. No board yet? We’ll demonstrate everything on ours.