User Guide

1. Intro

j60870 is an implementation of the IEC 60870-5-104 protocol standard for client (i.e. master or controlling station) and server (i.e. slave or controlled station) applications.

You can use j60870 to program your individual client or server applications. A simple console client is part of the library. You can execute it using the scripts found in the folder “run-scripts”.

2. Distribution

After extracting the distribution tar file the j60870 library can be found in the folder /build/libs.

3. Getting Started

The easiest way to get started is by taking a look at the code of the console client and the sample server which can be found here: cli-app/src/main/java/org/openmuc/j60870/app/ . These applications in combination with the javadoc should satisfy most of your documentation needs.

Here is a short summary of the steps to get a client running:

  • Create and configure an instance of ClientConnectionBuilder.
  • Connect to the server using ClientConnectionBuilder.build() which returns the connection. The client is now connected to the server via TCP/IP.
  • Initialize the data transfer by calling Connection.startDataTransfer.
  • Now all incoming ASDUs (except for confirmation messages) will be forwarded to the ASduListener you registered. Every ASDU contains a number of Information Objects. The information objects contain information elements that make up the actual data. You will have to cast the InformationElements of the ASDU to a concrete implementation in order to access the data inside them. Every standardized Information Element is implemented by a class starting with the letters “Ie”. The Type Identifier allows you to figure what to cast a particular Information Element to.
  • You can use the Connection instance to send commands.

4. Terminology

  • OA – Originator Address
  • Monitor direction – direction from server to client
  • Control direction – direction from client to server
  • CON – confirmation message
  • COT – Cause of transmission
  • STARTDT ACT – Start data tranfer message. Needs to be sent by the client before information messages may be exchanged between client and server.

5. Features

  • Server implementation
  • Client implementation

The usage and description can be seen in the j60870 javadoc.

5.1. Supported information Elements

Element Element
Abstract Qualifier of Command Qualifier of Interrogation
Abstract Quality Qualifier of Parameter Activation
Ack File or Section Qualifier Qualifier of Parameter of Measured Values
Binary Counter Reading Qualifier of Reset Process Command
Binary State Information Qualifier of Set Point Command
Cause of Initialization Quality
Checksum Regulating Step Command
Double Command Scaled Value
Double Point with Quality Section Ready Qualifier
File Ready Qualifier Select and Call Qualifier
File Segment Short Float
Fixed Test Bit Pattern Single Command
Last Section or Segment Qualifier Single Point with Quality
Length of File or Section Single Protection Event
Name of File Status and Status Changes
Name of Section Status of File
Normalized Value Test Sequence Counter
Protection Output Circuit Information Time16
Protection Quality Time24
Protection Start Event Time56
Qualifier of Counter Interrogation Value with Transient State

5.2. Supported ASDu types (Client and Server)

ASDu Number Description
C_BO_NA_1 51 Bitstring of 32 bits
C_BO_TA_1 64 Bitstring of 32 bit with time tag CP56Time2a
C_CD_NA_1 106 Delay acquisition command
C_CI_NA_1 101 Counter interrogation command
C_CS_NA_1 103 Clock synchronization command
C_DC_NA_1 46 Double command
C_DC_TA_1 59 Double command with time tag CP56Time2a
C_IC_NA_1 100 Interrogation command
C_RC_NA_1 47 Regulating step command
C_RC_TA_1 60 Regulating step command with time tag CP56Time2a
C_RD_NA_1 102 Read command
C_RP_NA_1 105 Reset process command
C_SC_NA_1 45 Single command
C_SC_TA_1 58 Single command with time tag CP56Time2a
C_SE_NA_1 48 Set point command, normalized value
C_SE_NB_1 49 Set point command, scaled value
C_SE_NC_1 50 Set point command, short floating point number
C_SE_TA_1 61 Set-point command with time tag CP56Time2a, normalized value
C_SE_TB_1 62 Set-point command with time tag CP56Time2a, scaled value
C_SE_TC_1 63 C_SE_TC_1 Set-point command with time tag CP56Time2a, short floating point number
C_TS_NA_1 104 Test command
C_TS_TA_1 107 Test command with time tag CP56Time2a
F_AF_NA_1 124 Ack file, ack section
F_DR_TA_1 126 Directory
F_FR_NA_1 120 File ready
F_LS_NA_1 123 Last section, last segment
F_SC_NA_1 122 Call directory, select file, call file, call section
F_SC_NB_1 127 QueryLog, request archive file
F_SG_NA_1 125 Segment
F_SR_NA_1 121 Section ready
M_BO_NA_1 7 Bitstring of 32 bit
M_BO_TA_1 8 Bitstring of 32 bit with time tag
M_BO_TB_1 33 Bitstring of 32 bits with time tag CP56Time2a
M_DP_NA_1 3 Double-point information without time tag
M_DP_TA_1 4 Double-point information with time tag
M_DP_TB_1 31 Double-point information with time tag CP56Time2a
M_EI_NA_1 70 End of initialization
M_EP_TA_1 17 Event of protection equipment with time tag
M_EP_TB_1 18 Packed start events of protection equipment with time tag
M_EP_TC_1 19 Packed output circuit information of protection equipment with time tag
M_EP_TD_1 38 Event of protection equipment with time tag CP56Time2a
M_EP_TE_1 39 Packed start events of protection equipment with time tag CP56Time2a
M_EP_TF_1 40 Packed output circuit information of protection equipment with time tag CP56Time2
M_IT_NA_1 15 Integrated totals
M_IT_TA_1 16 Integrated totals with time tag
M_IT_TB_1 37 Integrated totals with time tag CP56Time2a
M_ME_NA_1 9 Measured value, normalized value
M_ME_NB_1 11 Measured value, scaled value
M_ME_NC_1 13 Measured value, short floating point number
M_ME_ND_1 21 Measured value, normalized value without quality descriptor
M_ME_TA_1 10 Measured value, normalized value with time tag
M_ME_TB_1 12 Measured value, scaled value with time tag
M_ME_TC_1 14 Measured value, short floating point number with time tag
M_ME_TD_1 34 Measured value, normalized value with time tag CP56Time2a
M_ME_TE_1 35 Measured value, scaled value with time tag CP56Time2a
M_ME_TF_1 36 Measured value, short floating point number with time tag CP56Time2a
M_PS_NA_1 20 Packed single-point information with status change detection
M_SP_NA_1 1 Single-point information without time tag
M_SP_TA_1 2 Single-point information with time tag
M_SP_TB_1 30 Single-point information with time tag CP56Time2a
M_ST_NA_1 5 Step position information
M_ST_TA_1 6 Step position information with time tag
M_ST_TB_1 32 Step position information with time tag CP56Time2a
P_AC_NA_1 113 Parameter activation
P_ME_NA_1 110 Parameter of measured value, normalized value
P_ME_NB_1 111 Parameter of measured value, scaled value
P_ME_NC_1 112 Parameter of measured value, short floating point number

5.3. In client connection implemented commands

Command Command
Confirmation clock synchronization command
single Command test command
single Command with Time Tag process command
double Command delay acquisition command
double Command with Time Tag test command with time tag CP56Time2a
regulating Step Command parameter of measured values, normalized value
regulating Step Command with Time Tag parameter of measured values, scaled value
Normalized Value Command parameter of measured values, short floating point number
set Normalized Value Command with Time Tag parameter activation
set Scaled Value Command file Ready
set Scaled Value Command with Time Tag section Ready
set Short Float Command call or Select Files
set Short Float Command with Time Tag last Section or Segment
bit String Command ack File or Section
bit String Command with Time Tag Segment
interrogation command Directory
counter interrogation command query Log
read command

6. Develop j60870

We use the Gradle build automation tool. The distribution contains a fully functional gradle build file (“build.gradle”). Thus if you changed code and want to rebuild a library you can do it easily with Gradle. Also if you want to import our software into Eclipse you can easily create Eclipse project files using Gradle. Just follow the instructions on our FAQ site: https://www.openmuc.org/faq/

7. Authors

Developers:

  • Dirk Zimmermann

Former Developers:

  • Stefan Feuerhahn
  • Albrecht Schall