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 |
| 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 | ||
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.