...
The content under <Root> will convert the HNZ data objet to a pivot object as follow:
Tele-Informations
Key | Type | Default Value | HNZ.data_object.<...> | Note | Mandatory (of do field) |
---|---|---|---|---|---|
<Root>.<type> | {CDC} | do_type | exchanged_data.datapoints.pivot_type (see <type> conversion table above) | YES | |
<Root>.Cause.stVal | Integer | do_type, do_cg | 3 (TS on CE) | 20 (TS on CG) | 1 (TM cyclic) | 7 (TC ACK or TVC ACK) | YES | |
<Root>.Confirmation.stVal | Boolean | false | do_valid | [0..1] (ACK = 0, NACK = 1) | YES (if TC/TVC ACK) |
<Root>.ComingFrom | String | "hnzip" | NO | ||
<Root>.SpsTyp.stVal | Boolean | do_value | [0..1] (TS Simple) | YES (if TS Simple) | |
<Root>.DpsTyp.stVal | String | do_value | off | on (TS Double) | YES (if TS Double) | |
<Root>.MvTyp.mag.i | Integer | do_value | Int 32 (TM) | YES (if TM) | |
<Root>.Identifier | String | do_id | exchanged_data.datapoints.pivot_id | YES | |
<Root>.<type>.TmOrg.stVal | String | "genuine" | If the timestamp is not from the HNZ frame => "substituted" Else => "genuine" eg: timestamps created artifically for any TI that doesn't have one will be "substitued". | YES | |
<Root>.<type>.q.Validity | String | "good" | do_valid, do_ts_c, do_ts_s, do_outdated | By order of priority: do_valid = 1 => "invalid" do_outdated = 1 => "questionable" do_ts_c = 1 => "questionable" do_ts_s = 1 => "questionable" else "good" | NO |
<Root>.<type>.t.SecondSinceEpoch <Root>.<type>.t.FractionOfSecond | Integer Integer | do_ts | SecondSinceEpoch is the time in seconds since 1970- 01-01 00:00:00 UTC FractionOfSecond is the fraction of second (Computation method described in 61850 protocol documentation). | YES | |
<Root>.TmValidity.stVal | String | "good" | do_ts_iv | good (0) | invalid (1) | NO |
<Root>.<type>.q.DetailQuality.oldData | Boolean | <undefined> | do_ts_c, do_outdated | By order of priority: do_outdated = 1 => true do_ts_c = 1 => true else <undefined> | NO |
<Root>.<type>.t.TimeQuality.clockNotSynchronized | Boolean | <undefined> | do_ts_s | do_ts_s = 1 => true else <undefined> | NO |
Filter rules
STATION => (ASDU) HNZ SOUTH => (HNZ DP) HNZTOPIVOT =>(PIVOT DP) PIVOTTOIEC104 => (IEC104 DP) IEC104 NORTH => (ASDU) CENTER
...
The content under <Root> will convert the HNZ data objet to a pivot object as follow:
Key | Type | Default Value |
---|
HNZ.command_object.<...> | Note | Mandatory (of co field) | |||
---|---|---|---|---|---|
<Root>.ComingFrom | String | "hnzip" | NO | ||
<Root>.Identifier | String |
co_type + co_addr | exchanged_data.datapoints.pivot_id | YES | ||
<Root>.<type> | {CDC} |
co_type | SpcTyp (TC) | DpcTyp (TC) | IncTyp |
YES
<Root>.Cause.stVal
Integer
do_type
( |
TVC |
) | YES | ||||
<Root>.SpcTyp.ctlVal | Boolean | co_value | [0..1] | YES (if TC Simple) | |
<Root>.DpcTyp.ctlVal | String | co_value | off | on | YES (if TC Double) | |
<Root>.IncTyp.ctlVal | Int | co_value | Int 32 | YES (if TVC |
<Root>.<type>.q.Validity
String
"good"
do_valid
) |
Filter rules
CENTER => (ASDU) IEC104 NORTH => (IEC104 DP) IEC104TOPIVOT =>(PIVOT DP) PIVOTTOHNZ => (HNZ DP) HNZ SOUTH=> (ASDU) STATION
...