using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using FlyADBase; using FLY.Thick.Base.IService; namespace FLY.Thick.Base.Server { public class GM_GageInfo : GM_ScanMotion2, IGageInfoService, Misc.ISaveToXml { #region IGageInfoService 接口 /// /// 数据好了!!!! /// 当 flyad7 的poslen, posOfGrid 发生变化时,DataOK = false, 需要重新记录。 /// public bool DataOK { get; set; } private int poslen=9000; /// /// 机架总长,脉冲 /// public int PosLen { get; set; } private int posofgrid=10; /// /// 1个grid = N个pos /// public int PosOfGrid { get; set; } = 10; [PropertyChanged.DoNotCheckEquality] public int[] ForwData { get; private set; } [PropertyChanged.DoNotCheckEquality] public int[] BackwData { get; private set; } /// /// 0~100 /// public int Progress { get; private set; } /// /// 数据录制,记下来回扫描的AD值数组 /// public override bool Start() { bool b = base.Start(); if (!b) return false; Progress = 0; tempDataCnt = 0; ScanCnt = 1; DataOK = false; PosOfGrid = mFlyAD.PosOfGrid; PosLen = mFlyAD.PosLen; int grid_size = PosLen / PosOfGrid; int[] fdatas = new int[grid_size]; int[] bdatas = new int[grid_size]; for (int i = 0; i < grid_size; i++) { fdatas[i] = Misc.MyBase.NULL_VALUE; bdatas[i] = Misc.MyBase.NULL_VALUE; } ForwData = fdatas; BackwData = bdatas; return base.Start2(); } public void StartMeasure() { Start(); } public override void Stop() { base.Stop(); if (DataOK) { Progress = 100; } else { PosOfGrid = mFlyAD.PosOfGrid; PosLen = mFlyAD.PosLen; int grid_size = PosLen / PosOfGrid; int[] fdatas = new int[grid_size]; int[] bdatas = new int[grid_size]; for (int i = 0; i < grid_size; i++) { fdatas[i] = Misc.MyBase.NULL_VALUE; bdatas[i] = Misc.MyBase.NULL_VALUE; } ForwData = fdatas; BackwData = bdatas; } Save(); } #endregion private int tempDataCnt = 0; private string param_path; public GM_GageInfo(FlyAD7 flyad):this(flyad, "gageinfo.xml") { } public GM_GageInfo(FlyAD7 flyad, string param_path) : base(flyad) { GMState = Common.CTRL_STATE.GAGEINFO; this.param_path = param_path; Load(); if ((PosOfGrid != mFlyAD.PosOfGrid) || (PosLen != mFlyAD.PosLen)) DataOK = false; else DataOK = true; flyad.PropertyChanged += new PropertyChangedEventHandler(flyad_PropertyChanged); DataPosEvent += new EndEventHandler(pollCorrect_DataPosEvent); EndEvent += new EndEventHandler(pollCorrect_EndEvent); } void flyad_PropertyChanged(object sender, PropertyChangedEventArgs e) { if ((e.PropertyName == "PosOfGrid") || (e.PropertyName == "PosLen")) { if ((PosOfGrid != mFlyAD.PosOfGrid) || (PosLen != mFlyAD.PosLen)) DataOK = false; else DataOK = true; } } void pollCorrect_EndEvent(object obj, FlyADBase.MiniGridEventArgs e) { DataEnd(e.direction, e.posOfGrid, e.grid_start, e.buf); } void pollCorrect_DataPosEvent(object obj, FlyADBase.MiniGridEventArgs e) { int grid_len = PosLen / PosOfGrid; if (e.direction == Misc.DIRECTION.FORWARD) { int p = e.grid_start * 100 / grid_len; Progress = (100 * tempDataCnt + p) / (2); } else { int p = (grid_len - e.grid_start) * 100 / grid_len; Progress = (100 * tempDataCnt + p) / (2); } } void DataEnd(Misc.DIRECTION direction, int posOfGrid, int start_grid, int[] dat) { if (direction == Misc.DIRECTION.FORWARD) { for (int i = 0; i < dat.Length; i++) { int grid = i + start_grid; if (grid >= ForwData.Count()) break; ForwData[grid] = dat[i]; } NotifyPropertyChanged("ForwData"); } else { for (int i = 0; i < dat.Length; i++) { int grid = i + start_grid; if (grid >= BackwData.Count()) break; BackwData[grid] = dat[i]; } NotifyPropertyChanged("BackwData"); DataOK = true; } tempDataCnt++; Progress = 100 * tempDataCnt / (2); } void Save() { Misc.SaveToXmlHepler.Save(param_path, this); } void Load() { Misc.SaveToXmlHepler.Load(param_path, this); } public virtual string[] GetSavePropertyNames() { return new string[]{ "PosLen","PosOfGrid","ForwData","BackwData" }; } } }