This plugin intends at converting PIVOT data from/to OPCUA north plugin.
The filter implements the Fledge Filter plugin interface (see filter_plugins).
Filter configuration
See Plugins configuration design for examples and details
The "config
" parameter of "plugin_init
" call shall include :
- A "
exchanged_data
" category with the same content as provided to the OPCUA north plugin. This section is mandatory so that the filter plugin can convert the PIVOT type to OPCUA type.
Notes :
- All types not listed in this table are not supported in current version.
- The current implementation provides a default mapping rule for each known type, but some new rules might be added in the future and configured using the "
alternate_mapping_rule
" option in its parameters.
Filter interface
The "plugin_ingest
" call will convert each "reading
" of "reading_set
" as follow:
- The Reading fields "id", "TimeStamp", "userTimestamp" and "asset_name" are unchanged.
- The Reading field "reading" is updated with an JSON object
{'data_object' : {...}}
. The content of object under'data_object'
is given below.
The <Root> key of PIVOT object can be:
Reading key | Content |
---|---|
PIVOT.GTIS | Tele Signal |
PIVOT.GTIM | Tele Measurement |
PIVOT.GTIC | Not supported |
In the following table: <type>
is equal to
- "SpsTyp", "DpsTyp" (for GTIS)
- "MvTyp" (for GTIM)
- "SpcTyp", "DpcTyp", "IncType" or "ApcTyp" (for GTIC)
The "BscTyp" is not supported currently.
Type of data
The pugin can receive either PIVOT readings that are converted to OPCUA readings or receive OPCUA readings that are converted to PIVOT readings.
The plugin is not responsible for checking that the conversion matches its actual role: typically if the plugin is attached to a North OPCUA service, it will be expected to convert OPCUA to PIVOT, but will anyway convert PIVOT to OPCUA if receiving PIVOT instead of OPCUA as reading. This consistency must be ensured by configuration.
Thus the ruls for the conversion is:
- For each object in the reading:
- If the object name is "PIVOT", convert the PIVOT reading to OPCUA
- If the object name is "control_object", convert the OPCUA reading to PIVOT
Converting monitoring data types
For TM/TS, the filter receives PIVOT reading (from south) and creates a corresponding OPC UA reading. The created OPCUA reading has the following JSON equivalent format:
{ "data_object":{ "do_cot": <int>, "do_confirmation": <int>, "do_comingfrom": <string>, "do_id": <string>, "do_type": <string>, "do_quality": <int>, "do_ts_quality": <int>, "do_value_quality": <string>, "do_source": <string>, "do_ts": <int>, "do_ts_org": <string>, "do_ts_validity": <string>, "do_value": <depends on data type...> } }
The content under <Root> will convert the pivot to a opcua object as follow:
Key | Type | Default Value | opcua.data_object.<...> | Note |
---|---|---|---|---|
<Root>.Cause.stVal | Integer | Mandatory | do_cot | See Cause of Transmission |
<Root>.Confirmation.stVal | Boolean | false | do_confirmation | |
<Root>.ComingFrom | String | Mandatory | do_comingfrom | Any protocol name ("iec104" ,"opcua", ...) |
<Root>.Identifier | String | Mandatory | do_id do_type | do_id = PIVOT ID do_type = "opcua_sps" | "opcua_dps" | "opcua_mvi" | "opcua_mvf". Other types not supported in current version. |
| PIVOT : Object | 0 | do_quality | OR-Mask of following values:
|
<Root>.<type>.t.TimeQuality | Integer | 0 | do_ts_quality | OR-Mask of following values:
|
<Root>.<type>.q.Source | String | "process" | do_source | "process" | "substituted" |
<Root>.<type>.q.Validity | String | Mandatory | do_value_quality | "good" | "invalid" | "reserved" | "questionable" |
<Root>.<type>.t.SecondSinceEpoch | Integer | 0 | do_ts | Unit = seconds since Epoch (January, 1st 1970) |
<Root>.TmOrg.stVal | String | "genuine" | do_ts_org | "genuine" | "substituted" |
<Root>.TmValidity.stVal | String | "good" | do_ts_validity | "good" | "invalid" | "reserved" | "questionable" |
<Root>.SpsTyp.stVal | Boolean | Mandatory | do_value | |
<Root>.DpsTyp.stVal | String | Mandatory | do_value | |
<Root>.MvTyp.mag.f | Float | Mandatory | do_value | |
<Root>.MvTyp.mag.i | Integer | Mandatory | do_value |
Converting commands data types
For TC, the filter receives OPCUA reading (from north) and creates a corresponding PIVOT reading.
The content under <Root> will convert the OPCUA command objet to a pivot object as follow:
Key | Type | Default value | opcua.control_object.<...> | Note |
---|---|---|---|---|
<Root>.Identifier | String | co_id | PIVOT identifier. | |
<Root>.Select.stVal | Boolean | false | co_se | - 0 is mapped with false, for Execute - 1 is mapped with true, for Select before Execute |
<Root>.ComingFrom | String | "opcua" | N.A. | This plugin should always use the value "opcua" when converting to pivot |
<Root>.<type> | String | co_type | (see | |
<Root>.<type>.q.test | Boolean | false | co_test | |
<Root>.<type>.t.SecondSinceEpoch | Integer | co_ts | ||
| Float | co_value | Float 32 | |
| String | co_value | intermediate-state | off | on | bad-state | |
<Root>.IncTyp.ctlVal | Integer | co_value | Int 32 | |
<Root>.SpcTyp.ctlVal | Boolean | co_value | 0 or 1 | |
<Root>.BscTyp.ctlVal | String | co_value | stop | lower | higher | reserved |