lib60870.NET 2.3.0
IEC 60870-5-101/104 Protocol Source Code Library for C#/.NET
|
A single connection to a CS 104 (IEC 60870-5-104) server. Implements the Master interface. More...
Public Member Functions | |
Connection (string hostname, int tcpPort=2404) | |
Initializes a new instance of the lib60870.CS104.Connection class. | |
Connection (string hostname, APCIParameters apciParameters, ApplicationLayerParameters alParameters) | |
Initializes a new instance of the lib60870.CS104.Connection class. | |
Connection (string hostname, int tcpPort, APCIParameters apciParameters, ApplicationLayerParameters alParameters) | |
Initializes a new instance of the lib60870.CS104.Connection class. | |
Connection (string hostname, TlsSecurityInformation tlsInfo, int tcpPort=19998) | |
Initializes a new instance of the lib60870.CS104.Connection class using TLS. | |
Connection (string hostname, int tcpPort, APCIParameters apciParameters, ApplicationLayerParameters alParameters, TlsSecurityInformation tlsInfo) | |
Initializes a new instance of the lib60870.CS104.Connection class using TLS. | |
void | SetTlsSecurity (TlsSecurityInformation securityInfo) |
Set the security parameters for TLS. | |
ConnectionStatistics | GetStatistics () |
Gets the conenction statistics. | |
void | SetConnectTimeout (int millies) |
Sets the connect timeout. | |
override void | SendInterrogationCommand (CauseOfTransmission cot, int ca, byte qoi) |
Sends the interrogation command. | |
override void | SendCounterInterrogationCommand (CauseOfTransmission cot, int ca, byte qcc) |
Sends the counter interrogation command (C_CI_NA_1 typeID: 101) | |
override void | SendReadCommand (int ca, int ioa) |
Sends a read command (C_RD_NA_1 typeID: 102). | |
override void | SendClockSyncCommand (int ca, CP56Time2a time) |
Sends a clock synchronization command (C_CS_NA_1 typeID: 103). | |
override void | SendTestCommand (int ca) |
Sends a test command (C_TS_NA_1 typeID: 104). | |
override void | SendTestCommandWithCP56Time2a (int ca, ushort tsc, CP56Time2a time) |
Sends a test command with CP56Time2a time (C_TS_TA_1 typeID: 107). | |
override void | SendResetProcessCommand (CauseOfTransmission cot, int ca, byte qrp) |
Sends a reset process command (C_RP_NA_1 typeID: 105). | |
override void | SendDelayAcquisitionCommand (CauseOfTransmission cot, int ca, CP16Time2a delay) |
Sends a delay acquisition command (C_CD_NA_1 typeID: 106). | |
override void | SendControlCommand (CauseOfTransmission cot, int ca, InformationObject sc) |
Sends the control command. | |
override void | SendASDU (ASDU asdu) |
Sends an arbitrary ASDU to the connected slave. | |
override ApplicationLayerParameters | GetApplicationLayerParameters () |
void | SendStartDT () |
Start data transmission on this connection. | |
void | SendStopDT () |
Stop data transmission on this connection. | |
void | Connect () |
Connect this instance. | |
void | ConnectAsync () |
Connects to the server (outstation). This is a non-blocking call. Before using the connection you have to check if the connection is already connected and running. | |
X509Certificate | LocalCertificateSelectionCallback (object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) |
Callback function for selecting a local certificate during an SSL/TLS handshake. | |
void | Cancel () |
void | Close () |
void | SetASDUReceivedHandler (ASDUReceivedHandler handler, object parameter) |
Set the ASDUReceivedHandler. This handler is invoked whenever a new ASDU is received. | |
void | SetConnectionHandler (ConnectionHandler handler, object parameter) |
Sets the connection handler. The connection handler is called when the connection is established or closed. | |
override void | SetReceivedRawMessageHandler (RawMessageHandler handler, object parameter) |
Sets the raw message handler. This is a callback to intercept raw messages received. | |
override void | SetSentRawMessageHandler (RawMessageHandler handler, object parameter) |
Sets the sent message handler. This is a callback to intercept the sent raw messages. | |
bool | IsTransmitBufferFull () |
Determines whether the transmit (send) buffer is full. If true the next send command will throw a ConnectionException. | |
override void | GetFile (int ca, int ioa, NameOfFile nof, IFileReceiver receiver) |
Initiates a request to retrieve a file from the remote system. | |
void | GetFile (int ca, int ioa, NameOfFile nof, IFileReceiver receiver, int timeout) |
Initiates a request to retrieve a file from the remote system with a specified timeout. | |
override void | SendFile (int ca, int ioa, NameOfFile nof, IFileProvider fileProvider) |
Initiates a request to send a file to the remote system. | |
void | GetDirectory (int ca) |
Requests the directory listing from the remote system. | |
![]() | |
void | SendInterrogationCommand (CauseOfTransmission cot, int ca, byte qoi) |
Sends the interrogation command. | |
void | SendCounterInterrogationCommand (CauseOfTransmission cot, int ca, byte qcc) |
Sends the counter interrogation command (C_CI_NA_1 typeID: 101) | |
void | SendReadCommand (int ca, int ioa) |
Sends a read command (C_RD_NA_1 typeID: 102). | |
void | SendClockSyncCommand (int ca, CP56Time2a time) |
Sends a clock synchronization command (C_CS_NA_1 typeID: 103). | |
void | SendTestCommand (int ca) |
Sends a test command (C_TS_NA_1 typeID: 104). | |
void | SendTestCommandWithCP56Time2a (int ca, ushort tsc, CP56Time2a time) |
Sends a test command with CP56Time2a time (C_TS_TA_1 typeID: 107). | |
void | SendResetProcessCommand (CauseOfTransmission cot, int ca, byte qrp) |
Sends a reset process command (C_RP_NA_1 typeID: 105). | |
void | SendDelayAcquisitionCommand (CauseOfTransmission cot, int ca, CP16Time2a delay) |
Sends a delay acquisition command (C_CD_NA_1 typeID: 106). | |
void | SendControlCommand (CauseOfTransmission cot, int ca, InformationObject sc) |
Sends the control command. | |
void | SendASDU (ASDU asdu) |
Sends an arbitrary ASDU to the connected slave. | |
void | GetFile (int ca, int ioa, NameOfFile nof, IFileReceiver receiver) |
Read the file from slave (upload file) | |
void | SendFile (int ca, int ioa, NameOfFile nof, IFileProvider fileProvider) |
Sends the file to slave (download file) | |
ApplicationLayerParameters | GetApplicationLayerParameters () |
Get the application layer parameters used by this master instance. | |
void | SetReceivedRawMessageHandler (RawMessageHandler handler, object parameter) |
Sets the raw message handler for received messages. | |
void | SetSentRawMessageHandler (RawMessageHandler handler, object parameter) |
Sets the sent message handler for sent messages. | |
Protected Attributes | |
int | tcpPort |
![]() | |
bool | debugOutput |
Properties | |
string | LocalIpAddress [get, set] |
Set the local IP address for the local connection endpoint. | |
int | LocalTcpPort [get, set] |
Set the TCP (source) port for the local connection endpoint (0 to automatically select a source port) | |
bool | UseSendMessageQueue [get, set] |
Gets or sets a value indicating whether this lib60870.Connection use send message queue. | |
int | SendSequenceNumber [get, set] |
Gets or sets the send sequence number N(S). WARNING: For test purposes only! Do net set in real application! | |
bool | CheckSequenceNumbers [get, set] |
int | ReceiveSequenceNumber [get, set] |
Gets or sets the receive sequence number N(R). WARNING: For test purposes only! Do net set in real application! | |
bool | Autostart [get, set] |
Gets or sets a value indicating whether this lib60870.Connection is automatically sends a STARTDT_ACT message on startup. | |
ApplicationLayerParameters | Parameters [get] |
int | ConnectTimeout [get, set] |
Timeout for connection establishment in milliseconds (ms) | |
int | ReceiveTimeout [get, set] |
Maximum allowed time for receiving a single message. | |
bool | IsRunning [get] |
Gets a value indicating whether this T:lib60870.CS104.Connection is running(connected). | |
![]() | |
bool | DebugOutput [get, set] |
A single connection to a CS 104 (IEC 60870-5-104) server. Implements the Master interface.
lib60870.CS104.Connection.Connection | ( | string | hostname, |
int | tcpPort = 2404 ) |
Initializes a new instance of the lib60870.CS104.Connection class.
hostname | hostname of IP address of the CS 104 server |
tcpPort | TCP port of the CS 104 server |
lib60870.CS104.Connection.Connection | ( | string | hostname, |
APCIParameters | apciParameters, | ||
ApplicationLayerParameters | alParameters ) |
Initializes a new instance of the lib60870.CS104.Connection class.
hostname | hostname of IP address of the CS 104 server |
apciParameters | APCI parameters. |
alParameters | application layer parameters. |
lib60870.CS104.Connection.Connection | ( | string | hostname, |
int | tcpPort, | ||
APCIParameters | apciParameters, | ||
ApplicationLayerParameters | alParameters ) |
Initializes a new instance of the lib60870.CS104.Connection class.
hostname | hostname of IP address of the CS 104 server |
tcpPort | TCP port of the CS 104 server |
apciParameters | APCI parameters. |
alParameters | application layer parameters. |
lib60870.CS104.Connection.Connection | ( | string | hostname, |
TlsSecurityInformation | tlsInfo, | ||
int | tcpPort = 19998 ) |
Initializes a new instance of the lib60870.CS104.Connection class using TLS.
hostname | hostname of IP address of the CS 104 server |
tlsInfo | TLS setup |
tcpPort | TCP port of the CS 104 server |
lib60870.CS104.Connection.Connection | ( | string | hostname, |
int | tcpPort, | ||
APCIParameters | apciParameters, | ||
ApplicationLayerParameters | alParameters, | ||
TlsSecurityInformation | tlsInfo ) |
Initializes a new instance of the lib60870.CS104.Connection class using TLS.
hostname | hostname of IP address of the CS 104 server |
tcpPort | TCP port of the CS 104 server |
apciParameters | APCI parameters. |
alParameters | application layer parameters. |
tlsInfo | TLS setup |
void lib60870.CS104.Connection.Connect | ( | ) |
Connect this instance.
The function will throw a SocketException if the connection attempt is rejected or timed out.
ConnectionException | description |
void lib60870.CS104.Connection.ConnectAsync | ( | ) |
Connects to the server (outstation). This is a non-blocking call. Before using the connection you have to check if the connection is already connected and running.
ConnectionException | description |
void lib60870.CS104.Connection.GetDirectory | ( | int | ca | ) |
Requests the directory listing from the remote system.
ca | The communication address of the remote system. |
override void lib60870.CS104.Connection.GetFile | ( | int | ca, |
int | ioa, | ||
NameOfFile | nof, | ||
IFileReceiver | receiver ) |
Initiates a request to retrieve a file from the remote system.
ca | The communication address of the remote system. |
ioa | The information object address for the file. |
nof | The name of the file to be retrieved. |
receiver | The receiver implementation to handle the file data. |
void lib60870.CS104.Connection.GetFile | ( | int | ca, |
int | ioa, | ||
NameOfFile | nof, | ||
IFileReceiver | receiver, | ||
int | timeout ) |
Initiates a request to retrieve a file from the remote system with a specified timeout.
ca | The communication address of the remote system. |
ioa | The information object address for the file. |
nof | The name of the file to be retrieved. |
receiver | The receiver implementation to handle the file data. |
timeout | The timeout duration in milliseconds for the file request. |
ConnectionStatistics lib60870.CS104.Connection.GetStatistics | ( | ) |
Gets the conenction statistics.
bool lib60870.CS104.Connection.IsTransmitBufferFull | ( | ) |
Determines whether the transmit (send) buffer is full. If true the next send command will throw a ConnectionException.
true
if this instance is send buffer full; otherwise, false
.X509Certificate lib60870.CS104.Connection.LocalCertificateSelectionCallback | ( | object | sender, |
string | targetHost, | ||
X509CertificateCollection | localCertificates, | ||
X509Certificate | remoteCertificate, | ||
string[] | acceptableIssuers ) |
Callback function for selecting a local certificate during an SSL/TLS handshake.
sender | The source of the certificate selection request (typically the client in an SSL/TLS connection). |
targetHost | The name of the server being connected to (host name or IP address). |
localCertificates | The collection of local certificates available for selection. |
remoteCertificate | The remote server's certificate being validated (not used in this implementation). |
acceptableIssuers | A list of acceptable issuers for the certificate (not used in this implementation). |
override void lib60870.CS104.Connection.SendASDU | ( | ASDU | asdu | ) |
Sends an arbitrary ASDU to the connected slave.
asdu | The ASDU to send |
override void lib60870.CS104.Connection.SendClockSyncCommand | ( | int | ca, |
CP56Time2a | time ) |
Sends a clock synchronization command (C_CS_NA_1 typeID: 103).
ca | Common address |
time | the new time to set |
ConnectionException | description |
override void lib60870.CS104.Connection.SendControlCommand | ( | CauseOfTransmission | cot, |
int | ca, | ||
InformationObject | sc ) |
Sends the control command.
The type ID has to match the type of the InformationObject!
C_SC_NA_1 -> SingleCommand C_DC_NA_1 -> DoubleCommand C_RC_NA_1 -> StepCommand C_SC_TA_1 -> SingleCommandWithCP56Time2a C_SE_NA_1 -> SetpointCommandNormalized C_SE_NB_1 -> SetpointCommandScaled C_SE_NC_1 -> SetpointCommandShort C_BO_NA_1 -> Bitstring32Command
cot | Cause of transmission (use ACTIVATION to start a control sequence) |
ca | Common address |
sc | Information object of the command |
ConnectionException | description |
override void lib60870.CS104.Connection.SendCounterInterrogationCommand | ( | CauseOfTransmission | cot, |
int | ca, | ||
byte | qcc ) |
Sends the counter interrogation command (C_CI_NA_1 typeID: 101)
cot | Cause of transmission |
ca | Common address |
qcc | Qualifier of counter interrogation command |
ConnectionException | description |
override void lib60870.CS104.Connection.SendDelayAcquisitionCommand | ( | CauseOfTransmission | cot, |
int | ca, | ||
CP16Time2a | delay ) |
Sends a delay acquisition command (C_CD_NA_1 typeID: 106).
cot | Cause of transmission |
ca | Common address |
delay | delay for acquisition |
ConnectionException | description |
override void lib60870.CS104.Connection.SendFile | ( | int | ca, |
int | ioa, | ||
NameOfFile | nof, | ||
IFileProvider | fileProvider ) |
Initiates a request to send a file to the remote system.
ca | The communication address of the remote system. |
ioa | The information object address for the file. |
nof | The name of the file to be sent. |
fileProvider | The file provider interface that supplies the file data to be sent. |
override void lib60870.CS104.Connection.SendInterrogationCommand | ( | CauseOfTransmission | cot, |
int | ca, | ||
byte | qoi ) |
Sends the interrogation command.
cot | Cause of transmission |
ca | Common address |
qoi | Qualifier of interrogation (20 = station interrogation) |
ConnectionException | description |
override void lib60870.CS104.Connection.SendReadCommand | ( | int | ca, |
int | ioa ) |
Sends a read command (C_RD_NA_1 typeID: 102).
This will send a read command C_RC_NA_1 (102) to the slave/outstation. The COT is always REQUEST (5). It is used to implement the cyclical polling of data application function.
ca | Common address |
ioa | Information object address |
ConnectionException | description |
override void lib60870.CS104.Connection.SendResetProcessCommand | ( | CauseOfTransmission | cot, |
int | ca, | ||
byte | qrp ) |
Sends a reset process command (C_RP_NA_1 typeID: 105).
cot | Cause of transmission |
ca | Common address |
qrp | Qualifier of reset process command |
ConnectionException | description |
override void lib60870.CS104.Connection.SendTestCommand | ( | int | ca | ) |
Sends a test command (C_TS_NA_1 typeID: 104).
Not required and supported by IEC 60870-5-104.
ca | Common address |
ConnectionException | description |
override void lib60870.CS104.Connection.SendTestCommandWithCP56Time2a | ( | int | ca, |
ushort | tsc, | ||
CP56Time2a | time ) |
Sends a test command with CP56Time2a time (C_TS_TA_1 typeID: 107).
ca | Common address |
tsc | test sequence number |
time | test timestamp |
ConnectionException | description |
void lib60870.CS104.Connection.SetASDUReceivedHandler | ( | ASDUReceivedHandler | handler, |
object | parameter ) |
Set the ASDUReceivedHandler. This handler is invoked whenever a new ASDU is received.
handler | the handler to be called |
parameter | user provided parameter that is passed to the handler |
void lib60870.CS104.Connection.SetConnectionHandler | ( | ConnectionHandler | handler, |
object | parameter ) |
Sets the connection handler. The connection handler is called when the connection is established or closed.
handler | the handler to be called |
parameter | user provided parameter that is passed to the handler |
void lib60870.CS104.Connection.SetConnectTimeout | ( | int | millies | ) |
Sets the connect timeout.
millies | timeout value in milliseconds (ms) |
override void lib60870.CS104.Connection.SetReceivedRawMessageHandler | ( | RawMessageHandler | handler, |
object | parameter ) |
Sets the raw message handler. This is a callback to intercept raw messages received.
handler | Handler/delegate that will be invoked when a message is received |
parameter | will be passed to the delegate |
override void lib60870.CS104.Connection.SetSentRawMessageHandler | ( | RawMessageHandler | handler, |
object | parameter ) |
Sets the sent message handler. This is a callback to intercept the sent raw messages.
handler | Handler/delegate that will be invoked when a message is sent< |
parameter | will be passed to the delegate |
void lib60870.CS104.Connection.SetTlsSecurity | ( | TlsSecurityInformation | securityInfo | ) |
Set the security parameters for TLS.
securityInfo | Security info. |
|
getset |
Gets or sets a value indicating whether this lib60870.Connection is automatically sends a STARTDT_ACT message on startup.
true
to send STARTDT_ACT message on startup; otherwise, false
.
|
get |
Gets a value indicating whether this T:lib60870.CS104.Connection is running(connected).
true
if is running/connected; otherwise, false
.
|
getset |
Gets or sets the receive sequence number N(R). WARNING: For test purposes only! Do net set in real application!
The receive sequence number N(R)
|
getset |
Gets or sets the send sequence number N(S). WARNING: For test purposes only! Do net set in real application!
The send sequence number N(S)
|
getset |
Gets or sets a value indicating whether this lib60870.Connection use send message queue.
If true
the Connection stores the ASDUs to be sent in a Queue when the connection cannot send ASDUs. This is the case when the counterpart (slave/server) is (temporarily) not able to handle new message, or the slave did not confirm the reception of the ASDUs for other reasons. If false
the ASDU will be ignored and a lib60870.ConnectionException will be thrown in this case.
true
if use send message queue; otherwise, false
.