From a20800440bfaea1e6f647430e17fd636c878b041 Mon Sep 17 00:00:00 2001 From: villamany Date: Tue, 6 Mar 2018 14:08:08 +0100 Subject: [PATCH] 3dpBurner Sender v1.2. Maintenance revision Changelog from v1.1 to v1.2: -Added "Send configuration file to 3dpBurner" option. Check "Settings" menu. No more manual line by line GRBL configuration. -Added "View 3dpBurner configuration" option for retrieving the actual 3dpBurner parameters. Check "Settings" menu. -Added button for direct moving the carriage to X0,Y0 coordinate. -Moved the "Unlock Alarm" button next to the "Reset" one and added blinking button warning when locked. --- Form1.Designer.cs | 110 +++++++++++++++++++++++--------- Form1.cs | 105 ++++++++++++++++++++++++++++-- Form2.resx | 2 +- bin/Release/3dpBurnerSender.exe | Bin 783872 -> 786432 bytes 4 files changed, 180 insertions(+), 37 deletions(-) diff --git a/Form1.Designer.cs b/Form1.Designer.cs index 8e7486b..1dce318 100644 --- a/Form1.Designer.cs +++ b/Form1.Designer.cs @@ -56,7 +56,6 @@ private void InitializeComponent() this.btnLaserOn = new System.Windows.Forms.Button(); this.btsLaserOff = new System.Windows.Forms.Button(); this.btnCustom1 = new System.Windows.Forms.Button(); - this.btnUnlock = new System.Windows.Forms.Button(); this.tbFile = new System.Windows.Forms.TextBox(); this.bOpenfile = new System.Windows.Forms.Button(); this.bSendCmd = new System.Windows.Forms.Button(); @@ -97,11 +96,15 @@ private void InitializeComponent() this.rtbLog = new System.Windows.Forms.RichTextBox(); this.btlClearLog = new System.Windows.Forms.Button(); this.gbReference = new System.Windows.Forms.GroupBox(); + this.btnGotoXoYo = new System.Windows.Forms.Button(); this.btnZero = new System.Windows.Forms.Button(); this.gbCustom = new System.Windows.Forms.GroupBox(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.view3dpBurnerSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator(); this.restoreSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -114,6 +117,7 @@ private void InitializeComponent() this.panel5 = new System.Windows.Forms.Panel(); this.btnReset = new System.Windows.Forms.Button(); this.panel19 = new System.Windows.Forms.Panel(); + this.btnUnlock = new System.Windows.Forms.Button(); this.gbJog.SuspendLayout(); this.groupBox2.SuspendLayout(); this.gbConecction.SuspendLayout(); @@ -213,21 +217,6 @@ private void InitializeComponent() this.btnCustom1.UseVisualStyleBackColor = false; this.btnCustom1.Click += new System.EventHandler(this.btnCustom1_Click); // - // btnUnlock - // - this.btnUnlock.BackColor = System.Drawing.Color.DarkOrange; - this.btnUnlock.FlatAppearance.BorderColor = System.Drawing.Color.Black; - this.btnUnlock.FlatAppearance.BorderSize = 3; - this.btnUnlock.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnUnlock.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnUnlock.Location = new System.Drawing.Point(131, 17); - this.btnUnlock.Name = "btnUnlock"; - this.btnUnlock.Size = new System.Drawing.Size(57, 51); - this.btnUnlock.TabIndex = 3; - this.btnUnlock.Text = "Unlock"; - this.btnUnlock.UseVisualStyleBackColor = false; - this.btnUnlock.Click += new System.EventHandler(this.button11_Click); - // // tbFile // this.tbFile.BackColor = System.Drawing.Color.Snow; @@ -275,11 +264,11 @@ private void InitializeComponent() this.bHome.FlatAppearance.BorderSize = 3; this.bHome.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.bHome.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.bHome.Location = new System.Drawing.Point(5, 17); + this.bHome.Location = new System.Drawing.Point(130, 20); this.bHome.Name = "bHome"; - this.bHome.Size = new System.Drawing.Size(57, 51); - this.bHome.TabIndex = 1; - this.bHome.Text = "GoHome"; + this.bHome.Size = new System.Drawing.Size(58, 47); + this.bHome.TabIndex = 3; + this.bHome.Text = "Homing"; this.bHome.UseVisualStyleBackColor = false; this.bHome.Click += new System.EventHandler(this.bHome_Click); // @@ -755,9 +744,9 @@ private void InitializeComponent() // // gbReference // + this.gbReference.Controls.Add(this.btnGotoXoYo); this.gbReference.Controls.Add(this.btnZero); this.gbReference.Controls.Add(this.bHome); - this.gbReference.Controls.Add(this.btnUnlock); this.gbReference.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.gbReference.Location = new System.Drawing.Point(485, 145); this.gbReference.Name = "gbReference"; @@ -766,6 +755,22 @@ private void InitializeComponent() this.gbReference.TabStop = false; this.gbReference.Text = "Reference"; // + // btnGotoXoYo + // + this.btnGotoXoYo.BackColor = System.Drawing.Color.DarkOrange; + this.btnGotoXoYo.FlatAppearance.BorderColor = System.Drawing.Color.Black; + this.btnGotoXoYo.FlatAppearance.BorderSize = 3; + this.btnGotoXoYo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnGotoXoYo.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnGotoXoYo.ForeColor = System.Drawing.SystemColors.ControlText; + this.btnGotoXoYo.Location = new System.Drawing.Point(6, 17); + this.btnGotoXoYo.Name = "btnGotoXoYo"; + this.btnGotoXoYo.Size = new System.Drawing.Size(59, 52); + this.btnGotoXoYo.TabIndex = 1; + this.btnGotoXoYo.Text = "GoTo 0,0"; + this.btnGotoXoYo.UseVisualStyleBackColor = false; + this.btnGotoXoYo.Click += new System.EventHandler(this.btnGotoXoYo_Click); + // // btnZero // this.btnZero.BackColor = System.Drawing.Color.DarkOrange; @@ -773,9 +778,9 @@ private void InitializeComponent() this.btnZero.FlatAppearance.BorderSize = 3; this.btnZero.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnZero.Font = new System.Drawing.Font("Microsoft Sans Serif", 6.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.btnZero.Location = new System.Drawing.Point(68, 17); + this.btnZero.Location = new System.Drawing.Point(69, 20); this.btnZero.Name = "btnZero"; - this.btnZero.Size = new System.Drawing.Size(57, 51); + this.btnZero.Size = new System.Drawing.Size(58, 47); this.btnZero.TabIndex = 2; this.btnZero.Text = "Zero"; this.btnZero.UseVisualStyleBackColor = false; @@ -812,6 +817,9 @@ private void InitializeComponent() // this.settingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripMenuItem1, + this.view3dpBurnerSettingsToolStripMenuItem, + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem, + this.toolStripMenuItem2, this.restoreSettingsToolStripMenuItem}); this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; this.settingsToolStripMenuItem.Size = new System.Drawing.Size(65, 20); @@ -820,13 +828,32 @@ private void InitializeComponent() // toolStripMenuItem1 // this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(164, 6); + this.toolStripMenuItem1.Size = new System.Drawing.Size(284, 6); + // + // view3dpBurnerSettingsToolStripMenuItem + // + this.view3dpBurnerSettingsToolStripMenuItem.Name = "view3dpBurnerSettingsToolStripMenuItem"; + this.view3dpBurnerSettingsToolStripMenuItem.Size = new System.Drawing.Size(287, 22); + this.view3dpBurnerSettingsToolStripMenuItem.Text = "View 3dpBurner configuration"; + this.view3dpBurnerSettingsToolStripMenuItem.Click += new System.EventHandler(this.view3dpBurnerSettingsToolStripMenuItem_Click); + // + // sendConfigurationFileTo3dpBurnerToolStripMenuItem + // + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem.Name = "sendConfigurationFileTo3dpBurnerToolStripMenuItem"; + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem.Size = new System.Drawing.Size(287, 22); + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem.Text = "Send configuration file to 3dpBurner..."; + this.sendConfigurationFileTo3dpBurnerToolStripMenuItem.Click += new System.EventHandler(this.sendConfigurationFileTo3dpBurnerToolStripMenuItem_Click); + // + // toolStripMenuItem2 + // + this.toolStripMenuItem2.Name = "toolStripMenuItem2"; + this.toolStripMenuItem2.Size = new System.Drawing.Size(284, 6); // // restoreSettingsToolStripMenuItem // this.restoreSettingsToolStripMenuItem.Name = "restoreSettingsToolStripMenuItem"; - this.restoreSettingsToolStripMenuItem.Size = new System.Drawing.Size(167, 22); - this.restoreSettingsToolStripMenuItem.Text = "Restore Settings"; + this.restoreSettingsToolStripMenuItem.Size = new System.Drawing.Size(287, 22); + this.restoreSettingsToolStripMenuItem.Text = "Restore application settings"; this.restoreSettingsToolStripMenuItem.Click += new System.EventHandler(this.restoreSettingsToolStripMenuItem_Click); // // helpToolStripMenuItem @@ -885,7 +912,7 @@ private void InitializeComponent() this.bStart.Location = new System.Drawing.Point(574, 7); this.bStart.Name = "bStart"; this.bStart.Size = new System.Drawing.Size(83, 76); - this.bStart.TabIndex = 3; + this.bStart.TabIndex = 4; this.bStart.Text = "Resume"; this.bStart.UseVisualStyleBackColor = false; this.bStart.Click += new System.EventHandler(this.bStart_Click); @@ -900,7 +927,7 @@ private void InitializeComponent() this.bPause.Location = new System.Drawing.Point(483, 7); this.bPause.Name = "bPause"; this.bPause.Size = new System.Drawing.Size(83, 76); - this.bPause.TabIndex = 2; + this.bPause.TabIndex = 3; this.bPause.Text = "Hold"; this.bPause.UseVisualStyleBackColor = false; this.bPause.Click += new System.EventHandler(this.bPause_Click); @@ -911,7 +938,7 @@ private void InitializeComponent() this.panel5.Controls.Add(this.btnReset); this.panel5.Location = new System.Drawing.Point(10, 6); this.panel5.Name = "panel5"; - this.panel5.Size = new System.Drawing.Size(441, 81); + this.panel5.Size = new System.Drawing.Size(376, 81); this.panel5.TabIndex = 1; // // btnReset @@ -924,7 +951,7 @@ private void InitializeComponent() this.btnReset.ForeColor = System.Drawing.Color.Black; this.btnReset.Location = new System.Drawing.Point(5, 5); this.btnReset.Name = "btnReset"; - this.btnReset.Size = new System.Drawing.Size(430, 71); + this.btnReset.Size = new System.Drawing.Size(365, 71); this.btnReset.TabIndex = 1; this.btnReset.Text = "Reset"; this.btnReset.UseVisualStyleBackColor = false; @@ -934,6 +961,7 @@ private void InitializeComponent() // this.panel19.BackColor = System.Drawing.Color.White; this.panel19.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.panel19.Controls.Add(this.btnUnlock); this.panel19.Controls.Add(this.panel5); this.panel19.Controls.Add(this.bPause); this.panel19.Controls.Add(this.bStart); @@ -942,6 +970,22 @@ private void InitializeComponent() this.panel19.Size = new System.Drawing.Size(671, 93); this.panel19.TabIndex = 8; // + // btnUnlock + // + this.btnUnlock.BackColor = System.Drawing.Color.Silver; + this.btnUnlock.FlatAppearance.BorderColor = System.Drawing.Color.Black; + this.btnUnlock.FlatAppearance.BorderSize = 5; + this.btnUnlock.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btnUnlock.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.btnUnlock.ForeColor = System.Drawing.SystemColors.ControlLightLight; + this.btnUnlock.Location = new System.Drawing.Point(391, 17); + this.btnUnlock.Name = "btnUnlock"; + this.btnUnlock.Size = new System.Drawing.Size(72, 59); + this.btnUnlock.TabIndex = 2; + this.btnUnlock.Text = "Unlock"; + this.btnUnlock.UseVisualStyleBackColor = false; + this.btnUnlock.Click += new System.EventHandler(this.button11_Click); + // // frm3dpBurner // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -999,7 +1043,6 @@ private void InitializeComponent() private System.Windows.Forms.Button btnLaserOn; private System.Windows.Forms.Button btsLaserOff; private System.Windows.Forms.Button btnCustom1; - private System.Windows.Forms.Button btnUnlock; private System.Windows.Forms.TextBox tbFile; private System.Windows.Forms.Button bOpenfile; private System.Windows.Forms.Button bSendCmd; @@ -1057,6 +1100,11 @@ private void InitializeComponent() private System.Windows.Forms.Panel panel5; private System.Windows.Forms.Button btnReset; private System.Windows.Forms.Panel panel19; + private System.Windows.Forms.Button btnUnlock; + private System.Windows.Forms.Button btnGotoXoYo; + private System.Windows.Forms.ToolStripMenuItem sendConfigurationFileTo3dpBurnerToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem2; + private System.Windows.Forms.ToolStripMenuItem view3dpBurnerSettingsToolStripMenuItem; } } diff --git a/Form1.cs b/Form1.cs index ee828b3..f9cb8c3 100644 --- a/Form1.cs +++ b/Form1.cs @@ -46,7 +46,7 @@ namespace _3dpBurner public partial class frm3dpBurner : Form { - const string ver = "1.1";//app version + const string ver = "1.2";//app version string rxString; List fileLines; Int32 fileLinesCount;//for file streaming control @@ -364,9 +364,10 @@ private void refreshPorts() private void Form1_Load(object sender, EventArgs e) { Text = "3dpBurner Sender v" + ver; - bHome.Text = "Go\r\nHome"; + btnGotoXoYo.Text = "GoTo\r\nX0,Y0"; + bHome.Text = "Homing\r\nXY"; btnZero.Text = "Zero\r\nXY"; - btnUnlock.Text = "Unlock\r\nAlarm"; + btnUnlock.Text = "Alarm\r\nUnlock"; loadSettings(); } //Load settings @@ -442,6 +443,11 @@ private void bYdown_Click(object sender, EventArgs e) jogging = true; sendLine("G91G0Y-" + tbStepSize.Text); } + //GoTo X0, Y0 button + private void btnGotoXoYo_Click(object sender, EventArgs e) + { + sendLine("G0 X0 Y0"); + } //Homming button private void bHome_Click(object sender, EventArgs e) { @@ -535,10 +541,9 @@ private void prepareFile() lblElapsed.Text = elapsed.ToString(@"hh\:mm\:ss"); } } - //Send file button + //Resume button private void bStart_Click(object sender, EventArgs e) { - { rtbLog.AppendText("[RESUME]\r\n"); rtbLog.ScrollToCaret(); @@ -567,6 +572,13 @@ private void button11_Click(object sender, EventArgs e) //Update time elapsed private void tmrUpdates_Tick(object sender, EventArgs e) { + //Unlockl button flashing + if (statusStrip1.BackColor == Color.DarkOrange)//is in alarm mode? + { + if (btnUnlock.BackColor == Color.Silver) btnUnlock.BackColor = Color.DarkOrange; else btnUnlock.BackColor = Color.Silver; + } + else btnUnlock.BackColor = Color.Silver; + if (transfer)//if active transfer update elapsed/remaining time time { float progressPorc; @@ -806,6 +818,89 @@ private void btnPortsInfo_Click(object sender, EventArgs e) logError("Geting available ports info", er); } } + //Send configuration file to machine + private void sendConfigurationFileTo3dpBurnerToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (!connected)//if no connectio + { + logError("Connect first!" + "\r\n", null); + rtbLog.ScrollToCaret(); + return; + } + if (transfer)//if transfering file the exit + { + logError("Stop the file transfer first!" + "\r\n",null); + rtbLog.ScrollToCaret(); + return; + } + + openFileDialog1.FileName = ""; + if (openFileDialog1.ShowDialog() != DialogResult.OK) return; + if (!File.Exists(openFileDialog1.FileName)) + { + logError("Error opening file", null); + return; + } + rtbLog.AppendText("[Sending configuration file...]\r\n"); + rtbLog.ScrollToCaret(); + rtbLog.Refresh(); + + StreamReader file = new StreamReader(openFileDialog1.FileName); + try + { + string line = file.ReadLine(); + while (line!=null )//line=null mean end of file + { + rtbLog.AppendText(line + " >>> "); + dataProcessing = true; + serialPort1.Write(line + "\r"); + + while (dataProcessing) Application.DoEvents() ;//wait response processed + line = file.ReadLine(); + } + } + catch (Exception er) + { + logError("Error sending file", er); + } + file.Close(); + } + catch (Exception err) + { + logError("Sending configuration file", err); + } + } + //View 3dpBurner configuration + private void view3dpBurnerSettingsToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (!connected)//if no connectio + { + logError("Connect first!" + "\r\n", null); + rtbLog.ScrollToCaret(); + return; + } + if (transfer)//if transfering file the exit + { + logError("Stop the file transfer first!" + "\r\n", null); + rtbLog.ScrollToCaret(); + return; + } + + rtbLog.AppendText("[Getting configuration...]\r\n"); + serialPort1.Write("$$\r$N\r"); + } + catch(Exception err) + { + logError("Retrieving configuration", err); + } + + } + + } } diff --git a/Form2.resx b/Form2.resx index 2cfa32d..75c8d17 100644 --- a/Form2.resx +++ b/Form2.resx @@ -126,6 +126,6 @@ You should have received a copy of the GNU General Public License along with 3dp Check for lastest release and source code: https://github.com/villamany/3dpBurner-sender -Copyright (C) 2014-2016 Adrian V. J. (villamany) contact: villamany@gmail.com +Copyright (C) 2014-2018 Adrian V. J. (villamany) contact: villamany@gmail.com \ No newline at end of file diff --git a/bin/Release/3dpBurnerSender.exe b/bin/Release/3dpBurnerSender.exe index 9a96683115b017bbd6de9457f7db735edb1b893d..41e8f13d51b5d90ea48048ad44c2922f2bb9c748 100644 GIT binary patch delta 23964 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