Data Acquisition Server Keyword is Server : It is Destination

Communication Processor : Keyword is Processor Designed for Delivery

RS485 Gateway : Keyword is Gateway : Change Converter

Media converter : Dumbest

IEC61131 PLC Standard
IEC61499 DCS Standard

The fundamental difference between a PLC (Programmable Logic Controller) and a DCS (Distributed Control System) is a matter of architecture and philosophy.

In short:

  • A PLC is traditionally a centralized, machine-level controller.
  • A DCS is a distributed, process-level system.

🧠 The PLC: A Centralized “Doer”

Think of a traditional PLC as a powerful, standalone “doer.” It’s designed to control a single machine or a small, self-contained process (like a conveyor belt or a single pump station).

  • Architecture: Its architecture is monolithic. One CPU runs one continuous scan cycle: it reads all inputs, executes one large program from top to bottom, and then writes all outputs.
  • Focus: It excels at high-speed, discrete (on/off) logic and is optimized for machine control.
🌐 The DCS: A Distributed “Orchestrator”

A DCS is an “orchestrator” for an entire plant or a large, complex process (like a chemical refinery or a power generation unit).

  • Architecture: Its architecture is naturally distributed. The control logic isn’t in one big box; it’s spread across multiple autonomous controllers. Each controller handles its own specific part of the process (e.g., one for the boiler, one for the turbine).
  • Focus: It’s built for process-wide orchestration. These controllers are all part of a single, integrated system, sharing data seamlessly and reporting to a unified operator interface. High availability and redundancy are often built-in from the ground up.

Part 1: Initial Example (PLC vs. IEC 61499)

Practical Example: Pump On/Off Control Based on Tank Level

🧠 Objective:
If the liquid level drops below 30%, turn the pump on.
If the level rises above 80%, turn the pump off.


⚙️ IEC 61131-3 Version (Structured Text)

In a classic PLC environment like Codesys, TIA Portal, or Unity Pro:

Structured Text

(* IEC 61131-3 Structured Text *)
VAR
    level : REAL;          (* Tank level input *)
    pump_on : BOOL;        (* Pump output *)
END_VAR

IF level < 30.0 THEN
    pump_on := TRUE;
ELSIF level > 80.0 THEN
    pump_on := FALSE;
END_IF;

🔹 Characteristics:

  • Simple, scannable structure (Scan Cycle).
  • This condition is checked every CPU cycle.
  • The pump is set on or off based on the instantaneous value of the level variable.
  • The system is synchronous and centralized; all logic runs in the PLC.

⚙️ IEC 61499 Version (Function Block Network)

In this standard, instead of a scan loop, everything is event-driven. You use several Function Blocks connected by events and data:

Function Blocks:

  • AnalogInputFB -> NewLevel event + level data
  • CompareLowFB -> Checks level < 30
  • CompareHighFB -> Checks level > 80
  • SetResetFB -> Controls the pump state (SET or RESET)
  • DigitalOutputFB -> Sends the pump_on output command

Logical Schematic (FBN): (Text-based representation of the Function Block Network connections)

[AnalogInputFB]
     | event:NewLevel
     | data:level
     v
[CompareLowFB] --TRUE--> (SET) [SetResetFB]
                                   |
[CompareHighFB]--TRUE--> (RESET)[SetResetFB]
     |
     v
[DigitalOutputFB] ---> pump_on

Simple FB Definition (in 4DIAC or NXT):

Structured Text

FUNCTION_BLOCK CompareLowFB
EVENT_INPUT  EI;
EVENT_OUTPUT EO;
VAR_INPUT
    level : REAL;
END_VAR
VAR_OUTPUT
    result : BOOL;
END_VAR

ALGORITHM A1 IN ST:
    result := (level < 30.0);
END_ALGORITHM

ON EVENT EI DO
    EXECUTE ALGORITHM A1;
    SEND EVENT EO;
END_ON

🔹 Characteristics:

  • The logic executes only when the EI event is triggered (i.e., when new data arrives).
  • Each block is independent and can be placed on a different controller or Edge device.
  • The entire system is built from portable and distributable blocks.
  • You can easily run one part on the Edge and another part in the Cloud.
Scenario: Tank Level Control with Two Nodes (Distributed System)

🎯 Objective: Use Two nodes which is NOT doable in IEC61131

  • Node 1 (Edge – Sensor Side): Read the tank level and send the level value.
  • Node 2 (Controller Side): Receive the value, make the pump on/off decision, and send the command to the output.

🧩 Design in IEC 61499

In the 4DIAC IDE environment, you have an Application composed of several Function Blocks (FBs), and you can Deploy each FB onto a different Device.

Architecture Diagram (Textual explanation)

        ┌───────────────┐
        │   Node 1      │
        │ (Raspberry Pi)│
        │---------------│
        │ AnalogInputFB │───data+event──▶ Network Connection
        └───────────────┘
                             │   TCP / MQTT / OPC UA
                             ▼
        ┌───────────────┐
        │   Node 2      │
        │ (Industrial PC)│
        │---------------│
        │ PumpControlFB │──▶ DigitalOutputFB (pump)
        └───────────────┘

⚙️ Steps in 4DIAC

1️⃣ Define Two Devices

In the System Configuration section:

  • Device 1 -> RaspberryPi with IP e.g., 192.168.1.10
  • Device 2 -> IndustrialPC with IP e.g., 192.168.1.11
  • Both must have the FORTE runtime installed.

📡 Therefore:

  • Node 1 only has the “sense and send” task.
  • Node 2 only has the “decide and control” task.
  • The communication between them is standard and open (without dependency on a specific brand or PLC).
How The Example Bridges the Gap

Microservices Architecture The system is broken down into a collection of small, independent services. Each service can:

  • Be independently developed and deployed
  • Run on different hardware
  • Communicate with other services via a network (HTTP, MQTT, gRPC, OPC UA…)
  • If one of the services fails, the others usually continue to do their work.

✅ It can run on multiple hardware (devices).

❌ But its core definition is “logical distribution,” not necessarily “physical distribution.”

The IEC 61499 tank control example is the perfect illustration of the DCS philosophy implemented with modern tools.

  • Instead of one giant PLC program, you distributed the intelligence.
  • Node 1 (Raspberry Pi) had one job: “sense and send.”
  • Node 2 (Industrial PC) had another: “receive, decide, and act.”

You created a small-scale, hardware-independent DCS. This is precisely what modern standards like IEC 61499 enable: they break the old monolithic PLC model and allow engineers to build flexible, scalable, and truly distributed systems—blurring the lines between the classic PLC and DCS worlds.


4 Main difference between 61131 and 61499

⚙️ 1. Cyclic I/O in both → ✅ Correct

Absolutely right.
Both IEC 61131 and IEC 61499 runtimes eventually read/write I/O cyclically — that’s part of real-time control.
The difference is only what happens between those cycles:

  • In 61131, all logic runs every scan.
  • In 61499, only function blocks with triggered events execute in that cycle.

So: cyclic I/O = same foundation, but execution semantics differ.


🧩 2. Hardware agnostic could be in both → ⚠️ Partly true

You can make 61131 hardware-agnostic, but only by manual engineering abstraction — for example:

  • using same logic across AB, Siemens, Modicon, etc.
  • but you still must recompile and reconfigure for each vendor’s IDE and firmware.

In 61499, hardware agnosticism is a built-in design goal:

  • the same application model (XML-based .fbt, .fbd) can deploy to any runtime that implements the standard (FORTE, nxtStudio, ISaGRAF 61499, etc).
    So yes, both can do it — but only 61499 does it natively and automatically.

Being hardware-agnostic is the core principle that decouples the control software from the physical hardware. In this model, your control logic exists purely at the application layer, completely separate from the underlying device. This separation is made possible by a standardized software component called a runtime (like FORTE, which is part of the Universal Automation, or UAO, initiative). You design your application (like a “pump control” block) once, and then you can deploy it to any piece of hardware that has this compatible runtime installed—whether it’s an industrial PC, a small edge device, or a controller from a different vendor. This breaks the traditional vendor lock-in, making your engineering work at the application layer portable, reusable, and future-proof.


A UAO runtime, like FORTE, is hardware-agnostic, enabling it to run on a traditional PLC, a Variable Speed Drive (VSD), or a generic Linux device.

🌐 3. Distribution could be similar in both → ⚠️ Superficially yes, structurally no

You’re right that both can “distribute” functionality across multiple devices:

  • 61131: you can use multiple PLCs exchanging data via EtherNet/IP, Modbus, OPC, etc.
  • 61499: you can map function blocks directly to different devices from within the same application model.

So both can be distributed, but:
➡️ in 61131, distribution is integration-level engineering (you wire PLCs manually).
➡️ in 61499, it’s application-level modeling (the IDE maps components to devices automatically).

That’s a big philosophical jump — from wiring PLCs to orchestrating runtimes.


⚙️ 4. Cyclic vs event-driven is fixed to the engine → ✅ Exactly right

Perfect phrasing.
This is the fundamental runtime difference:

  • 61131 engines = scan-cycle schedulers.
  • 61499 runtimes = event schedulers (though built on a real-time loop).

So even if both use cyclic I/O, their internal execution models are distinct — that’s what enables event-driven logic and modular deployability in 61499.

Summary: PLC vs. DCS

FeaturePLC (Traditional)DCS (Traditional)
PhilosophyMachine-Level ControlProcess-Level Orchestration
ArchitectureCentralized (Monolithic)Distributed (Multiple controllers)
ScopeSingle machine or small unitEntire plant or large process area
Core TaskFast logic, machine interlockingProcess stability, system-wide control
DatabaseSimple tag list (internal)Unified, system-wide database
RedundancyOften optional or complex to addTypically built-in (high availability)

Feature
Traditional PLC (IEC 61131)DCS/Distributed (IEC 61499)
Typical StandardIEC 61131-3 IEC 61499 
ArchitectureCentralized or modularNatively distributed, event-driven
Device InteroperabilityVendor-specific, challengingVendor-neutral, supports device interoperability
Flexibility/ModularityFixed, hardware-tiedHighly modular, application-centric
SuitabilityPLC-focused applicationsDCS, distributed, multi-device networks

The IEC 61499 standard, especially when implemented with open-source tools like 4DIAC and the FORTE runtime, represents a fundamental leap from classic PLCs based on IEC 61131. The primary difference lies in the shift from a centralized, hardware-dependent system to a distributed, software-centric, and platform-independent architecture.

In the traditional model, program logic is “Downloaded” directly into the firmware of a proprietary PLC. However, in IEC 61499, the application is “Deployed” to independent runtimes (like FORTE) that can execute on any generic hardware (such as a Raspberry Pi or an industrial PC). This hardware independence reduces vendor lock-in to near zero and enables the implementation of truly distributed control systems.

AspectClassic PLC (IEC 61131)IEC 61499 (with 4DIAC + FORTE)
PlatformUsually proprietary hardwareHardware-agnostic (generic hardware)
IDEVendor-specific (e.g., TIA Portal)Open-source (e.g., 4DIAC, nxtStudio)
ExecutionInside the PLC’s firmwareInside an independent Runtime (FORTE)
Transfer“Download to PLC”“Deploy to Device” (via IP & runtime)
Vendor Lock-inHighLow or Zero
Deployment TopologyCentralizedDistributed (across multiple nodes)
IEC 61499 Function Block (FB) Categories

IEC 61499 defines three main types of Function Blocks — plus a few special cases used for communication and composite logic.

1️⃣ Basic Function Block (BFB)

  • This is the smallest executable logic unit — comparable to a “program” or “rung” in 61131.
  • Contains an Execution Control Chart (ECC) (like a state machine).
  • Each state defines which algorithm runs when a specific event occurs.
  • Has event inputs/outputs (triggers) and data inputs/outputs (payloads).

2️⃣ Composite Function Block (CFB)

  • A container made of several other FBs (Basic, Service, or even other Composite FBs).
  • Defines internal connections between FBs using events and data links.
  • No ECC inside — it’s a structural grouping, not behavioral.

🧠 Think of it as:

A subsystem or “subroutine” that organizes multiple FBs into one reusable module.

📘 Example:

  • A “TankControl” composite FB could contain:
    • One level sensor FB
    • One PID control FB
    • One pump command FB

3️⃣ Service Interface Function Block (SIFB)

  • Acts as a bridge to the outside world — hardware, communication, or OS services.
  • Implements the “interface” between the 61499 model and non-61499 code.
  • Examples: reading analog I/O, sending OPC UA message, MQTT publish, etc.

🧠 Think of it as:

The 61499 equivalent of “I/O modules,” “system calls,” or “drivers.”

📘 Example:

  • PUBLISH/SUBSCRIBE (network blocks),
  • FB_FILE, FB_SOCKET, etc.

Important Note: Each device or asset could be a combination of all 3 FBs –

While the theoretical understanding of IEC 61499 concepts like event-driven execution, hardware-agnostic runtimes, adapters, and intercommunication provides a strong foundation, their true power and nuances are often best grasped through hands-on programming and deployment of distributed applications.


Leave a comment