using FLY.Thick.Base.Common; using FLY.Thick.Base.Server; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FLY.Simulation.Blowing { public class GageAD:ISimulationGageAD { /// /// 1脉冲 = ? mm /// public double Mmpp { get; set; } = 0.0943; /// /// 机架总长 mm /// public int TotalLength { get; set; } = 3000; public Blowing mBlowing; /// /// 膜宽,mm /// public int FilmWidth; /// /// 膜开始位置, mm /// public int FilmBegin; /// /// 传感器直径,单位mm /// public int SenserWidth; public int[] AirDatas; CurveCollection curve; double ppmm; public GageAD() { curve = new CurveCollection(); mBlowing = new Blowing(); FilmWidth = (int)mBlowing.FilmWidth; FilmBegin = 300; SenserWidth = 30; AirDatas = new int[TotalLength]; NewAirDatas(); } void NewAirDatas() { int a = 20; Random r = new Random(); for (int i = 0; i < AirDatas.Count(); i++) { AirDatas[i] = r.Next(a) - a/2; } } public void OnPoll(DateTime now) { //NewAirDatas(); mBlowing.OnPoll(now); } public int GetAD(int mm) { return GetAD_1(mm); //return GetAD_2(pos); } int GetAD_1(int mm) { Random r = new Random(); int data = r.Next(50) - 25; if ((mm >= FilmBegin) && (mm<(FilmBegin+FilmWidth))) { int position = mm-FilmBegin; double pos_m = position / 1000.0; FilmData fd = mBlowing.GetData(pos_m); if (fd != null) { data += fd.data1 + fd.data2; } } //求平均值 double thick = data / 100.0; return curve.Value2Ad(thick, AD2ValueFlag.NoRevised); } int GetAD_2(int pos) { int[] datas = new int[SenserWidth]; for (int i = 0; i < SenserWidth; i++) { datas[i] = GetAD_1(pos - SenserWidth / 2 + i); } //求平均值 return (int)datas.Average(); } /// /// 获取输入口 /// /// public UInt16 GetInput() { UInt16 istatus = 0x0fff; if (!mBlowing.IsShieldI9) { if (mBlowing.CheckLimit0()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RENZIJIA_0); } if (mBlowing.CheckLimit1()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RENZIJIA_1); if (mBlowing.CheckOrg()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RENZIJIA_ORG); if (mBlowing.CheckRoll()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RSENSOR); return istatus; } public int GetPosition2() { double p = mBlowing.GlobalAngle / 360; return (int)(mBlowing.PosOfR * p); } public int GetSpeed2() { return (int)(mBlowing.PosOfR * mBlowing.CurrAngleVelocity / 360); } public void SetOutput(ushort output) { } } }