using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using FLY.Thick.Base.Server;
using FLY.Thick.Base.Common;
namespace FLY.Simulation.Coating
{
///
/// 电池涂布
///
public class GageAD : ISimulationGageAD
{
public Coating mCoating;
CurveCollection curve;
///
/// 单位厚度
///
List Datas_GageInfo = new List();//机架信息
///
/// 编码器2 1脉冲 = ? mm 辊直径120mm,编码器 转1圈800脉冲
///
const double Mmpp2 = 0.25;
///
/// 膜开始位置 mm
///
const int FilmBegin=200;
///
/// 1脉冲 = ? mm
///
public double Mmpp { get; set; } = 0.2;
///
/// 机架总长
///
public int TotalLength { get; set; } = 940;
public GageAD()
{
curve = new CurveCollection();
mCoating = new Coating();
Load();
}
public int GetAD(int mm)
{
if (mm >= Datas_GageInfo.Count())
{
mm = Datas_GageInfo.Count() - 1;
}
else if (mm < 0)
{
mm = 0;
}
double 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;
}
double thick = Datas_GageInfo[mm] + filmthick;
return curve.Value2Ad(thick, AD2ValueFlag.NoRevised);
}
public void OnPoll(DateTime now)
{
mCoating.OnPoll(now);
}
public UInt16 GetInput()
{
UInt16 istatus = 0x0fff;
if (mCoating.HSignal)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_HSIGN);
if (mCoating.HSignal2)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_HSIGN2);
if (mCoating.RSignal)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_RSENSOR);
if (mCoating.VSignal)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_VSENSOR);
if (mCoating.VSignal2)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_VSENSOR2);
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
double thk = curve.AD2Value(ad, AD2ValueFlag.NoRevised);
Datas_GageInfo.Add(thk);
}
sr.Close();
}
TotalLength = Datas_GageInfo.Count();
}
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;
}
public void SetOutput(ushort output)
{
}
}
}