First commit.
This commit is contained in:
22
.gitattributes
vendored
Normal file
22
.gitattributes
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
71
.gitignore
vendored
Normal file
71
.gitignore
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
# Windows image file caches
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
|
||||
# Folder config file
|
||||
Desktop.ini
|
||||
|
||||
# Recycle Bin used on file shares
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# Windows Installer files
|
||||
*.cab
|
||||
*.msi
|
||||
*.msm
|
||||
*.msp
|
||||
|
||||
# =========================
|
||||
# Operating System Files
|
||||
# =========================
|
||||
|
||||
# OSX
|
||||
# =========================
|
||||
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear on external disk
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
#ignore thumbnails created by windows
|
||||
#Ignore files build by Visual Studio
|
||||
*.obj
|
||||
*.exe
|
||||
*.pdb
|
||||
*.user
|
||||
*.aps
|
||||
*.pch
|
||||
*.vspscc
|
||||
*_i.c
|
||||
*_p.c
|
||||
*.ncb
|
||||
*.suo
|
||||
*.tlb
|
||||
*.tlh
|
||||
*.bak
|
||||
*.cache
|
||||
*.ilk
|
||||
*.log
|
||||
[Bb]in
|
||||
[Dd]ebug*/
|
||||
*.lib
|
||||
*.sbr
|
||||
obj/
|
||||
[Rr]elease*/
|
||||
_ReSharper*/
|
||||
20
CincyLib.sln
Normal file
20
CincyLib.sln
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual C# Express 2010
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CincyLib", "CincyLib\CincyLib.csproj", "{5280FBF9-146F-4744-A635-1B99BA637419}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{5280FBF9-146F-4744-A635-1B99BA637419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5280FBF9-146F-4744-A635-1B99BA637419}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5280FBF9-146F-4744-A635-1B99BA637419}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5280FBF9-146F-4744-A635-1B99BA637419}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
59
CincyLib/CincyLib.csproj
Normal file
59
CincyLib/CincyLib.csproj
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>8.0.30703</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{5280FBF9-146F-4744-A635-1B99BA637419}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>CincyLib</RootNamespace>
|
||||
<AssemblyName>CincyLib</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Laser\LaserWebPanel.cs" />
|
||||
<Compile Include="Laser\ProductLog.cs" />
|
||||
<Compile Include="SheetMetal.cs" />
|
||||
<Compile Include="Laser\AssistGasType.cs" />
|
||||
<Compile Include="Laser\MaterialLib.cs" />
|
||||
<Compile Include="Laser\MaterialLibReader.cs" />
|
||||
<Compile Include="Laser\PierceType.cs" />
|
||||
<Compile Include="Laser\RampedPierceStep.cs" />
|
||||
<Compile Include="PressBrake\LowerTool.cs" />
|
||||
<Compile Include="PressBrake\ToolSet.cs" />
|
||||
<Compile Include="PressBrake\UpperTool.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
13
CincyLib/Laser/AssistGasType.cs
Normal file
13
CincyLib/Laser/AssistGasType.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public enum AssistGasType
|
||||
{
|
||||
Oxygen,
|
||||
Nitrogen,
|
||||
Air,
|
||||
Argon,
|
||||
Helium,
|
||||
Other
|
||||
}
|
||||
}
|
||||
234
CincyLib/Laser/LaserWebPanel.cs
Normal file
234
CincyLib/Laser/LaserWebPanel.cs
Normal file
@@ -0,0 +1,234 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Xml;
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public class LaserWebPanel
|
||||
{
|
||||
public string CurrentProgram { get; set; }
|
||||
|
||||
public CNCMode CurrentMode { get; set; }
|
||||
|
||||
public CNCRunStatus CurrentStatus { get; set; }
|
||||
|
||||
public LaserMains LaserMains { get; set; }
|
||||
|
||||
public HighVoltage HighVoltage { get; set; }
|
||||
|
||||
public string[] SystemAlarms { get; set; }
|
||||
|
||||
public string[] LaserAlarms { get; set; }
|
||||
|
||||
public string[] FYIMessages { get; set; }
|
||||
|
||||
public bool Update(Stream stream)
|
||||
{
|
||||
try
|
||||
{
|
||||
var reader = new LaserWebPanelReader(this);
|
||||
return reader.Read(stream);
|
||||
}
|
||||
catch { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Update(Uri uri)
|
||||
{
|
||||
try
|
||||
{
|
||||
var reader = new LaserWebPanelReader(this);
|
||||
return reader.Read(uri);
|
||||
}
|
||||
catch { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Update(string url)
|
||||
{
|
||||
try
|
||||
{
|
||||
var reader = new LaserWebPanelReader(this);
|
||||
return reader.Read(new Uri(url));
|
||||
}
|
||||
catch { }
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
internal class LaserWebPanelReader
|
||||
{
|
||||
public readonly LaserWebPanel LaserWebPanel;
|
||||
|
||||
public LaserWebPanelReader()
|
||||
{
|
||||
LaserWebPanel = new LaserWebPanel();
|
||||
}
|
||||
|
||||
public LaserWebPanelReader(LaserWebPanel lwp)
|
||||
{
|
||||
LaserWebPanel = lwp;
|
||||
}
|
||||
|
||||
public bool Read(Stream stream)
|
||||
{
|
||||
try
|
||||
{
|
||||
var reader = new StreamReader(stream);
|
||||
var responseString = reader.ReadToEnd();
|
||||
reader.Close();
|
||||
|
||||
var doc = new XmlDocument();
|
||||
doc.LoadXml(responseString);
|
||||
|
||||
LaserWebPanel.CurrentProgram = doc.DocumentElement.SelectSingleNode("/Refresh/ProgramName").InnerText;
|
||||
LaserWebPanel.SystemAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/SystemAlarms").InnerText.Replace("\r", "").Split('\n');
|
||||
LaserWebPanel.LaserAlarms = doc.DocumentElement.SelectSingleNode("/Refresh/LaserAlarms").InnerText.Replace("\r", "").Split('\n');
|
||||
LaserWebPanel.FYIMessages = doc.DocumentElement.SelectSingleNode("/Refresh/FYIMessages").InnerText.Replace("\r", "").Split('\n');
|
||||
|
||||
int mode;
|
||||
var cncModeString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCMode").InnerText;
|
||||
|
||||
if (int.TryParse(cncModeString, out mode))
|
||||
LaserWebPanel.CurrentMode = GetCNCMode(mode);
|
||||
|
||||
int status;
|
||||
var cncRunStatusString = doc.DocumentElement.SelectSingleNode("/Refresh/CNCRunStatus").InnerText;
|
||||
|
||||
if (int.TryParse(cncRunStatusString, out status))
|
||||
LaserWebPanel.CurrentStatus = GetCNCRunStatus(status);
|
||||
|
||||
int mains;
|
||||
var laserMainsString = doc.DocumentElement.SelectSingleNode("/Refresh/LaserMains").InnerText;
|
||||
|
||||
if (int.TryParse(laserMainsString, out mains))
|
||||
LaserWebPanel.LaserMains = GetLaserMains(mains);
|
||||
|
||||
int hv;
|
||||
var highVoltageString = doc.DocumentElement.SelectSingleNode("/Refresh/HighVoltage").InnerText;
|
||||
|
||||
if (int.TryParse(highVoltageString, out hv))
|
||||
LaserWebPanel.HighVoltage = GetHighVoltage(hv);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch { }
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
public bool Read(Uri uri)
|
||||
{
|
||||
try
|
||||
{
|
||||
var refreshUri = new Uri(uri, "refresh.aspx");
|
||||
var request = WebRequest.Create(refreshUri.ToString());
|
||||
request.Method = "POST";
|
||||
|
||||
using (var stream = request.GetRequestStream())
|
||||
{
|
||||
var postData = "<Refresh><CNCMode/><CNCRunStatus/><ProgramName/><SystemAlarms/><LaserAlarms/><FYIMessages/><LaserMains/><HighVoltage/></Refresh>";
|
||||
var byteData = Encoding.ASCII.GetBytes(postData);
|
||||
stream.Write(byteData, 0, byteData.Length);
|
||||
}
|
||||
|
||||
var response = (HttpWebResponse)request.GetResponse();
|
||||
|
||||
return Read(response.GetResponseStream());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static CNCMode GetCNCMode(int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: return CNCMode.Auto;
|
||||
case 1: return CNCMode.Jog;
|
||||
case 2: return CNCMode.Home;
|
||||
default: return CNCMode.Auto;
|
||||
}
|
||||
}
|
||||
|
||||
private static CNCRunStatus GetCNCRunStatus(int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: return CNCRunStatus.NoProgramLoaded;
|
||||
case 1: return CNCRunStatus.Stopped;
|
||||
case 2: return CNCRunStatus.ReadyToRun;
|
||||
case 3: return CNCRunStatus.Running;
|
||||
case 4: return CNCRunStatus.Finished;
|
||||
case 5: return CNCRunStatus.Unknown;
|
||||
default: return CNCRunStatus.NoProgramLoaded;
|
||||
}
|
||||
}
|
||||
|
||||
private static LaserMains GetLaserMains(int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: return LaserMains.Locked;
|
||||
case 1: return LaserMains.Off;
|
||||
case 2: return LaserMains.On;
|
||||
default: return LaserMains.Off;
|
||||
}
|
||||
}
|
||||
|
||||
private static HighVoltage GetHighVoltage(int i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0: return HighVoltage.Locked;
|
||||
case 1: return HighVoltage.Off;
|
||||
case 2: return HighVoltage.On;
|
||||
default: return HighVoltage.Off;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum CNCMode
|
||||
{
|
||||
Auto,
|
||||
Jog,
|
||||
Home
|
||||
}
|
||||
|
||||
public enum CNCRunStatus
|
||||
{
|
||||
[Description("No Program Loaded")]
|
||||
NoProgramLoaded,
|
||||
Stopped,
|
||||
[Description("Ready To Run")]
|
||||
ReadyToRun,
|
||||
Running,
|
||||
Finished,
|
||||
Unknown
|
||||
}
|
||||
|
||||
public enum LaserMains
|
||||
{
|
||||
Locked,
|
||||
Off,
|
||||
On
|
||||
}
|
||||
|
||||
public enum HighVoltage
|
||||
{
|
||||
Locked,
|
||||
Off,
|
||||
On
|
||||
}
|
||||
}
|
||||
128
CincyLib/Laser/MaterialLib.cs
Normal file
128
CincyLib/Laser/MaterialLib.cs
Normal file
@@ -0,0 +1,128 @@
|
||||
using System.Linq;
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public class MaterialLib
|
||||
{
|
||||
public MaterialLib()
|
||||
{
|
||||
const int MaxSteps = 20;
|
||||
RampedPierceSteps = new RampedPierceStep[MaxSteps];
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Machine { get; set; }
|
||||
|
||||
#region Pierce
|
||||
|
||||
public PierceType PierceType { get; set; }
|
||||
|
||||
public float PierceDwell { get; set; }
|
||||
|
||||
public int PiercePower { get; set; }
|
||||
|
||||
public int PierceFrequency { get; set; }
|
||||
|
||||
public int PierceDutyCycle { get; set; }
|
||||
|
||||
public float PierceZHoldDistance { get; set; }
|
||||
|
||||
public float PierceNozzleStandoffRampFrom { get; set; }
|
||||
|
||||
//public float PierceNozzleStandoffRampTo { get; set; }
|
||||
|
||||
public AssistGasType PierceAssistGas { get; set; }
|
||||
|
||||
public int PierceAssistGasPressure { get; set; }
|
||||
|
||||
public bool UsePartCoolantOnPierce { get; set; }
|
||||
|
||||
public int RampedPierceStartPower { get; set; }
|
||||
|
||||
public float RampedPierceCoolingTime { get; set; }
|
||||
|
||||
public RampedPierceStep[] RampedPierceSteps;
|
||||
|
||||
public float PierceTime()
|
||||
{
|
||||
switch (PierceType)
|
||||
{
|
||||
case PierceType.NoPierce:
|
||||
return 0;
|
||||
|
||||
case PierceType.FixedDwellTime:
|
||||
return PierceDwell;
|
||||
|
||||
case PierceType.RampedPower:
|
||||
return RampedPierceSteps.Sum(step => step.Time) + RampedPierceCoolingTime;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cut
|
||||
|
||||
public int Power { get; set; }
|
||||
|
||||
public int Frequency { get; set; }
|
||||
|
||||
public int DutyCycle { get; set; }
|
||||
|
||||
public int Feedrate { get; set; }
|
||||
|
||||
//public float PreCutDwell { get; set; } // seconds
|
||||
|
||||
public float KerfWidth { get; set; } // inches
|
||||
|
||||
//public float PowerBurstTime { get; set; } // seconds
|
||||
|
||||
public bool DynamicPowerControl { get; set; }
|
||||
|
||||
public bool DynamicAssistGas { get; set; }
|
||||
|
||||
public bool UsePartCoolantOnCut { get; set; }
|
||||
|
||||
public float NozzleStandoff1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional standoff (M45)
|
||||
/// </summary>
|
||||
public float NozzleStandoff2 { get; set; }
|
||||
|
||||
public AssistGasType AssistGas { get; set; }
|
||||
|
||||
public int AssistGasPressure1 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional assist gas pressure (M67)
|
||||
/// </summary>
|
||||
public int AssistGasPressure2 { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Dynamic power control feedrate.
|
||||
/// </summary>
|
||||
public int DPCFeedrate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dynamic power control minimum power.
|
||||
/// </summary>
|
||||
public int DPCMinPower { get; set; }
|
||||
|
||||
//public FocusingLensType FocusingLens { get; set; }
|
||||
|
||||
//public NozzleTipType NozzleTip { get; set; }
|
||||
|
||||
public string Notes { get; set; }
|
||||
|
||||
public static MaterialLib Load(string libfile)
|
||||
{
|
||||
var reader = new MaterialLibReader();
|
||||
return reader.Read(libfile) ? reader.MaterialLib : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
149
CincyLib/Laser/MaterialLibReader.cs
Normal file
149
CincyLib/Laser/MaterialLibReader.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
internal sealed class MaterialLibReader
|
||||
{
|
||||
public readonly MaterialLib MaterialLib;
|
||||
|
||||
public MaterialLibReader()
|
||||
{
|
||||
MaterialLib = new MaterialLib();
|
||||
}
|
||||
|
||||
public MaterialLibReader(MaterialLib materiallib)
|
||||
{
|
||||
MaterialLib = materiallib;
|
||||
}
|
||||
|
||||
public bool Read(string file)
|
||||
{
|
||||
Stream stream = null;
|
||||
MaterialLib.Name = Path.GetFileNameWithoutExtension(file);
|
||||
|
||||
var success = false;
|
||||
|
||||
try
|
||||
{
|
||||
stream = File.OpenRead(file);
|
||||
success = Read(stream);
|
||||
}
|
||||
catch (SystemException ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (stream != null)
|
||||
stream.Close();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
public bool Read(Stream stream)
|
||||
{
|
||||
var success = false;
|
||||
|
||||
try
|
||||
{
|
||||
var reader = new BinaryReader(stream);
|
||||
|
||||
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)
|
||||
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[20];
|
||||
|
||||
for (int i = 0; i < steps; ++i)
|
||||
{
|
||||
MaterialLib.RampedPierceSteps[i] = new RampedPierceStep();
|
||||
MaterialLib.RampedPierceSteps[i].Time = reader.ReadSingle();
|
||||
MaterialLib.RampedPierceSteps[i].Power = reader.ReadInt16();
|
||||
}
|
||||
|
||||
var remaining = MaterialLib.RampedPierceSteps.Length - 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;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
}
|
||||
}
|
||||
12
CincyLib/Laser/PierceType.cs
Normal file
12
CincyLib/Laser/PierceType.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public enum PierceType
|
||||
{
|
||||
NoPierce = 0,
|
||||
FixedDwellTime = 1,
|
||||
RampedPower = 2,
|
||||
Adaptive = 3,
|
||||
MicroWeld = 4
|
||||
}
|
||||
}
|
||||
118
CincyLib/Laser/ProductLog.cs
Normal file
118
CincyLib/Laser/ProductLog.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public class ProductLog
|
||||
{
|
||||
private ProductLog()
|
||||
{
|
||||
Records = new List<Record>();
|
||||
}
|
||||
|
||||
public List<Record> Records { get; set; }
|
||||
|
||||
public static ProductLog Load(string file)
|
||||
{
|
||||
var log = new ProductLog();
|
||||
var reader = new StreamReader(file);
|
||||
|
||||
Record curRecord = null;
|
||||
string line = null;
|
||||
|
||||
while ((line = reader.ReadLine()) != null)
|
||||
{
|
||||
int splitIndex = line.IndexOf("Program");
|
||||
|
||||
if (splitIndex == -1)
|
||||
continue;
|
||||
|
||||
curRecord = new Record();
|
||||
log.Records.Add(curRecord);
|
||||
|
||||
var dateString = line.Remove(splitIndex - 1);
|
||||
curRecord.Date = DateTime.Parse(dateString);
|
||||
|
||||
var programString = line.Substring(splitIndex + 8);
|
||||
curRecord.ProgramFile = ReadBetweenQuotes(programString);
|
||||
|
||||
while (!string.IsNullOrEmpty(line = reader.ReadLine()))
|
||||
{
|
||||
var ws = LeadingWhitespaceCount(line);
|
||||
|
||||
if (ws != 4)
|
||||
break;
|
||||
|
||||
if (line[4] == '\'')
|
||||
{
|
||||
var libFile = ReadBetweenQuotes(line);
|
||||
|
||||
if (libFile != null)
|
||||
curRecord.LibraryFiles.Add(libFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
var cutRecord = new CutRecord();
|
||||
|
||||
var cycleString = line.Substring(15, 13);
|
||||
cutRecord.CycleTime = TimeSpan.Parse(cycleString);
|
||||
|
||||
var totalString = line.Substring(34);
|
||||
cutRecord.TotalTime = TimeSpan.Parse(totalString);
|
||||
|
||||
curRecord.CutRecords.Add(cutRecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return log;
|
||||
}
|
||||
|
||||
private static int LeadingWhitespaceCount(string text)
|
||||
{
|
||||
for (int i = 0; i < text.Length; i++)
|
||||
{
|
||||
if (text[i] != ' ')
|
||||
return i;
|
||||
}
|
||||
|
||||
return text.Length;
|
||||
}
|
||||
|
||||
private static string ReadBetweenQuotes(string text)
|
||||
{
|
||||
var startIndex = text.IndexOf('\'');
|
||||
|
||||
if (startIndex == -1)
|
||||
return null;
|
||||
|
||||
var endIndex = text.IndexOf('\'', startIndex + 1);
|
||||
|
||||
if (endIndex == -1)
|
||||
return null;
|
||||
|
||||
return text.Substring(startIndex + 1, endIndex - startIndex - 1);
|
||||
}
|
||||
}
|
||||
|
||||
public class Record
|
||||
{
|
||||
public Record()
|
||||
{
|
||||
CutRecords = new List<CutRecord>();
|
||||
LibraryFiles = new List<string>();
|
||||
}
|
||||
|
||||
public DateTime Date { get; set; }
|
||||
public string ProgramFile { get; set; }
|
||||
public List<string> LibraryFiles { get; set; }
|
||||
public List<CutRecord> CutRecords { get; set; }
|
||||
}
|
||||
|
||||
public class CutRecord
|
||||
{
|
||||
public TimeSpan CycleTime { get; set; }
|
||||
public TimeSpan TotalTime { get; set; }
|
||||
}
|
||||
}
|
||||
15
CincyLib/Laser/RampedPierceStep.cs
Normal file
15
CincyLib/Laser/RampedPierceStep.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
namespace CincyLib.Laser
|
||||
{
|
||||
public struct RampedPierceStep
|
||||
{
|
||||
public float Time;
|
||||
|
||||
public int Power;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[RampedPierceStep: Time:{0}, Power:{1}", Time, Power);
|
||||
}
|
||||
}
|
||||
}
|
||||
118
CincyLib/PressBrake/LowerTool.cs
Normal file
118
CincyLib/PressBrake/LowerTool.cs
Normal file
@@ -0,0 +1,118 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
namespace CincyLib.PressBrake
|
||||
{
|
||||
public class LowerTool
|
||||
{
|
||||
/// <summary>
|
||||
/// The name of the file
|
||||
/// </summary>
|
||||
public string Name;
|
||||
|
||||
public string ToolName;
|
||||
public int Type;
|
||||
public double Length;
|
||||
public double Height;
|
||||
public double Clearance;
|
||||
public double MaxLoad;
|
||||
public double Angle;
|
||||
public double Radius;
|
||||
public double VOpening;
|
||||
public double Offset;
|
||||
|
||||
public double BendRadius()
|
||||
{
|
||||
return VOpening * 0.15625;
|
||||
}
|
||||
|
||||
public static LowerTool Load(string xmlpath)
|
||||
{
|
||||
var lowerTool = new LowerTool();
|
||||
var reader = XmlReader.Create(xmlpath);
|
||||
|
||||
try
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.IsStartElement())
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "LowerTool":
|
||||
lowerTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
|
||||
lowerTool.ToolName = reader.GetAttribute("ToolName");
|
||||
|
||||
int type;
|
||||
int.TryParse(reader.GetAttribute("Type"), out type);
|
||||
lowerTool.Type = type;
|
||||
|
||||
double length;
|
||||
double.TryParse(reader.GetAttribute("Length"), out length);
|
||||
lowerTool.Length = length;
|
||||
|
||||
double height;
|
||||
double.TryParse(reader.GetAttribute("Height"), out height);
|
||||
lowerTool.Height = height;
|
||||
|
||||
double clearance;
|
||||
double.TryParse(reader.GetAttribute("Clearance"), out clearance);
|
||||
lowerTool.Clearance = clearance;
|
||||
|
||||
double maxload;
|
||||
double.TryParse(reader.GetAttribute("MaxLoad"), out maxload);
|
||||
lowerTool.MaxLoad = maxload;
|
||||
|
||||
double angle;
|
||||
double.TryParse(reader.GetAttribute("Angle"), out angle);
|
||||
lowerTool.Angle = angle;
|
||||
|
||||
double radius;
|
||||
double.TryParse(reader.GetAttribute("Radius"), out radius);
|
||||
lowerTool.Radius = radius;
|
||||
|
||||
double vopening;
|
||||
double.TryParse(reader.GetAttribute("VeeOpening"), out vopening);
|
||||
lowerTool.VOpening = vopening;
|
||||
|
||||
double offset;
|
||||
double.TryParse(reader.GetAttribute("Offset"), out offset);
|
||||
lowerTool.Offset = offset;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (SystemException ex)
|
||||
{
|
||||
Debug.WriteLine("Error loading: " + xmlpath);
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (reader != null)
|
||||
reader.Close();
|
||||
}
|
||||
|
||||
return lowerTool;
|
||||
}
|
||||
|
||||
public void Print()
|
||||
{
|
||||
Console.WriteLine(Name);
|
||||
Console.WriteLine(" Length: {0}", Length);
|
||||
Console.WriteLine(" Angle: {0}", Angle);
|
||||
Console.WriteLine(" Radius: {0}", Radius);
|
||||
Console.WriteLine(" V-Opening: {0}", VOpening);
|
||||
Console.WriteLine(" Height: {0}", Height);
|
||||
Console.WriteLine(" Clearance: {0}", Clearance);
|
||||
Console.WriteLine(" MaxLoad: {0}", MaxLoad);
|
||||
Console.WriteLine(" Offset: {0}", Offset);
|
||||
Console.WriteLine(" Type: {0}", Type);
|
||||
Console.WriteLine(" Bend Radius: {0}", BendRadius());
|
||||
}
|
||||
}
|
||||
}
|
||||
59
CincyLib/PressBrake/ToolSet.cs
Normal file
59
CincyLib/PressBrake/ToolSet.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
|
||||
namespace CincyLib.PressBrake
|
||||
{
|
||||
public class ToolSet
|
||||
{
|
||||
private LowerTool lowerTool;
|
||||
private UpperTool upperTool;
|
||||
|
||||
public ToolSet(LowerTool lt, UpperTool ut)
|
||||
{
|
||||
lowerTool = lt;
|
||||
upperTool = ut;
|
||||
}
|
||||
|
||||
public bool IsValid()
|
||||
{
|
||||
if (upperTool.Angle > lowerTool.Angle)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public double BendRadius()
|
||||
{
|
||||
double r1 = lowerTool.BendRadius();
|
||||
double r2 = upperTool.Radius;
|
||||
return r1 > r2 ? r1 : r2;
|
||||
}
|
||||
|
||||
public double BendLength()
|
||||
{
|
||||
double r1 = lowerTool.Length;
|
||||
double r2 = upperTool.Length;
|
||||
return r1 > r2 ? r1 : r2;
|
||||
}
|
||||
|
||||
public double MinFlangeLength()
|
||||
{
|
||||
var thickness = BendRadius();
|
||||
var radius = thickness;
|
||||
var outsideRadius = radius + thickness;
|
||||
var length2bend = lowerTool.VOpening * 0.5 + 0.0625;
|
||||
var bendlength = SheetMetal.BendLength(thickness, radius, 90.0, 0.42);
|
||||
|
||||
return length2bend - (bendlength * 0.5) + outsideRadius;
|
||||
}
|
||||
|
||||
public void Print()
|
||||
{
|
||||
Console.WriteLine("{0} / {1}", lowerTool.Name, upperTool.Name);
|
||||
Console.WriteLine(" Generates an inside radius of: {0}", BendRadius().ToString("n3") + "\"");
|
||||
Console.WriteLine(" Usable on materials less than or equal to: {0}", BendRadius().ToString("n3") + "\"");
|
||||
Console.WriteLine(" Capable of bends greater than or equal to: {0}", lowerTool.Angle.ToString("n0") + " degrees");
|
||||
Console.WriteLine(" Capable of bends up to: {0} long", BendLength().ToString("n3") + "\"");
|
||||
Console.WriteLine(" Minimum 90 degree flange length: {0}", MinFlangeLength().ToString("n3") + "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
106
CincyLib/PressBrake/UpperTool.cs
Normal file
106
CincyLib/PressBrake/UpperTool.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
|
||||
namespace CincyLib.PressBrake
|
||||
{
|
||||
public class UpperTool
|
||||
{
|
||||
/// <summary>
|
||||
/// The name of the file
|
||||
/// </summary>
|
||||
public string Name;
|
||||
|
||||
public string ToolName;
|
||||
public double Length;
|
||||
public double Angle;
|
||||
public double Radius;
|
||||
public double Height;
|
||||
public double Clearance;
|
||||
public double MaxLoad;
|
||||
public double Offset;
|
||||
public int Type;
|
||||
|
||||
public static UpperTool Load(string xmlpath)
|
||||
{
|
||||
var upperTool = new UpperTool();
|
||||
var reader = XmlReader.Create(xmlpath);
|
||||
|
||||
try
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.IsStartElement())
|
||||
{
|
||||
switch (reader.Name)
|
||||
{
|
||||
case "UpperTool":
|
||||
upperTool.Name = Path.GetFileNameWithoutExtension(xmlpath);
|
||||
upperTool.ToolName = reader.GetAttribute("ToolName");
|
||||
|
||||
int type;
|
||||
int.TryParse(reader.GetAttribute("Type"), out type);
|
||||
upperTool.Type = type;
|
||||
|
||||
double length;
|
||||
double.TryParse(reader.GetAttribute("Length"), out length);
|
||||
upperTool.Length = length;
|
||||
|
||||
double height;
|
||||
double.TryParse(reader.GetAttribute("Height"), out height);
|
||||
upperTool.Height = height;
|
||||
|
||||
double clearance;
|
||||
double.TryParse(reader.GetAttribute("Clearance"), out clearance);
|
||||
upperTool.Clearance = clearance;
|
||||
|
||||
double maxload;
|
||||
double.TryParse(reader.GetAttribute("MaxLoad"), out maxload);
|
||||
upperTool.MaxLoad = maxload;
|
||||
|
||||
double angle;
|
||||
double.TryParse(reader.GetAttribute("Angle"), out angle);
|
||||
upperTool.Angle = angle;
|
||||
|
||||
double radius;
|
||||
double.TryParse(reader.GetAttribute("Radius"), out radius);
|
||||
upperTool.Radius = radius;
|
||||
|
||||
double offset;
|
||||
double.TryParse(reader.GetAttribute("Offset"), out offset);
|
||||
upperTool.Offset = offset;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (SystemException ex)
|
||||
{
|
||||
Debug.WriteLine("Error loading: " + xmlpath);
|
||||
Debug.WriteLine(ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (reader != null)
|
||||
reader.Close();
|
||||
}
|
||||
|
||||
return upperTool;
|
||||
}
|
||||
|
||||
public void Print()
|
||||
{
|
||||
Console.WriteLine(Name);
|
||||
Console.WriteLine(" Length: {0}", Length);
|
||||
Console.WriteLine(" Angle: {0}", Angle);
|
||||
Console.WriteLine(" Radius: {0}", Radius);
|
||||
Console.WriteLine(" Height: {0}", Height);
|
||||
Console.WriteLine(" Clearance: {0}", Clearance);
|
||||
Console.WriteLine(" MaxLoad: {0}", MaxLoad);
|
||||
Console.WriteLine(" Offset: {0}", Offset);
|
||||
Console.WriteLine(" Type: {0}", Type);
|
||||
}
|
||||
}
|
||||
}
|
||||
35
CincyLib/Properties/AssemblyInfo.cs
Normal file
35
CincyLib/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("CincyLib")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("CincyLib")]
|
||||
[assembly: AssemblyCopyright("Copyright © AJ Isaacs 2014")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("70319b57-7057-4aff-aaaa-c2c52dee7689")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
12
CincyLib/SheetMetal.cs
Normal file
12
CincyLib/SheetMetal.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System;
|
||||
|
||||
namespace CincyLib
|
||||
{
|
||||
public static class SheetMetal
|
||||
{
|
||||
public static double BendLength(double thickness, double radius, double angle, double kfactor)
|
||||
{
|
||||
return (radius + thickness * kfactor) * 2.0 * Math.PI * angle / 360.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user