using FLY.Thick.Base.Common;
using FLY.Thick.Base.Server;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FLY.Simulation.Battery.RayLaser
{
public class GageAd_Laser : ISimulationGageAD
{
CurveCollection curve;
/// 编码器2 mm/p 胶轮周长200mm,编码器 转1圈800脉冲 正确应该0.25
///
const double Mmpp2 = 0.24925;
const int INVALID_AD = 8875;
///
/// 编码器1 mm/p
///
public double Mmpp { get; set; } = 0.2;
public double VSignOffset { get; set; }
///
/// 机架总长
///
public int TotalLength { get; set; }
GageAd gageAd;
public GageAd_Laser()
{
}
public void Init(GageAd gageAd)
{
this.gageAd = gageAd;
curve = gageAd.curve_laser;
VSignOffset = gageAd.VSignOffsetLaser;
TotalLength = gageAd.TotalLength;
}
int GetAdMm(int mm, int mm_v_offset)
{
int posLength = (int)(gageAd.FilmPosition*1000 - VSignOffset + mm_v_offset);
double value = gageAd.GetValue(true, mm, posLength, out GageAd.PosType posType);
if (posType == GageAd.PosType.Hold)
{
return INVALID_AD;
}
else if (posType == GageAd.PosType.Air) {
return INVALID_AD;
}
int ad = curve.Value2Ad(value, AD2ValueFlag.NoRevised);
if (ad > 65535)
ad = 65535;
else if (ad < 0)
ad = 0;
return ad;
}
public int GetAD(int mm)
{
//需要对探头直径范围的数据求均值
return GetAdMm(mm, 0);
}
public void OnPoll(DateTime now)
{
//不实现
}
public UInt16 GetInput()
{
UInt16 istatus = 0x0fff;
if (gageAd.IsSyncLight)
Misc.MyBase.CLEARBIT(ref istatus, IODefinition.IN_SYNC);
return istatus;
}
public int GetPosition2()
{
return 0;
}
public int GetSpeed2()
{
return 0;
}
public void SetOutput(ushort output)
{
}
}
}