From 1802488449d7d524c1e7e08fd1a3b6dfc41c74a1 Mon Sep 17 00:00:00 2001 From: AJ Date: Wed, 14 Nov 2018 14:31:59 -0500 Subject: [PATCH] Read focus settings for material library files. --- CincyLib/Laser/MaterialLib.cs | 29 ++-- CincyLib/Laser/MaterialLibReader.cs | 214 +++++++++++++-------------- CincyLib/PressBrake/ProgramReader.cs | 1 + CincyLib/PressBrake/Step.cs | 1 + 4 files changed, 120 insertions(+), 125 deletions(-) diff --git a/CincyLib/Laser/MaterialLib.cs b/CincyLib/Laser/MaterialLib.cs index 25272dd..6e78fea 100644 --- a/CincyLib/Laser/MaterialLib.cs +++ b/CincyLib/Laser/MaterialLib.cs @@ -10,7 +10,7 @@ namespace CincyLib.Laser RampedPierceSteps = new RampedPierceStep[MaxSteps]; } - public string Name { get; set; } + public string Path { get; set; } public string Machine { get; set; } @@ -18,7 +18,7 @@ namespace CincyLib.Laser public PierceType PierceType { get; set; } - public float PierceDwell { get; set; } + public double PierceDwell { get; set; } public int PiercePower { get; set; } @@ -26,9 +26,9 @@ namespace CincyLib.Laser public int PierceDutyCycle { get; set; } - public float PierceZHoldDistance { get; set; } + public double PierceZHoldDistance { get; set; } - public float PierceNozzleStandoffRampFrom { get; set; } + public double PierceNozzleStandoffRampFrom { get; set; } //public float PierceNozzleStandoffRampTo { get; set; } @@ -40,11 +40,11 @@ namespace CincyLib.Laser public int RampedPierceStartPower { get; set; } - public float RampedPierceCoolingTime { get; set; } + public double RampedPierceCoolingTime { get; set; } public RampedPierceStep[] RampedPierceSteps; - public float PierceTime() + public double PierceTime() { switch (PierceType) { @@ -73,9 +73,9 @@ namespace CincyLib.Laser public int Feedrate { get; set; } - //public float PreCutDwell { get; set; } // seconds + public double PreCutDwellSeconds { get; set; } // seconds - public float KerfWidth { get; set; } // inches + public double KerfWidth { get; set; } // inches //public float PowerBurstTime { get; set; } // seconds @@ -85,12 +85,12 @@ namespace CincyLib.Laser public bool UsePartCoolantOnCut { get; set; } - public float NozzleStandoff1 { get; set; } + public double NozzleStandoff1 { get; set; } /// /// Optional standoff (M45) /// - public float NozzleStandoff2 { get; set; } + public double NozzleStandoff2 { get; set; } public AssistGasType AssistGas { get; set; } @@ -103,6 +103,12 @@ namespace CincyLib.Laser #endregion + public double CutFocusNearField { get; set; } + public double CutFocusFarField { get; set; } + + public double PierceFocusNearField { get; set; } + public double PierceFocusFarField { get; set; } + /// /// Dynamic power control feedrate. /// @@ -122,7 +128,8 @@ namespace CincyLib.Laser public static MaterialLib Load(string libfile) { var reader = new MaterialLibReader(); - return reader.Read(libfile) ? reader.MaterialLib : null; + reader.Read(libfile); + return reader.MaterialLib; } } } diff --git a/CincyLib/Laser/MaterialLibReader.cs b/CincyLib/Laser/MaterialLibReader.cs index 548cabc..154966a 100644 --- a/CincyLib/Laser/MaterialLibReader.cs +++ b/CincyLib/Laser/MaterialLibReader.cs @@ -19,134 +19,120 @@ namespace CincyLib.Laser MaterialLib = materiallib; } - public bool Read(string file) + public void Read(string file) { - Stream stream = null; - MaterialLib.Name = Path.GetFileNameWithoutExtension(file); - - var success = false; - - try + using (var stream = File.OpenRead(file)) { - stream = File.OpenRead(file); - success = Read(stream); + MaterialLib.Path = file; + Read(stream); } - catch (SystemException ex) - { - Debug.WriteLine(ex.Message); - } - finally - { - if (stream != null) - stream.Close(); - } - - return success; } - public bool Read(Stream stream) + public void Read(Stream stream) { - var success = false; + var reader = new BinaryReader(stream); - try + MaterialLib.Machine = reader.ReadString(); + MaterialLib.PierceDwell = reader.ReadSingle(); + + reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes + MaterialLib.PiercePower = reader.ReadInt16(); + MaterialLib.PierceFrequency = reader.ReadInt16(); + MaterialLib.PierceDutyCycle = reader.ReadInt16(); + + var pierceType = reader.ReadByte(); + + switch (pierceType) { - var reader = new BinaryReader(stream); + case 0: + MaterialLib.PierceType = PierceType.NoPierce; + break; - MaterialLib.Machine = reader.ReadString(); - MaterialLib.PierceDwell = reader.ReadSingle(); - - reader.BaseStream.Seek(2, SeekOrigin.Current); - MaterialLib.PiercePower = reader.ReadInt16(); - MaterialLib.PierceFrequency = reader.ReadInt16(); - MaterialLib.PierceDutyCycle = reader.ReadInt16(); - - if (reader.ReadInt16() == 1) + case 1: MaterialLib.PierceType = PierceType.RampedPower; - - MaterialLib.PierceNozzleStandoffRampFrom = reader.ReadSingle(); - - MaterialLib.RampedPierceCoolingTime = reader.ReadSingle(); - MaterialLib.UsePartCoolantOnPierce = Convert.ToBoolean(reader.ReadInt16()); - - MaterialLib.PierceAssistGas = (AssistGasType)reader.ReadInt16(); - MaterialLib.PierceAssistGasPressure = reader.ReadInt16(); - - reader.BaseStream.Seek(6, SeekOrigin.Current); - MaterialLib.Power = reader.ReadInt16(); - MaterialLib.Frequency = reader.ReadInt16(); - MaterialLib.DutyCycle = reader.ReadInt16(); - MaterialLib.DynamicPowerControl = Convert.ToBoolean(reader.ReadInt16()); - MaterialLib.DPCFeedrate = reader.ReadInt16(); - MaterialLib.DPCMinPower = reader.ReadInt16(); - - reader.BaseStream.Seek(4, SeekOrigin.Current); - MaterialLib.NozzleStandoff1 = reader.ReadSingle(); - MaterialLib.KerfWidth = reader.ReadSingle(); - - reader.BaseStream.Seek(2, SeekOrigin.Current); - MaterialLib.AssistGas = (AssistGasType)reader.ReadInt16(); - MaterialLib.AssistGasPressure1 = reader.ReadInt16(); - MaterialLib.AssistGasPressure2 = reader.ReadInt16(); - MaterialLib.DynamicAssistGas = Convert.ToBoolean(reader.ReadInt16()); - - reader.BaseStream.Seek(4, SeekOrigin.Current); - var steps = reader.ReadInt16(); - - reader.BaseStream.Seek(4, SeekOrigin.Current); - MaterialLib.RampedPierceStartPower = reader.ReadInt16(); - - MaterialLib.RampedPierceSteps = new RampedPierceStep[steps]; - - - for (int i = 0; i < steps; ++i) - { - MaterialLib.RampedPierceSteps[i] = new RampedPierceStep(); - MaterialLib.RampedPierceSteps[i].Time = reader.ReadSingle(); - MaterialLib.RampedPierceSteps[i].Power = reader.ReadInt16(); - } - - const int MAX_STEPS = 20; - - var remaining = MAX_STEPS - steps; - reader.BaseStream.Seek(6 * remaining, SeekOrigin.Current); - - int length = reader.ReadByte(); - - if (length == 0xFF) - { - var second = reader.ReadByte(); - var third = reader.ReadByte(); - - length = length * third + second + third; - } - MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length)); - - reader.BaseStream.Seek(4, SeekOrigin.Current); - MaterialLib.Feedrate = reader.ReadInt16(); - - if (MaterialLib.PierceType != PierceType.RampedPower) - { - if (reader.BaseStream.Length < reader.BaseStream.Position + 527) - { - MaterialLib.PierceType = MaterialLib.PierceDwell == 0 - ? PierceType.NoPierce - : PierceType.FixedDwellTime; - } - else - { - reader.BaseStream.Seek(527, SeekOrigin.Current); - MaterialLib.PierceType = (PierceType)reader.ReadInt16(); - } - } - - success = true; + break; } - catch (Exception ex) + + reader.BaseStream.Seek(1, SeekOrigin.Current); // Unknown 1 byte + + MaterialLib.PierceNozzleStandoffRampFrom = reader.ReadSingle(); + + MaterialLib.RampedPierceCoolingTime = reader.ReadSingle(); + MaterialLib.UsePartCoolantOnPierce = Convert.ToBoolean(reader.ReadInt16()); + + MaterialLib.PierceAssistGas = (AssistGasType)reader.ReadInt16(); + MaterialLib.PierceAssistGasPressure = reader.ReadInt16(); + MaterialLib.PreCutDwellSeconds = Math.Round(reader.ReadSingle(), 4); + + reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes + MaterialLib.Power = reader.ReadInt16(); + MaterialLib.Frequency = reader.ReadInt16(); + MaterialLib.DutyCycle = reader.ReadInt16(); + MaterialLib.DynamicPowerControl = Convert.ToBoolean(reader.ReadInt16()); + MaterialLib.DPCFeedrate = reader.ReadInt16(); + MaterialLib.DPCMinPower = reader.ReadInt16(); + + reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes + MaterialLib.NozzleStandoff1 = reader.ReadSingle(); + MaterialLib.KerfWidth = reader.ReadSingle(); + + reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes + MaterialLib.AssistGas = (AssistGasType)reader.ReadInt16(); + MaterialLib.AssistGasPressure1 = reader.ReadInt16(); + MaterialLib.AssistGasPressure2 = reader.ReadInt16(); + MaterialLib.DynamicAssistGas = Convert.ToBoolean(reader.ReadInt16()); + + reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes + var steps = reader.ReadInt16(); + + reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes + MaterialLib.RampedPierceStartPower = reader.ReadInt16(); + + MaterialLib.RampedPierceSteps = new RampedPierceStep[steps]; + + + for (int i = 0; i < steps; ++i) { - Debug.WriteLine(ex.Message); + MaterialLib.RampedPierceSteps[i] = new RampedPierceStep(); + MaterialLib.RampedPierceSteps[i].Time = reader.ReadSingle(); + MaterialLib.RampedPierceSteps[i].Power = reader.ReadInt16(); } - return success; + const int MAX_STEPS = 20; + + var remaining = MAX_STEPS - steps; + reader.BaseStream.Seek(6 * remaining, SeekOrigin.Current); + + int length = reader.ReadByte(); + + if (length == 0xFF) + { + var second = reader.ReadByte(); + var third = reader.ReadByte(); + + length = length * third + second + third; + } + MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length)); + + reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes + MaterialLib.Feedrate = reader.ReadInt16(); + + reader.BaseStream.Seek(428, SeekOrigin.Current); + MaterialLib.CutFocusNearField = Math.Round(reader.ReadSingle(), 4); + MaterialLib.CutFocusFarField = Math.Round(reader.ReadSingle(), 4); + MaterialLib.PierceFocusNearField = Math.Round(reader.ReadSingle(), 4); + MaterialLib.PierceFocusFarField = Math.Round(reader.ReadSingle(), 4); + + // older files wont go this far... + const int seek = 88; + + var hasExtendedInfo = reader.BaseStream.Length > reader.BaseStream.Position + seek; + reader.BaseStream.Seek(seek, SeekOrigin.Current); + + if (hasExtendedInfo) + { + MaterialLib.PierceType = (PierceType)reader.ReadByte(); + } } } } diff --git a/CincyLib/PressBrake/ProgramReader.cs b/CincyLib/PressBrake/ProgramReader.cs index 48145a0..2b2f66e 100644 --- a/CincyLib/PressBrake/ProgramReader.cs +++ b/CincyLib/PressBrake/ProgramReader.cs @@ -101,6 +101,7 @@ namespace CincyLib.PressBrake step.LowerID = x.Attribute("LowerID").ToInt(); step.SpdChgDwn = x.Attribute("SpdChgDwn").ToDouble(); step.SpdChgUp = x.Attribute("SpdChgUp").ToDouble(); + step.Tilt = x.Attribute("Tilt").ToDouble(); step.FormSpeed = x.Attribute("FormSpeed").ToDouble(); step.XLeft = x.Attribute("XLeft").ToDouble(); step.XRight = x.Attribute("XRight").ToDouble(); diff --git a/CincyLib/PressBrake/Step.cs b/CincyLib/PressBrake/Step.cs index ee3ee64..639d18e 100644 --- a/CincyLib/PressBrake/Step.cs +++ b/CincyLib/PressBrake/Step.cs @@ -10,6 +10,7 @@ public double AngleAdj { get; set; } public double BendLen { get; set; } public double StrokeLen { get; set; } + public double Tilt { get; set; } public int UpperID { get; set; } public int LowerID { get; set; } public double SpdChgDwn { get; set; }