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)
{
}
}
}