using FLY.Thick.Base.Common; using FLY.Thick.Base.IService; using FLY.Thick.Base.Server; using FLY.Thick.Blowing.Server; using FLY.Thick.Blowing.Server.Model; using FlyADBase; using FObjBase; using Misc; using NLog.Config; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Windows.Threading; using HistoryDb = FLY.Thick.BlowingScan.Server.Model.HistoryDb; using OrgDbModel = FLY.Thick.BlowingScan.Server.Model.OrgDbModel; using ScanWarning = FLY.Thick.Blowing.Server.ScanWarning; namespace FLY.Thick.BlowingScan.Server { public class TDGage : ITDGageService { #region 延时推送 MARKNO const int MARKNO_UPDATEV = 1; #endregion const int AlarmLamp_bit = 4; #region 参数-------------------------------------------------------------------- #region 初始化------------------------------------------------------------------ /// <summary> /// 参数目录 m_path;数据文件的 根目录默认是 "Gage1", 不能有 @"\" /// 目前也是对外的服务器目录 /// </summary> public string mParamDirectory; /// <summary> /// 名字 如:gage0 /// </summary> public string mName; #endregion #region 数据-------------------------------------------------------------------- /// <summary> /// 当前基本简单参数 /// </summary> public DynArea dynArea; /// <summary> /// 设备参数 /// </summary> public InitParam initParam; /// <summary> /// 运行参数 /// </summary> public BlowingFixProfile profile; /// <summary> /// 边界查找,由 boltmap 独立出来的功能 /// </summary> public BorderSearch borderSearch; /// <summary> /// AD曲线 /// </summary> public CurveCollection curve; /// <summary> /// 报警系统 /// </summary> public FLY.OBJComponents.Server.WarningSystem warning; #region 运行模式 /// <summary> /// AD卡 /// </summary> public FlyADBase.FlyAD7 flyAd; /// <summary> /// 样品修正 /// </summary> public GSample getSample; /// <summary> /// GM管理器 /// </summary> GageModeManager gmManager; /// <summary> /// 断开连接 /// </summary> GM_Disconnected gmDisconnected; /// <summary> /// 暂停扫描 /// </summary> GM_Pause gmPause; /// <summary> /// 自动启动扫描 /// </summary> GM_AutoScan gmAutoScan; /// <summary> /// 前进 /// </summary> GM_Forward gmForw; /// <summary> /// 后退 /// </summary> GM_Backward gmBackw; /// <summary> /// 归零 /// </summary> GM_Origin gmOrg; /// <summary> /// 停止 /// </summary> GM_Stop gmStop; /// <summary> /// 运行到目标位置 /// </summary> GM_Goto gmRunto; /// <summary> /// 机架校正模式,参数 /// </summary> public GM_ScanCorr gmScanCorr; /// <summary> /// 定点模式 /// </summary> public GM_Fix gmFix; /// <summary> /// 吹膜测厚模式.扫描 /// </summary> public GM_BlowingScan gmRenZiJiaScan; /// <summary> /// 扫描报警系统 /// </summary> public ScanWarning scanWarning; /// <summary> /// 机架信息,不同于机架校正 /// </summary> public GM_GageInfo gmGageInfo; #endregion /// <summary> /// 系统参数 /// </summary> public SysParam sysParam; #region BULKDATA /// <summary> /// 数据库对象 /// </summary> DbModel dbModel; ///// <summary> ///// 原始数据 数据库对象 ///// </summary> //OrgDbModel orgDbModel; /// <summary> /// 数据库写操作 /// </summary> public HistoryDb historyDb; /// <summary> /// 本地数据库 /// </summary> LocalDb localDb; /// <summary> /// 数据库读操作 /// </summary> public BulkDb bulkDb; #endregion #endregion #endregion public TDGage(string nam) { mName = nam; mParamDirectory = mName;// @"D:\" + m_name; if (!System.IO.Directory.Exists(mParamDirectory)) { System.IO.Directory.CreateDirectory(mParamDirectory); } System.Environment.CurrentDirectory = mParamDirectory; #region create sysParam = new SysParam(null);//系统参数 initParam = new InitParam(null) { HasHold = false }; profile = new BlowingFixProfile(null);//运行配置参数 borderSearch = new BorderSearchPlastic(null);//边界查找 curve = new CurveCollection(null);//AD转thick dbModel = new DbModel(); //orgDbModel = new OrgDbModel(); localDb = new LocalDb(); historyDb = new HistoryDb(); bulkDb = new BulkDb(); dynArea = new DynArea(); warning = new FLY.OBJComponents.Server.WarningSystem(); scanWarning = new ScanWarning(); flyAd = new FlyAD7(); gmManager = new GageModeManager(); gmFix = new GM_Fix(flyAd); gmAutoScan = new GM_AutoScan(flyAd); gmDisconnected = new GM_Disconnected(flyAd); gmPause = new GM_Pause(flyAd); gmForw = new GM_Forward(flyAd); gmBackw = new GM_Backward(flyAd); gmRunto = new GM_Goto(flyAd); gmOrg = new GM_Origin(flyAd); gmStop = new GM_Stop(flyAd); gmGageInfo = new GM_GageInfo(flyAd); gmScanCorr = new GM_ScanCorr(flyAd); getSample = new GSample(flyAd); gmRenZiJiaScan = new GM_BlowingScan(flyAd, getSample); #endregion #region 注入初始化 //--------------------------------------------------------------------------------------------------------------- //数据库 dbModel.Init(); //orgDbModel.Init(); dbModel.KeepDBSize(initParam.DBKeepMonth); historyDb.Init(dbModel, localDb); //historyDb.KeepOrgDbSize(3); //PollModule.Current.Poll_Config(PollModule.POLL_CONFIG.ADD, () => //{ // //避免1个月都不关程序,每天检查一次 // historyDb.KeepOrgDbSize(3); //}, TimeSpan.FromDays(1)); bulkDb.Init(historyDb, localDb, dbModel); //--------------------------------------------------------------------------------------------------------------- //有效范围 Misc.BindingOperations.SetBinding(initParam, new string[] { nameof(initParam.PosLength) }, () => { borderSearch.Valid.Begin = 0; borderSearch.Valid.End = initParam.PosLength - 1; }); //--------------------------------------------------------------------------------------------------------------- //dynarea Misc.BindingOperations.SetBinding(profile.Param, nameof(profile.Param.PName), dynArea, nameof(dynArea.ProductName)); Misc.BindingOperations.SetBinding(profile.Param, nameof(profile.Param.Target), () => { dynArea.Target = (int)(profile.Param.Target * 100); }); Misc.BindingOperations.SetBinding(profile.Param, new string[] { nameof(profile.Param.Target), nameof(profile.Param.TolerancePercent) }, () => { dynArea.Alarm = (int)(profile.Param.Target * profile.Param.TolerancePercent * 100); }); Misc.BindingOperations.SetBinding(profile.Param, nameof(profile.Param.K), dynArea, nameof(dynArea.Comp)); Misc.BindingOperations.SetBinding(borderSearch, new string[] { nameof(borderSearch.Width) }, delegate () { dynArea.Width = borderSearch.Width * initParam.Encoder1_mmpp; }); initParam.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(initParam.Encoder1_mmpp)) { dynArea.Width = borderSearch.Width * initParam.Encoder1_mmpp; } }; dynArea.PropertyChanged += new PropertyChangedEventHandler(mDynArea_PropertyChanged); //--------------------------------------------------------------------------------------------------------------- //GageModeManager Misc.BindingOperations.SetBinding(gmManager, nameof(gmManager.State), dynArea, nameof(dynArea.ControllerState)); //--------------------------------------------------------------------------------------------------------------- //FlyAD7_Create flyAd.Load(); flyAd.Connect(); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.PosLength), flyAd, nameof(flyAd.PosLen)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.IStatus), dynArea, nameof(dynArea.IStatus)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.OStatus), dynArea, nameof(dynArea.OStatus)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.Position), dynArea, nameof(dynArea.Position)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.Position2), dynArea, nameof(dynArea.Position2)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.Surplus), dynArea, nameof(dynArea.Hrs)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.IsConnected), dynArea, nameof(dynArea.FLYADIsConnect)); Misc.BindingOperations.SetBinding(flyAd, nameof(flyAd.PosOfGrid), initParam, nameof(initParam.PosOfGrid)); //------------------------------------------------------------------------------------------------------------------------------------ //速度------------------------------------------------------------------------------------------------------------------------------ flyAd.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(flyAd.Speed)) { double speed = flyAd.Speed * initParam.Encoder1_mmpp;//mm/s speed = speed * 60 / 1000;//m/min dynArea.Velocity = speed; } }; //------------------------------------------------------------------------------------------------------------------------------------ //数据有效----------------------------------------------------------------------------------------------------------------------------- flyAd.IStatusChangedEvent += (s, e) => { if (initParam.DataValidSrc != DATAVALIDSRC.BYINPUT) return; if (Misc.MyBase.CHECKBIT(e.IChanged, 6 - 1)) { if (!Misc.MyBase.CHECKBIT(e.IStatus, 6 - 1)) dynArea.DataValid = false; else dynArea.DataValid = true; } }; Misc.BindingOperations.SetBinding(initParam, new string[] { nameof(initParam.DataValidSrc) }, update_datavalid); Misc.BindingOperations.SetBinding(flyAd, new string[] { nameof(flyAd.Ratio02), nameof(flyAd.Ratio01) }, delegate () { initParam.Speed1Scale = (double)flyAd.Ratio02 / flyAd.Ratio01; }); Misc.BindingOperations.SetBinding(initParam, new string[] { nameof(initParam.SVelocity), nameof(initParam.ATime), nameof(initParam.DTime), nameof(initParam.HVelocity1), nameof(initParam.HVelocity2) }, delegate () { PollModule.Current.Poll_JustOnce(delegate () { flyAd.SetPosParam(0xffffffff, initParam.SVelocity, initParam.ATime, initParam.DTime, initParam.HVelocity1, initParam.HVelocity2); }, this, MARKNO_UPDATEV); }); Misc.BindingOperations.SetBinding(flyAd, new string[] { nameof(flyAd.IsConnected) }, delegate () { if (flyAd.IsConnected == true) { //还需要在flyad 重新连接上时,设置!!!!! PollModule.Current.Poll_JustOnce(delegate () { flyAd.SetPosParam(0xffffffff, initParam.SVelocity, initParam.ATime, initParam.DTime, initParam.HVelocity1, initParam.HVelocity2); }, this, MARKNO_UPDATEV); } }); //--------------------------------------------------------------------------------------------------------------- //Warning_Create warning.Init(historyDb.ErrorBuffer); Misc.BindingOperations.SetBinding(warning, nameof(warning.IsRinging), () => { if (warning.IsRinging) { flyAd.SetOutput( (UInt16)Misc.MyBase.BIT(AlarmLamp_bit - 1), (UInt16)~Misc.MyBase.BIT(AlarmLamp_bit - 1)); } else { flyAd.SetOutput( (UInt16)Misc.MyBase.BIT(AlarmLamp_bit - 1), (UInt16)Misc.MyBase.BIT(AlarmLamp_bit - 1)); } }); //--------------------------------------------------------------------------------------------------------------- //ScanWarning_Create scanWarning.Init(warning, historyDb); //--------------------------------------------------------------------------------------------------------------- //GM_Fix_Create gmFix.Init(dynArea, AD2Thick); gmFix.IsIgnoreDataWhenIdle = false; gmManager.AddGM(gmFix); //--------------------------------------------------------------------------------------------------------------- //GM_AutoScan_Create gmAutoScan.Init(StartP1); Misc.BindingOperations.SetBinding(gmAutoScan, nameof(gmAutoScan.Counter), dynArea, nameof(dynArea.AutoScanCounter)); gmManager.AddGM(gmAutoScan); //--------------------------------------------------------------------------------------------------------------- //GM_Disconnected_Create gmDisconnected.Init(dynArea, gmAutoScan); gmManager.AddGM(gmDisconnected); //--------------------------------------------------------------------------------------------------------------- //GM_Pause_Create gmPause.Init(dynArea, gmAutoScan); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.ReStartDelay), gmPause, nameof(gmPause.Delay)); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.AutoF1F3), gmPause, nameof(gmPause.Enable)); gmManager.AddGM(gmPause); //--------------------------------------------------------------------------------------------------------------- //GM_Forward_Create Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VJOG), gmForw, nameof(gmForw.Velocity)); gmManager.AddGM(gmForw); //--------------------------------------------------------------------------------------------------------------- //GM_Backward_Create Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VJOG), gmBackw, nameof(gmForw.Velocity)); gmManager.AddGM(gmBackw); //--------------------------------------------------------------------------------------------------------------- //GM_Goto_Create Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VJOG), gmRunto, nameof(gmForw.Velocity)); gmManager.AddGM(gmRunto); //--------------------------------------------------------------------------------------------------------------- //GM_Origin_Create gmManager.AddGM(gmOrg); //--------------------------------------------------------------------------------------------------------------- //GM_Stop_Create gmManager.AddGM(gmStop); //--------------------------------------------------------------------------------------------------------------- //GM_GageInfo_Create Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VAccuracy), gmGageInfo, nameof(gmGageInfo.Velocity)); gmManager.AddGM(gmGageInfo); //--------------------------------------------------------------------------------------------------------------- //GM_ScanCorr_Create gmManager.AddGM(gmScanCorr); flyAd.CorrectADs = new FlyADBase.CorrectADsHandler(gmScanCorr.CorrectADs); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VAccuracy), gmScanCorr, nameof(gmScanCorr.Velocity)); Misc.BindingOperations.SetBinding(borderSearch.Valid, nameof(Range.Begin), gmScanCorr, nameof(gmScanCorr.ValidBegin), BindingOperations.BindingMode.TwoWay); Misc.BindingOperations.SetBinding(borderSearch.Valid, nameof(Range.End), gmScanCorr, nameof(gmScanCorr.ValidEnd), BindingOperations.BindingMode.TwoWay); //--------------------------------------------------------------------------------------------------------------- //GSample_Create getSample.Init(gmGageInfo, warning); Misc.BindingOperations.SetBinding(getSample.Samples[0], nameof(SampleCell.AD), borderSearch, nameof(borderSearch.CurrTempAD)); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VAccuracy), getSample, nameof(getSample.Velocity)); getSample.SampleChangedEvent += new SampleChangedEventHandler(getSample_SampleChangedEvent); //--------------------------------------------------------------------------------------------------------------- //GM_RenZiJiaScan_Create gmManager.AddGM(gmRenZiJiaScan); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.AutoOrgInterval), gmRenZiJiaScan, nameof(gmRenZiJiaScan.OrgInterval)); Misc.BindingOperations.SetBinding(initParam, nameof(initParam.VScan), gmRenZiJiaScan, nameof(gmRenZiJiaScan.Velocity)); Misc.BindingOperations.SetBinding(gmRenZiJiaScan.mPDetect, nameof(gmRenZiJiaScan.mPDetect.RollPerimeter), initParam, nameof(initParam.MmOfR), BindingOperations.BindingMode.TwoWay); Misc.BindingOperations.SetBinding(gmRenZiJiaScan.mPDetect, nameof(gmRenZiJiaScan.mPDetect.FilmVelocity), dynArea, nameof(dynArea.FilmVelocity)); dynArea.NBolts = gmRenZiJiaScan.NBolts; dynArea.FirstBoltNo = 1; dynArea.DataBoltNoBegin = 1; dynArea.DataBoltNoEnd = gmRenZiJiaScan.NBolts; dynArea.ScanBoltNoBegin = 1; dynArea.ScanBoltNoEnd = gmRenZiJiaScan.NBolts; gmRenZiJiaScan.Init( borderSearch, dynArea, AD2Thick, profile.Param, historyDb, bulkDb); gmRenZiJiaScan.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(gmRenZiJiaScan.NBolts)) { dynArea.NBolts = gmRenZiJiaScan.NBolts; dynArea.FirstBoltNo = 1; dynArea.DataBoltNoBegin = 1; dynArea.DataBoltNoEnd = gmRenZiJiaScan.NBolts; dynArea.ScanBoltNoBegin = 1; dynArea.ScanBoltNoEnd = gmRenZiJiaScan.NBolts; } }; ErrNoForCheckInit(); #endregion gmFix.Start(); } class ErrNoForCheckItem { public FLY.OBJComponents.Common.ERRNO errno; public Func<bool> conditional; /// <summary> /// 持续时间,单位s /// </summary> public int cnt; int timer = -1; public FLY.OBJComponents.Server.WarningSystem mWarning; public void Clear() { if (timer == 0) { mWarning.Add( errno.Code, errno.Descrption, FLY.OBJComponents.Common.ERR_STATE.OFF); } timer = -1; } public void OnPoll() { if (conditional()) { if (timer < 0) timer = cnt; else { if (timer > 0) timer--; if (timer == 0) { mWarning.Add( errno.Code, errno.Descrption, FLY.OBJComponents.Common.ERR_STATE.ON); } } } else { Clear(); } } } List<ErrNoForCheckItem> ErrNoForCheckItems = new List<ErrNoForCheckItem>(); void ErrNoForCheckInit() { ErrNoForCheckItems.Add(//AD值太小 new ErrNoForCheckItem() { errno = FLY.Thick.BlowingScan.Common.ERRNOs.BASE_ERRNO_AD_MIN, cnt = 20, conditional = delegate () { return dynArea.AD < (dynArea.ADMax * 0.01); } }); ErrNoForCheckItems.Add(//AD值太大 new ErrNoForCheckItem() { errno = FLY.Thick.BlowingScan.Common.ERRNOs.BASE_ERRNO_AD_MAX, cnt = 20, conditional = delegate () { return (dynArea.AD > (dynArea.ADMax * 0.98)); } }); //ErrNoForCheckItems.Add(//限位 // new ErrNoForCheckItem() // { // errno = FLY.Thick.Base.Common.ERRNOs.BASE_ERRNO_LIMIT, // cnt = 2, // conditional = delegate () // { // return ((Misc.MyBase.CHECKBIT(dynArea.IStatus, 3 - 1) == true) || (Misc.MyBase.CHECKBIT(dynArea.IStatus, 4 - 1) == true)); // } // }); //ErrNoForCheckItems.Add(//急停 // new ErrNoForCheckItem() // { // errno = FLY.Thick.Base.Common.ERRNOs.BASE_ERRNO_EMERGENCY, // cnt = 2, // conditional = delegate () // { // return ((Misc.MyBase.CHECKBIT(dynArea.IStatus, 7 - 1) == false) || (Misc.MyBase.CHECKBIT(dynArea.IStatus, 8 - 1) == false)); // } // }); foreach (ErrNoForCheckItem item in ErrNoForCheckItems) { item.mWarning = warning; } FObjBase.PollModule.Current.Poll_Config( FObjBase.PollModule.POLL_CONFIG.ADD, onpoll_checkErrNo, TimeSpan.FromSeconds(1)); } bool isInit_onpoll_checkErrNo; void onpoll_checkErrNo() //1秒执行一次 { if (!isInit_onpoll_checkErrNo) { isInit_onpoll_checkErrNo = true; checkDynAreaError(); } if (!dynArea.FLYADIsConnect) { foreach (ErrNoForCheckItem item in ErrNoForCheckItems) item.Clear(); } else { foreach (ErrNoForCheckItem item in ErrNoForCheckItems) item.OnPoll(); } } void mDynArea_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(dynArea.FilmVelocity)) { update_datavalid(); } else if (e.PropertyName == nameof(dynArea.Hrs)) { if (dynArea.Hrs < 48 && dynArea.Hrs > 0)//授权限制提醒 { warning.Add( FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE_TIP.Code, FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE_TIP.Descrption, OBJComponents.Common.ERR_STATE.ON); } } else if (e.PropertyName == nameof(dynArea.SecuteLock)) //授权限制 { if (dynArea.SecuteLock) { warning.Add( FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE.Code, FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE.Descrption, OBJComponents.Common.ERR_STATE.ON); } else { warning.Add( FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE.Code, FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_LICENSE.Descrption, OBJComponents.Common.ERR_STATE.OFF); } } else if (e.PropertyName == nameof(dynArea.FLYADIsConnect))//连接断开 { if (!dynArea.FLYADIsConnect) { warning.Add( FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Code, FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Descrption, OBJComponents.Common.ERR_STATE.ON); } else { warning.Add( FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Code, FLY.Thick.Blowing.Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Descrption, OBJComponents.Common.ERR_STATE.OFF); } } } void checkDynAreaError() { if (dynArea.Hrs < 48 && dynArea.Hrs > 0)//授权限制提醒 { warning.Add( Common.ERRNOs.BASE_ERRNO_LICENSE_TIP.Code, Common.ERRNOs.BASE_ERRNO_LICENSE_TIP.Descrption, OBJComponents.Common.ERR_STATE.ON); } if (dynArea.SecuteLock) { warning.Add( Common.ERRNOs.BASE_ERRNO_LICENSE.Code, Common.ERRNOs.BASE_ERRNO_LICENSE.Descrption, OBJComponents.Common.ERR_STATE.ON); } if (!dynArea.FLYADIsConnect) { warning.Add( Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Code, Common.ERRNOs.BASE_ERRNO_FLYAD7DISCONNECTED.Descrption, OBJComponents.Common.ERR_STATE.ON); } } void update_datavalid() { switch (initParam.DataValidSrc) { case DATAVALIDSRC.VALID: dynArea.DataValid = true; break; case DATAVALIDSRC.INVALID: dynArea.DataValid = false; break; case DATAVALIDSRC.BYEN2: { if (dynArea.FilmVelocity < 2) dynArea.DataValid = false; else dynArea.DataValid = true; } break; case DATAVALIDSRC.BYINPUT: { if (!Misc.MyBase.CHECKBIT(flyAd.IStatus, 6 - 1)) dynArea.DataValid = false; else dynArea.DataValid = true; } break; } } public int AD2Thick(int ad) { int thick = Misc.MyBase.NULL_VALUE; if (Misc.MyBase.ISVALIDATA(ad)) { if (getSample.Enable)//动态温修 thick = curve.AD2Value(ad, AD2ValueFlag.Revised); else thick = curve.AD2Value(ad, AD2ValueFlag.NoRevised); thick = (int)(thick * profile.Param.K); } return thick; } void getSample_SampleChangedEvent(object sender) { CurveCollection pCurve = curve; GSample gsample = getSample; dynArea.SampleAD = gsample.Samples.Select(s => s.AD).ToArray(); if (gsample.OK()) { List<CurveCollection.ExChange> list = new List<CurveCollection.ExChange>(); for (int i = 0; i < gsample.Samples.Count(); i++) { var sample = gsample.Samples[i]; if ((sample.Enable) && (!sample.JustForCheck) && (sample.AD > 0)) { list.Add(new CurveCollection.ExChange() { OrgAD = sample.OrgAD, CurrAD = sample.AD }); } } pCurve.ModifyExChange(list); pCurve.ReviseCurve(); for (int i = 0; i < gsample.Samples.Count(); i++) { var sample = gsample.Samples[i]; if ((sample.Enable) && (sample.AD > 0)) { sample.SampleValue = curve.AD2Value(sample.AD, AD2ValueFlag.Revised); } } //历史数据保存 var sampleads = from sample in gsample.Samples where sample.Enable select sample.AD; if (sampleads.Count() > 0) { historyDb.AddSampleData( new Lc_Sample() { Time = DateTime.Now, SampleADs = sampleads.ToArray() }); } } } #region ITDGageService /// <summary> /// /// </summary> public void StartP1() { gmRenZiJiaScan.Start(); } /// <summary> /// /// </summary> /// <param name="mode"></param> public void StartP2(STARTP2_MODE mode) { StartP2(mode, 0); } /// <summary> /// /// </summary> /// <param name="mode"></param> /// <param name="targetpos"></param> public void StartP2(STARTP2_MODE mode, int targetpos) { switch (mode) { case STARTP2_MODE.ORG: gmOrg.Start(); break; case STARTP2_MODE.STOP: gmStop.Start(); break; case STARTP2_MODE.FORW: case STARTP2_MODE.FORW_UNTIL_STOP: gmForw.Start(); break; case STARTP2_MODE.BACKW: case STARTP2_MODE.BACKW_UNTIL_STOP: gmBackw.Start(); break; case STARTP2_MODE.RUNTO: gmRunto.Start(targetpos); break; } } #endregion } }