Пример #1
0
        public override byte[] PackRequest()
        {
            byte[] request = new byte[25];

            DNP3WriteCommandParameters commandParam = (DNP3WriteCommandParameters)CommandParameters;

            CommandParameters.Length = 18;
            Buffer.BlockCopy(headerBuilder.Build(CommandParameters), 0, request, 0, 10);
            request[10] = commandParam.TransportControl;
            request[11] = commandParam.AplicationControl;
            request[12] = commandParam.FunctionCode;
            Buffer.BlockCopy(BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)commandParam.ObjectTypeField)), 0, request, 13, 2);
            request[15] = commandParam.Qualifier;
            Buffer.BlockCopy(BitConverter.GetBytes(Convert.ToUInt16(commandParam.RangeField)), 0, request, 16, 2);
            Buffer.BlockCopy(BitConverter.GetBytes(Convert.ToUInt16(commandParam.Prefix)), 0, request, 18, 2);
            Buffer.BlockCopy(BitConverter.GetBytes(Convert.ToUInt16(commandParam.Value)), 0, request, 20, 2);
            request[22] = 0x00;

            ushort crc1 = 0;

            for (int i = 10; i < 23; i++)
            {
                CrcCalculator.computeCRC(request[i], ref crc1);
            }
            crc1 = (ushort)(~crc1);

            Buffer.BlockCopy(BitConverter.GetBytes(crc1), 0, request, 23, 2);

            return(request);
        }
Пример #2
0
        public static IDNP3Function CreateWriteFunction(DNP3WriteCommandParameters parameters)
        {
            switch ((TypeField)parameters.ObjectTypeField)
            {
            case TypeField.BINARY_COMMAND:
                return(new WriteDiscreteOutput(parameters));

            case TypeField.ANALOG_OUTPUT_16BIT:
                return(new WriteAnalogOutput(parameters));

            default: return(null);
            }
        }
Пример #3
0
        public void ExecuteWriteCommand(RegisterType type, uint index, uint value)
        {
            DNP3WriteCommandParameters dnp3CommandParam = new DNP3WriteCommandParameters(GetApplicationSequence(), (byte)DNP3FunctionCode.DIRECT_OPERATE, GetTypeField(type, true),
                                                                                         (byte)Qualifier.PREFIX_2_OCTET_COUNT_OF_OBJECTS_2_OCTET, 1, index, value, GetTransportSequence());
            IDNP3Function dnp3Fn = DNP3FunctionFactory.CreateWriteFunction(dnp3CommandParam);

            this.functionExecutor.EnqueueCommand(dnp3Fn);

            var point = storage.GetSingle(type, (int)index);

            if (point != null && point.RegisterType == RegisterType.BINARY_OUTPUT)
            {
                dom.AddOrUpdate(new SCADA.Common.Models.DomDbModel()
                {
                    Mrid = point.Mrid, TimeStamp = DateTime.Now.ToString()
                });
            }
        }