using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace FLY.Simulation.Coating { public class GageAD : ISimulationGageAD { public Coating mCoating; CurveCollection curve; List<int> Datas_GageInfo = new List<int>();//机架信息 /// <summary> /// 编码器2 1脉冲 = ? mm 辊直径120mm,编码器 转1圈800脉冲 /// </summary> const double Mmpp2 = 120 * 3.14 / 800; /// <summary> /// 膜开始位置 mm /// </summary> const int FilmBegin=200; /// <summary> /// 1脉冲 = ? mm /// </summary> /// <summary> /// 1脉冲 = ? mm /// </summary> double mmpp = 0.1133; public double Mmpp { get { return mmpp; } set { mmpp = value; } } public GageAD() { curve = new CurveCollection(); mCoating = new Coating(); Load(); } public int GetAD(int position) { int mm = (int)(position* Mmpp); if (mm >= Datas_GageInfo.Count()) { mm = Datas_GageInfo.Count() - 1; } else if (mm < 0) { mm = 0; } int filmthick = 0; if (mm >= FilmBegin && mm < (FilmBegin + mCoating.FilmWidth)) { filmthick = mCoating.GetData30m(mm - FilmBegin); if (filmthick < 0) filmthick = 0; if ((mCoating.Datas_Horizontal[mm - FilmBegin].IsLight) || mCoating.VSignal) mCoating.HSignal = true; else mCoating.HSignal = false; if ((mCoating.Datas_Horizontal[mm - FilmBegin].IsLight2) || mCoating.VSignal2) mCoating.HSignal2 = true; else mCoating.HSignal2 = false; } else { mCoating.HSignal = false; mCoating.HSignal2 = false; } int thick = Datas_GageInfo[mm] + filmthick; Random r = new Random(); int data = r.Next(50) - 25; thick += data; return curve.Value2AD(thick, CurveCollection.AD2ValueFlag.NoRevised); } public void OnPoll(DateTime now) { mCoating.OnPoll(now); } /// <summary> /// 横向边界信号 i5 /// </summary> public const int HSIGN_NO = 5; /// <summary> /// 辊信号 i11 /// </summary> public const int RSIGN_NO = 11; /// <summary> /// 纵向边界信号 i12 /// </summary> public const int VSIGN_NO = 12; public UInt16 GetInput() { UInt16 istatus = 0x0fff; if (mCoating.HSignal) Misc.MyBase.CLEARBIT(ref istatus, 5 - 1 ); if (mCoating.HSignal2) Misc.MyBase.CLEARBIT(ref istatus, 9 - 1); if (mCoating.RSignal) Misc.MyBase.CLEARBIT(ref istatus, 11 - 1 ); if (mCoating.VSignal) Misc.MyBase.CLEARBIT(ref istatus, 12 - 1 ); if (mCoating.VSignal2) Misc.MyBase.CLEARBIT(ref istatus, 10 - 1); return istatus; } void Load_GageInfo() { Datas_GageInfo.Clear(); using (StreamReader sr = new StreamReader("datas_gageinfo.csv")) { string header = sr.ReadLine();//标题 , 位置(mm), AD while (!sr.EndOfStream) { string s = sr.ReadLine(); string[] ss = s.Split(','); int pos_mm = int.Parse(ss[0]); int ad = int.Parse(ss[1]); //转为 thick int thick = curve.AD2Value(ad, CurveCollection.AD2ValueFlag.NoRevised); Datas_GageInfo.Add(thick); } sr.Close(); } } void Load() { Load_GageInfo(); } public int GetPosition2() { return (int)(mCoating.FilmLength*1000 / Mmpp2); } public int GetSpeed2() { if (mCoating.DeviceState) return (int)(mCoating.FilmVelocity * 1000 / 60 / Mmpp2); else return 0; } } }