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 | |
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 | |
Name of ICC domain (string size <= 32) | yes | ||
icc.datapoints | Array of datapoints in ICC | yes | |
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 | |
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 | |
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 | ||
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.