Beispiel #1
0
        /// <summary>
        /// 更新电能脉冲参数
        /// </summary>
        private void UpdateElectricEnergy(APDU apdu)
        {
            try
            {
                var list = apdu.GetObjectListObject();


                string str = "";
                if (apdu.ASDU.IsSequence)
                {
                    var addr = ElementTool.CombinationByte(apdu.ASDU.InformationObject[0],
                                                           apdu.ASDU.InformationObject[1], apdu.ASDU.InformationObject[2]);
                    foreach (var m in list)
                    {
                        var sf = new ShortFloating(m);
                        var q  = new QualityDescription(m[5]);
                        str += "电能召唤:" + addr.ToString("X2") + " 品质描述:" + q.QDS.ToString("X2") + " 值:" + sf.ToString();
                    }
                }


                //txtTest.Text = "";
                //txtTest.Text = str;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, " UpdateElectricEnergy");
            }
        }
Beispiel #2
0
 /// <summary>
 /// 写文件激活确认数据包
 /// </summary>
 /// <param name="data">数据包</param>
 /// <param name="offset">偏移</param>
 /// <param name="len">数据长度</param>
 public FileWriteActivityAckPacket(byte[] data, byte offset, byte len)
 {
     try
     {
         int definelen = data[offset + 2] + 11;
         if (definelen != len)
         {
             throw new ArgumentException("写文件激活,定义长度与实际长度不一致");
         }
         pakcketData = new byte[len];
         Array.Copy(data, offset, pakcketData, 0, len);
         OperationSign = (OperatSign)data[offset++];
         Result        = (WriteFileResultDescription)data[offset++];
         int strLen = data[offset++];
         Name    = UnicodeEncoding.ASCII.GetString(data, offset, strLen);
         offset += NameLen;
         FileID  = ElementTool.CombinationByte(data[offset++], data[offset++],
                                               data[offset++], data[offset++]);
         Size = ElementTool.CombinationByte(data[offset++], data[offset++],
                                            data[offset++], data[offset++]);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Beispiel #3
0
 /// <summary>
 /// 将数据局数组转换成对应元素属性
 /// </summary>
 private void AttributeDataToElement()
 {
     Name = UnicodeEncoding.ASCII.GetString(attributeData, 1, attributeData[0]);
     Size = ElementTool.CombinationByte(attributeData[NameLen + 1],
                                        attributeData[NameLen + 2], attributeData[NameLen + 3],
                                        attributeData[NameLen + 4]);
     Property = attributeData[NameLen + 5];
     Time     = new CP56Time2a(attributeData, NameLen + 6);
 }
Beispiel #4
0
        /// <summary>
        /// 录波数据初始化
        /// </summary>
        /// <param name="rawframe">字节数组</param>
        public RecordWaveform(byte[] rawframe)
        {
            Channel     = rawframe[7];
            WaveformNum = rawframe[8];
            GroupNum    = rawframe[9];
            byte[] data = new byte[7];
            Array.Copy(rawframe, 10, data, 0, 7);
            TimeStamp = new CP56Time2a(data);
            int len = rawframe[1] - 7 - 3 - 3;

            RawByteArray = new byte[len];
            Array.Copy(rawframe, 17, RawByteArray, 0, len);
            RawAdcArray = new ushort[len / 2];
            int count = len / 2;

            for (int i = 0; i < count; i++)
            {
                RawAdcArray[count++] = ElementTool.CombinationByte(rawframe[2 * i], rawframe[2 * i + 1]);
            }
        }
        /// <summary>
        /// 数据包转换为属性值
        /// </summary>
        /// <param name="data">数据包</param>
        /// <param name="offset">便宜</param>
        /// <param name="len">数据长度</param>
        public void PacketDataToElement(byte[] data, byte offset, byte len)
        {
            OperationSign = (OperatSign)data[offset++];
            ResultSign    = (FileResultSign)data[offset++];
            DirectoryID   = ElementTool.CombinationByte(data[offset++],
                                                        data[offset++], data[offset++], data[offset++]);

            Fllow = (FllowingFlag)data[offset++];
            Count = data[offset++];
            if (Count > 0)
            {
                for (int i = 0; i < Count; i++)
                {
                    byte attributeLen = (byte)(data[offset] + 13);
                    var  attribute    = new FileAttribute(data, offset, attributeLen);
                    FileAttributeList.Add(attribute);
                    offset += attributeLen;
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// 文件数据传输包初始化
        /// </summary>
        /// <param name="data">数据包</param>
        /// <param name="offset">偏移</param>
        /// <param name="len">长度</param>
        public FileDataThransmitPacket(byte[] data, byte offset, byte len)
        {
            try
            {
                packetData = new byte[len];
                Array.Copy(data, offset, packetData, 0, len);

                OperationSign = (OperatSign)data[offset++];
                FileID        = ElementTool.CombinationByte(data[offset++], data[offset++],
                                                            data[offset++], data[offset++]);
                FragmentNum = ElementTool.CombinationByte(data[offset++], data[offset++],
                                                          data[offset++], data[offset++]);
                Fllow    = (FllowingFlag)data[offset++];
                FileData = new byte[len - 11];
                Array.Copy(packetData, 10, FileData, 0, len - 11);

                Check = packetData[packetData.Length - 1];
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 /// <summary>
 /// 读数据文件激活确认
 /// </summary>
 /// <param name="data">数据包</param>
 /// <param name="offset">偏移</param>
 /// <param name="len">数据长度</param>
 public FileReadActivityAckPacket(byte[] data, byte offset, byte len)
 {
     try
     {
         int definelen = data[offset + 2] + 11;
         if (definelen != len)
         {
             throw new ArgumentException("读文件激活确认,定义长度与实际长度不一致");
         }
         OperationSign = (OperatSign)data[offset++];
         ResultSign    = (FileResultSign)data[offset++];
         int strLen = data[offset++];
         Name    = UnicodeEncoding.ASCII.GetString(data, offset, strLen);
         offset += NameLen;
         FileID  = ElementTool.CombinationByte(data[offset++], data[offset++],
                                               data[offset++], data[offset++]);
         Size = ElementTool.CombinationByte(data[offset++], data[offset++],
                                            data[offset++], data[offset++]);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Beispiel #8
0
        /// <summary>
        /// 更新遥控状态,更新相应的按钮状态。
        /// Todo:地址更新需要同步,这限制了灵活性
        /// </summary>
        /// <param name="apdu">APDU帧</param>
        private void UpdateTelecontrolState(APDU apdu)
        {
            try
            {
                UInt32 objectAddr = ElementTool.CombinationByte(apdu.ASDU.InformationObject[0], apdu.ASDU.InformationObject[1], apdu.ASDU.InformationObject[2]);
                var    dc         = new DoubleCommand(apdu.ASDU.InformationObject[3]);
                switch (objectAddr)
                {
                //开关控制
                case Telecontrol.BasicAddress:
                {
                    if ((dc.DCS == DCOState.On) && (dc.SE == SelectExecuteOption.Select))
                    {
                        //合闸 选择
                        controlReayActionState.ActionCloseEnabled = true;
                        controlReayActionState.ReadyCloseEnabled  = false;
                        MakeLogMessage(apdu, "", "合闸预制-确认", LogType.Telecontrol);
                    }
                    else if ((dc.DCS == DCOState.On) && (dc.SE == SelectExecuteOption.Execute))
                    {
                        //合闸 执行
                        controlReayActionState.ActionCloseEnabled = false;
                        controlReayActionState.ReadyCloseEnabled  = true;
                        MakeLogMessage(apdu, "", "合闸执行-确认", LogType.Telecontrol);
                    }
                    if ((dc.DCS == DCOState.Off) && (dc.SE == SelectExecuteOption.Select))
                    {
                        //分闸 选择
                        controlReayActionState.ActionOpenEnabled = true;
                        controlReayActionState.ReadyOpenEnabled  = false;
                        MakeLogMessage(apdu, "", "分闸预制-确认", LogType.Telecontrol);
                    }
                    else if ((dc.DCS == DCOState.Off) && (dc.SE == SelectExecuteOption.Execute))
                    {
                        //分闸 执行
                        controlReayActionState.ActionOpenEnabled = false;
                        controlReayActionState.ReadyOpenEnabled  = true;
                        MakeLogMessage(apdu, "", "分闸执行-确认", LogType.Telecontrol);
                    }

                    break;
                }

                //电池活化
                case (Telecontrol.BasicAddress + 1):
                {
                    break;
                }

                //复归
                case (Telecontrol.BasicAddress + 2):
                {
                    break;
                }

                default:
                {
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "更新遥控状态");
            }
        }