Exemple #1
0
        /// <summary>
        /// 遥信表格菜单
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgmenu_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (sender is ContextMenu)
            {
                var m = e.Source as MenuItem;
                switch (m.Name)
                {
                case "itemLoadAs":
                {
                    string path = "";
                    OpenXmlFile(ref path, "xml");

                    telesignalisation = DataLoad <Telesignalisation>(ref path, ref pathxsdTelesignalisation,
                                                                     ref dataSetTelesignalisation, DataTypeEnum.Telesignalisation, gridTelesignalisation);
                    break;
                }

                case "itemSaveAs":
                {
                    string path = "";
                    SaveXmlFile(ref path);
                    DataExport <Telesignalisation>(dataSetTelesignalisation, DataTypeEnum.Telesignalisation,
                                                   telesignalisation, path);

                    break;
                }

                case "itemAddUp":
                {
                    if (gridTelesignalisation.SelectedIndex > -1)
                    {
                        var item  = new Telesignalisation(0, "xxx", 0, "否", 0, "xxx", "xxx", "StateA", "StateB");
                        var obser = (ObservableCollection <Telesignalisation>)telesignalisation;


                        obser.Insert(gridTelesignalisation.SelectedIndex, item);
                    }


                    break;
                }

                case "itemAddDown":
                {
                    if (gridTelesignalisation.SelectedIndex > -1)
                    {
                        var item  = new Telesignalisation(0, "xxx", 0, "否", 0, "xxx", "xxx", "StateA", "StateB");
                        var obser = (ObservableCollection <Telesignalisation>)telesignalisation;
                        if (gridTelesignalisation.SelectedIndex < gridTelesignalisation.Columns.Count - 1)
                        {
                            obser.Insert(gridTelesignalisation.SelectedIndex + 1, item);
                        }
                        else
                        {
                            obser.Add(item);
                        }
                    }
                    break;
                }

                case "itemDeleteSelect":
                {
                    if (gridTelesignalisation.SelectedIndex > -1)
                    {
                        var result = MessageBox.Show("是否删除选中行:" + gridTelesignalisation.SelectedItem.ToString(),
                                                     "确认删除", MessageBoxButton.OKCancel);
                        if (result == MessageBoxResult.OK)
                        {
                            var obser = (ObservableCollection <Telesignalisation>)telesignalisation;
                            obser.RemoveAt(gridTelesignalisation.SelectedIndex);
                        }
                    }
                    break;
                }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// 更新遥信数据
        /// </summary>
        private void UpdateTelesignalisation(APDU apdu)
        {
            try
            {
                var list = apdu.GetInformationList();

                var m = (ObservableCollection <Telesignalisation>)telesignalisation;

                switch ((TypeIdentification)apdu.ASDU.TypeId)
                {
                case TypeIdentification.M_SP_NA_1:    //单点信息
                case TypeIdentification.M_DP_NA_1:    //双点信息
                {
                    foreach (var ele in list)
                    {
                        for (int k = 0; k < m.Count; k++)
                        {
                            var t = m[k];
                            if ((t.InternalID + Telesignalisation.BasicAddress - 1) == ele.Item1)
                            {
                                t.Date = DateTime.Now.ToLongTimeString();
                                t.TelesignalisationResult = (byte)ele.Item2;
                                if ((TypeIdentification)apdu.ASDU.TypeId == TypeIdentification.M_DP_NA_1)
                                {
                                    t.IsSingle = true;
                                }
                                else
                                {
                                    t.IsSingle = false;
                                }
                            }
                        }
                    }
                    break;
                }

                case TypeIdentification.M_SP_TB_1:    //带CP56Time2a时标的单点信息
                case TypeIdentification.M_DP_TB_1:    //带CP56Time2a时标的双点信息
                {
                    var log = (ObservableCollection <EventLog>)eventLog;
                    foreach (var ele in list)
                    {
                        var time = ele.Item3 as CP56Time2a;
                        //通过遥信ID,查找所需要的元素
                        Telesignalisation result = null;
                        foreach (var find in m)
                        {
                            if (find.InternalID == (int)ele.Item1)
                            {
                                result = new Telesignalisation(find.InternalID, find.TelesignalisationName, find.TelesignalisationID,
                                                               find.IsNot, find.TelesignalisationResult, "", "");
                                break;
                            }
                        }

                        EventLog alog;
                        if (result != null)
                        {
                            alog = new EventLog(result.InternalID, result.TelesignalisationState, ele.Item2.ToString(),
                                                time.ToString(), "", time.Milliseconds.ToString());
                        }
                        else
                        {
                            alog = new EventLog((int)ele.Item1, "ID未定义", ele.Item2.ToString(),
                                                time.ToString(), "", time.Milliseconds.ToString());
                        }


                        log.Add(alog);
                    }
                    break;
                }

                default:
                {
                    throw new ArgumentOutOfRangeException("不能识别既定的遥信ID");
                }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "UpdateTelesignalisation");
            }
        }