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

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

parent 682d3e2c
...@@ -268,10 +268,7 @@ namespace FLY.Thick.Base.UI ...@@ -268,10 +268,7 @@ namespace FLY.Thick.Base.UI
if (!WdPassword.Authorize("Curve")) if (!WdPassword.Authorize("Curve"))
return; return;
mCurveService.CorrectWay = this.CorrectWay; mCurveService.Apply(this.CorrectWay, this.Flag, this.Curves.ToArray());
mCurveService.Flag = this.Flag;
mCurveService.Curves = this.Curves.ToList();
mCurveService.Apply();
FLY.ControlLibrary.Window_Tip.Show("应用成功", FLY.ControlLibrary.Window_Tip.Show("应用成功",
null, null,
TimeSpan.FromSeconds(2)); TimeSpan.FromSeconds(2));
......
...@@ -322,8 +322,8 @@ namespace FLY.Thick.Base.UI ...@@ -322,8 +322,8 @@ namespace FLY.Thick.Base.UI
if (!WdPassword.Authorize("Curve")) if (!WdPassword.Authorize("Curve"))
return; return;
curveService.Curves = curveCore.Curves; curveService.Apply(curveService.CorrectWay, curveService.Flag, curveCore.Curves.ToArray());
curveService.Apply();
FLY.ControlLibrary.Window_Tip.Show("应用成功", FLY.ControlLibrary.Window_Tip.Show("应用成功",
null, null,
TimeSpan.FromSeconds(2)); TimeSpan.FromSeconds(2));
......
...@@ -15,8 +15,9 @@ namespace FLY.Thick.Base.Client ...@@ -15,8 +15,9 @@ namespace FLY.Thick.Base.Client
/// <summary> /// <summary>
/// AD 曲线服务 客户端代理 /// AD 曲线服务 客户端代理
/// </summary> /// </summary>
public class CurveServiceClient : FObjServiceClient, ICurveService public class CurveServiceClient : FObjBase.Reflect.Reflect_SeviceClient, ICurveService
{ {
protected override Type InterfaceType => typeof(ICurveService);
/// <summary> /// <summary>
/// AD 曲线服务 客户端代理 /// AD 曲线服务 客户端代理
/// </summary> /// </summary>
...@@ -39,7 +40,8 @@ namespace FLY.Thick.Base.Client ...@@ -39,7 +40,8 @@ namespace FLY.Thick.Base.Client
public CurveType Flag { get; set; } public CurveType Flag { get; set; }
[PropertyChanged.DoNotCheckEquality] [PropertyChanged.DoNotCheckEquality]
public List<CurveCell> Curves { get; set; } public CurveCell[] Curves { get; set; }
public void SetRevised() public void SetRevised()
{ {
for (int i = 0; i < Curves.Count(); i++) for (int i = 0; i < Curves.Count(); i++)
...@@ -47,216 +49,12 @@ namespace FLY.Thick.Base.Client ...@@ -47,216 +49,12 @@ namespace FLY.Thick.Base.Client
Curves[i].AD = Curves[i].RevisedAD; Curves[i].AD = Curves[i].RevisedAD;
} }
} }
public void Apply() public void Apply(CurveCorrectWay correctWay, CurveType flag, CurveCell[] curves)
{
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
{
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);
}
//if (thick < 0)
// return 0;
return thick;
}
#endregion
#region 线性
int AD2Value_Line(int ad, AD2ValueFlag flag)
{ {
int i; Call(nameof(Apply), new { correctWay, flag, curves });
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 #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; ...@@ -10,12 +10,8 @@ using System.Collections.ObjectModel;
namespace FLY.Thick.Base.Common 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() public override string ToString()
{ {
return "value=" + Value.ToString() + " ad=" + AD.ToString() + " revisedad=" + RevisedAD.ToString(); return "value=" + Value.ToString() + " ad=" + AD.ToString() + " revisedad=" + RevisedAD.ToString();
...@@ -33,18 +29,6 @@ namespace FLY.Thick.Base.Common ...@@ -33,18 +29,6 @@ namespace FLY.Thick.Base.Common
/// </summary> /// </summary>
public int RevisedAD { get; set; } public int RevisedAD { get; set; }
#region ISaveToXml 成员
public string[] GetSavePropertyNames()
{
return new string[]{
"Value",
"AD"};
}
#endregion
#region INotifyPropertyChanged 成员 #region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
......
...@@ -13,16 +13,17 @@ namespace FLY.Thick.Base.IService ...@@ -13,16 +13,17 @@ namespace FLY.Thick.Base.IService
/// <summary> /// <summary>
/// AD曲线校正方式 /// AD曲线校正方式
/// </summary> /// </summary>
CurveCorrectWay CorrectWay { get; set; } CurveCorrectWay CorrectWay { get; }
/// <summary> /// <summary>
/// 标记,用于告诉 客户端,当前的曲线类型, 自然对数 / 直线拟合 / 二次拟合 /// 标记,用于告诉 客户端,当前的曲线类型, 自然对数 / 直线拟合 / 二次拟合
/// </summary> /// </summary>
CurveType Flag { get; set; } CurveType Flag { get; }
/// <summary> /// <summary>
/// 曲线 /// 曲线
/// </summary> /// </summary>
List<CurveCell> Curves { get; set; } CurveCell[] Curves { get; }
void Apply();
int AD2Value(int ad, AD2ValueFlag flag);
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