using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FLY.Simulation.Blowing { public class GageAD:ISimulationGageAD { /// /// 1脉冲 = ? mm /// double mmpp = 0.1133; public double Mmpp { get { return mmpp; } set { mmpp = value; } } public Blowing mBlowing; /// /// 机架总长 /// public int PosLen; /// /// 膜宽 /// public int FilmWidth; /// /// 膜开始位置 /// public int FilmBegin; /// /// 传感器直径,单位脉冲 /// public int SenserWidth; public int[] AirDatas; CurveCollection curve; double ppmm; public GageAD() { curve = new CurveCollection(); mBlowing = new Blowing(); double m_filmwidth = mBlowing.FilmWidth;//膜宽2.3m double m_gagelen = 3;//设备总长3m double mm_senserwidth = 15;//传感器15mm double mm_filmbegin = 300;//mm PosLen = 8030; ppmm = PosLen / (m_gagelen*1000); FilmWidth = (int)(m_filmwidth *1000 * ppmm); FilmBegin = (int)(mm_filmbegin * ppmm); SenserWidth = (int)(mm_senserwidth * ppmm); AirDatas = new int[PosLen]; 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 pos) { return GetAD_1(pos); //return GetAD_2(pos); } int GetAD_1(int pos) { int idx = pos; if(idx<0) idx = 0; else if(idx>=PosLen) idx = PosLen-1; Random r = new Random(); int data = r.Next(50) - 25; if ((idx >= FilmBegin) && (idx<(FilmBegin+FilmWidth))) { int position = idx-FilmBegin; double pos_m = position / ppmm / 1000.0; FilmData fd = mBlowing.GetData(pos_m); if (fd != null) { data += fd.data1 + fd.data2; } } //求平均值 int thick = (int)data; return curve.Value2AD(thick, CurveCollection.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 - 1); } if (mBlowing.CheckLimit1()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RENZIJIA_1 - 1); if (mBlowing.CheckOrg()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RENZIJIA_ORG - 1); if (mBlowing.CheckRoll()) Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RSENSOR - 1); 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); } } }