Example #1
0
        private void Update(ushort index, dnp3_protocol.dnp3types.eDNP3GroupID group, dnp3_protocol.tgttypes.eDataSizes dataSize, dnp3_protocol.tgtcommon.eDataTypes dataType, SingleInt32Union value, ref short ptErrorValue)
        {
            ushort uiCount = 1;

            dnp3_protocol.dnp3types.sDNP3DataAttributeID   psDAID     = new dnp3_protocol.dnp3types.sDNP3DataAttributeID();
            dnp3_protocol.dnp3types.sDNP3DataAttributeData psNewValue = new dnp3_protocol.dnp3types.sDNP3DataAttributeData();
            psDAID.u16SlaveAddress = 1;
            psDAID.eGroupID        = group;
            psDAID.u16IndexNumber  = index;

            psNewValue.eDataSize = dataSize;
            psNewValue.eDataType = dataType;

            psDAID.pvUserData   = IntPtr.Zero;
            psNewValue.tQuality = (ushort)(dnp3_protocol.dnp3types.eDNP3QualityFlags.ONLINE);
            psNewValue.pvData   = System.Runtime.InteropServices.Marshal.AllocHGlobal((int)dataSize);

            DateTime date = DateTime.Now;

            psNewValue.sTimeStamp.u8Day           = (byte)date.Day;
            psNewValue.sTimeStamp.u8Month         = (byte)date.Month;
            psNewValue.sTimeStamp.u16Year         = (ushort)date.Year;
            psNewValue.sTimeStamp.u8Hour          = (byte)date.Hour;
            psNewValue.sTimeStamp.u8Minute        = (byte)date.Minute;
            psNewValue.sTimeStamp.u8Seconds       = (byte)date.Second;
            psNewValue.sTimeStamp.u16MilliSeconds = (ushort)date.Millisecond;
            psNewValue.sTimeStamp.u16MicroSeconds = 0;
            psNewValue.sTimeStamp.i8DSTTime       = 0;
            psNewValue.sTimeStamp.u8DayoftheWeek  = (byte)date.DayOfWeek;

            Marshal.WriteInt32(psNewValue.pvData, value.i);
            iErrorCode = dnp3_protocol.dnp3api.DNP3Update(DNP3serverhandle, ref psDAID, ref psNewValue, uiCount, dnp3_protocol.dnp3types.eUpdateClassID.UPDATE_DEFAULT_EVENT, ref ptErrorValue);
            if (iErrorCode != 0)
            {
                Trace.TraceError("dnp3 Library API Function - DNP3Update() failed: {0:D} {1:D}", iErrorCode, ptErrorValue);
                Trace.TraceError("iErrorCode {0:D}: {1}", iErrorCode, errorcodestring(iErrorCode));
                Trace.TraceError("iErrorValue {0:D}: {1}", ptErrorValue, errorvaluestring(ptErrorValue));
            }
        }
Example #2
0
        private static short cbOperate(ushort u16ObjectId, ref dnp3_protocol.dnp3types.sDNP3DataAttributeID psOperateID, ref dnp3_protocol.dnp3types.sDNP3DataAttributeData psOperateValue, ref dnp3_protocol.dnp3types.sDNP3CommandParameters psOperateParams, ref short ptErrorValue)
        {
            if (psOperateID.eGroupID == dnp3_protocol.dnp3types.eDNP3GroupID.ANALOG_OUTPUTS)
            {
                Trace.TraceInformation("GROUP ID : ANALOG_OUTPUT");
                Trace.TraceInformation("Index Number " + psOperateID.u16IndexNumber);
                psOperateValue.eDataSize = dnp3_protocol.tgttypes.eDataSizes.FLOAT32_SIZE;
                psOperateValue.eDataType = dnp3_protocol.tgtcommon.eDataTypes.FLOAT32_DATA;
                iErrorCode = dnp3_protocol.dnp3api.DNP3Update(DNP3serverhandle, ref psOperateID, ref psOperateValue, 1, dnp3_protocol.dnp3types.eUpdateClassID.UPDATE_NO_CLASS, ref ptErrorValue);
                if (iErrorCode != 0)
                {
                    Trace.TraceError("dnp3 Library API Function - DNP3DirectOperate() failed: {0:D} {1:D}", iErrorCode, ptErrorValue);
                    Trace.TraceError("iErrorCode {0:D}: {1}", iErrorCode, errorcodestring(iErrorCode));
                    Trace.TraceError("iErrorValue {0:D}: {1}", ptErrorValue, errorvaluestring(ptErrorValue));
                    return((short)dnp3_protocol.tgterrorcodes.eTgtErrorCodes.EC_NONE);
                }

                if (psOperateParams.eCommandVariation == dnp3_protocol.dnp3types.eCommandObjectVariation.ANALOG_OUTPUT_BLOCK_FLOAT32)
                {
                    Trace.TraceInformation("Variation : ANALOG_OUTPUT_BLOCK_FLOAT32");
                    SingleInt32Union f32Data;
                    f32Data.f = 0;
                    f32Data.i = System.Runtime.InteropServices.Marshal.ReadInt32(psOperateValue.pvData);
                    Trace.TraceInformation("Data : {0:F3}", f32Data.f);
                }
                else if (psOperateParams.eCommandVariation == dnp3_protocol.dnp3types.eCommandObjectVariation.ANALOG_OUTPUT_BLOCK_INTEGER32)
                {
                    Trace.TraceInformation("Variation : ANALOG_OUTPUT_BLOCK_INTEGER32");
                    Trace.TraceInformation("Data : {0:D}", System.Runtime.InteropServices.Marshal.ReadInt32(psOperateValue.pvData));
                }
                else if (psOperateParams.eCommandVariation == dnp3_protocol.dnp3types.eCommandObjectVariation.ANALOG_OUTPUT_BLOCK_INTEGER16)
                {
                    Trace.TraceInformation("Variation : ANALOG_OUTPUT_BLOCK_INTEGER16");
                    Trace.TraceInformation("Data : {0:D}", System.Runtime.InteropServices.Marshal.ReadInt16(psOperateValue.pvData));
                    SingleInt32Union digitalValue = new SingleInt32Union();
                    digitalValue.f = System.Runtime.InteropServices.Marshal.ReadInt16(psOperateValue.pvData);
                    UpdateMP(psOperateID.u16IndexNumber, dnp3types.eDNP3GroupID.ANALOG_OUTPUTS, tgttypes.eDataSizes.FLOAT32_SIZE, tgtcommon.eDataTypes.FLOAT32_DATA, digitalValue, ref ptErrorValue);
                }
                else
                {
                    Trace.TraceInformation("Invalid variation");
                }
            }

            if (psOperateID.eGroupID == dnp3_protocol.dnp3types.eDNP3GroupID.BINARY_OUTPUT)
            {
                Trace.TraceInformation("GROUP ID : BINARY_OUTPUT");
                Trace.TraceInformation("Index Number " + psOperateID.u16IndexNumber);
                psOperateValue.eDataSize = dnp3_protocol.tgttypes.eDataSizes.SINGLE_POINT_SIZE;
                psOperateValue.eDataType = dnp3_protocol.tgtcommon.eDataTypes.SINGLE_POINT_DATA;
                iErrorCode = dnp3_protocol.dnp3api.DNP3Update(DNP3serverhandle, ref psOperateID, ref psOperateValue, 1, dnp3_protocol.dnp3types.eUpdateClassID.UPDATE_DEFAULT_EVENT, ref ptErrorValue);
                if (iErrorCode != 0)
                {
                    Trace.TraceError("dnp3 Library API Function - DNP3DirectOperate() failed: {0:D} {1:D}", iErrorCode, ptErrorValue);
                    Trace.TraceError("iErrorCode {0:D}: {1}", iErrorCode, errorcodestring(iErrorCode));
                    Trace.TraceError("iErrorValue {0:D}: {1}", ptErrorValue, errorvaluestring(ptErrorValue));
                    return((short)dnp3_protocol.tgterrorcodes.eTgtErrorCodes.EC_NONE);
                }

                if (psOperateParams.eCommandVariation == dnp3_protocol.dnp3types.eCommandObjectVariation.CROB_G12V1)
                {
                    Trace.TraceInformation("Variation : CROB_G12V1");
                }
                else
                {
                    Trace.TraceInformation("Invalid variation");
                }
                SingleInt32Union digitalValue = new SingleInt32Union();
                digitalValue.i = System.Runtime.InteropServices.Marshal.ReadInt16(psOperateValue.pvData) > 1?0:1;
                UpdateMP(psOperateID.u16IndexNumber, dnp3types.eDNP3GroupID.BINARY_OUTPUT, tgttypes.eDataSizes.SINGLE_POINT_SIZE, tgtcommon.eDataTypes.SINGLE_POINT_DATA, digitalValue, ref ptErrorValue);
                Trace.TraceInformation("Operation Type " + psOperateParams.eOPType);
                Trace.TraceInformation("Count " + psOperateParams.u8Count);
                Trace.TraceInformation("On time " + psOperateParams.u32ONtime);
                Trace.TraceInformation("Off time " + psOperateParams.u32OFFtime);
                Trace.TraceInformation("CR {0}", psOperateParams.bCR);
            }
            Trace.TraceInformation("Date : {0:D}-{1:D}-{2:D}", psOperateValue.sTimeStamp.u8Day, psOperateValue.sTimeStamp.u8Month, psOperateValue.sTimeStamp.u16Year);
            Trace.TraceInformation("Time : {0:D}:{1:D2}:{2:D2}:{3:D3}", psOperateValue.sTimeStamp.u8Hour, psOperateValue.sTimeStamp.u8Minute, psOperateValue.sTimeStamp.u8Seconds, psOperateValue.sTimeStamp.u16MilliSeconds);
            return((short)dnp3_protocol.tgterrorcodes.eTgtErrorCodes.EC_NONE);
        }