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;
public GageAD()
{
curve = new CurveCollection();
double mm_gagelen = 3000;//设备总长3m
double mm_filmwidth = 2300;//膜宽2.3m
double mm_senserwidth = 15;//传感器15mm
double mm_filmbegin = 300;//mm
PosLen = 8030;
double ppmm = PosLen / mm_gagelen;
FilmWidth = (int)(mm_filmwidth * ppmm);
FilmBegin = (int)(mm_filmbegin * ppmm);
SenserWidth = (int)(mm_senserwidth * ppmm);
mBlowing = new Blowing();
mBlowing.FilmWidth = FilmWidth;
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)))
{
FilmData fd = mBlowing.GetData(idx-FilmBegin);
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.CheckRoll())
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RSENSOR-1);
return istatus;
}
public int GetPosition2()
{
return 0;
}
public int GetSpeed2()
{
return 0;
}
}
}