[
https://issues.apache.org/jira/browse/PLC4X-113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16820853#comment-16820853
]
Matthias Milan Strljic commented on PLC4X-113:
----------------------------------------------
Yes, with this we have to determine how we are willing to support the various
domain-specific models such as OPC UA or ADS.
In my opinion, a complex value representation similar to JSON-a-like is a good
compromise. Because in many communication protocols you have a struct system.
If you go in this fieldbus direction, the entire system consists only of
periodically sent structures. Beckhoff ADS enables complex types that are
arranged like in a C++ memory of an assigned structure or object. The extreme
here is OPC UA, which consists of a node structure containing a series of
metainformations (hierarchy structure, inheritance, node attributes) and
complex types for values. There I would make a cut with opc ua and concentrate
on complex values or add a generic MataInformationType, which alone is only a
map with attributes. These additional meta-information then have the additional
effort to define "What are relevant meta-informations" "how to map them to the
structure". So first I would ignore meta-informations and use a JSON-a-like
approach to represent complex values.
The question "Why should we support complex types" is very simple in my mind.
In most protocols you can enclose complex types because you can only call each
attribute in a structure individually. This works, but is time-consuming,
performance-intensive, and loses a lot of consistent information. The advantage
of calling a complex object/structure is that the client gets the overall state
of that structure as a snapshot, so that this information is not lost when the
values are related.
> Implement support for complex field types in the PLC4X API
> ----------------------------------------------------------
>
> Key: PLC4X-113
> URL: https://issues.apache.org/jira/browse/PLC4X-113
> Project: Apache PLC4X
> Issue Type: New Feature
> Components: API
> Reporter: Julian Feinauer
> Priority: Critical
>
> *This is a (possibly) incompatible change.*
> Currently we have support for primitives as well as lists (arrays) as first
> class "ciitzens" of the PLC4X model.
> Especially, when thinking about OPC UA, but also other protocols like ADS
> (and even S7) support complex objects in their programming model.
> Thus, it is necessary to refactor / extend the API to support these complex
> objects.
> I guess we need at least
> * primitives
> * lists
> * maps (should be equal to "structs")
> Basically, this should be roughly equivalent to what one can represent with
> JSON.
> Thus, the API could be structured i two ways.. first, we could use an
> internal Node Tree to represent the objects, but we could also provide to use
> someone elses NodeTree or structure to represent the Objects.
> For example Jackson.. this would even allow us to directly map these objects
> to POJOs via Jackson.
> As example for such a model, one can look at that of Apache Calcite:
> https://github.com/apache/calcite/blob/3fa29455664bec0056c436491b369e0cd72242ea/core/src/main/java/org/apache/calcite/rel/type/RelDataType.java
> They have an interface with methods
> {code:java}
> public interface DataType
> {
> // Checker
> boolean isMap();
> boolean isList();
> boolean isPrimitive();
> // Getter for complex types
> DataType get(String key);
> DataType get(Long i);
>
> // Primitive getters
> long getLong();
> String getString();
> //...
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)