add support for dwell time before each path
Stefan Schuermans

Stefan Schuermans commited on 2013-04-22 19:59:17
Showing 11 changed files, with 116 additions and 0 deletions.

... ...
@@ -33,8 +33,10 @@ cut_inside inner_test
33 33
 set_cut_z -2
34 34
 cut_outside outer_test
35 35
 
36
+set_dwell_time 0.5
36 37
 set_cut_z -3
37 38
 cut_inside inner
39
+set_dwell_time 0
38 40
 
39 41
 set_cut_z -3
40 42
 cut_outside 0
... ...
@@ -0,0 +1 @@
1
+.*.swp
... ...
@@ -297,6 +297,30 @@ bool CmdParser::procCmd_set_cut_z_step(std::istream &strm)
297 297
   return true;
298 298
 }
299 299
 
300
+/**
301
+ * @brief process set_dwell_time command
302
+ * @param[in] strm stream to read command arguments from
303
+ * @return if processing command was successful
304
+ */
305
+bool CmdParser::procCmd_set_dwell_time(std::istream &strm)
306
+{
307
+  // get arguments and check them
308
+  double dwell_time;
309
+  strm >> dwell_time;
310
+  if (strm.fail()) {
311
+    std::cerr << "missing dwell time" << std::endl;
312
+    return false;
313
+  }
314
+  if (dwell_time < 0.0) {
315
+    std::cerr << "invalid dwell time (" << dwell_time << ")" << std::endl;
316
+    return false;
317
+  }
318
+
319
+  // update settings
320
+  mSettings.dwell_time = dwell_time;
321
+  return true;
322
+}
323
+
300 324
 /**
301 325
  * @brief process set_feed_drill command
302 326
  * @param[in] strm stream to read command arguments from
... ...
@@ -518,6 +542,8 @@ bool CmdParser::procLine(const std::string &strLine)
518 542
     return procCmd_set_cut_z(strm);
519 543
   else if (cmd == "set_cut_z_step")
520 544
     return procCmd_set_cut_z_step(strm);
545
+  else if (cmd == "set_dwell_time")
546
+    return procCmd_set_dwell_time(strm);
521 547
   else if (cmd == "set_feed_drill")
522 548
     return procCmd_set_feed_drill(strm);
523 549
   else if (cmd == "set_feed_mill")
... ...
@@ -102,6 +102,13 @@ public:
102 102
    */
103 103
   bool procCmd_set_cut_z_step(std::istream &strm);
104 104
 
105
+  /**
106
+   * @brief process set_dwell_time command
107
+   * @param[in] strm stream to read command arguments from
108
+   * @return if processing command was successful
109
+   */
110
+  bool procCmd_set_dwell_time(std::istream &strm);
111
+
105 112
   /**
106 113
    * @brief process set_feed_drill command
107 114
    * @param[in] strm stream to read command arguments from
... ...
@@ -11,6 +11,7 @@
11 11
 #include "gcmd.h"
12 12
 #include "gcode.h"
13 13
 #include "gcustom.h"
14
+#include "gdwell.h"
14 15
 #include "gfast.h"
15 16
 #include "gfeed.h"
16 17
 #include "glinear.h"
... ...
@@ -86,6 +87,17 @@ void GCode::appendLinear(const Point &pt)
86 87
   mGCmds.push_back(linear);
87 88
 }
88 89
 
90
+/**
91
+ * @brief append dwell command
92
+ * @param[in] sec number of seconds to dwell (must be positive)
93
+ */
94
+void GCode::appendDwell(double sec)
95
+{
96
+  GDwell *dwell = new GDwell;
97
+  dwell->mSec = sec;
98
+  mGCmds.push_back(dwell);
99
+}
100
+
89 101
 /**
90 102
  * @brief append custom command
91 103
  * @param[in] cmd custom command to append
... ...
@@ -63,6 +63,12 @@ public:
63 63
    */
64 64
   void appendLinear(const Point &pt);
65 65
 
66
+  /**
67
+   * @brief append dwell command
68
+   * @param[in] sec number of seconds to dwell (must be positive)
69
+   */
70
+  void appendDwell(double sec);
71
+
66 72
   /**
67 73
    * @brief append custom command
68 74
    * @param[in] cmd custom command to append
... ...
@@ -0,0 +1,27 @@
1
+/* drawing (DXF) to G-code (NGC) converter
2
+ * Copyright 2013 Stefan Schuermans <stefan@schuermans.info>
3
+ * Copyleft: CC-BY-SA http://creativecommons.org/licenses/by-sa/3.0/
4
+ */
5
+
6
+#include <iostream>
7
+
8
+#include "gcmd.h"
9
+#include "gdwell.h"
10
+
11
+/// constructor
12
+GDwell::GDwell():
13
+  mSec(1.0)
14
+{
15
+}
16
+
17
+/// virtual destructor
18
+GDwell::~GDwell()
19
+{
20
+}
21
+
22
+/// output G-code command to stream
23
+void GDwell::toStrm(std::ostream &strm) const
24
+{
25
+  strm << "G4 P" << mSec << std::endl;
26
+}
27
+
... ...
@@ -0,0 +1,29 @@
1
+/* drawing (DXF) to G-code (NGC) converter
2
+ * Copyright 2013 Stefan Schuermans <stefan@schuermans.info>
3
+ * Copyleft: CC-BY-SA http://creativecommons.org/licenses/by-sa/3.0/
4
+ */
5
+
6
+#ifndef GDWELL_H
7
+#define GDWELL_H
8
+
9
+#include <iostream>
10
+
11
+#include "gcmd.h"
12
+
13
+/// G-code command dwell (G4)
14
+class GDwell: public GCmd {
15
+public:
16
+  /// constructor
17
+  GDwell();
18
+
19
+  /// virtual destructor
20
+  virtual ~GDwell();
21
+
22
+  /// output G-code command to stream
23
+  virtual void toStrm(std::ostream &strm) const;
24
+
25
+  double mSec; ///< dwell time in seconds, must always be positive
26
+};
27
+
28
+#endif // #ifndef GDWELL_H
29
+
... ...
@@ -105,6 +105,10 @@ void Path::toGCode(const Settings &settings, double z, GCode &gcode) const
105 105
   // move to start
106 106
   gcode.appendFast(mPoints.front() + offset);
107 107
 
108
+  // dwell
109
+  if (settings.dwell_time > 0.0)
110
+    gcode.appendDwell(settings.dwell_time);
111
+
108 112
   // cut down
109 113
   gcode.appendFeed(settings.feed_drill);
110 114
   gcode.appendDown(z);
... ...
@@ -10,6 +10,7 @@ Settings::Settings():
10 10
   base_z(0.0),
11 11
   cut_z(0.0),
12 12
   cut_z_step(0.1),
13
+  dwell_time(0.0),
13 14
   feed_drill(10.0),
14 15
   feed_mill(10.0),
15 16
   move_z(10.0),
... ...
@@ -15,6 +15,7 @@ public:
15 15
   double base_z;        ///< z coordinate of workpiece surface
16 16
   double cut_z;         ///< z coordinate of maximum cutting
17 17
   double cut_z_step;    ///< z coordinate difference to cut in one step, > 0.0
18
+  double dwell_time;    ///< dwell time before cutting each path (in seconds)
18 19
   double feed_drill;    ///< feed rate for drilling
19 20
   double feed_mill;     ///< feed rate for milling
20 21
   double move_z;        ///< z coordinate for moving
21 22