# 14 IEC 60870-5-10X # 14.1 Introduction **IEC 60870 part 5** is one of the [IEC 60870](https://en.wikipedia.org/wiki/IEC_60870 "IEC 60870") set of standards which define systems used for telecontrol ([supervisory control and data acquisition](https://en.wikipedia.org/wiki/Supervisory_control_and_data_acquisition "Supervisory control and data acquisition")) in [electrical engineering](https://en.wikipedia.org/wiki/Electrical_engineering "Electrical engineering") and [power system automation](https://en.wikipedia.org/wiki/Power_system_automation "Power system automation") applications. Part 5 provides a communication profile for sending basic telecontrol messages between two systems, which uses permanent directly connected data circuits between the systems. The [IEC Technical Committee 57](https://en.wikipedia.org/wiki/IEC_TC_57 "IEC TC 57") (Working Group 03) has developed a [protocol](https://en.wikipedia.org/wiki/Communications_protocol "Communications protocol") standard for telecontrol, teleprotection, and associated telecommunications for [electric power](https://en.wikipedia.org/wiki/Electric_power "Electric power") systems. The result of this work is IEC 60870-5. Five documents specify the base IEC 60870-5: - IEC 60870-5-1 Transmission Frame Formats - IEC 60870-5-2 Data Link Transmission Services - IEC 60870-5-3 General Structure of Application Data - IEC 60870-5-4 Definition and Coding of Information Elements - IEC 60870-5-5 Basic Application Functions - IEC 60870-5-6 Guidelines for conformance testing for the IEC 60870-5 companion standards - IEC TS 60870-5-7 Security extensions to IEC 60870-5-101 and IEC 60870-5-104 protocols (applying IEC 62351) The IEC Technical Committee 57 has also generated companion standards: - IEC 60870-5-101 Transmission Protocols - companion standards especially for basic telecontrol tasks - IEC 60870-5-102 Transmission Protocols - Companion standard for the transmission of integrated totals in electric power systems (this standard is not widely used) - IEC 60870-5-103 Transmission Protocols - Companion standard for the informative interface of protection equipment - IEC 60870-5-104 Transmission Protocols - Network access for IEC 60870-5-101 using standard transport profiles - IEC TS 60870-5-601 Transmission protocols - Conformance test cases for the IEC 60870-5-101 companion standard - IEC TS 60870-5-604 Conformance test cases for the IEC 60870-5-104 companion standard IEC 60870-5-101/102/103/104 are companion standards generated for basic telecontrol tasks, transmission of integrated totals, data exchange from protection equipment & network access of IEC101 respectively. Source: [https://en.wikipedia.org/wiki/IEC\_60870-5](https://en.wikipedia.org/wiki/IEC_60870-5 "Wikipedia") # 14.2 IEC 60870-5-101 Master The IEC 60870-5-101 protocol is a companion standard for power system monitoring, control associated communications for telecontrol, teleprotection and associated telecommunications for electric power systems. Standard IEC 60870-5-101 was prepared by IEC technical committee 57 (Power system control and associated communications). Standard IEC 60870-5-101 defines an **Application Service Data Unit** (**ASDU** Figure below). In ASDU there is an ASDU identifier (with the type of ASDU in it) and information objects.![image-1638258623652.png](https://wiki.elseta.com/uploads/images/gallery/2021-11/scaled-1680-/image-1638258623652.png) IEC 60870-5-101 ASDU structure **Common Address of ASDU** Defines the stations' address and can be configured in Devices asdu\_address field for source and *Signals* common\_address field for the destination. **Information Object Address** Used as destination object address in the control direction and as source object address in monitor direction can be configured in Signals info\_address field. Standard IEC 60870-5-101 transmission frames are separated into 3 different types: **frame with variable length**, **frame with fixed length,** and **single control characters** [![image-1638259001158.png](https://wiki.elseta.com/uploads/images/gallery/2021-11/scaled-1680-/image-1638259001158.png)](https://wiki.elseta.com/uploads/images/gallery/2021-11/image-1638259001158.png) IEC 60870-5-101 ASDU structure **Control field** provides information about the message direction, type of service, and checksum. **Address field** specifies the link address which points to the message's destination. WCC Lite supports IEC 60870-5-101 Master protocol over a serial link (according to EIA RS485). Its full functionality list can be found in an [IEC 60870-5-101 PID Interoperability List](https://wiki.elseta.com/link/180#bkmrk-pid%27s) which can be downloaded separately from this user manual. ### Configuring datapoints (master) To use IEC 60870-5-101 Master in WCC Lite, it has to be configured via an Excel configuration. This configuration contains two Excel sheets where parameters have to be filled in Devices and Signals. ##### IEC 60870-5-101 master parameters for *Devices* tab
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly name for a device | Yes | |||
description | string | Description of a device | No | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
protocol | string | Protocol to be used | Yes | IEC 60870-5-101 master | ||
device | string | Communication port | Yes | PORT1 | PORT2 | |
baudrate | integer | Communication speed (bauds/s) | No | 9600 | 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | |
databits | integer | Data bit count for communication | No | 8 | 6 | 9 |
stopbits | integer | Stop bit count for communication | No | 1 | 1 | 2 |
parity | string | Communication parity option | No | none | none, even, odd | |
flowcontrol | string | Number of requests, before link is considered lost (device status signals are changed) and reconnect attempt will be issued | No | none | none | |
link\_address | integer | Destination address when in transmit and source address when broadcasting | Yes | 0 | 65535 | |
link\_size | integer | Link address size in bytes | No | 1 | 1 | 2 |
asdu\_address | integer | Application Service Data Unit address | Yes | 0 | 65535 | |
asdu\_size | integer | Common address size in bytes | No | 1 | 1 | 2 |
ioa\_size | integer | Information object address (IOA) size in bytes | No | 2 | 1 | 3 |
cot\_size | integer | Cause of transmission (COT) size in bytes | No | 1 | 1 | 2 |
time\_sync\_interval\_sec | integer | Defines how often (in seconds) slave will request time synchronization. **If greater than 0** slave will request synchronizations, will reset the timer if the master did it earlier. **If 0** slave won’t request timesyncs, but will allow them. **If 1** timesyncs are not supported requests will be dropped. | No | 60 | ||
gi\_interval\_sec | integer | Time frame between General Interrogation requests in seconds, if 0 requests are disabled | No | 300 | ||
scan\_rate\_ms | integer | Polling interval in milliseconds. Time frame between two telegrams from master | Yes | 100 | ||
timeout\_ms | integer | Response timeout in milliseconds | Yes | 1000 | ||
retry\_count | integer | Number of retries of failed requests before announcing that device is in Error state | Yes | 1 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
signal\_name | string | User-friendly signal name | Yes | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
signal\_alias | string | Unique alphanumeric name of the signal to be used | Yes | |||
source\_device\_alias | string | device\_alias of a source device | For commands | |||
source\_signal\_alias | string | signal\_alias of a source signal | For commands | |||
enable | boolean | Enabling/disabling of an individual signal | No | 1 | 0 | 1 |
log | integer | Allow signal to be logged. If **log is 0 signal** will not be logged. If **log is more than 0** signal will be logged | No | 0 | ||
gi | boolean | Including/excluding (1 or 0) signal from General Interrogation | No | 0 | 0 | 1 |
common\_address | integer | Address of a destination device | Yes | 1 | ||
info\_address | integer | Information object address | Yes | |||
data\_type | integer | ASDU type identifier | Yes | 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 30, 31, 32, 34, 35, 36, 45, 46, 47, 48, 49, 50 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly name for a device | Yes | |||
description | string | Description of a device | No | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
protocol | string | Protocol to be used | Yes | IEC 60870-5-101 slave | ||
device | string | Communication port | Yes | PORT1 | PORT2 | |
baudrate | integer | Communication speed (bauds/s) | No | 9600 | 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | |
databits | integer | Data bit count for communication | No | 8 | 6 | 9 |
stopbits | integer | Stop bit count for communication | No | 1 | 1 | 2 |
parity | string | Communication parity option | No | none | none, even, odd | |
flowcontrol | string | Number of requests, before link is considered lost (device status signals are changed) and reconnect attempt will be issued | No | none | none | |
link\_address | integer | Destination address when in transmit and source address when broadcasting | Yes | 0 | 65535 | |
link\_size | integer | Link address size in bytes | No | 1 | 1 | 2 |
asdu\_size | integer | Common address size in bytes | No | 1 | 1 | 2 |
ioa\_size | integer | Information object address (IOA) size in bytes | No | 2 | 1 | 3 |
cot\_size | integer | Cause of transmission (COT) size in bytes | No | 1 | 1 | 2 |
time\_sync | boolean | Allow time synchronization, 1 to enable and 0 to disable | No | 0 | 0 | 1 |
message\_size | integer | Maximum length of a message | Yes | 253 | 0 | 255 |
cache\_size | integer | Maximum number of events to store in a buffer | No | 100 | 0 | 1000 |
respond\_delay | integer | Time in microseconds to wait before sending responses | Yes | 100 | 0 | 1000000 |
single\_byte\_ack | boolean | Use single character acknowledge, 1 to enable and 0 to disable | No | 0 | 0 | 1 |
keep\_alive\_timeout | integer | Time interval in seconds before serial connection is considered offline | No | 60 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
signal\_name | string | User-friendly signal name | Yes | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
signal\_alias | string | Unique alphanumeric name of the signal to be Yes used | Yes | |||
source\_device\_alias | string | device\_alias of a source device | For commands | |||
source\_signal\_alias | string | signal\_alias of a source signal | For commands | |||
enable | boolean | Enabling/disabling of an individual signal | No | 1 | 0 | 1 |
log | integer | Allow signal to be logged. If **log is 0 signal** will not be logged. If **log is more than 0** signal will be logged | No | 0 | ||
gi | boolean | Including/excluding (1 or 0) signal from General Interrogation | No | 0 | 0 | 1 |
common\_address | integer | Address of a destination device | Yes | |||
info\_address | integer | Information object address | Yes | |||
data\_type | integer | ASDU type identifier | Yes | 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 30, 31, 32, 34, 35, 36, 45, 46, 47, 48, 49, 50, 58, 59, 60, 61, 62, 63 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly name for a device | Yes | |||
description | string | Description of a device | No | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
protocol | string | Protocol to be used | Yes | IEC 60870-5-103 master | ||
device | string | Communication port | Yes | PORT1 | PORT2 | |
baudrate | integer | Communication speed (bauds/s) | No | 9600 | 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | |
databits | integer | Data bit count for communication | No | 8 | 8 | |
stopbits | integer | Stop bit count for communication | No | 1 | 1 | 2 |
parity | string | Communication parity option | No | none | none, even, odd | |
flowcontrol | string | Number of requests, before link is considered lost (device status signals are changed) and reconnect attempt will be issued | No | none | none | |
link\_address | integer | Destination address when in transmit and source address when broadcasting | Yes | 0 | 65535 | |
asdu\_address | integer | Application Service Data Unit address | Yes | 0 | 65535 | |
time\_sync\_interval\_sec | integer | Time frame between Time Synchronization requests in seconds | No | 60 | ||
gi\_interval\_sec | integer | Time frame between General Interrogation requests in seconds, if 0 requests are disabled | Yes | 300 | ||
scan\_rate\_ms | integer | Polling interval in milliseconds. Time frame between two telegrams from master | No | 100 | ||
timeout\_ms | integer | Response timeout in milliseconds | No | 1000 | ||
serial\_delay | integer | Communication device’s serial delay in milliseconds. Time frame in which master station is not TX’ing after last RX byte | No | 50 | ||
retry\_count | integer | Number of retries of failed requests before announcing that device is in Error state | No | 3 | ||
retry\_delay\_ms | integer | Time before the next retry in milliseconds | No | 500 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
signal\_name | string | User-friendly signal name | Yes | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
signal\_alias | string | Unique alphanumeric name of the signal to be Yes used | Yes | |||
source\_device\_alias | string | device\_alias of a source device | For commands | |||
source\_signal\_alias | string | signal\_alias of a source signal | For commands | |||
enable | boolean | Enabling/disabling of an individual signal | No | 1 | 0 | 1 |
log | integer | Allow signal to be logged. If **log is 0 signal** will not be logged. If **log is more than 0** signal will be logged | No | 0 | ||
gi | boolean | Including/excluding (1 or 0) signal from General Interrogation | No | 0 | 0 | 1 |
common\_address | integer | Address of a destination device | Yes | |||
function | integer | Function number | No | 0 | ||
info\_address | integer | Information object address | Yes | |||
info\_number | integer | Information number | Yes | |||
data\_type | integer | ASDU type identifier | No | 0 | 0, 1, 2, 3, 4, 9, 20 | |
fleeting | boolean | Mark signal as fleeting type (1 or 0). Fleeting signals have go to DPI::OFF after defined time | No | 0 | 1 | |
normalise\_time\_ms | integer | Time in milliseconds between station receiving DPI::ON and automatically switching to DPI::OFF | If fleeting is used | 100 |
To set up TLS connection for both IEC104 Master and Slave, refer to sections Excel configuration and Certificates. All keys and certificates should be provided in the PEM format.
If no configuration is set up, IEC104 Master and Slave services are not started.
#### Configuring IEC 104 Master datapoints To use IEC 60870-5-104 Master in WCC Lite, it has to be configured via an Excel configuration. This configuration contains two Excel sheets where parameters have to be filled in Devices and Signals. ##### IEC 60870-5-104 Master parameters for *Devices* tab**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly name for a device | Yes | |||
description | string | Description of a device | No | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
protocol | string | Protocol to be used | Yes | IEC 60870-5-104 master | ||
asdu\_address | integer | Application Service Data Unit address | Yes | 0 | 65535 | |
asdu\_size | integer | Common address size in bytes | No | 2 | 1 | 2 |
time\_sync\_interval\_sec | integer | Time frame between Time Synchronization requests in seconds | Yes | 60 | ||
gi\_interval\_sec | integer | Time frame between General Interrogation requests in seconds. If 0 requests are disabled | Yes | 300 | ||
port | integer | TCP port | Yes | 0 | 65535 | |
ioa\_size | integer | Information object address (IOA) size in bytes | No | 3 | 1 | 3 |
swt | integer | Send window (k) | Yes | |||
rwt | integer | Receive window (w) | Yes | |||
cot\_size | integer | Cause of transmission (COT) size in bytes | No | 2 | 1 | 3 |
ip | string | Host IP address (ipv4) | Yes | |||
t1\* | integer | Acknowledge timeout t1 (sec) | Yes | 15 | 1 | 255 |
t2\* | integer | Connection ACKRSN clock t2 (sec) | Yes | 10 | 1 | 254 |
t3\* | integer | Connection TESTFR clock t3 (sec) | Yes | 20 | 1 | 172800 |
originator | integer | Provides a means for a controlling station to explicitly identify itself | No | 0 | 0 | 255 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
signal\_name | string | User-friendly signal name | Yes | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
signal\_alias | string | Unique alphanumeric name of the signal to be Yes used | Yes | |||
source\_device\_alias | string | device\_alias of a source device | For commands | |||
source\_signal\_alias | string | signal\_alias of a source signal | For commands | |||
enable | boolean | Enabling/disabling of an individual signal | No | 1 | 0 | 1 |
log | integer | Allow signal to be logged. If **log is 0 signal** will not be logged. If **log is more than 0** signal will be logged | No | 0 | ||
gi | boolean | Including/excluding (1 or 0) signal from General Interrogation | No | 0 | 0 | 1 |
common\_address | integer | Address of a destination device | Yes | |||
function | integer | Function number | No | 0 | ||
info\_address | integer | Information object address | Yes | |||
data\_type | integer | ASDU type identifier | Yes | 1, 3, 5, 9, 11, 13, 21, 30, 31, 32, 34, 35, 36, 45, 46, 47, 48, 49, 50, 58, 59, 60, 61, 62, 63 | ||
select\_ms | integer | Time limit in milliseconds for command execution. Command select has to be performed before execution if this parameter is specified. Direct command execution can be performed only if this field is left empty or set to zero. | No | 0 |
Since firmware version 1.8.3, multiple signals with different data types can have same ioa address.
IEC 60870-5-104 Slave is designed not to lose data acquired from Master protocols. The data that arrives from Master protocols is stored in the cache. This data is checked every second to manage further data sending. The data that leaves IEC 60870-5-104 Slave has output caches. They’re built to provide switching between multiple sessions (redundant SCADA). If a new connection arrives, the old one is dropped, but data, that is stored in a cache, not sent and not confirmed by SCADA is transferred to the new connection. #### Configuring IEC 104 Slave datapoints To use IEC 60870-5-104 Slave in WCC Lite, it has to be configured via an Excel configuration. This configuration contains two Excel sheets where parameters have to be filled in Devices and Signals. ##### IEC 60870-5-104 Slave parameters for *Devices* tab**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly name for a device | Yes | |||
description | string | Description of a device | No | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
protocol | string | Protocol to be used | Yes | IEC 60870-5-104 slave | ||
asdu\_size | integer | Common address size in bytes | No | 2 | 1 | 2 |
time\_sync | boolean | Enable/disable (1 or 0) time synchronization | Yes | |||
port | integer | TCP port | No | 2404 | 0 | 65535 |
ioa\_size | integer | Information object address (IOA) size in bytes | No | 3 | 1 | 3 |
swt | integer | Send window (SWT) | No | 12 | ||
rwt | integer | Receive window (RWT) | No | 8 | ||
cot\_size | integer | Cause of transmission (COT) size in bytes | No | 2 | 1 | 3 |
host | string | Space-separated remote host IP addresses (ipv4) | Yes | |||
bind\_address | string | Bind to local IP address (ipv4) | No | 0.0.0.0 | ||
t1 | integer | Acknowledge timeout t1 (sec) | Yes | 15 | 1 | 255 |
t2 | integer | Connection ACKRSN clock t2 (sec), t2 should be less than t1 | Yes | 10 | 1 | 254 |
t3 | integer | Connection TESTFR clock t3 (sec) | Yes | 20 | 1 | 172800 |
message\_size | boolean | The maximum length of a message | Yes | 253 | 0 | 255 |
cache\_size | integer | Amount of data to be cached | Yes | 100 | 0 | 1000 |
tls | boolean | Enable/disable the use of TLS | No | 0 | 0 | 1 |
tls\_local\_certificate | string | Local certificate for TLS connection | Yes (for TLS) | |||
tls\_peer\_certificate | string | Certificate authority file for TLS connection | No | |||
tls\_private\_key | string | A file consisting of the private key for TLS connection | No | |||
command\_timeout\_ms | integer | Time to execute a command before responding negatively. | No | 30000 | 0 | |
command\_age\_ms | integer | The amount of time shift allowed for the command to still be executed. | No | 0 | 0 |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
signal\_name | string | User-friendly signal name | Yes | |||
device\_alias | string | Alphanumeric string to identify a device | Yes | |||
signal\_alias | string | Unique alphanumeric name of the signal to be Yes used | Yes | |||
source\_device\_alias | string | device\_alias of a source device | For commands | |||
source\_signal\_alias | string | signal\_alias of a source signal | For commands | |||
enable | boolean | Enabling/disabling of an individual signal | No | 1 | 0 | 1 |
log | integer | Allow signal to be logged. If **log is 0 signal** will not be logged. If **log is more than 0** signal will be logged | No | 0 | 0 | 1 |
gi | boolean | Including/excluding (1 or 0) signal from General Interrogation | No | 0 | 0 | 1 |
common\_address | integer | Address of a destination device | Yes | |||
info\_address | integer | Information object address | Yes | |||
data\_type | integer | ASDU type id. | Yes | 1, 3, 5, 9, 11, 13, 21, 30, 31, 32, 34, 35, 36, 45, 46, 47, 48, 49, 50, 58, 59, 60, 61, 62, 63 | ||
select\_ms | integer | Time limit in milliseconds for command execution. Command select has to be performed before execution if this parameter is specified. Direct command execution can be performed only if this field is left empty or set to zero. | No | 0 |