...
The filter implements the Fledge Filter plugin interface (see filter_plugins).
Common rules
Filter configuration
See Plugins configuration design for examples and details.
...
CDC Class | IEC 104 Type ID | Type ID with timetag | Alternative format type id |
---|---|---|---|
SpsTyp | M_SP_NA_1 | M_SP_TA_1,M_SP_TB_1 | M_PS_NA_1 |
DpsTyp | M_DP_NA_1 | M_DP_TA_1,M_DP_TB_1 | M_EP_TA_1,M_EP_TD_1 |
MvTyp | M_ME_NA_1 | M_ME_TA_1,M_ME_TD_1 | M_ME_ND_1 |
MvTyp | M_ME_NB_1 | M_ME_TB_1,M_ME_TE_1 | |
MvTyp | M_ME_NC_1 | M_ME_TC_1,M_ME_TF_1 | |
SPCTyp | C_SC_NA_1 | C_SC_TA_1 | |
DPCTyp | C_DC_NA_1 | C_DC_TA_1 | |
INCTyp | C_SE_NB_1 | C_SE_TB_1 | |
APCTyp | C_SE_NC_1 | C_SE_TC_1 |
Converting monitoring data types
The content under <Root> will convert the IEC 104 data objet to a pivot object as follow:
Key | Type | Default Value | iec104.data_object.<...> | Note | |
---|---|---|---|---|---|
<Root>.Cause.stVal | Integer | do_cot | See Cause of Transmission | ||
<Root>.Confirmation.stVal | Boolean | false | do_negative | ||
<Root>.ComingFrom | String | "iec104" | do_comingfrom | iec104 | |
<Root>.Identifier | Stringdo_id | exchanged_data.datapoints.pivot_id | |||
<Root>.<type> | {CDC} | do_type | exchanged_data.datapoints.pivot_type (see | ||
| Boolean | false | do_quality_ov = true | ||
<Root>.<type>.q.test | Boolean | false | do_test | ||
<Root>.<type>.q.operatorBlocked | Boolean | false | do_quality_bl | ||
<Root>.<type>.q.Source = "substituted" | String | "process" | do_quality_sb = true | "process" | "substituted" | |
<Root>.<type>.q.Validity = "invalid" | String | "good" | do_quality_iv = true | "good" | "invalid" | "reserved" | "questionable" | |
<Root>.<type>.t.SecondSinceEpoch | Integer | do_ts | |||
<Root>.TmOrg.stVal | String | do_ts_org | "genuine" | "substituted" | ||
<Root>.TmValidity.stVal = "invalid" | String | "good" | do_ts_iv = true | "good" | "invalid" | "reserved" | "questionable" | |
| String | "good" | do_quality_nt = true | "good" | "invalid" | "reserved" | "questionable" | |
<Root>.SpsTyp.stVal | Boolean | do_value | |||
<Root>.DpsTyp.stVal | String | do_value | intermediate-state | off | on | bad-state | ||
<Root>.MvTyp.mag.f | Float | do_value | Float 32 | ||
<Root>.MvTyp.mag.i | Integer | do_value | Int 32 |
...
IEC104 NORTH step:
If the Datapoint configured in the exchanged data has not IEC104 timestamp typeid
Then we create an ASDU with a typeid with no timestamp
If the Datapoint configured in the exchanged data has IEC104 timestamp typeid
Then we create an ASDU with a timestamp typeid, ASDU timestamp = do_ts And subtituted = do_ts_sub
Converting commands data types
...
The content under <Root> will convert the IEC 104 command objet to a pivot object as follow:
Key | Type | Default Value | iec104.data_object.<...> | Note |
---|---|---|---|---|
<Root>.Cause.stVal | Integer | co_cot | See Cause of Transmission | |
<Root>.Confirmation.stVal | Boolean | false | co_negative | |
<Root>.ComingFrom | String | "iec104" | iec104 | |
<Root>.Identifier | String | exchanged_data.datapoints.pivot_id | ||
<Root>.<type> | {CDC} | co_type | exchanged_data.datapoints.pivot_type (see | |
<Root>.<type>.q.test | Boolean | false | co_test | |
<Root>.<type>.t.SecondSinceEpoch | Integer | co_ts | ||
<Root>.SpcTyp.ctlVal | Boolean | do_value | 0 or 1 | |
<Root>.SpcTyp.stVal | Boolean | do_value | 0 or 1 | |
<Root>.DpcTyp.ctlVal | String | do_value | intermediate-state | off | on | bad-state | |
<Root>.DpcTyp.stVal | Boolean | do_value | 0 or 1 | |
<Root>.IncTyp.ctlVal | Integer | do_value | Int 32 | |
<Root>.IncTyp.stVal | Integer | do_value | Int 32 | |
<Root>.ApcTyp.ctlVal | Float | do_value | Float 32 | |
<Root>.ApcTyp.mxVal | Float | do_value | Float 32 |