HNZ Protocol stack configuration
The HNZ 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
Attribute | Description | Expected values | Mandatory |
---|---|---|---|
name | this identifies the protocol stack | iec104client, iec104server, tase2client, tase2server, 61850client, 61850server, etc... | Yes |
version | version number of the configuration file | 2 digits x.y => x = major change, y = minor change | Yes |
redundancy_groups | array of redundancy groups | Yes | |
redundancy_groups.connections | array of connections of a given redundancy group | Yes | |
redundancy_groups.connections.srv_ip | IP address to remote IEC 104 server | IP address | Yes |
redundancy_groups.connections.port | port number to remote IEC 104 server | default = 2404 | No |
redundancy_groups.connections.conn | establish connection at startup | TRUE, FALSE, default = TRUE | No |
redundancy_groups.connections.start | start data transfer at startup | TRUE, FALSE, default = TRUE | No |
redundancy_groups.k_value | Maximum number of outstanding (unacknowledged) APDU's at a given time | default = 12 | No |
redundancy_groups.w_value | Acknowledge the reception latest after this number of APDU's | default = 8 | No |
redundancy_groups.t0_timeout | time out of connection establishment | default = 10 | No |
redundancy_groups.t1_timeout | time out for send or test APDU's | default = 15 | No |
redundancy_groups.t2_timeout | time out for acknowledges in case of no data messages (t2 < t1) | default = 10 | No |
redundancy_groups.t3_timeout | time out for sending test frames | default = 20 | No |
redundancy_groups.rg_name | this identifies the redundancy group | Yes | |
redundancy_groups.tls | activation of TLS (see tls configuration chapter for details) | TRUE, FALSE, default = FALSE | No |
orig_addr | Originator Address | default = 0 | No |
ca_asdu_size | size of "Common Address of ASDU" | default = 2 (byte) | No |
ioaddr_size | size of 'Information Object Address' | default = 3 (byte) | No |
startup_time | time to wait for startup completion | default = 180 (seconds) | No |
asdu_size | maximum ASDU size in transmission direction, if set to "0" => maximum possible value is automatically used. | default = 0 (byte) | No |
gi_time | time to wait for General Interrogation (GI) completion | default = 0 (seconds) | No |
gi_cycle | send General Interrogation (GI) cyclically for the specified period of time | default = 0 (seconds), if 0 => DEACTIVATED | No |
gi_all_ca | send a separate GI request to every CA; otherwise a broadcast GI request is used | TRUE, FALSE, default = FALSE | No |
gi_repeat_count | repeat GI for this number of times in case it is incomplete | default = 2 | No |
disc_qual | information object quality in case of interrupted connection | IV = Invalid, NT = Not Topical, default = NT | No |
send_iv_time | time delay before infos are sent as invalid (0 = deactivated) | default = 0 | No |
tsiv | specifies what to do with a time stamp marked as 'invalid' | remove, process, default = remove remove: the time stamp will be removed from the information object process: the time stamp will be processed on regular basis and additionally marked as 'not synchronized' | No |
utc_time | UTC timezone (=TRUE) or local timezone (=FALSE) for time conversion | TRUE, FALSE, default = FALSE | No |
comm_wttag | use commands with time tag (=TRUE) or without time tag (=FALSE) | TRUE, FALSE, default = FALSE | No |
comm_parallel | maximum number of commands to be executed at in parallel (0 = unlimited) | default = 0 | No |
exec_cycl_test | execute cyclical test requests (C_TS_NA_1/C_TS_TA_1) in monitoring direction (=TRUE) or not (=FALSE) | TRUE, FALSE, default = FALSE | No |
startup_state | startup in active mode (=TRUE) or in passive mode (=FALSE) | TRUE, FALSE, default = TRUE | No |
reverse | allow transmission of information objects in reverse direction (=TRUE) or only in standard direction (=FALSE) | TRUE, FALSE, default = FALSE | No |
time_sync | perform time synchronization (=TRUE) | default = 0 (seconds), if 0 => DEACTIVATED | No |
Configuration JSON structure
{ "protocol_stack":{ "name":"iec104client", "version":"1.0", "transport_layer":{ "redundancy_groups":[ { "connections":[ { "srv_ip":"192.168.0.10", "port":2404, "conn":true, "start":true }, { "srv_ip":"192.168.0.11", "port":2404, "conn":true, "start":false } ], "rg_name":"red-group-1", "tls":false, "k_value":12, "w_value":8, "t0_timeout":10, "t1_timeout":15, "t2_timeout":10, "t3_timeout":20 }, { "connections":[ { "srv_ip":"192.168.0.12", "port":2404, "conn":false, "start":false }, { "srv_ip":"192.168.0.13", "port":2404, "conn":false, "start":false } ], "rg_name":"red-group-2", "tls":false, "k_value":12, "w_value":8, "t0_timeout":10, "t1_timeout":15, "t2_timeout":10, "t3_timeout":20 } ] }, "application_layer":{ "orig_addr":0, "ca_asdu_size":2, "ioaddr_size":3, "startup_time":180, "asdu_size":0, "gi_time":60, "gi_cycle":false, "gi_all_ca":false, "gi_repeat_count":2, "disc_qual":"NT", "send_iv_time":0, "tsiv":"REMOVE", "utc_time":false, "comm_wttag":false, "comm_parallel":0, "exec_cycl_test":false, "startup_state":true, "reverse":false, "time_sync":false } } }
HNZ datapoint representation
This is the Datapoint representation of an HNZ message.
{ "data_object":{ "do_type":"M_SP_TB_1", "do_ca":18325, "do_oa":0, "do_cot":3, "do_test":false, "do_negative":false, "do_ioa":6468178, "do_value":1, "do_quality_iv":true, "do_quality_bl":false, "do_quality_ov":false, "do_quality_sb":false, "do_quality_nt":false, "do_ts":1653484330239, "do_ts_iv":true, "do_ts_su":false, "do_ts_sub":false } }
Path exploration
In redundant network configuration or generally in cases where several communication paths exist between one client and one server, the path checking exploration mechanism allows the client to try all the paths one by one without making any difference between them. The client uses the first available path. On disconnection this procedure starts again from the beginning.