Commit a731e151 authored by 潘栩锋's avatar 潘栩锋 🚴

优化 curve模块 改为json保存数据。和obj.reflect 通信方式

parent 682d3e2c
......@@ -268,10 +268,7 @@ namespace FLY.Thick.Base.UI
if (!WdPassword.Authorize("Curve"))
return;
mCurveService.CorrectWay = this.CorrectWay;
mCurveService.Flag = this.Flag;
mCurveService.Curves = this.Curves.ToList();
mCurveService.Apply();
mCurveService.Apply(this.CorrectWay, this.Flag, this.Curves.ToArray());
FLY.ControlLibrary.Window_Tip.Show("应用成功",
null,
TimeSpan.FromSeconds(2));
......
......@@ -322,8 +322,8 @@ namespace FLY.Thick.Base.UI
if (!WdPassword.Authorize("Curve"))
return;
curveService.Curves = curveCore.Curves;
curveService.Apply();
curveService.Apply(curveService.CorrectWay, curveService.Flag, curveCore.Curves.ToArray());
FLY.ControlLibrary.Window_Tip.Show("应用成功",
null,
TimeSpan.FromSeconds(2));
......
......@@ -15,8 +15,9 @@ namespace FLY.Thick.Base.Client
/// <summary>
/// AD 曲线服务 客户端代理
/// </summary>
public class CurveServiceClient : FObjServiceClient, ICurveService
public class CurveServiceClient : FObjBase.Reflect.Reflect_SeviceClient, ICurveService
{
protected override Type InterfaceType => typeof(ICurveService);
/// <summary>
/// AD 曲线服务 客户端代理
/// </summary>
......@@ -39,7 +40,8 @@ namespace FLY.Thick.Base.Client
public CurveType Flag { get; set; }
[PropertyChanged.DoNotCheckEquality]
public List<CurveCell> Curves { get; set; }
public CurveCell[] Curves { get; set; }
public void SetRevised()
{
for (int i = 0; i < Curves.Count(); i++)
......@@ -47,216 +49,12 @@ namespace FLY.Thick.Base.Client
Curves[i].AD = Curves[i].RevisedAD;
}
}
public void Apply()
{
Curves.OrderBy(c => c.Value);
var p = new CURVE_OBJ_INTERFACE.Pack_CurveList();
p.list = Curves;
p.flag = Flag;
p.correctway = CorrectWay;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(p);
CurrObjSys.SetValueEx(
mConn, mServerID, ID,
CURVE_OBJ_INTERFACE.SET_CURVELIST,
Misc.Converter.StringToBytes(json)
);
}
#region E
int AD2Value_E(int ad, AD2ValueFlag flag)
{
int i;
int thick;
if (Curves.Count < 1) return -1;
if (ad < 0) return -1;
if (ad == 0) ad = 1;
if (flag == AD2ValueFlag.NoRevised)
{
for (i = 0; i < Curves.Count; i++)
{
if (ad < Curves[i].AD)
continue;
else
break;
}
}
else
{
for (i = 0; i < Curves.Count; i++)
{
if (ad < Curves[i].RevisedAD)
continue;
else
break;
}
}
if (i >= Curves.Count) i = Curves.Count - 1;
if (i == 0) i = 1;
if (flag == AD2ValueFlag.NoRevised)
{
double adi_ad0 = Math.Log(Curves[i].AD) - Math.Log(Curves[i - 1].AD);
double vi_v0 = Curves[i].Value - Curves[i - 1].Value;
double a = vi_v0 / adi_ad0;
double b = Curves[i - 1].Value - Math.Log(Curves[i - 1].AD) * a;
thick = (int)(Math.Log(ad) * a + b);
//double u;
//u = Math.Log((double)Curves[i - 1].AD / Curves[i].AD, Math.E) * 100 / (Curves[i].Value - Curves[i - 1].Value);
//thick = (int)(Math.Log((double)Curves[i - 1].AD / ad, Math.E) * 100 / u + Curves[i - 1].Value);
}
else
public void Apply(CurveCorrectWay correctWay, CurveType flag, CurveCell[] curves)
{
double adi_ad0 = Math.Log(Curves[i].RevisedAD) - Math.Log(Curves[i - 1].RevisedAD);
double vi_v0 = Curves[i].Value - Curves[i - 1].Value;
double a = vi_v0 / adi_ad0;
double b = Curves[i - 1].Value - Math.Log(Curves[i - 1].RevisedAD) * a;
thick = (int)(Math.Log(ad) * a + b);
//double u;
//u = Math.Log((double)Curves[i - 1].RevisedAD / Curves[i].RevisedAD, Math.E) * 100 / (Curves[i].Value - Curves[i - 1].Value);
//thick = (int)(Math.Log((double)Curves[i - 1].RevisedAD / ad, Math.E) * 100 / u + Curves[i - 1].Value);
Call(nameof(Apply), new { correctWay, flag, curves });
}
//if (thick < 0)
// return 0;
return thick;
}
#endregion
#region 线性
int AD2Value_Line(int ad, AD2ValueFlag flag)
{
int i;
int thick;
if (Curves.Count < 2) return -1;
if (ad < 0) return -1;
if (ad == 0) ad = 1;
bool isDescending = true;//降序排列
if (Curves[0].AD < Curves[1].AD)
isDescending = false;
//找 ad0<ad<adi
if (flag == AD2ValueFlag.NoRevised)
{
if (isDescending)//降序排列
{
for (i = 0; i < Curves.Count; i++)
{
if (ad < Curves[i].AD)
continue;
else
break;
}
}
else
{
for (i = 0; i < Curves.Count; i++)
{
if (ad > Curves[i].AD)
continue;
else
break;
}
}
if (i >= Curves.Count) i = Curves.Count - 1;
if (i == 0) i = 1;
double adi_ad0 = Curves[i].AD - Curves[i - 1].AD;
double vi_v0 = Curves[i].Value - Curves[i - 1].Value;
double a = vi_v0 / adi_ad0;
double b = Curves[i - 1].Value - Curves[i - 1].AD * a;
thick = (int)(ad * a + b);
return thick;
}
else
{
if (isDescending)//降序排列
{
for (i = 0; i < Curves.Count; i++)
{
if (ad < Curves[i].RevisedAD)
continue;
else
break;
}
}
else
{
for (i = 0; i < Curves.Count; i++)
{
if (ad > Curves[i].RevisedAD)
continue;
else
break;
}
}
if (i >= Curves.Count) i = Curves.Count - 1;
if (i == 0) i = 1;
double adi_ad0 = Curves[i].AD - Curves[i - 1].RevisedAD;
double vi_v0 = Curves[i].Value - Curves[i - 1].Value;
double a = vi_v0 / adi_ad0;
double b = Curves[i - 1].Value - Curves[i - 1].RevisedAD * a;
thick = (int)(ad * a + b);
return thick;
}
}
#endregion
public int AD2Value(int ad, AD2ValueFlag flag)
{
switch (Flag)
{
case CurveType.Line:
return AD2Value_Line(ad, flag);
default:
return AD2Value_E(ad, flag);
}
}
#endregion
public override void ConnectNotify(IFConn from)
{
base.ConnectNotify(from);
if (from.IsConnected)
{
CurrObjSys.SenseConfigEx(
mConn, mServerID, ID, 0xffffffff, SENSE_CONFIG.ADD);
CurrObjSys.GetValueEx(
mConn, mServerID, ID,
CURVE_OBJ_INTERFACE.GET_CURVELIST);
}
}
public override void PushGetValue(IFConn from, uint srcid, ushort memid, byte[] infodata)
{
PushInfo(from, srcid, memid, infodata);
}
public override void PushInfo(IFConn from, uint srcid, ushort infoid, byte[] infodata)
{
switch (infoid)
{
case CURVE_OBJ_INTERFACE.PUSH_CURVELIST:
{
string json = Misc.Converter.BytesToString(infodata);
var p = Newtonsoft.Json.JsonConvert.DeserializeObject<CURVE_OBJ_INTERFACE.Pack_CurveList>(json);
CorrectWay = p.correctway;
Flag = p.flag;
Curves = p.list;
} break;
}
}
}
}
......@@ -10,12 +10,8 @@ using System.Collections.ObjectModel;
namespace FLY.Thick.Base.Common
{
public class CurveCell : Misc.ISaveToXml, INotifyPropertyChanged
public class CurveCell : INotifyPropertyChanged
{
static CurveCell()
{
Misc.SaveToXmlHepler.Regist(typeof(CurveCell));
}
public override string ToString()
{
return "value=" + Value.ToString() + " ad=" + AD.ToString() + " revisedad=" + RevisedAD.ToString();
......@@ -33,18 +29,6 @@ namespace FLY.Thick.Base.Common
/// </summary>
public int RevisedAD { get; set; }
#region ISaveToXml 成员
public string[] GetSavePropertyNames()
{
return new string[]{
"Value",
"AD"};
}
#endregion
#region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged;
......
......@@ -13,16 +13,17 @@ namespace FLY.Thick.Base.IService
/// <summary>
/// AD曲线校正方式
/// </summary>
CurveCorrectWay CorrectWay { get; set; }
CurveCorrectWay CorrectWay { get; }
/// <summary>
/// 标记,用于告诉 客户端,当前的曲线类型, 自然对数 / 直线拟合 / 二次拟合
/// </summary>
CurveType Flag { get; set; }
CurveType Flag { get; }
/// <summary>
/// 曲线
/// </summary>
List<CurveCell> Curves { get; set; }
void Apply();
int AD2Value(int ad, AD2ValueFlag flag);
CurveCell[] Curves { get; }
void Apply(CurveCorrectWay correctWay, CurveType flag, CurveCell[] curves);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment