ICCP TASE.2 south plugin

TASE.2 Protocol stack configuration

The TASE2 protocol stack configuration specifies communication parameters and is a collection of entries containing information about OSI Transport and OSI Application layers objects.

Each entry is comprised of attributes that describe the object. All the configuration data are structured using JSON.

Each entry shall be mapped with the corresponding configuration function in the chosen implementation protocol library.

Attributes definition

Transport Layer:


Attributes

Definition

Example

Required

version

version number of the configuration file

2 digits x.y => x = major change, y = minor change

Yes

name

this identifies the protocol stack

iec104client, iec104server, tase2client, tase2server, 61850client, 61850server, etc...

Yes

connections.ip_addr

IP address to remote TASE.2 endpoint

IP address

Yes

connections.port

port number to remote TASE.2 endpoint

default = 102

Yes

connections.osi.remote_tsel

remote transport layer address

valid TSelector

No

connections.osi.remote_ssel

remote session layer address

valid SSelector

No

connections.osi.remote_psel

remote presentation layer address

valid PSelector

No

connections.osi.remote_ap_title

remote OSI AP Title

any non empty string following the format "int0,int1,int2,int3", ex: 1,3,9999,23

No

connections.osi.remote_ae_qualifier

remote OSI AE Qualifier

integer

No

connections.osi.local_tsel

local transport layer address

valid TSelector

No

connections.osi.local_ssel

local session layer address

valid SSelector

No

connections.osi.local_psel

local presentation layer address

valid PSelector

No

connections.osi.local_ap_title

local OSI AP Title

any non empty string following the format "int0,int1,int2,int3", ex: 1,3,9999,23

No

connections.osi.local_ae_qualifier

local OSI AE Qualifier

integer

No

connections

array of connections to endpoints


Yes

connections.tls

Use TLS

false

No

Application Layer:

Attributes

Definition

Example

Required

version

version number of the configuration file

2 digits x.y => x = major change, y = minor change

Yes

name

this identifies the protocol stack

iec104client, iec104server, tase2client, tase2server, 61850client, 61850server, etc...

Yes

connections.ip_addr

IP address to remote TASE.2 endpoint

IP address

Yes

connections.port

port number to remote TASE.2 endpoint

default = 102

Yes

connections.osi.remote_tsel

remote transport layer address

valid TSelector

No

connections.osi.remote_ssel

remote session layer address

valid SSelector

No

connections.osi.remote_psel

remote presentation layer address

valid PSelector

No

connections.osi.remote_ap_title

remote OSI AP Title

any non empty string following the format "int0,int1,int2,int3", ex: 1,3,9999,23

No

connections.osi.remote_ae_qualifier

remote OSI AE Qualifier

integer

No

connections.osi.local_tsel

local transport layer address

valid TSelector

No

connections.osi.local_ssel

local session layer address

valid SSelector

No

connections.osi.local_psel

local presentation layer address

valid PSelector

No

connections.osi.local_ap_title

local OSI AP Title

any non empty string following the format "int0,int1,int2,int3", ex: 1,3,9999,23

No

connections.osi.local_ae_qualifier

local OSI AE Qualifier

integer

No

connections

array of connections to endpoints


Yes

connections.tls

Use TLS

false

No

Application Layer:

Attributes

Definition

Example

Required

Attributes

Definition

Example

Required

polling_interval

defines the polling interval in ms (0 = no polling)

100

Yes

datasets

Array of datasets


No

datasets.domain

Dataset’s Domain


Yes

datasets.dataset_ref

Dataset reference


Yes

datasets.entries

Array of dataset entries

"entries": [ "simpleIOGenericIO/GGIO1.AnIn1[MX]", "simpleIOGenericIO/GGIO1.AnIn2[MX]", "simpleIOGenericIO/GGIO1.AnIn3[MX]" ]


Yes

datasets.dynamic

If dataset is dynamic, default is false (Static)


No

dataset_transfer_sets

Array of dataset transfer sets


No

dataset_transfer_sets.domain

Dataset Transfer set domain reference


Yes

dataset_transfer_sets.dsts_ref

Dataset Transfer set reference


Yes

dataset_transfer_sets.dataset_ref

Dataset Transfer Set’s Dataset reference


No

dataset_transfer_sets.dsConditions

Transfer set’s trigger options

["interval", "integrity", "change", "operator_request", "external_event"]

No

dataset_tranfer_sets.startTime

Transfer set’s start time

int

No

dataset_tranfer_sets.bufTm

Transfer set’s buffer time

in seconds

int

No

dataset_tranfer_sets.integrityCheck

Transfer set’s integrity check interval in seconds

int

No

dataset_tranfer_sets.critical

Whether transfer set is critical

bool

No

dataset_tranfer_sets.rbe

RBE

bool


dataset_transfer_set.allChangesReported

All changes reported


No

Configuration structure


{
    "protocol_stack": {
        "name": "tase2north",
        "version": "1.0",
        "transport_layer": {
            "connections" : [ 
              {
                "ip_addr" : "127.0.0.1",
                "port" : 10002,
                "osi" : {
                    "local_ap_title" : "1.1.1.998",
                    "local_ae_qualifier" : 12,
                    "remote_ap_title" : "1.1.1.999",
                    "remote_ae_qualifier" : 12
                },
                "tls" : false
              } 
            ]
        },
        "application_layer": {
            "polling_interval": 1000,
            "datasets": [
                {
                    "domain": "icc1",
                    "dataset_ref": "DataSet1",
                    "entries": [
                        "icc1:discreteDatapoint1",
                        "icc1:realDatapoint1",
                        "icc1:stateDatapoint1"
                    ],
                    "dynamic": true
                }
            ],
            "dataset_transfer_sets": [
                {
                    "domain": "icc1",
                    "name": "dsts1",
                    "dataset_ref": "DataSet1",
                    "dsConditions": [
                        "interval",
                        "change"
                    ],
                    "startTime": 50,
                    "interval": 5,
                    "bufTm": 5,
                    "integrityCheck": 60,
                    "critical": false,
                    "rbe": false,
                    "allChangesReported": true
                }
            ]
        }
    }
}

Exchanged Data:

Attributes

Definition

Example

Required

datapoints

Exchange data object array


Yes

datapoints.label

Datapoint label


Yes

datapoints.protocols



Yes

datapoints.protocols.name

Protocol name (tase2)


Yes

datapoints.protocols.ref

Data object’s object reference


Yes

datapoints.protocols.typeid

Data object’s type

“Command”

Yes

Example

{
    "exchanged_data" : {
        "datapoints" : [
            {
                "label" : "TS3",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointReal",
                    "typeid" : "Real"
                } ]
            },
            {
                "label" : "TS4",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointRealQ",
                    "typeid" : "RealQ"
                } ]
            },
            {
                "label" : "TS5",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointRealQTime",
                    "typeid" : "RealQTime"
                } ]
            },
            {
                "label" : "TS6",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointRealQTimeExt",
                    "typeid" : "RealQTimeExt"
                } ]
            },
            {
                "label" : "TS7",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointState",
                    "typeid" : "State"
                } ]
            },
            {
                "label" : "TS8",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateQ",
                    "typeid" : "StateQ"
                } ]
            },
            {
                "label" : "TS9",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateQTime",
                    "typeid" : "StateQTime"
                } ]
            },
            {
                "label" : "TS10",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateQTimeExt",
                    "typeid" : "StateQTimeExt"
                } ]
            },
            {
                "label" : "TS11",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointDiscrete",
                    "typeid" : "Discrete"
                } ]
            },
            {
                "label" : "TS12",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointDiscreteQ",
                    "typeid" : "DiscreteQ"
                } ]
            },
            {
                "label" : "TS13",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointDiscreteQTime",
                    "typeid" : "DiscreteQTime"
                } ]
            },
            {
                "label" : "TS14",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointDiscreteQTimeExt",
                    "typeid" : "DiscreteQTimeExt"
                } ]
            },
            {
                "label" : "TS15",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateSup",
                    "typeid" : "StateSup"
                } ]
            },
            {
                "label" : "TS16",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateSupQ",
                    "typeid" : "StateSupQ"
                } ]
            },
            {
                "label" : "TS17",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateSupQTime",
                    "typeid" : "StateSupQTime"
                } ]
            },
            {
                "label" : "TS18",
                "protocols" : [ {
                    "name" : "tase2",
                    "ref" : "icc1:datapointStateSupQTimeExt",
                    "typeid" : "StateSupQTimeExt"
                } ]
            }
        ]
    }
}

TASE.2 Data object format

Attribute

Description

Type

Possible values

Attribute

Description

Type

Possible values

do_type

Datapoint type

String

“State”, “StateQ”, “StateQTime”, “StateQTimeExt”, “Discrete”, “DiscreteQ”, “DiscreteQTime”, “DiscreteQTimeExt”, “Real”, “RealQ”, “RealQTime”, “RealQTimeExt”, “StateSup”, “StateSupQ”, “StateSupQTime”, “StateSupQTimeExt”

do_domain

Name of domain

String


do_name

Name of datapoint

String


do_value

Value of datapoint

Int or Double


do_validity

Validity of datapoint

String

“valid”, “held”, “invalid”, “suspect”

do_cs

Current Source

String

“telemetered”, “calculated”, “entered”, “estimated”

do_quality_normal_value

Normal Value Quality Flag

String

“normal”, “abnormal”

do_ts

Timestamp in ms

int64_t


do_ts_validity

Timestamp validity

String



Example data object:

{"data_object": 
  {"do_type" : "DiscreteQTimeExt", 
   "do_domain" : "icc1", 
   "do_name": "datapoint1", 
   "do_value": 1, 
   "do_validity": "valid", 
   "do_cs":"telemetered", 
   "do_quality_normal_value": 
   "normal", 
 "do_ts_validity": "valid"
}
}

TASE.2 Command Object Representation

Attribute

Description

Type

Possible values

co_type

Datapoint type

String

“Command”, “SetPointReal”, “SetPointDiscrete”

co_scope

Scope

String


co_domain

Name of domain

String


co_name

Name of datapoint

String


co_value

Value of datapoint

Int or Double


co_se

Select

bool


co_ts

Timestamp in ms

int64_t



Example Command Object:

 
  {"co_type" : "DiscreteQTimeExt", 
   "co_scope" : "domain", 
   "co_domain" : "icc1", 
   "co_name": "datapoint1", 
   "co_value": 1, 
   "co_se": true,
   "co_ts": 346797823
   }

TLS configuration

The TASE2 standard can also be used with TLS to realize secure and authenticated connections.

Parameters are needed to set up the TLS secured connection:

private_key

client private key

valid private key

YES

own_cert

client certificate

valid certificate

YES

ca_certs

allows to specify the ca certificates if not included in the owner certificate

list of valid certificates

NO

remote_certs

allows to specify the server certificates, so if specified, only these certificates are accepted

list of valid certificates

NO

Fledge's certificate store allows certificates to be stored and used by the south plugins.