Hi Tom,

To clarify the boundaries: Malbec is a multi-purpose IDE that manages
different project types covering the plant configuration and supervision
lifecycle. I’ve attached to this mail an architecture diagram illustrating
these layers.

Here is a breakdown of the ecosystem:

1. Design-Time Layer (Malbec IDE - NetBeans RCP)
Malbec acts as the central hub, managing independent and interoperable
project types:
- S88 / Batch Project (my current PR scope): Models the plant hierarchy,
defines process variables (Attributes, Parameters, Reports) with their
metadata, and structures recipes.
- Communications Project: Links the S88 model (via NetBeans Lookup or
plant.xml) to physical devices and generates the runtime configuration
database (boot.db).

2. Deployment & Runtime Gateway (Merlot)
Merlot is a headless runtime engine spawned and managed by Malbec. Upon
startup, it reads boot.db, organizes variables into scan groups, and uses
Apache PLC4X to execute bulk scan/write cycles against PLC data blocks. It
then exposes this live plant data via EPICS/PVA.

3. Supervisory & Control Layer (Malbec Runtime Client)
During execution, Malbec acts as an active supervisory client. It connects
to Merlot using gpClient (EPICS/PVA) to subscribe to variables, monitor
process state, and send execution commands, closing the loop without direct
PLC wiring.

Please keep in mind that this architecture represents our target design and
remains a work in progress as the project evolves.

I hope this overview clarifies the component boundaries. Looking forward to
your thoughts.

Best regards,
Daniel

El mar, 22 sept 2026 a las 21:39, Tom NewChao (<[email protected]>)
escribió:

> Hi Daniel,
>
> Thank you for the detailed explanation. It helps clarify how the Reference
> property and PlcGroups are intended to support efficient PLC access.
>
> However, to understand how these parts fit into the overall design, I think
> a more detailed layered architecture diagram would be very helpful.
> Ideally,
> it would provide a top-down view from the Malbec UI and S88 domain model,
> through persistence and configuration, to the Merlot runtime, PLC4X, and
> finally the PLC.
>
> It would also be useful to show the responsibilities and main interfaces of
> each layer, together with the principal data and control flows.
>
> At the moment, the individual mechanism is clearer to me, but the overall
> architectural view is still too coarse-grained to understand the complete
> system and the boundaries between its components.
>
> If you already have a preliminary architecture diagram, would you be able
> to
> share it? Even an initial version would provide a useful basis for further
> discussion.
>
> Best regards,
> Tom
>
> Daniel Campos <[email protected]> 于2026年9月22日周二 22:05写道:
>
> > Hi Tom,
> >
> > The challenge you mentioned regarding efficient bulk reading and variable
> > mapping is central to what we are addressing.
> >
> > To abstract manual variable-by-variable wiring from the user interface,
> S88
> > elements in Malbec include a "Reference" property (a numerical index).
> >
> > This Reference serves as a multiplier in a formula used to calculate the
> > exact data block offset in the PLC memory. Instead of mapping every PLC
> tag
> > manually, the user in Malbec assigns a Reference index to an entity,
> > effectively pointing to its corresponding data block or UDT in the PLC.
> >
> > This approach assumes the PLC program adheres to a structured memory
> layout
> > where entities like analog inputs, valves, or outputs are grouped into
> > contiguous memory blocks of fixed size. By calculating the offset based
> on
> > Reference × BlockSize, Merlot can execute efficient bulk reads and writes
> > over entire memory blocks via Apache PLC4X, avoiding the overhead of
> > individual tag polling.
> >
> > Under the hood, Merlot manages this execution through PlcGroups. These
> > function as logical scan groups where tags are grouped by device and
> memory
> > contiguity. The goal is for Malbec to turn that "reference" into
> optimized,
> > bundled block requests. When Merlot boots up, it loads these group
> > configurations and executes the scan/write cycle.
> >
> > Best regards,
> >
> > Daniel
> >
> > El dom, 20 sept 2026 a las 22:35, Tom NewChao (<[email protected]>)
> > escribió:
> >
> > > Hi Daniel,
> > >
> > > Thanks for the explanation. The mapping you described is also one of
> the
> > > main challenges we face in our domain.
> > >
> > > We focus on CIM and EAP systems. Each piece of equipment has its own
> > > process parameters and recipes, and each recipe contains a
> corresponding
> > > set of parameter values. During
> > > production, we need to monitor both the actual process values reported
> by
> > > the PLC and the configured recipe setpoints.
> > >
> > > A key challenge is mapping PLC variables to the equipment
> > process-parameter
> > > model. Efficient bulk reading is essential as well. In our current
> > > implementation, we group
> > > parameters into contiguous PLC address ranges and read each range as a
> > > block, rather than issuing a separate request for every variable.
> > >
> > > Our current architecture is EAP → CIM → PLC. The CIM system owns the
> > > equipment model, the recipe-parameter mappings, and the equipment
> > adapter.
> > > It maps the model parameters to
> > > PLC variables and communicates directly with the PLC. The EAP system
> uses
> > > the CIM model and services for recipe management, equipment
> coordination,
> > > and process supervision.
> > >
> > > This is why I am particularly interested in where the mapping between a
> > > Malbec process variable and its PLC variable will live. Will the Malbec
> > > plant project contain the mapping
> > > metadata, with Merlot acting as the communication adapter, or will
> Merlot
> > > own both the mapping and the PLC communication?
> > >
> > > I hope this real-world use case is useful for the design.
> > >
> > > Best regards,
> > > Tom
> > >
> > > Daniel Campos <[email protected]> 于2026年9月20日周日
> 11:25写道:
> > >
> > > > Hi, Tom!
> > > >
> > > > Thanks a lot, I appreciate your interest.
> > > >
> > > > Regarding the tags and their relationship to the physical model, the
> > main
> > > > goal of this model is to parameterize the plant and define the
> process
> > > > variables that will mirror those in the PLC. In Malbec, they're given
> > > > magnitudes, engineering units and other features for logging and
> > > auditing.
> > > >
> > > > As I mentioned at the end, communication is the scope of the batch
> > > module,
> > > > which I left as a placeholder for now.
> > > >
> > > > I'm planning to develop a recipe editor that is fed with the
> variables
> > > > defined in the plant project.
> > > >
> > > > Later, those recipes, which are basically just the variables with
> > defined
> > > > values and an execution order, will be downloaded to the PLC. Malbec
> > will
> > > > then be monitoring and controlling the process state, as well as
> > > generating
> > > > logs.
> > > >
> > > > This entire communication loop will go through Merlot as a gateway
> > > >
> > > > Best regards, Daniel.
> > > >
> > > >
> > > > El sáb, 19 de sept de 2026, 22:37, Tom NewChao <[email protected]
> >
> > > > escribió:
> > > >
> > > > > Hi Daniel,
> > > > >
> > > > > Congratulations on your first ASF contribution!
> > > > >
> > > > > I am also relatively new to the PLC4X community and am currently
> > > working
> > > > on
> > > > > the plc4net revival. It is encouraging to see another contributor
> > > working
> > > > > on industrial automation
> > > > > tooling.
> > > > >
> > > > > The separation between the S88 domain model, persistence adapters,
> > > > > application use cases, and the NetBeans UI looks very interesting.
> I
> > am
> > > > > also interested in how the physical
> > > > > model may eventually relate to PLC tags and industrial data
> sources.
> > > > >
> > > > > I just wanted to say hello and wish you success with the
> > contribution.
> > > I
> > > > > look forward to following its progress.
> > > > >
> > > > > Best regards,
> > > > > Tom
> > > > >
> > > > > Daniel Campos <[email protected]> 于2026年9月19日周六
> > > 05:02写道:
> > > > >
> > > > > > Hi everyone, let me introduce myself again. I'm Daniel Campos
> > > (Dandrvms
> > > > > or
> > > > > > dacmz), from the CEOS Automatización team, working alongside Luis
> > > > > Rodríguez
> > > > > > and César García. As I mentioned before, I'm working on Malbec,
> an
> > > IDE
> > > > > for
> > > > > > industrial configuration built on top of the NetBeans RCP.
> > > > > >
> > > > > > Today I just made my first PR for this project in the feature/app
> > > > branch
> > > > > at
> > > > > > plc4x-extras, marking my very first contribution to the
> foundation.
> > > > Here
> > > > > is
> > > > > > a breakdown of the project structure:
> > > > > >
> > > > > >
> > > > > >    - /api : Domain model and ports. S88Element is the minimal
> model
> > > > unit:
> > > > > >    an S88 entity that can hold children and structured property
> > bags.
> > > > > >    S88PlantModel is the orchestrator: the in-memory root of the
> > > element
> > > > > > tree,
> > > > > >    the registry of classes/enumerations, and the event bus.
> > > Supporting
> > > > > > classes
> > > > > >    provide S88ElementClass (reusable property templates),
> > > > S88Enumeration,
> > > > > >    S88Level, DataType/EngineeringUnits/Magnitude, the
> > > > > >    S88ChangeEvent/S88ChangeListener observer contract, and the
> > > > > persistence
> > > > > >    contracts S88Repository, S88Storage and S88RepositoryProvider.
> > > > > >    - /data : Serialization adapters implementing the contracts
> > above.
> > > > > >    B2MMLRepositoryImpl parses/writes the main model using B2MML,
> > the
> > > > MESA
> > > > > >    International schemas compiled with XMLBeans.
> AXMLRepositoryImpl
> > > > > >    imports/exports the Rockwell FactoryTalk Batch .axml format.
> > > Formats
> > > > > are
> > > > > >    pluggable: a new format is a new S88RepositoryProvider
> > discovered
> > > > > > through
> > > > > >    NetBeans Lookup.
> > > > > >    - /core : Application layer. A set of use cases (create,
> update,
> > > > > delete,
> > > > > >    rename elements; manage class templates and struct entries)
> are
> > > the
> > > > > only
> > > > > >    way to mutate the model. Every mutation fires an
> S88ChangeEvent,
> > > so
> > > > > the
> > > > > > UI
> > > > > >    stays in sync.
> > > > > >    - /plant : The NetBeans sub-project in charge of the plant
> > model's
> > > > > >    lifecycle: project providers and factories, the hierarchy tree
> > > nodes
> > > > > > (one
> > > > > >    per S88 level), project actions (import/export, templates,
> > > > > enumerations,
> > > > > >    delete), and the shared panel/dialog builders reused across
> the
> > > > > > different
> > > > > >    S88 levels. Loading and saving delegates to data repositories;
> > UI
> > > > > > refresh
> > > > > >    is event-driven, not manual.
> > > > > >    - /project : The NetBeans project type (wizard, factory,
> folder
> > > > > >    installer, logical view) that hosts the plant sub-project.
> > > > > >    - /batch : Placeholder module reserved for future recipe
> > > management
> > > > > and
> > > > > >    supervision.
> > > > > >
> > > > > > The Process Cell config editor is intentionally empty; the
> > properties
> > > > > > dialog exposes only the General tab (name, level, class, display
> > > > > creation),
> > > > > > while content tabs (Attribute Tags, Parameters/Reports,
> > Arbitration,
> > > > > etc.)
> > > > > > are placeholders. These are the targets of upcoming updates.
> > > > > >
> > > > > > Recipes/batch supervision and generic ISA-88 runtime support are
> > > > outside
> > > > > > the scope of this PR (batch is a placeholder).
> > > > > >
> > > > > > Best regards, Daniel.
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to