using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.ComponentModel; using FLY.Thick.Base.Server; namespace FLY.Simulation.HeaderAndTailer { public class GageAD : ISimulationGageAD, INotifyPropertyChanged { CurveCollection curve; List datas_vertical = new List();//纵向AD数据,1.28ms 一个数据 /// /// 编码器2 1脉冲 = ? mm 辊直径120mm,编码器 转1圈800脉冲 /// const double Mmpp2 = 0.25; const double RLen = 120 * 3.14; /// /// 1脉冲 = ? mm /// public double Mmpp { get; set; } = 0.2; /// /// 膜速度 m/min /// public double FilmVelocity { get; set; } = 18; /// /// 膜长 m /// public double FilmLength { get; set; } /// /// 运转中 /// public bool IsRunning { get; set; } = true; public int TotalLength { get; set; } = 940; public GageAD() { curve = new CurveCollection(); Load(); } public int GetAD(int position) { int idx = (int)datas_vertical_index; if (idx < 0) idx = 0; else if (idx >= datas_vertical.Count()) idx = datas_vertical.Count() - 1; int ad = datas_vertical[idx]; //Random r = new Random(); //int data = r.Next(50) - 25; //thick += data; return ad;// curve.Value2AD(thick, CurveCollection.AD2ValueFlag.NoRevised); } DateTime dtlast = DateTime.MinValue; double datas_vertical_index = 0; public void OnPoll(DateTime now) { if (dtlast == DateTime.MinValue) { dtlast = now; return; } if (IsRunning) { double min = (now - dtlast).TotalMinutes; FilmLength += min * FilmVelocity; double ms = (double)((now - dtlast).Ticks) / TimeSpan.TicksPerMillisecond; datas_vertical_index += ms/1.28; if (datas_vertical_index >= datas_vertical.Count()) { datas_vertical_index -= datas_vertical.Count(); } } dtlast = now; } public UInt16 GetInput() { UInt16 istatus = 0x0fff; double p = FilmLength * 1000 % RLen; if(p