An Asset is a logical representation of a field device, described by a list of Channels. The Asset uses a specific Driver instance to communicate with the underlying device and it models a generic device resource as a Channel. A register in a PLC or a GATT Characteristic in a Bluetooth device are examples of Channels. In this way, each Asset has multiple Channels for reading and writing data from/to an Industrial Device.
To further describe the concept of Channel and Asset, the following table shows a set of PLC register addresses as provided in a typical PLC documentation.
|Counter 3||INPUT REGISTERS||515|
|Quad Counter||INPUT REGISTERS||520|
|Toggle 4||DISCRETE INPUTS||2052|
|Toggle 5||DISCRETE INPUTS||2053|
|Toggle 6||DISCRETE INPUTS||2054|
|Reset Counter 3||COILS||3075|
|Reset Quad Counter||COILS||3084|
The corresponding Channels definition in the Asset is as follows:
As shown in the previous image, the Channel definition in an Asset results easily mappable to what available in a generic PLC documentation.
Once defined the Channels in an Asset, a simple Java application that leverages the Asset API can easily communicate with the Field device by simply referring to the specific Channel of interest.
- enabled: each channel can be separately enabled using this flag.
- name: unique user-friendly name for a channel
- type: represents the type of operation supported. Possible values are: READ, WRITE, READ/WRITE
- value.type: represents the data type that will be used when creating the Wire Envelope for the connected components.
- listen: if supported by the associated driver, allows to receive notifications by the driver on events
Other Asset Configurations
- asset.desc: a user friendly description of the asset
- emit.all.channels: specifies whether the values of all READ or READ_WRITE channels should be emitted in case of a channel event. If set to true, the values for all channels will be read and emitted, if set to false, only the value for the channel related to the event will be emitted.
- timestamp.mode: if set to PER_CHANNEL, the component will emit a driver-generated timestamp per channel property. If set to SINGLE_ASSET_GENERATED, the component will emit a single timestamp per request, generated by the Asset itself before emitting the envelope. If set to SINGLE_DRIVER_GENERATED_MAX or SINGLE_DRIVER_GENERATED_MIN, the component will emit a single driver generated timestamp being respectively the max (most recent) or min (oldest) among the timestamps of the channels.
- emit.errors: Specifies whether errors should be included or not in the emitted envelope. Default is false.