SPA-bus protocol
Introduction
SPA-bus = Strömberg Protection Acquisition bus
SPA-bus is a fieldbus protocol used in substation automation. One master and many slaves. It's ASCII based.
SPA-bus was developed by Strömberg in Finland (now ABB). It's used mostly in ABB protection relays and substation automation products.
Physical layer
Usually a RS232 (V.24) serial connection.
Link layer
Usually:
- 1 start bit
- 7 data bits
- 1 parity bit (even)
- stop bit
- 9600 baud
Master message
Read
| Byte pos | Length | Value | Description |
|---|---|---|---|
| 0 | 1 | 0x3e '>' | Start character |
| 1 | 1-3 | Address | |
| .. | 1 | Message Type | |
| .. | 0-3 | Channel | |
| .. | 1 | Data Category | |
| .. | 0-6 | Data Number | |
| .. | 1 | 0x3a ':' | Separator |
| .. | 2 | Checksum | |
| .. | 1 | 0x0d CR | Stop character |
Write
| Byte pos | Length | Value | Description |
|---|---|---|---|
| 0 | 1 | 0x3e '>' | Start character |
| 1 | 1-3 | Address | |
| .. | 1 | Message Type | |
| .. | 0-3 | Channel | |
| .. | 1 | Data Category | |
| .. | 0-6 | Data Number | |
| .. | 1 | 0x3a ':' | Separator |
| .. | .. | New value | |
| .. | 1 | 0x3a ':' | Separator |
| .. | 2 | Checksum | |
| .. | 1 | 0x0d CR | Stop character |
Slave message
Data
| Byte pos | Length | Value | Description |
|---|---|---|---|
| 0 | 1 | 0x0a LF | Start character |
| 1 | 1 | 0x3c '<' | Start character |
| 2 | 1-3 | Address | |
| .. | 1 | 0x44 'D' | Message Type |
| .. | Value | ||
| .. | 1 | 0x3a ':' | Separator |
| .. | 2 | Checksum | |
| .. | 1 | 0x0d CR | Stop character |
| .. | 1 | 0x0a LF | Stop character |
Acknowledge
| Byte pos | Length | Value | Description |
|---|---|---|---|
| 0 | 1 | 0x0a LF | Start character |
| 1 | 1 | 0x3c '<' | Start character |
| 2 | 1-3 | Address | |
| .. | 1 | 0x41 'A' | Message Type |
| .. | 1 | 0x3a ':' | Separator |
| .. | 2 | Checksum | |
| .. | 1 | 0x0d CR | Stop character |
| .. | 1 | 0x0a LF | Stop character |
Negative acknowledge
| Byte pos | Length | Value | Description |
|---|---|---|---|
| 0 | 1 | 0x0a LF | Start character |
| 1 | 1 | 0x3c '<' | Start character |
| 2 | 1-3 | Address | |
| .. | 1 | 0x4e 'N' | Message Type |
| .. | 1 | 0x3a ':' | Separator |
| .. | 1 | Negative acknowledgement code | |
| .. | 1 | 0x3a ':' | Separator |
| .. | 2 | Checksum | |
| .. | 1 | 0x0d CR | Stop character |
| .. | 1 | 0x0a LF | Stop character |
Description
Address
1-999
0 is unavailble and 900 is broadcast (for time synchronization).
Message Type
| Character | Description |
|---|---|
| R | Read |
| W | Write |
| D | Data |
| A | Acknowledge |
| N | Negative acknowledge |
Channel
0-999, default is 0 if omittedData Category
| Character | Type | Notes |
|---|---|---|
| I | Input data | |
| O | Output data | |
| S | Setting values | |
| V | Variables (internal) | |
| M | Memory data | |
| C | Slave status (condition) | (Channel 0 only) |
| F | Slave identification | (Channel 0 only) |
| T | Time | (Channel 0 only) |
| D | Date and time | (Channel 0 only) |
| L | Last events | (Channel 0 only) |
| B | Last events from backup buffer | (Channel 0 only) |
| A | Alarms valid | (Channel 0 only) |
Data Number
1-999999
Negative acknowledgement code
| Character | Description |
|---|---|
| 1 | Slave is busy |
| 2 | Overflow |
| 3 | Message to complicated |
| 4 | reserved |
| 5 | Syntax error |
| 6 | Slave does not contain all data requested in the message |
| 7 | Addressed data is impossible to write or read |
| 8 | Data in write message not validated |
| 9 | Undefined negative acknowledgment |
Checksum
Hexadecimal digits of data Xor:ed. Or 'XX' if unused.
SerialMon support
- Framing.
- Decoding.
- Tracking.
