HNZ connexion initialization
When the HNZ south plugin establishes a new connection wit ha with a HNZ device, it will automatically send the following messages to the device:
...
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 |
connections | array of connections | Yes | |
connections.srv_ip | IP address to remote HNZ server | IP address | Yes |
connections.port | port number to remote HNZ server | default = 6001 | No |
remote_station_addr | remote server station address | 6 bits | Yes |
Inacc_timeout | timeout before declaring the remote server unreachable (DF.GLOB.TS) | default = 180 (seconds) | No |
max_sarm | max number of SARM messages before handing over to the passive path (A/B) | default = 30 | No |
repeat_path_A | max number of authorized repeats for path A | default = 3 | No |
repeat_path_B | max number of authorized repeats for path B | default = 3 | No |
repeat_timeout | time allowed for the receiver to acknowledge a frame, after this time, the sender repeats the frame. | default = 3000 | No |
anticipation_ratio | number of frames allowed to be received without acknowledgement | default = 3 | No |
test_msg_send | test message code in sending direction | default = 1304 | No |
test_msg_receive | test message code in receiving direction | default = 1304 | No |
gi_schedule | scheduled time for General Interrogation sending | default = 99:99 (disabled) | No |
gi_repeat_count | repeat GI for this number of times in case it is incomplete | default = 3 | No |
gi_time | time to wait for General Interrogation (GI) completion | default = 255 (seconds) | No |
c_ack_time | time to wait before receving a acknowledgement for a control command | default = 10 (seconds) | No |
cmd_recv_timeout | time to wait for bytes when receiving data from the HNZ device | default = 100000 (microseconds) | No |
bulle_time | time to wait before sending a BULLE message after the previous message sent | default = 10 (seconds) | No |
south_monitoring.asset | asset name used to send the connection and gi status information to the north | default = "CONNECTION-1" | No |
Configuration JSON structure
Code Block | ||
---|---|---|
| ||
{ "protocol_stack":{ "name":"hnzclient", "version":"1.0", "transport_layer":{ "connections":[ { "srv_ip":"192.168.0.10", "port":6001 }, { "srv_ip":"192.168.0.11", "port":6002 } ] }, "application_layer":{ "remote_station_addr":12, "inacc_timeout":180, "max_sarm":30, "repeat_path_A":3, "repeat_path_B":3, "repeat_timeout":3000, "anticipation_ratio":3, "test_msg_send":"1304", "test_msg_receive":"1304", "gi_schedule":"99:99", "gi_repeat_count":3, "gi_time":255, "c_ack_time":10, "cmd_recv_timeout":100000, "bulle_time": 10 }, "south_monitoring":{ "asset":"CONNECTION-1" } } } |
...
Attribute | Description | Expected values | Mandatory | |||
---|---|---|---|---|---|---|
do_type | message type | TS, TM, TC, TVC | YES | |||
do_station | station address | YES | ||||
do_address | message address | YES | ||||
do_value | value | TM (do_an = TMA): [-127..127] TM (do_an = TM8): [0..255] TM (do_an = TM16): [-32768..32767] TMTS: [0..1] TC: [1..2] (01b = offon, 10b = onoff) TVC: [-255..255] | YES except in quality update readings | |||
do_valid | validity | valid = 0 or invalid = 1 | YES | |||
do_an | TM type (analogic / numeric) | "TMA", "TM8", "TM16" | TM only | |||
do_cg | TS source | CG = 1 or CE = 0 | TS only | |||
do_ts | timestamp | epoch timestamp in milliseconds | TS outdated | Outdated message (after connection loss) | up to date =0, outdated = 1 | TM and TS only |
do_ts | timestamp | epoch timestamp in milliseconds | TS CE only | |||
do_ts_iv | timestamp invalid | valid = 0 or invalid = 1 (from bit HNV) | TS CE only | |||
do_ts_c | loss of chronology | lost = 0 1 else = 1 0 (from bit CV) | TS CE only | |||
do_ts_s | ts not synchronized | synchronized = 0 else = 1 (from bit S) | TS CE only | |||
do_an | TM type (analogic / numeric) | "TMA", "TM8", "TM16" | TM only |
Example for a TS from CE:
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TS", "do_station":12, "do_addr":325, "do_value":1, "do_valid":0, "do_cg":0, "do_tsoutdated":16850194254320, "do_ts":1685019425432, "do_ts_iv":0, "do_ts_c":0, "do_ts_s":0 } } |
...
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TS", "do_station":12, "do_addr":325, "do_value":1, "do_valid":0, "do_cg":1, "do_outdated":0 } } |
Example for a TMATS quality update:
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TMTS", "do_station":12, "do_addressaddr":71325, "do_valuevalid":-150, "do_validcg":0, "do_anoutdated":"TMA"1, } } |
Example for a TMN 8 bits (TM8):
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_ts":1685019425432, "do_ts_iv":0, "do_ts_c":0, "do_ts_s":0 } } |
Example for a TMA:
Code Block | ||
---|---|---|
| ||
{
"data_object":{
"do_type":"TM",
"do_station":12,
"do_addr":71,
"do_value":-15,
"do_valid":0,
"do_an":"TMA",
"do_outdated":0
}
} |
Example for a TMN 8 bits (TM8):
Code Block | ||
---|---|---|
| ||
{
"data_object":{
"do_type":"TM",
"do_station":12,
"do_addr":71,
"do_value":42,
"do_valid":0,
"do_an":"TM8",
"do_outdated":0
}
} |
Example for a TMN 16 bits (TM16):
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TM", "do_station":12, "do_addressaddr":71, "do_value":42420, "do_valid":0, "do_an":"TM8""TM16", "do_outdated":0 } } |
Example for a
...
TM quality update:
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TM", "do_station":12, "do_addressaddr":71, "do_valuevalid":4200, "do_validan":0"TMA", "do_anoutdated":"TM16"1 } } |
Example for a TC (after receiving ACK):
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TC", "do_station":12, "do_address":71, "do_valueaddr":171, "do_valid":0 } } |
Example for a TVC (after receiving ACK):
Code Block | ||
---|---|---|
| ||
{ "data_object":{ "do_type":"TVC", "do_station":12, "do_addressaddr":31, "do_value":42, "do_valid":0 } } |
NB: if an attribute is not required, then it is not put in the output data object, which means that the output object structure always fits the protocol model object type.
...
Order | Attribute | Description | Expected values | Mandatory | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | co_type | message type | TC, TVC | YES | 1 | co_address | message address | YES | _type | message type | TC, TVC | YES |
1 | co_addr | message address | [0..255][0..7] (ADO + ADB) for a TC, [0..31] for a TVC | YES | ||||||||
2 | co_value | value | [1..2] (01b = on, 10b = off) | YES |
The processing of FLEDGE commands should evolve. Below is an example of JSON format :
Example for a TC:
Code Block | ||||
---|---|---|---|---|
| {
"command_object":{
| |||
{ "co_type":"TC", "co_addressaddr":325, "co_value":1 } } |
Example for a TVC:
Code Block | ||
---|---|---|
| ||
{ "command_object":{ "co_type":"TVC", "co_addressaddr":31, "co_value":1 } 42 } |
NB: if an attribute is not required, then it is not put in the output data object, which means that the output object structure always fits the protocol model object type.
...