Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

CDC ClassHNZ 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
Booleanfalse

do_valid

[0..1] (0 => ACK, 1 => NACK)

YES (if TC/TVC ACK)

<Root>.ComingFrom

String

"hnzip"



NO

<Root>.SpsTyp.stVal

Boolean


do_value

[0..1] (0 => OFF, 1 => ON)

YES (if TS Simple)

YES

<Root>.DpsTyp.stVal
String
do_valueoff |
on 
onYES (if TS Double)
YES
<Root>.MvTyp.mag.i

Integer


do_value

Int 32

YES (if TM)

YES

<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.data_object.<...>

HNZ.command_object.<...>

Note

Mandatory

(of co field)
<Root>.ComingFrom

String

"hnzip"



NO

<Root>.Identifier

String

do_type + do_addr


co_type + co_addr

exchanged_data.datapoints.pivot_id

YES

<Root>.<type>

{CDC}

do


co_type

SpcTyp (TC) | DpcTyp (TC) | IncTyp

(TVC)

YES

<Root>.Cause.stVal

Integer

do_type

7

(

TC ACK or

TVC

ACK

)

YES

<Root>.SpcTyp.ctlVal

Boolean


co_value

[0..1]

YES (if TC Simple)

<Root>.DpcTyp.ctlVal
String
co_valueoff | onYES (if TC Double)
<Root>.IncTyp.ctlVal

Int


co_value

Int 32

YES (if TVC

)
<Root>.<type>.q.Validity

String

"good"

do_valid

"good" (0) | "invalid" (1) (ACK

)

NO

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