From 8c3283ab0121b6a5826e00613e3bc8c6ebbb7cbb Mon Sep 17 00:00:00 2001 From: iamboss Date: Mon, 8 Dec 2025 23:10:08 +0800 Subject: [PATCH 1/3] tune --- BT40-ER16-090.Holder | 8 +- Output/S50C-fine-Copy-01.mp | 10 ++ Output/S50C-fine.mp | 20 ++- S50C.hincproj | 156 ++++++++++++++-------- SpindleCapability/test3.SpindleCapability | 18 +-- WorkpieceMaterial/FC30.WorkpieceMaterial | 2 +- 6 files changed, 139 insertions(+), 75 deletions(-) create mode 100644 Output/S50C-fine-Copy-01.mp diff --git a/BT40-ER16-090.Holder b/BT40-ER16-090.Holder index 4308158..04f07ae 100644 --- a/BT40-ER16-090.Holder +++ b/BT40-ER16-090.Holder @@ -2,7 +2,7 @@ default BT40-ER16-090 - + (0,25) (36.5,25) (36.5,44.5) @@ -10,4 +10,10 @@ (106.6,40) (136.44,40) + + + 0.5 + 5 + + \ No newline at end of file diff --git a/Output/S50C-fine-Copy-01.mp b/Output/S50C-fine-Copy-01.mp new file mode 100644 index 0000000..87d2033 --- /dev/null +++ b/Output/S50C-fine-Copy-01.mp @@ -0,0 +1,10 @@ + + + S50C-fine.mp + SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 57.79%; FilteredSampleNum = 725220 + 776.7735765695861 + -1701.0286467145884 + 8.185515874589065 + 20.118736350399548 + 8 + \ No newline at end of file diff --git a/Output/S50C-fine.mp b/Output/S50C-fine.mp index 1d5e3e1..87d2033 100644 --- a/Output/S50C-fine.mp +++ b/Output/S50C-fine.mp @@ -1,12 +1,10 @@ - - + + S50C-fine.mp - - 781.9193047583416 - 534.2515063930691 - -1341.4299667097694 - 12.488024348568263 - 19.81313632613896 - -20.852754261520523 - NaN - \ No newline at end of file + SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 57.79%; FilteredSampleNum = 725220 + 776.7735765695861 + -1701.0286467145884 + 8.185515874589065 + 20.118736350399548 + 8 + \ No newline at end of file diff --git a/S50C.hincproj b/S50C.hincproj index a2579e8..e834c2c 100644 --- a/S50C.hincproj +++ b/S50C.hincproj @@ -1,10 +1,10 @@  - - + + - + EmptyMachine.mt - + SpindleCapability/test3.SpindleCapability @@ -21,9 +21,12 @@ - + + + + - + @@ -47,8 +50,8 @@ - - + + AA7075 (update on 20241219) AA7075 (update on 20241219) exp on 2017 347.79177234887237 @@ -58,8 +61,8 @@ 0.9948729460349305 -0.7964217170018251 NaN - - + + WorkpieceMaterial/FC30.WorkpieceMaterial @@ -68,23 +71,26 @@ - - 25 - 1000 - + 25 + + 25 + 1000 + - - + + - + P-SE0604 (Speed Tiger) BT40-ER16-090.Holder - SolidEnd + + + SolidEnd @@ -107,7 +113,7 @@ - + (16,3) (50,3) @@ -134,7 +140,7 @@ - + WC-Co6-800nm @@ -142,7 +148,7 @@ 0 1440 6.7 - 70 + 70 0.34 14.95 3143.16 @@ -161,7 +167,35 @@ 25.7 - + + + + WC-Co6-800nm + + 600 + 0 + 1440 + 6.7 + 70 + 0.34 + 14.95 + 3143.16 + 400 + 0.44 + + 17500 + 14800 + 12500 + 10000 + + + 1.19 + 1.86 + 7.1 + 25.7 + + + @@ -172,7 +206,7 @@ 0.25 1350 7.5 - 25 + 25 0.55 4.2 3273 @@ -196,33 +230,35 @@ 0.003 - 16.806603351650548 + 16.806603351650548 30 5 - + true 2 true + true 0 999 - + - 5 + 21 SpindleBuckleAnc -56.6 44.5 - + - + Fanuc (0, 0, 0) - + (0, 0, 0) + (0, 0, 0) true @@ -237,18 +273,18 @@ false true false - + - (INF, INF, INF) - (-INF, -INF, -INF) + (-INF, -INF, -INF) + (INF, INF, INF) - - + + - (INF, INF, INF) - (-INF, -INF, -INF) + (-INF, -INF, -INF) + (INF, INF, INF) - + (60, 60, 60) 60000 20000 @@ -276,21 +312,37 @@ - + + + LineBeginCsScript + LineEndCsScript + MC. + CL. + ToolId + SpindleSpeed_rpm + Spd.Dir. + Feedrate_mmdmin + StepDuration + ActualTime + + + - + + true train ////一般設定//// MillingForceCycleDivisionNum=180; MachiningResolution=0.125/8; -DispCache_Mb = 860; //GRAM暫存空間 (Mb) MachiningMotionResolution = FeedPerTooth; EnableCollisionDetection = false; //是否啟用碰撞檢測開啟 EnablePauseOnCollision = false; //是否啟用碰撞發生時暫停 -EnableMillingForceEvaluation=true; +EnablePhysics=true; + +DefaultParaTemplateDimension=2; ClearTimeMappingData(); @@ -303,20 +355,17 @@ AddTimeDataByFile("high1",dynamometerFile,60.0392,60.9723); AddTimeDataByFile("high2",dynamometerFile,64.3404,64.8226); AddTimeDataByFile("high3",dynamometerFile,66.8694,67.2146); -//WriteRuntimeGeom("Cache/raw.wct"); //寫入暫存檔 -//ReadRuntimeGeom("Cache/raw.wct"); //讀取暫存檔 -RunNcFile("NC/lines.nc"); +PlayNcFile("NC/lines.nc"); TrainMillingPara(Fx|Fy|Fz, "Output/S50C-fine.mp",0.2); - true - + - + @@ -366,15 +415,15 @@ TrainMillingPara(Fx|Fy|Fz, "Output/S50C-fine.mp",0.2); false - false + false + true - true - true false - + + 35 TrainingErrRatio @@ -617,5 +666,4 @@ TrainMillingPara(Fx|Fy|Fz, "Output/S50C-fine.mp",0.2); - 860 - \ No newline at end of file + \ No newline at end of file diff --git a/SpindleCapability/test3.SpindleCapability b/SpindleCapability/test3.SpindleCapability index ed2b258..1c3fdfe 100644 --- a/SpindleCapability/test3.SpindleCapability +++ b/SpindleCapability/test3.SpindleCapability @@ -4,8 +4,10 @@ 0.4 4000.0000000000005 - - + 4.82 + 90 + + 0 0 @@ -23,7 +25,7 @@ 2.5 - + 0 0 @@ -41,7 +43,7 @@ 5 - + 0 0 @@ -59,9 +61,9 @@ 3 - - - + + + 0 50 @@ -91,5 +93,5 @@ 5 - + \ No newline at end of file diff --git a/WorkpieceMaterial/FC30.WorkpieceMaterial b/WorkpieceMaterial/FC30.WorkpieceMaterial index bbbb723..a7eec62 100644 --- a/WorkpieceMaterial/FC30.WorkpieceMaterial +++ b/WorkpieceMaterial/FC30.WorkpieceMaterial @@ -8,7 +8,7 @@ 200 0.01 0.46 - 52 + 52 7.2 220 1150 From 8bd10349ab6ebb4ec2e1a176e5bfc69043ae4bee Mon Sep 17 00:00:00 2001 From: iamboss Date: Tue, 9 Dec 2025 14:31:54 +0800 Subject: [PATCH 2/3] tune --- Output/S50C-2.mp | 12 ----------- Output/{S50C-fine-Copy-01.mp => S50C-2d.mp} | 2 +- Output/S50C-fine-Copy-00.mp | 12 ----------- Output/S50C-fine.mp | 10 ---------- Output/S50C-outlier-0.1.mp | 12 ----------- Output/S50C-outlier-0.2.mp | 12 ----------- Output/S50C-outlier-0.5.mp | 12 ----------- Output/S50C.mp | 22 ++++++++++----------- S50C.hincproj | 4 ++-- 9 files changed, 14 insertions(+), 84 deletions(-) delete mode 100644 Output/S50C-2.mp rename Output/{S50C-fine-Copy-01.mp => S50C-2d.mp} (86%) delete mode 100644 Output/S50C-fine-Copy-00.mp delete mode 100644 Output/S50C-fine.mp delete mode 100644 Output/S50C-outlier-0.1.mp delete mode 100644 Output/S50C-outlier-0.2.mp delete mode 100644 Output/S50C-outlier-0.5.mp diff --git a/Output/S50C-2.mp b/Output/S50C-2.mp deleted file mode 100644 index 05c491e..0000000 --- a/Output/S50C-2.mp +++ /dev/null @@ -1,12 +0,0 @@ - - - S50C-2.mp - - 721.4480844419355 - 488.18658146979453 - -1237.9229395005204 - 13.037775671993957 - 19.715961218949563 - -21.762521868517958 - 8 - \ No newline at end of file diff --git a/Output/S50C-fine-Copy-01.mp b/Output/S50C-2d.mp similarity index 86% rename from Output/S50C-fine-Copy-01.mp rename to Output/S50C-2d.mp index 87d2033..51f22af 100644 --- a/Output/S50C-fine-Copy-01.mp +++ b/Output/S50C-2d.mp @@ -1,6 +1,6 @@  - S50C-fine.mp + S50C-2d.mp SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 57.79%; FilteredSampleNum = 725220 776.7735765695861 -1701.0286467145884 diff --git a/Output/S50C-fine-Copy-00.mp b/Output/S50C-fine-Copy-00.mp deleted file mode 100644 index 1d5e3e1..0000000 --- a/Output/S50C-fine-Copy-00.mp +++ /dev/null @@ -1,12 +0,0 @@ - - - S50C-fine.mp - - 781.9193047583416 - 534.2515063930691 - -1341.4299667097694 - 12.488024348568263 - 19.81313632613896 - -20.852754261520523 - NaN - \ No newline at end of file diff --git a/Output/S50C-fine.mp b/Output/S50C-fine.mp deleted file mode 100644 index 87d2033..0000000 --- a/Output/S50C-fine.mp +++ /dev/null @@ -1,10 +0,0 @@ - - - S50C-fine.mp - SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 57.79%; FilteredSampleNum = 725220 - 776.7735765695861 - -1701.0286467145884 - 8.185515874589065 - 20.118736350399548 - 8 - \ No newline at end of file diff --git a/Output/S50C-outlier-0.1.mp b/Output/S50C-outlier-0.1.mp deleted file mode 100644 index 5c0a60c..0000000 --- a/Output/S50C-outlier-0.1.mp +++ /dev/null @@ -1,12 +0,0 @@ - - - S50C-outlier-0.1.mp - - 742.950584437656 - 490.8517248037793 - -1283.4354748025762 - 11.6974327170165 - 19.66896167423929 - -19.835968644919518 - 8 - \ No newline at end of file diff --git a/Output/S50C-outlier-0.2.mp b/Output/S50C-outlier-0.2.mp deleted file mode 100644 index 018932d..0000000 --- a/Output/S50C-outlier-0.2.mp +++ /dev/null @@ -1,12 +0,0 @@ - - - S50C-outlier-0.2.mp - - 758.6010210824404 - 516.1247909594373 - -1302.95910060132 - 12.15402056324717 - 19.20207770135865 - -20.234413210618193 - 8 - \ No newline at end of file diff --git a/Output/S50C-outlier-0.5.mp b/Output/S50C-outlier-0.5.mp deleted file mode 100644 index 63ba27a..0000000 --- a/Output/S50C-outlier-0.5.mp +++ /dev/null @@ -1,12 +0,0 @@ - - - S50C-outlier-0.5.mp - - 751.3642344760983 - 512.438657994816 - -1290.9761068535777 - 12.29573220360363 - 19.020893816232572 - -20.450088354259567 - 8 - \ No newline at end of file diff --git a/Output/S50C.mp b/Output/S50C.mp index 10f48f9..0886c7a 100644 --- a/Output/S50C.mp +++ b/Output/S50C.mp @@ -1,12 +1,12 @@ - - - S50C - S50C-fine-outlier-0.2. Built on 2025-01-17. - 781.9193047583416 - 534.2515063930691 - -1341.4299667097694 - 12.488024348568263 - 19.81313632613896 - -20.852754261520523 + + + S50C-3d-fine-0.1.mp + SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 97.18%; FilteredSampleNum = 815940 + 780.3669554854418 + 596.9316596203404 + -1310.417015838394 + 12.391230831194367 + 20.907192079572006 + -19.681727830259177 8 - \ No newline at end of file + \ No newline at end of file diff --git a/S50C.hincproj b/S50C.hincproj index e834c2c..1b650dd 100644 --- a/S50C.hincproj +++ b/S50C.hincproj @@ -342,7 +342,7 @@ EnableCollisionDetection = false; //是否啟用碰撞檢測開啟 EnablePauseOnCollision = false; //是否啟用碰撞發生時暫停 EnablePhysics=true; -DefaultParaTemplateDimension=2; +DefaultParaTemplateDimension=3; ClearTimeMappingData(); @@ -357,7 +357,7 @@ AddTimeDataByFile("high3",dynamometerFile,66.8694,67.2146); PlayNcFile("NC/lines.nc"); -TrainMillingPara(Fx|Fy|Fz, "Output/S50C-fine.mp",0.2); +TrainMillingPara(Fx|Fy|Fz, "Output/S50C.mp",0.1); From cabbec98336375ac8d6e806089ddea1b5ad52595 Mon Sep 17 00:00:00 2001 From: iamboss Date: Sun, 12 Jul 2026 01:03:07 +0800 Subject: [PATCH 3/3] data: update S50C hincproj + machining params (.mp/.mt); add debug.hincproj + fine-0.1 param set --- EmptyMachine.mt | 4 +- Output/S50C-2-fine-0.1.mp | 10 + Output/S50C.mp | 14 +- S50C.hincproj | 9 +- debug.hincproj | 839 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 863 insertions(+), 13 deletions(-) create mode 100644 Output/S50C-2-fine-0.1.mp create mode 100644 debug.hincproj diff --git a/EmptyMachine.mt b/EmptyMachine.mt index 0cb4cd7..c3aa54b 100644 --- a/EmptyMachine.mt +++ b/EmptyMachine.mt @@ -7,10 +7,10 @@ [O][B][w];[O][Y][X][Z][A][S][t] true - + - + diff --git a/Output/S50C-2-fine-0.1.mp b/Output/S50C-2-fine-0.1.mp new file mode 100644 index 0000000..66e8895 --- /dev/null +++ b/Output/S50C-2-fine-0.1.mp @@ -0,0 +1,10 @@ + + + S50C-2-fine-0.1.mp + SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 59.77%; FilteredSampleNum = 815940 + 587.1227668411768 + -1464.4015004965706 + 25.582925097663253 + -3.5401116760199125 + 8 + \ No newline at end of file diff --git a/Output/S50C.mp b/Output/S50C.mp index 0886c7a..7e1cd48 100644 --- a/Output/S50C.mp +++ b/Output/S50C.mp @@ -1,12 +1,12 @@  - S50C-3d-fine-0.1.mp + S50C.mp SampleFlags = Fx, Fy, Fz; Correlation Coefficient R = 97.18%; FilteredSampleNum = 815940 - 780.3669554854418 - 596.9316596203404 - -1310.417015838394 - 12.391230831194367 - 20.907192079572006 - -19.681727830259177 + 804.9791868832534 + 615.7074172303907 + -1351.984666781255 + 12.759415000308216 + 21.565605681453548 + -20.259194685261928 8 \ No newline at end of file diff --git a/S50C.hincproj b/S50C.hincproj index 1b650dd..23cc5fa 100644 --- a/S50C.hincproj +++ b/S50C.hincproj @@ -1,5 +1,5 @@  - + @@ -342,8 +342,7 @@ EnableCollisionDetection = false; //是否啟用碰撞檢測開啟 EnablePauseOnCollision = false; //是否啟用碰撞發生時暫停 EnablePhysics=true; -DefaultParaTemplateDimension=3; - +DefaultParaTemplateDimension=2; ClearTimeMappingData(); string dynamometerFile=$"./Managed/dynamometer-S50C/Exp09/Exp09.csv"; @@ -357,7 +356,9 @@ AddTimeDataByFile("high3",dynamometerFile,66.8694,67.2146); PlayNcFile("NC/lines.nc"); -TrainMillingPara(Fx|Fy|Fz, "Output/S50C.mp",0.1); +var outlierRatio=0.1; +TrainMillingPara(Fx|Fy|Fz, $"Output/S50C-{DefaultParaTemplateDimension}-fine-{outlierRatio}.mp",outlierRatio); + diff --git a/debug.hincproj b/debug.hincproj new file mode 100644 index 0000000..d9ab5fe --- /dev/null +++ b/debug.hincproj @@ -0,0 +1,839 @@ + + + + + + EmptyMachine.mt + + + SpindleCapability/test3.SpindleCapability + + + P-SE0604 (Speed Tiger) + + BT40-ER16-090.Holder + + + + + + SolidEnd + + + + + 6 + 0 + 16 + + + + + + + + + + + + + + + (16,3) + (50,3) + + + + + 0.125 + 15 + + + 4 + + + 0 + + + 35 + 8 + 5 + + + + + + + + + + WC-Co6-800nm + + 600 + 0 + 1440 + 6.7 + 70 + 0.34 + 14.95 + 3143.16 + 400 + 0.44 + + 17500 + 14800 + 12500 + 10000 + + + 1.19 + 1.86 + 7.1 + 25.7 + + + + + + WC-Co6-800nm + + 600 + 0 + 1440 + 6.7 + 70 + 0.34 + 14.95 + 3143.16 + 400 + 0.44 + + 17500 + 14800 + 12500 + 10000 + + + 1.19 + 1.86 + 7.1 + 25.7 + + + + + + + + TiAlN + Titanium Aluminum Nitride Coating + 500 + 0.25 + 1350 + 7.5 + 25 + 0.55 + 4.2 + 3273 + 380 + 0.35 + + 25000 + 21000 + 17000 + 13000 + + + 0.9 + 1.3 + 4.8 + 18.5 + + 3 + + + 0.003 + + + 16.806603351650548 + 30 + 5 + + + true + 2 + true + true + 0 + 999 + + + + + 21 + SpindleBuckleAnc + -56.6 + 44.5 + + + + + + + + + (-45, -70, 0) + (45, 70, 10) + + + + + + + + + + + + + + + 0.125 + + + + + + (0, 0, -30) + (90, 140, 0) + + + + + + + + + + + + + + AA7075 (update on 20241219) + AA7075 (update on 20241219) exp on 2017 + 347.79177234887237 + 1605.0902189483 + -1481.6923735052892 + 0.6751705314777301 + 0.9948729460349305 + -0.7964217170018251 + NaN + + + + WorkpieceMaterial/FC30.WorkpieceMaterial + + + + + + + 25 + + 25 + 1000 + + + + + + + + P-SE0604 (Speed Tiger) + + BT40-ER16-090.Holder + + + + + + SolidEnd + + + + + 6 + 0 + 16 + + + + + + + + + + + + + + + (16,3) + (50,3) + + + + + 0.125 + 15 + + + 4 + + + 0 + + + 35 + 8 + 5 + + + + + + + + + + WC-Co6-800nm + + 600 + 0 + 1440 + 6.7 + 70 + 0.34 + 14.95 + 3143.16 + 400 + 0.44 + + 17500 + 14800 + 12500 + 10000 + + + 1.19 + 1.86 + 7.1 + 25.7 + + + + + + WC-Co6-800nm + + 600 + 0 + 1440 + 6.7 + 70 + 0.34 + 14.95 + 3143.16 + 400 + 0.44 + + 17500 + 14800 + 12500 + 10000 + + + 1.19 + 1.86 + 7.1 + 25.7 + + + + + + + + TiAlN + Titanium Aluminum Nitride Coating + 500 + 0.25 + 1350 + 7.5 + 25 + 0.55 + 4.2 + 3273 + 380 + 0.35 + + 25000 + 21000 + 17000 + 13000 + + + 0.9 + 1.3 + 4.8 + 18.5 + + 3 + + + 0.003 + + + 16.806603351650548 + 30 + 5 + + + true + 2 + true + true + 0 + 999 + + + + + 21 + SpindleBuckleAnc + -56.6 + 44.5 + + + + + + + Fanuc + (0, 0, 0) + (0, 0, 0) + (0, 0, 0) + true + + + + 3 + 0 + 157.44 + 0 + + + + false + true + false + + + (-INF, -INF, -INF) + (INF, INF, INF) + + + + + (-INF, -INF, -INF) + (INF, INF, INF) + + + (60, 60, 60) + 60000 + 20000 + PT0S + + 0 + + + + + + + + + + + + + + + + + + + + + + + + LineBeginCsScript + LineEndCsScript + MC. + CL. + ToolId + SpindleSpeed_rpm + Spd.Dir. + Feedrate_mmdmin + StepDuration + ActualTime + + + + + + + true + + + train + ////一般設定//// +MillingForceCycleDivisionNum=180; +MachiningResolution=0.125; +MachiningMotionResolution = FeedPerTooth; +EnableCollisionDetection = false; //是否啟用碰撞檢測開啟 +EnablePauseOnCollision = false; //是否啟用碰撞發生時暫停 +EnablePhysics=true; + +DefaultParaTemplateDimension=2; +ClearTimeMappingData(); + +string dynamometerFile=$"./Managed/dynamometer-S50C/Exp09/Exp09.csv"; + +AddTimeDataByFile("low1",dynamometerFile,16.4726,21.6107); +AddTimeDataByFile("low2",dynamometerFile,39.5988,42.2784); +AddTimeDataByFile("low3",dynamometerFile,51.9493,53.7441); +AddTimeDataByFile("high1",dynamometerFile,60.0392,60.9723); +AddTimeDataByFile("high2",dynamometerFile,64.3404,64.8226); +AddTimeDataByFile("high3",dynamometerFile,66.8694,67.2146); + +PlayNcFile("NC/lines.nc"); + +var outlierRatio=0.1; +TrainMillingPara(Fx|Fy|Fz, $"Output/S50C-{DefaultParaTemplateDimension}-fine-{outlierRatio}.mp",outlierRatio); + + + + + + + + + + + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:00:16.4726000 + 00:00:21.6107000 + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:00:39.5988000 + 00:00:42.2784000 + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:00:51.9493000 + 00:00:53.7441000 + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:01:00.0392000 + 00:01:00.9723000 + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:01:04.3404000 + 00:01:04.8226000 + + + + + ./Managed/dynamometer-S50C/Exp09/Exp09.csv + 00:01:06.8694000 + 00:01:07.2146000 + + + + + + false + false + true + + + false + + + + 35 + + + TrainingErrRatio + + + + + TrainingErrRatio + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 1 + + + + + + + + Linear + 0 + 2 + + + + + + + + Linear + 0 + 1 + + + + + + + + + Fit + + -400 + 400 + + ForceToToolOnToolRunningCoordinate + + + + + + Fit + + -10 + 10 + + + + + + + + Fit + + -10 + 10 + + + + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + Fit + + 0 + 1 + + + + + + + + + + + \ No newline at end of file