Skip to main content

IEC61850-8-1: GOOSE

This node type is able to publish and subscribe to basic GOOSE messages.

Note

Only a subset of the basic data types specified in IEC 61850-8-1 is supported. (see the configuration below for supported types)

Prerequisites

This node-type requires libiec61850 (>= 1.3.1).

Configuration

vectorize
integer
Default: 1

This setting allows to send multiple samples in a single message to the destination nodes.

The value of this setting determines how many samples will be combined into one packet.

Array of Hook Object (object) or Hook Name (string) (Hook List)
builtin
boolean (Builtin hook functions)
Default: true

By default, each node and paths has a couple of default hooks attached to them. With this setting the attachment of built-in hooks can be disabled.

object (Input configuration (received by VILLASnode))
object (Output configuration (sent out by VILLASnode))
{
  • "vectorize": 1,
  • "hooks": [
    ],
  • "builtin": true,
  • "in": {
    },
  • "out": {
    }
}

Example

node/etc/examples/nodes/iec61850-8-1.conf
nodes = {
goose = {
type = "iec61850-8-1"

out = {
# Ethernet interface to publish on
interface = "lo"

# Array of goose publisher definitions
publishers = (
{
# Mandatory GOOSE publisher meta data
go_id = "AA1J1Q01A3LD0/LLN0.gcbdata"
go_cb_ref = "AA1J1Q01A3LD0/LLN0$GO$gcbdata"
data_set_ref = "AA1J1Q01A3LD0/LLN0$data"
dst_address = "01:0c:cd:01:00:00"
app_id = 2
conf_rev = 100
time_allowed_to_live = 11000

# Payload description with either constant data or values from a signal
data = (
{
# Mandatory MMS type
mms_type = "boolean"

# Name of the signal in the array below
signal = "ABB_cascade_state"
},
{
# Mandatory MMS type
mms_type = "bitstring"

# Type meta data
mms_bitstring_size = 13

# Constant value
value = 2048
}
)
},
{
go_id = "AA1J1Q01A3LD0/LLN0.gcbDataset_1"
go_cb_ref = "AA1J1Q01A3LD0/LLN0$GO$gcbDataset_1"
data_set_ref = "AA1J1Q01A3LD0/LLN0$Dataset_1"
dst_address = "01:0c:cd:01:00:01"
app_id = 1
conf_rev = 300
time_allowed_to_live = 22000
data = (
{
mms_type = "boolean"
signal = "ABB_cascade_state"
},
{
mms_type = "bitstring"
mms_bitstring_size = 13
value = 2048
},
{
mms_type = "bitstring"
mms_bitstring_size = 2
value = 0
},
{
mms_type = "bitstring"
mms_bitstring_size = 13
value = 2048
},
{
mms_type = "bitstring"
mms_bitstring_size = 13
value = 2048
},
{
mms_type = "bitstring"
mms_bitstring_size = 2
value = 0
}
)
}
)
signals = (
{
# The signal name used to identify the signal in a publishers data field
name = "ABB_cascade_state"
type = "boolean"
}
)
}

in = {
# Ethernet interface to listen on
interface = "lo"

# Use the goose timestamp for a sample
with_timestamp = true

# List of named subscriber definitions
subscribers = {
relay = {
# Mandatory GoCbRef
go_cb_ref = "AA1J1Q01A3LD0/LLN0$GO$gcbdata"

# Optional filter by packet destination MAC address
dst_address = "01:0c:cd:01:00:00"

# Optional filter by AppID
app_id = 2

# Optional trigger specification (either "always" or "change")
#
# "always" = emit an updated sample for each incoming GOOSE message
# "change" = only emit an updated sample when SqNum is 0
trigger = "change"
}
}

signals = (
{
name = "ABB_relay_state"
type = "boolean"

# Mandatory MmsType specification
mms_type = "boolean"

# Mandatory subscriber name
subscriber = "relay"

# Mandatory index within the received vector of GOOSE values
index = 0
},
{
name = "ABB_relay_state_meta_bitset"
type = "integer"
mms_type = "bitstring"
subscriber = "relay"
index = 1
}
)
}
}
}