ICCP TASE.2 north plugin

TASE.2 Protocol stack configuration

The TASE.2 protocol stack configuration specifies communication parameters.

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

srv_ip

IP address for Server/Client

IP address

Yes

port

Port number for server/client

default = 102

Yes

passive

Determine if endpoint passive or active

default = true

Yes

remoteApTitle

remote AP Title and AeQualifier

"remoteApTitle" : "1.1.1.998:12"

Yes

localApTitle

local AP Title and AeQualifier

"localApTitle" : "1.1.1.999:12"

Yes

tls

Use TLS

default = false

No

Configuration structure

{
  "protocol_stack" : {
      "name" : "tase2north",
      "version" : "1.0",
      "transport_layer" : {
          "srv_ip" : "0.0.0.0",
          "port" : 102,
          "passive" : true,
          "localApTitle" : "1.1.1.999:12",
          "remoteApTitle" : "1.1.1.998:12"
    }
  }
}

Model Configuration:

Atrributes

Definition

Possible Values

Required

vcc

VCC configuration


yes

vcc.datapoints

Array of datapoints in VCC


yes

vcc.datapoints.name

Name of datapoint

string

yes

vcc.datapoints.type

Datapoint type

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

yes

vcc.datapoints.hasCOV

hasCOV

true, false

no

vcc.datapoints.mode

Control mode

“direct” or “select”

no

vcc.datapoints.hasTag


true, false

no

vcc.datapoints.checkBackId

Checkback ID for select (int)


no

icc

Array of ICC domains


no

icc.name

Name of ICC domain (string size <= 32)


yes

icc.datapoints

Array of datapoints in ICC


yes

icc.datapoints.name

Name of datapoint

(string size <= 32)

string

yes

icc.datapoints.type

Datapoint type

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

yes

icc.datapoints.hasCOV

hasCOV

default = false

no

icc.datapoints.mode

Control mode

“direct” or “select”

no

icc.datapoints.hasTag


default = false

no

icc.datapoints.checkBackId

Checkback ID for select(int)


no

bilateral_tables

Array of bilateral tables


no

bilateral_tables.name

Name of bilateral table


yes

bilateral_tables.icc

Bilateral table ICC domain


yes

bilateral_tables.apTitle

AP Title


yes

bilateral_tables.aeQualifer

AE qualifier


yes

bilateral_tables.datapoints

Datapoints in bilateral table


yes

bilateral_tables.datapoints.name

Name of datapoints


yes

Configuration structure

{
    "model_conf" : {

        "vcc" : {
            "datapoints" : [
                {
                    "name" : "datapoint1",
                    "type" : "StateQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapoint2",
                    "type" : "DiscreteQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointReal",
                    "type" : "Real",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQ",
                    "type" : "RealQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQTime",
                    "type" : "RealQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQTimeExt",
                    "type" : "RealQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointState",
                    "type" : "State",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQ",
                    "type" : "StateQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQTime",
                    "type" : "StateQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQTimeExt",
                    "type" : "StateQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscrete",
                    "type" : "Discrete",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQ",
                    "type" : "DiscreteQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQTime",
                    "type" : "DiscreteQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQTimeExt",
                    "type" : "DiscreteQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSup",
                    "type" : "StateSup",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQ",
                    "type" : "StateSupQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQTime",
                    "type" : "StateSupQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQTimeExt",
                    "type" : "StateSupQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "command1",
                    "type" : "Command",
                    "mode" : "direct",
                    "hasTag" : false,
                    "checkBackId" : 123
                }
            ]
        },
        "icc" : [ {
            "name" : "icc1",
            "datapoints" : [
                {
                    "name" : "datapoint1",
                    "type" : "StateQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapoint2",
                    "type" : "DiscreteQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointReal",
                    "type" : "Real",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQ",
                    "type" : "RealQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQTime",
                    "type" : "RealQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointRealQTimeExt",
                    "type" : "RealQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointState",
                    "type" : "State",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQ",
                    "type" : "StateQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQTime",
                    "type" : "StateQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateQTimeExt",
                    "type" : "StateQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscrete",
                    "type" : "Discrete",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQ",
                    "type" : "DiscreteQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQTime",
                    "type" : "DiscreteQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointDiscreteQTimeExt",
                    "type" : "DiscreteQTimeExt",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSup",
                    "type" : "StateSup",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQ",
                    "type" : "StateSupQ",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQTime",
                    "type" : "StateSupQTime",
                    "hasCOV" : false
                },
                {
                    "name" : "datapointStateSupQTimeExt",
                    "type" : "StateSupQTimeExt",
                    "hasCOV" : false
                }
            ]
        } ],
        "bilateral_tables" : [
            {
                "name" : "BLT_MZA_001_V1",
                "icc" : "icc1",
                "apTitle" : "1.1.1.998",
                "aeQualifier" : 12,
                "datapoints" : [
                    { "name" : "datapoint1" },
                    { "name" : "datapointReal" }
                ]
            },
            {
                "name" : "BLT_MZA_002_V1",
                "icc" : "icc1",
                "apTitle" : "1.1.1.999",
                "aeQualifier" : 12,
                "datapoints" : [
                    { "name" : "datapoint1" },
                    { "name" : "datapoint2" },
                    { "name" : "datapointReal" },
                    { "name" : "datapointRealQ" },
                    { "name" : "datapointRealQTime" },
                    { "name" : "datapointRealQTimeExt" },
                    { "name" : "datapointState" },
                    { "name" : "datapointStateQ" },
                    { "name" : "datapointStateQTime" },
                    { "name" : "datapointStateQTimeExt" },
                    { "name" : "datapointDiscrete" },
                    { "name" : "datapointDiscreteQ" },
                    { "name" : "datapointDiscreteQTime" },
                    { "name" : "datapointDiscreteQTimeExt" },
                    { "name" : "datapointStateSup" },
                    { "name" : "datapointStateSupQ" },
                    { "name" : "datapointStateSupQTime" },
                    { "name" : "datapointStateSupQTimeExt" }
                ]
            }
        ],
        "dataset_transfer_sets" :
            [ { "domain" : "icc1", "name" : "DSTrans1" } ],
        "datasets" : [ {
            "name" : "ds1",
            "domain" : "icc1",
            "datapoints" :
                [ "datapointReal", "datapointState" ]
        } ]
    }
}

Exchanged Data:

Attributes

Definition

Example

Required

datapoints

Exchange data object array


Yes

datapoints.pivot_id

Pivot_id used in filters


Yes

datapoints.label

Datapoint label


Yes

datapoints.protocols



Yes

datapoints.protocols.name

Protocol name (tase2)


Yes

datapoints.protocols.ref

Data object’s object reference (domain:name)

"icc1:datapoint1"

Yes

Example:

{
  "exchanged_data" : {
    "datapoints" : [
        {
            "pivot_id" : "TS1",
            "label" : "TS1",
            "protocols" : [
                { "name" : "tase2", "ref" : "icc1:datapoint1" }
            ]
        },
        {
            "pivot_id" : "TS2",
            "label" : "TS2",
            "protocols" : [
                { "name" : "tase2", "ref" : "icc1:datapoint2" }
            ]
        },
        {
            "pivot_id" : "TS3",
            "label" : "TS3",
            "protocols" : [ {
                "name" : "tase2",
                "ref" : "icc1:datapointReal"
            } ]
        },
        {
            "pivot_id" : "TS4",
            "label" : "TS4",
            "protocols" : [ {
                "name" : "tase2",
                "ref" : "icc1:datapointRealQ"
            } ]
        },
        {
            "pivot_id" : "TS5",
            "label" : "TS5",
            "protocols" : [ {
                "name" : "tase2",
                "ref" : "icc1:datapointRealQTime"
            } ]
        }
      ]
  }
}

TASE.2 Data object format

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.

{
   "private_key":"tase2_client.key",
   "own_cert":"tase2_client.cer",
   "ca_certs":[
      {
         "cert_file":"tase2_ca.cer"
      },
      {
         "cert_file":"tase2_ca2.cer"
      }
   ],
   "remote_certs":[
      {
         "cert_file":"tase2_server.cer"
      }
   ]
}


Certificates and keys:

The certificates should be a .cert, .cer, .crt, .pem, .p12, .der file.

The keys should be a .key or .pem file.

Certificate store

Certificates and keys can be added by clicking the “Import” button in the Certificate Store tab in the Fledge GUI.

TLS Parameters


Set the key and certificate values in the TLS parameters section of the plugin configuration.