# 11 DNP 3.0 ### Introduction DNP3 (Distributed Network Protocol) is a set of communications protocols used between components in process automation systems. Its main use is in utilities such as electric and water companies. It was developed for communications between various types of data acquisition and control equipment. It plays a crucial role in SCADA systems, where it is used by SCADA Master Stations (a.k.a. Control Centers), Remote Terminal Units (RTUs), and Intelligent Electronic Devices (IEDs). It is primarily used for communications between a master station and RTUs or IEDs. ICCP, the InterControl Center Communications Protocol (a part of IEC-608706), is used for intermaster station communications. Elseta’s DNP3 stack has both Master and Slave protocols implemented. Both of them are able to serve multiple serial (over physical RS485 line), TCP or TLS (over TCP) connections with high efficiency. IEEE1815 defines 4 subset levels (14) that consist of the objects and function codes that must be supported by the master and outstation. Levels 13 are supported fully and level 4 is supported partially. To get more information about how DNP3 works and what capabilities are supported one should get a copy of protocol specification and/or check Slave Interoperability List/Configuration guides for both Master and Slave protocols.
To set up TLS connection for both DNP3 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, DNP3 Master and Slave services are not started.
### DNP 3.0 Master Default group and variation sets are used to send commands. If slave devices support different groups and variations, they can be adjusted in Excel configuration. For more information check section Excel configuration. #### Configuring datapoints To use DNP3 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. ##### DNP3 Master parameters for Devices tab**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly device name | 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 (”dnp3 serial”/”dnp3 tcp” (case insensitive)) | Yes | |||
mode | string | Choosing between TCP, TLS and SERIAL modes . If protocol provided DNP3 TCP mode defaults to tcp and if DNP3 serial is provided mode defaults to serial | No | TCP or SERIAL | TCP, SERIAL | |
host | string | IP address of TCP slave device | Yes (for TCP). | |||
bind\_address | string | IP address of network adapter used to connect to slave device | No (for TCP) | 0.0.0.0 | ||
port | integer | TCP communication port | No (for TCP) | 20000 | ||
device | integer | Communication port (”PORT1” or ”PORT2”) | Yes (for SERIAL) | |||
baudrate | integer | Communication speed, bauds/s | No (for SERIAL) | 9600 | 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600,115200 | |
databits | integer | Data bit count for communication | No (for SERIAL) | 8 | 6 | 9 |
stopbits | integer | Stop bit count for communication | No (for SERIAL) | 1 | 0 | 2 |
parity | string | Communication parity option | No (for SERIAL) | none | none, even, odd | |
flowcontrol | string | Communication device flow control option. | No (for SERIAL) | none | none | |
tls | boolean | Enable/disable use of TLS | Yes (for TLS) | 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 (for TLS) | |||
tls\_private\_key | string | File consisting of private key for TLS connection | No (for TLS) | |||
max\_rx\_frag\_size | integer | Maximum size of a received fragment. | No | 2048 | 0 | 2048 |
destination\_address | integer | Address of a master station | No | 1 | 0 | 65535 |
source\_address | integer | Address of a slave (local) station. | No | 1 | 0 | 65535 |
unsol\_disable | bool | Disables unsolicited messages on startup. Overrides **unsol\_classes** parameter. | No | 0 | 0 | 1 |
unsol\_classes | string | Defines which classes will have unsolicited actions on startup. Can be overriden with **unsol\_disable**. (Example: "1,3,2") | No | no class | 1 | 3 |
groups\_scan\_mask | integer | Bitmask for enabling separate group scans with x06 qualifier (all objects): 0 - Binary, 1 - Doublebit Binary, 2 - Binary Output Status, 3 - Counter, 4 - Frozen Counter, 5 - Analog, 6 - Analog Output Status, 7 - Octet String | No | 0 | 0 | 7 |
groups\_scan\_interval | integer, string | Time between separate groups scans intervals in seconds. Set to 0 to disable. | No | 0 | 0 | |
exception\_scan\_interval | integer, string | Time between exception scan (classes 1,2,3) intervals in seconds. Set to 0 to disable. | No | 0 | 0 | |
integrity\_scan\_interval | integer, string | Time between integrity scan (classes 0,1,2,3) intervals in seconds (general interrogation). Set to 0 to disable. | No | 0 | 0 | |
timesync\_mode | string | Will override masters default setting for choosing timesync procedure | No | NON-LAN(for Serial) LAN (for tcp) | LAN, NON-LAN | |
time\_sync\_interval\_sec | integer, string | Periodic time sync interval in seconds. If 0 < - time syncs are forced and periodic. If = 0 - time syncs react to IIN bits from slave. If < 0 - time syncs are disabled. | No | 0 | 0 | |
select\_ms | integer | Select command timeout. Valid for all signals. | No | 10000 | ||
timeout\_ms | integer | Response timeout in milliseconds | No | 2000 | ||
keep\_alive\_timeout | integer | Time interval for sending a keep alive packet in milliseconds. | 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 | Device alias from a Devices tab | Yes | |||
signal\_alias | Unique alphanumeric name of the signal to be used | Yes | ||||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
index | integer | Index of a signal. | Yes | 0 | 65535 | |
log | boolean | Enable logging in event log | No | 0 | 0 | |
signal\_type | string | DNP3 signal type. (case insensitive) | Yes | ”BINARY”, ”ANALOG”, ”DOUBLEBITBINARY” ”BINARYOUTPUTSTATUS”, ”COUNTER”, ”FROZENCOUNTER”, ”ANALOGOUTPUTSTATUS, ”OCTETSTRING”, ”TIMEANDINTERVAL”, ”BINARYOUTPUTCOMMAND”, ”ANALOGOUTPUTCOMMAND” | ||
command\_variation | integer | DNP3 command variation. *Supported variations depend on signal type and are provided in table below* | No | 0 | 0 | 4 |
static\_variation | integer | DNP3 command variation (). Supported variations depend on signal type and are provided in table below. | No | 0, 1, 2, 3, 4, 5, 6, 9, 10 | ||
event\_variation | integer | DNP3 command variation. Supported variations depend on signal type and are provided in table below. | No | 0 | 8 | |
control\_code | integer | DNP3 control model code of CROB signal. TripClose and Pulse controlmodel requires **PulseOn/off** times to be set | No | LATCH, PULSE, TRIPCLOSE | ||
pulse\_on\_time\_ms | integer | Pulse ON time in milliseconds, when using Pulse or TripClose control models must be set | No | |||
pulse\_off\_time\_ms | integer | Pulse OFF time in milliseconds, when using Pulse or TripClose control models must be set | No | |||
class\_num | integer | Class assignment of this signal. | No | 0 | 0 | 3 |
operate\_type | integer | No | 1 | -1 | 1 | |
job\_todo | string | Device status signal can be configured by providing one of the given values. | No | COMMUNICATION\_STATUS, DEVICE\_RUNNING, DEVICE\_ERROR, UNKNOWN\_ERROR |
Option | Description |
-h \[ –help \] | Display help information |
-V \[ –version \] | Show version |
-p \[ –port \] | Show output for one port only |
-d <debug level> | Set debugging level |
-c \[ –config \] | Config path |
-a \[ –app \] | Show application layer data |
–l \[ –link \] | Show link layer data |
–t \[ –transport \] | Show transport layer data |
-r \[ –redis \] | Show Redis messages |
-R \[ –readyfile \] | Ready notification file |
**Parameter** | **Type** | **Description** | **Required | **Default value** (when not specified) | **Range** | |
Min | Max | |||||
name | string | User-friendly device name | 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 | dnp3 tcp slave dnp3 serial slave | ||
mode | string | Choosing between TCP, TLS and SERIAL modes. If protocol provided DNP3 TCP mode defaults to tcp and if DNP3 serial is provided mode defaults to SERIAL | No | TCP or SERIAL | TCP, SERIAL, TLS | |
host | string | IP address of TCP slave device | Yes (for TCP). | |||
bind\_address | string | IP address of network adapter used to connect to slave device | No (for TCP) | 0.0.0.0 | ||
port | integer | TCP communication port | No (for TCP) | 20000 | ||
device | integer | Communication port (”PORT1” or ”PORT2”) | Yes (for SERIAL) | |||
baudrate | integer | Communication speed, bauds/s | No (for SERIAL) | 9600 | 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600,115200 | |
databits | integer | Data bit count for communication | No (for SERIAL) | 8 | 6 | 9 |
stopbits | integer | Stop bit count for communication | No (for SERIAL) | 1 | 0 | 2 |
parity | string | Communication parity option | No (for SERIAL) | none | none, even, odd | |
flowcontrol | string | Communication device flow control option. | No (for SERIAL) | none | none | |
tls | boolean | Enable/disable use of TLS | Yes (for TLS) | 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 (for TLS) | |||
tls\_private\_key | string | File consisting of private key for TLS connection | No (for TLS) | |||
max\_tx\_frag\_size | integer | Maximum size of a received fragment. | No | 2048 | 0 | 2048 |
destination\_address | integer | Address of a master station | No | 1 | 0 | 65535 |
source\_address | integer | Address of a slave (local) station. | No | 1 | 0 | 65535 |
unsol\_classes | string | Defines which classes will have unsolicited actions on startup. Can be overriden with **unsol\_disable**. (Example: "1,3,2") | No | no class | 1 | 3 |
time\_sync\_interval\_sec | integer, string | Periodic time sync interval in seconds. If 0 < - time syncs are forced and periodic. If = 0 - time syncs react to IIN bits from slave. If < 0 - time syncs are disabled. | No | 0 | 0 | |
select\_ms | integer | Select command timeout. Valid for all signals. | No | 10000 | ||
timeout\_ms | integer | Response timeout in milliseconds | No | 2000 | ||
keep\_alive\_timeout | integer | Time interval for sending a keep alive packet in milliseconds. | 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 | Device alias from a Devices tab | Yes | |||
signal\_alias | Unique alphanumeric name of the signal to be used | Yes | ||||
enable | boolean | Enabling/disabling of a device | No | 1 | 0 | 1 |
index | integer | Index of a signal. | Yes | 0 | 65535 | |
log | bolean | Enable logging in event log | No | 0 | 0 | |
deadband | double | Deadband for Analog, Analog Output Status, Counter, Frozen Counter signals. | No | 0 | ||
signal\_type | string | DNP3 signal type. (case insensitive) | Yes | ”BINARY”, ”ANALOG”, ”DOUBLEBITBINARY” ”BINARYOUTPUTSTATUS”, ”COUNTER”, ”FROZENCOUNTER”, ”ANALOGOUTPUTSTATUS, ”OCTETSTRING”, ”TIMEANDINTERVAL”, ”BINARYOUTPUTCOMMAND”, ”ANALOGOUTPUTCOMMAND” | ||
command\_variation | integer | DNP3 command variation. *Supported variations depend on signal type and are provided in table below* | No | 0 | 0 | 4 |
static\_variation | integer | Override default signal’s static variation. Valid for Status mode signals. | No | 0, 1, 2, 3, 4, 5, 6, 9, 10 | ||
event\_variation | integer | Override default signal’s event variation. Valid for Status mode signals. | No | 0 | 8 | |
control\_code | integer | DNP3 control model code of CROB signal. TripClose and Pulse controlmodel requires **PulseOn/off** times to be set | No | LATCH, PULSE, TRIPCLOSE | ||
pulse\_on\_time\_ms | integer | Pulse ON time in milliseconds, when using Pulse or TripClose control models must be set | No | |||
pulse\_off\_time\_ms | integer | Pulse OFF time in milliseconds, when using Pulse or TripClose control models must be set | No | |||
class\_num | integer | Class assignment of this signal. | No | 0 | 0 | 3 |
operate\_type | integer | Default command behaviour. IF selected ”**-1**” - DirectOperateNoAck, **”0”** - DirectOperate, "**1" -** SelectBeforeOperate. | No | 1 | -1 | 1 |
job\_todo | string | Device status signal can be configured by providing one of the given values. | No | COMMUNICATION\_STATUS, DEVICE\_RUNNING, DEVICE\_ERROR, UNKNOWN\_ERROR |
Signal Type | Available Command Variation | Default Command Variation |
Binary Output Command (Group12) | 0, 1 | 1 |
Analog Output Command (Group41) | 0, 1, 2, 3, 4 | 1 |
Signal Type | Available Variations | Default Variations |
Binary | Static variation (Group1) 1, 2 Event variation (Group2) 1, 2, 3 | Static variation 2 Event variation 1 |
Double Binary | Static variation (Group3) 1, 2 Event variation (Group4) 1, 2, 3 | Static variation 2 Event variation 1 |
Binary Output Status | Static variation (Group10) 2 Event variation (Group11) 1, 2 | Static variation 2 Event variation 1 |
Counter | Static variation (Group20) 1, 2, 5, 6 Event variation (Group22) 1, 2, 5, 6 | Static variation 1 Event variation 1 |
Frozen Counter | Static variations (Group21) 1, 2, 5, 6, 9,10 Event variation (Group23) 1, 2, 5, 6 | Static variation 1 Event variation 1 |
Analog | Static variation (Group30) 1, 2, 3, 4, 5, 6 Event variation (Group32) 1, 2, 3, 4, 5, 6, 7, 8 | Static variation 1 Event variation 1 |
Analog Output Status | Static variation (Group40) 1, 2, 3, 4 Event variation (Group42) 1, 2, 3, 4, 5, 6, 7, 8 | Static variation 1 Event variation 1 |
Time and Interval | Static variation (Group50) 1 | Static variation 1 |
Octet String | Static variation (Group110) 0 Event variation (Group111) 0 | Static variation 0 Event variation 0 |
Option | Description |
-h \[ –help \] | Display help information |
-V \[ –version \] | Show version |
-p \[ –port \] | Show output for one port only |
-d <debug level> | Set debugging level |
-c \[ –config \] | Config path |
-a \[ –app \] | Show application layer data |
–l \[ –link \] | Show link layer data |
–t \[ –transport \] | Show transport layer data |
-r \[ –redis \] | Show Redis messages |
-R \[ –readyfile \] | Ready notification file |