예제 #1
0
        /// <summary>
        /// 保护定值选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DownloadProtectSetSelect_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                var observale = (ObservableCollection <ProtectSetPoint>)protectSetPoint;
                if ((observale != null) && (observale.Count > 0))
                {
                    var qos            = new QualifyCommandSet(ActionDescrible.Select);
                    var protectsetAPDU = new APDU(appMessageManager.TransmitSequenceNumber, appMessageManager.RealReceiveSequenceNumber,
                                                  TypeIdentification.C_SE_NC_1, true, (byte)observale.Count,
                                                  CauseOfTransmissionList.Activation, appMessageManager.ASDUADdress, ProtectSetPoint.BasicAddress, qos);

                    foreach (var m in observale)
                    {
                        if (m.InternalID <= observale.Count)
                        {
                            var sf = new ShortFloating((float)m.ParameterValue);
                            protectsetAPDU.AddInformationObject(sf.GetDataArray(),
                                                                (byte)sf.GetDataArray().Length, (byte)(m.InternalID - 1));
                        }
                        else
                        {
                            throw new Exception("序号不在顺序范围之内,无法使用序列化方法,请检查InternalID是否连续");
                        }
                    }
                    //BeginInvokeUpdateHistory(fram.GetAPDUDataArray(), fram.FrameArray.Length, "测试");
                    SendTypeIMessage(TypeIdentification.P_ME_NC_1, protectsetAPDU);
                    MakeLogMessage(sender, "定值选择" + protectsetAPDU.ToString(), LogType.ProtectSetpoint);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "DownloadProtectSetSelect_Click");
            }
        }
예제 #2
0
        /// <summary>
        /// 针对遥测信息,序列化
        /// <summary>
        /// <param name="sf">浮点数</param>
        /// <param name="time">时间信标</param>
        public bool AddInformationObject(ShortFloating sf, CP56Time2a time)
        {
            bool state = false;

            if (ASDU.IsSequence == true)
            {
                return(state);
            }
            var data = new byte[sf.GetDataArray().Length + time.GetDataArray().Length];

            Array.Copy(sf.GetDataArray(), 0, data, 0, sf.GetDataArray().Length);
            Array.Copy(time.GetDataArray(), 0 + sf.GetDataArray().Length, data, sf.GetDataArray().Length, time.GetDataArray().Length);

            ASDU.AddInformationObject(data, (byte)data.Length);
            return(true);
        }
예제 #3
0
        /// <summary>
        /// 添加信息对象,非序列化,浮点数+地址+品质描述词
        /// </summary>
        /// <param name="Address">遥测地址</param>
        /// <param name="sf">浮点数</param>
        public bool AddInformationObject(UInt32 address, ShortFloating sf)
        {
            bool state = false;

            if (ASDU.IsSequence == true)
            {
                return(state);
            }
            var data = new byte[3 + sf.GetDataArray().Length];

            data[0] = ElementTool.GetBit7_0(address);
            data[1] = ElementTool.GetBit15_8(address);
            data[2] = ElementTool.GetBit23_16(address);
            Array.Copy(sf.GetDataArray(), 0, data, 3, sf.GetDataArray().Length);
            ASDU.AddInformationObject(data, (byte)data.Length);

            return(true);
        }
예제 #4
0
        /// <summary>
        /// 添加序列化的信息对象:短浮点数(byte4)+品质描述词(byte1)
        /// <summary>
        /// <param name="sf">浮点数</param>
        /// <param name="qds">品质描述词</param>
        /// <param name="position">添加的位置</param>
        public bool AddInformationObject(ShortFloating sf, QualityDescription qds, byte position)
        {
            var data = new byte[5];

            Array.Copy(sf.GetDataArray(), data, 4);
            data[4] = qds.QDS;
            ASDU.AddInformationObject(data, 5, position);

            return(true);
        }