...
CDC Class | HNZ Type ID |
---|---|
SpsTyp/DpsTyp | Status point (TS) |
MvTyp | Measurement (TM) |
SpcTyp/DpcTyp/IncTyp | Command (TC/TVC) |
Converting monitoring data typestypes
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] (0 => ACK, 1 => NACK) | YES (if TC/TVC ACK) |
<Root>.ComingFrom | String | "hnzip" |
do_comingfrom
NO | |||||
<Root>.SpsTyp.stVal | Boolean | do_value | [0..1] (0 => OFF, 1 => ON) | YES (if TS Simple) | |
<Root>.DpsTyp.stVal | String | do_value | off | on | YES (if TS Double) | |
<Root>.MvTyp.mag.i | Integer | do_value | Int 32 | 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
...
Rule 3: Case when ASDU timestamp is not received:
A the The HNZTOPIVOT step:
If the received ASDU is without timestamp Then
We create a pivot object With timestamp = current system time
And <>.TmOrg.stVal = substituted
Converting commands data typestypes
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 (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>.IncTyp.stVal
Int
do_value
Int 32 (ACK)
YES (if TVC ACK)
<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
...
Rule 5: Case when IEC104 command object for ASDU type without timestamp is received then:
A the The PIVOTTOHNZ step:
If the received ASDU is without timestamp Then We create a pivot object With timestamp = current system time
Converting Pivot object to HNZ data
The conversion of a Pivot object to HNZ data is the inverse operation of the rules above:
Filter rules
Rules 1 : GTIC pivot object is converted to a TC HNZ object