I just realized the mailing list stripped the image attachment from my
previous email. Here is the PlantUML script for the architecture
diagram I mentioned. You can copy and paste it into any PlantUML
viewer to see the visual representation.

@startuml
!theme plain
skinparam componentStyle rectangle
skinparam linetype polyline
skinparam nodesep 45
skinparam ranksep 90
skinparam padding 6
skinparam ArrowFontSize 11
skinparam NoteFontSize 11
skinparam DefaultFontSize 12
left to right direction

title Malbec & Merlot Architecture Ecosystem

package "Malbec IDE (NetBeans RCP)" {

    package "Design-Time Tooling" {
        component "S88 / Batch Project\n<<Project Type>>" as S88Proj
        component "Communications Project\n<<Project Type>>" as CommProj
    }

    package "Supervisory & Control" {
        component "Batch Module\n<<EPICS Client>>" as MalbecClient
    }

    component "Lifecycle Manager" as Lifecycle
}

package "Merlot (Runtime Gateway)" {
    database "boot.db\n(SQLite)" as BootDB
    component "PlcGroups &\nScan Engine" as ScanEngine
    component "EPICS / PVA Server" as PVAServer
}

package "Physical Layer" {
    component "PLC\n(Contiguous Memory / UDTs)" as PLC
}

' --- Relaciones principales (orden importa para el ranking) ---
S88Proj     .right.> CommProj   : Provides S88 Model\n(Lookup / plant.xml)
CommProj    -->      BootDB     : Generates
BootDB      -->      ScanEngine : Configures\nmappings
Lifecycle   -->      PVAServer  : Spawns & Manages\nInstances
ScanEngine  -up->    PVAServer  : Updates\nstate
ScanEngine  -->      PLC        : Bulk Read/Write\n(Apache PLC4X)
MalbecClient .down.> PVAServer  : Monitor & Command\n(EPICS gpClient)

' --- Notas ancladas AL LADO del elemento que describen ---
note right of S88Proj
  Defines Plant Hierarchy and Process variables.
end note

note right of CommProj
  Maps S88 Areas to physical
  devices. Generates boot.db.
end note

note right of MalbecClient
  Uses gpClient to subscribe
  to variables and send commands.
end note

@enduml


El jue, 24 sept 2026 a las 16:28, Daniel Campos
(<[email protected]>) escribió:
>
> 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