/// <summary> /// Sends the control command. /// </summary> /// /// 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 /// /// <param name="cot">Cause of transmission (use ACTIVATION to start a control sequence)</param> /// <param name="ca">Common address</param> /// <param name="sc">Information object of the command</param> /// <exception cref="ConnectionException">description</exception> public void SendControlCommand(CauseOfTransmission cot, int ca, InformationObject sc) { ASDU controlCommand = new ASDU(parameters, cot, false, false, (byte)parameters.OriginatorAddress, ca, false); controlCommand.AddInformationObject(sc); SendASDUInternal(controlCommand); }
/// <summary> /// Sends a reset process command (C_RP_NA_1 typeID: 105). /// </summary> /// <param name="cot">Cause of transmission</param> /// <param name="ca">Common address</param> /// <param name="qrp">Qualifier of reset process command</param> /// <exception cref="ConnectionException">description</exception> public void SendResetProcessCommand(CauseOfTransmission cot, int ca, byte qrp) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.ACTIVATION, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new ResetProcessCommand(0, qrp)); SendASDUInternal(asdu); }
/// <summary> /// Sends a delay acquisition command (C_CD_NA_1 typeID: 106). /// </summary> /// <param name="cot">Cause of transmission</param> /// <param name="ca">Common address</param> /// <param name="delay">delay for acquisition</param> /// <exception cref="ConnectionException">description</exception> public void SendDelayAcquisitionCommand(CauseOfTransmission cot, int ca, CP16Time2a delay) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.ACTIVATION, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new DelayAcquisitionCommand(0, delay)); SendASDUInternal(asdu); }
/// <summary> /// Sends a test command (C_TS_NA_1 typeID: 104). /// </summary> /// /// Not required and supported by IEC 60870-5-104. /// /// <param name="ca">Common address</param> /// <exception cref="ConnectionException">description</exception> public void SendTestCommand(int ca) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.ACTIVATION, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new TestCommand()); SendASDUInternal(asdu); }
/// <summary> /// Sends a clock synchronization command (C_CS_NA_1 typeID: 103). /// </summary> /// <param name="ca">Common address</param> /// <param name="time">the new time to set</param> /// <exception cref="ConnectionException">description</exception> public void SendClockSyncCommand(int ca, CP56Time2a time) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.ACTIVATION, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new ClockSynchronizationCommand(0, time)); SendASDUInternal(asdu); }
/// <summary> /// Sends a read command (C_RD_NA_1 typeID: 102). /// </summary> /// /// 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. /// /// <param name="ca">Common address</param> /// <param name="ioa">Information object address</param> /// <exception cref="ConnectionException">description</exception> public void SendReadCommand(int ca, int ioa) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.REQUEST, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new ReadCommand(ioa)); SendASDUInternal(asdu); }
/// <summary> /// Sends the counter interrogation command (C_CI_NA_1 typeID: 101) /// </summary> /// <param name="cot">Cause of transmission</param> /// <param name="ca">Common address</param> /// <param name="qcc">Qualifier of counter interrogation command</param> /// <exception cref="ConnectionException">description</exception> public void SendCounterInterrogationCommand(CauseOfTransmission cot, int ca, byte qcc) { ASDU asdu = new ASDU(parameters, cot, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new CounterInterrogationCommand(0, qcc)); SendASDUInternal(asdu); }
/// <summary> /// Sends a test command with CP56Time2a time (C_TS_TA_1 typeID: 107). /// </summary> /// <param name="ca">Common address</param> /// <param name="tsc">test sequence number</param> /// <param name="time">test timestamp</param> /// <exception cref="ConnectionException">description</exception> public void SendTestCommandWithCP56Time2a(int ca, ushort tsc, CP56Time2a time) { ASDU asdu = new ASDU(parameters, CauseOfTransmission.ACTIVATION, false, false, (byte)parameters.OriginatorAddress, ca, false); asdu.AddInformationObject(new TestCommandWithCP56Time2a(tsc, time)); SendASDUInternal(asdu); }