Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

AttributeDescriptionExpected valuesMandatory
namethis identifies the protocol stackiec104client, iec104server, tase2client, tase2server, 61850client, 61850server, etc...Yes
versionversion number of the configuration file2 digits x.y => x = major change, y = minor changeYes
redundancy_groupsarray of redundancy groups
Yes
redundancy_groups.connectionsarray of connections of a given redundancy group
Yes
redundancy_groups.connections.clt_ipIEC 104 client addressIP addressYes
redundancy_groups.rg_namethis identifies the redundancy groupAny non empty stringYes
srv_ipServer IP addressIP address, machine's default IP for a given interface, default = 0.0.0.0No
portThis defines the TCP/IP port to be used by the server.default = 2404No
tlsactivation of TLS (see tls configuration chapter for details)TRUE, FALSE, default = FALSENo
k_valueMaximum number of outstanding (unacknowledged) APDU's at a given timedefault = 12, range : 1 to 32767No
w_valueAcknowledge the reception latest after this number of APDU'sdefault = 8, range : 1 to 32767No
t0_timeouttime out of connection establishmentdefault = 30 seconds, range : 1 to 255No
t1_timeouttime out for send or test APDU'sdefault = 15 seconds, range : 1 to 255No
t2_timeouttime out for acknowledges in case of no data messages (t2 < t1)default = 10 seconds, range : 1 to 255No
t3_timeouttime out for sending test framesdefault = 20 seconds, range : 1 to 172800No
ca_asdu_sizesize of "Common Address of ASDU"default = 2 (byte), enum: 1 or 2No
ioaddr_sizesize of 'Information Object Address'default = 3 (byte), enum: 1, 2 or 3No
mode

"accept_always": accept connection or maintain connection with center independently from the south asset connection status 

"accept_if_south_connx_started": accept connection or maintain connection with center only if south asset connection is established and running

default = "accept_always", enum: "accept_always" or "accept_if_south_connx_started"
ca_asdu_sizesize of "Common Address of ASDU"default = 2 (byte), enum: 1 or 2No
ioaddr_sizesize of 'Information Object Address'default = 3 (byte), enum: 1, 2 or 3No
asdu_size

maximum ASDU size in transmission direction,

asdu_size

maximum ASDU size in transmission direction, if set to "0" => maximum possible value is automatically used.

default = 0 (byte), range : 0 to 255No
asdu_queue_sizeminimum number of ASDUs that can be stored in the asdu bufferdefault = 100No
time_syncIf set on "TRUE" this parameter allows to synchronize the clock of the local computer by the server. If set on "FALSE", the clock is not synchronized.TRUE, FALSE, default = FALSENo
cmd_exec_timeoutDefines the command execution monitoring timeout in seconds.default = 20 seconds, range : 1 to 3 600No
cmd_recv_timeoutThis parameter defines the highest allowable deviation of received command time tag and local clock in seconds. If the difference is too big, command is ignored.default = 0 (disabled), range : 0 to 3 600No
accept_cmd_with_timeIf set to 0, then accept no commands with timestamp, if set to 1 accept only commands with timestamp, if set to 2, then accept bothdefault =1, enum: 0, 1 or 2No
filter_listList of Authorized Originators (array) → only commands from authorized originator addresses are accepted.default = emptyNo
filter_list.orig_addrOriginator addressenum: 0, 1, ..., N
cmd_destDefines the destination service on which to execute the command default = broadcastNo

Configuration JSON structure

south_monitoringconnection loss and gi failure handling feature
Yes
south_monitoring.assetsarray of assets name used to monitor the connection and gi status information from the southdefault = [CONSTAT-1, CONSTAT-2]No

Configuration JSON structure

Code Block
languagepy
{
   "protocol_stack":{
      
Code Block
languagejs
{
   "protocol_stack":{
      "name":"iec104server",
      "version":"1.0",
      "transport_layer":{
         "redundancy_groups":[
            {
               "connections":[
                  {
                     "clt_ip":"192.168.0.10"
                  },
                  {
                     "clt_ip":"192.168.0.11"
                  },
                  {
                     "clt_ip":"10.152.1.10"
                  },
                  {
                     "clt_ip":"10.152.1.11"
                  }
               ],
               "rg_name":"red-group-1"
            },
            {
               "connections":[
                  {
                     "clt_ip":"192.168.0.10"
                  },
                  {
                     "clt_ip":"192.168.0.11"
                  },
                  {
                     "clt_ip":"192.168.0.12"
                  },
                  {
                     "clt_ip":"192.168.0.14"
                  },
                  {
                     "clt_ip":"10.152.1.10"
                  },
                  {
                     "clt_ip":"10.152.1.11"
                  },
                  {
                     "clt_ip":"10.152.1.12"
                  },
                  {
                     "clt_ip":"10.152.1.13"
                  }
               ],
               "rg_name":"red-group-2"
            },
            ],{
               "srv_rg_name":"catch-all"
            }
         ],
         "srv_ip":"0.0.0.0",
         "port":2404,
         "tls":false,
         "k_value":12,
         "w_value":8,
         "t0_timeout":30,
         "t1_timeout":15,
         "t2_timeout":10,
         "t3_timeout":20,
         },"mode":"accept_always"
      },
      "application_layer":{
         "ca_asdu_size":2,
         "ioaddr_size":3,
         "asdu_size":0,
         "asdu_queue_size":100,
         "time_sync":false,
         "cmd_exec_timeout":20,
         "cmd_recv_timeout":0,
         "cmd_dest":"broadcast",
         "accept_cmd_with_time":1,
         "filter_orig":false,
         "filter_list":[
            {
               "orig_addr":1
            },
            {
               "orig_addr":2
            }
         ]
      },
   }
}

TLS configuration

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

Parameters are needed to set up the TLS secured connection:

...

   "south_monitoring":[
         {
            "asset":"CONSTAT-1"
         },
         {
            "asset":"CONSTAT-2"
         }
      ]
   }
}

TLS configuration

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

Parameters are needed to set up the TLS secured connection:

AttributeDescriptionExpected valuesMandatory
private_keyserver private keyvalid private keyYES
own_certserver certificatevalid certificateYES
ca_certsallows to specify the ca certificates if not included in the owner certificatelist of valid certificatesNO
remote_certsallows to specify the clients certificates, so if specified, only these certificates are acceptedlist of valid certificatesNO

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

Code Block
languagepy
{
   "private_key":"iec104_server.key",
   "own_cert":"iec104_server.cer",
   "ca_certs":[
      {
         "cert_file":"iec104_ca.cer"
      },
      {
         "cert_file":"iec104_ca2.cer"
      }
   ],
   "remote_certs":[
      {
         "cert_file":"iec104_client.cer"
      }
   ]
}

IEC 104 datapoint representation

This is the Datapoint representation of an IEC 104 ASDU for a command.

Warning

The current implementation does not use a json structure, so the order of parameters is mandatory.


Order

Attribute JSON (not currently used)

Description

Expected values

Mandatory

0co_typeType of ASDU
YES
1co_caCommon Address of ASDU
YES
2co_ioaInformation object address
YES
3co_cotCause of Transmission
YES
4co_negativeis negative command ?0 or 1 = negativeYES
5co_seSelect or Execute0 = Direct execute or 1 = Select before ExecuteYES
6co_testis test command ?0 or 1 = testYES
7co_tstimestamp
YES
8co_valueValue
YES
9co_quis pulse defined ?0 or 1 = pulse definedNO


Below is an example of an instance of an Operation object :

Code Block
languagepy
operation: {
    type: "IEC104Command",
    nbParams=9,
    names=[
        "co_type",

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

Code Block
languagejs
{
   "private_key":"iec104_server.key",
   "own_cert":"iec104_server.cer",
   "ca_certs":[
      {
         "cert_file":"iec104_ca.cer"
co_ca",
        }"co_ioa",
        {"co_cot",
         "certco_file":"iec104_ca2.cer"negative",
      }  "co_se",
   ],
     "remoteco_certstest":[,
        {
 "co_ts",
        "cert_file":"iec104_client.cerco_value"
      }],
   ]
}

IEC 104 datapoint representation

This is the Datapoint representation of an IEC 104 ASDU for a command.

Code Block
languagejs
{
   "command_object":{
 parameters=[
        "co_type":"type_idC_SC_TA_1",
       "co_ca":"ca "21441",
        "co_oa":"oa"74",
        "co_cot":"cot"7",
        "co_test":"istest0",
      "co_ioa":"ioa  "0",
        "co_value":"value0",
        "co_qu":"pulse1701426945586",
        "co_se":"Select/Execute",
	  "co_ts":"time_marker"
   }1"
    ],
    cmdDest="hnzsouth_s1"
}