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
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, 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
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
languagejspy
{
   "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_ip":"0.0.0.0",
         "portrg_name":2404,"catch-all"
         "tls":false,
   }
      "k_value":12   ],
         "wsrv_valueip":8"0.0.0.0",
         "t0_timeoutport":302404,
         "t1_timeouttls":15false,
         "t2k_timeoutvalue":1012,
         "t3w_timeoutvalue":208,
         "modet0_timeout":"accept_always"30,
      },
       "applicationt1_layertimeout":{15,
         "cat2_asdu_sizetimeout":210,
         "ioaddrt3_sizetimeout":320,
         "mode":"asduaccept_sizealways":0,
      },
      "asduapplication_queue_sizelayer":100,{
         "timeca_asdu_syncsize":false2,
         "cmdioaddr_exec_timeoutsize":203,
         "cmdasdu_recv_timeoutsize":0,
         "cmdasdu_queue_destsize":"broadcast"100,
         "accept_cmd_with_timetime_sync":1false,
         "filtercmd_exec_listtimeout":[20,
            {
  "cmd_recv_timeout":0,
             "origcmd_addrdest":1"broadcast",
         "accept_cmd_with_time":1,
    },     "filter_list":[
            {
               "orig_addr":21
            },
            ]{
       },
        "southorig_monitoringaddr":[2
         {
   }
         ]
      },
      "south_monitoring":[
         {
            "asset":"CONSTAT-1"
         },
         {
            "asset":"CONSTAT-2"
         }
      ]
   }
}

...

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

Code Block
languagejspy
{
   "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"
      }
   ]
}

...

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",
        "co_ca",
        "co_ioa",
        "co_cot",
        "co_negative",
        "co_se",
        "co_test",
        "co_ts",
        "co_value"
    ],
    parameters=[
  
Code Block
languagejs
{
   "command_object":{
      "co_type":"type_idC_SC_TA_1",
      "co_ca":"ca"  "21441",
       "co_oa":"oa "74",
        "co_cot":"cot7",
      "co_test":"istest"  "0",
       "co_ioa":"ioa "0",
        "co_value":"value0",
       "co_qu":"pulse "1701426945586",
        "co_se":"Select/Execute",
	  "co_ts":"time_marker"
   }1"
    ],
    cmdDest="hnzsouth_s1"
}