Easel Gcode "error:1 (Expected command letter)"

Hey there everyone.

Years after having first purchased my Maslow CNC (and recently having upgraded by sled and arduino to the Maslow2), I have finally come around to making my first cuts. While I am very excited to have things up and running, I am experiencing some minor issues with Easel’s export of my gcode.
My workflow currently is that I draft up my designs in Adobe Illustrator, export them as SVGs and upload them to Easel in order to export the Gcode, which I then upload to my CNCjs software to begin cutting. However, I have noticed that frequently during the course of my cuts, I receive the notice:
error:1 (Expected command letter)
which causes my project to pause, and requires me to press “resume” before continuing with my project. I find it rather annoying to continually press “play”/“resume” in order for my CNC to continue with my projects.

Has anyone else experienced this (moderately minor) inconvenience when exporting gcode with Easel? And how have you resolved it?

Thanks

  • Jevins

Not helpful, but no. I have never experienced the error from GCode, although I am not using CNCjs, but WebControl.

marie.o

Can you post the gcode, say 10 or 15 lines on either side of the error? Copy and paste as text is fine, no reason to attach a file.

Here’s a small test for some joinery that I cut. The error code shows up very frequently in this file.

GCode (.nc file)
G20
G90
G1 Z0.20000 F9.0
G0 X-2.75000 Y4.75000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X-2.75000 Y4.25000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X-1.00000 Y4.25000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X-1.00000 Y4.75000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X1.00000 Y4.25000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X1.00000 Y4.75000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X2.75000 Y4.25000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X2.75000 Y4.75000
G1 Z0.00000 F9.0
G1 Z-0.12500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.25000 F9.0
G1 Z0.00000 F9.0
G1 Z-0.37500 F9.0
G1 Z0.00000 F9.0
G1 Z-0.50000 F9.0
G1 Z0.20000 F9.0
G0 X-1.10001 Y4.52499
G1 Z-0.12500 F9.0
G1 X-2.64999 Y4.52499 F30.0
G1 X-2.64999 Y4.47501 F30.0
G1 X-1.10001 Y4.47501 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-2.75000 Y4.62500 F30.0
G1 X-2.75000 Y4.37500 F30.0
G1 X-1.00000 Y4.37500 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 Z-0.25000 F9.0
G1 X-2.64999 Y4.52499 F30.0
G1 X-2.64999 Y4.47501 F30.0
G1 X-1.10001 Y4.47501 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-2.75000 Y4.62500 F30.0
G1 X-2.75000 Y4.37500 F30.0
G1 X-1.00000 Y4.37500 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 Z-0.37500 F9.0
G1 X-2.64999 Y4.52499 F30.0
G1 X-2.64999 Y4.47501 F30.0
G1 X-1.10001 Y4.47501 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-2.75000 Y4.62500 F30.0
G1 X-2.75000 Y4.37500 F30.0
G1 X-1.00000 Y4.37500 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 Z-0.50000 F9.0
G1 X-2.64999 Y4.52499 F30.0
G1 X-2.64999 Y4.47501 F30.0
G1 X-1.10001 Y4.47501 F30.0
G1 X-1.10001 Y4.52499 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 X-2.75000 Y4.62500 F30.0
G1 X-2.75000 Y4.37500 F30.0
G1 X-1.00000 Y4.37500 F30.0
G1 X-1.00000 Y4.62500 F30.0
G1 Z0.20000 F9.0
G0 X2.64999 Y4.52499
G1 Z-0.12500 F9.0
G1 X1.10001 Y4.52499 F30.0
G1 X1.10001 Y4.47501 F30.0
G1 X2.64999 Y4.47501 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X1.00000 Y4.62500 F30.0
G1 X1.00000 Y4.37500 F30.0
G1 X2.75000 Y4.37500 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 Z-0.25000 F9.0
G1 X1.10001 Y4.52499 F30.0
G1 X1.10001 Y4.47501 F30.0
G1 X2.64999 Y4.47501 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X1.00000 Y4.62500 F30.0
G1 X1.00000 Y4.37500 F30.0
G1 X2.75000 Y4.37500 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 Z-0.37500 F9.0
G1 X1.10001 Y4.52499 F30.0
G1 X1.10001 Y4.47501 F30.0
G1 X2.64999 Y4.47501 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X1.00000 Y4.62500 F30.0
G1 X1.00000 Y4.37500 F30.0
G1 X2.75000 Y4.37500 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 Z-0.50000 F9.0
G1 X1.10001 Y4.52499 F30.0
G1 X1.10001 Y4.47501 F30.0
G1 X2.64999 Y4.47501 F30.0
G1 X2.64999 Y4.52499 F30.0
G1 X2.75000 Y4.62500 F30.0
G1 X1.00000 Y4.62500 F30.0
G1 X1.00000 Y4.37500 F30.0
G1 X2.75000 Y4.37500 F30.0
G1 X2.75000 Y4.62500 F30.0
G20
G90
G1 Z0.20000 F9.0
G0 X0.00000 Y0.00000
G4 P0.1

The Grbl
CNCjs 1.9.22 [Grbl]
Connected to /dev/tty.usbmodem14401 with a baud rate of 38400
Grbl 1.1g [‘$’ for help]
client> $$
$0=10 (Step pulse time, microseconds)
$1=25 (Step idle delay, milliseconds)
$2=0 (Step pulse invert, mask)
$3=4 (Step direction invert, mask)
$4=0 (Invert step enable pin, boolean)
$5=0 (Invert limit pins, boolean)
$6=0 (Invert probe pin, boolean)
$10=1 (Status report options, mask)
$11=0.010 (Junction deviation, millimeters)
$12=0.002 (Arc tolerance, millimeters)
$13=0 (Report in inches, boolean)
$20=0 (Soft limits enable, boolean)
$21=0 (Hard limits enable, boolean)
$22=1 (Homing cycle enable, boolean)
$23=0 (Homing direction invert, mask)
$24=250.000 (Homing locate feed rate, mm/min)
$25=500.000 (Homing search seek rate, mm/min)
$26=250 (Homing switch debounce delay, milliseconds)
$27=1.000 (Homing switch pull-off distance, millimeters)
$30=24000 (Maximum spindle speed, RPM)
$31=4000 (Minimum spindle speed, RPM)
$32=0 (Laser-mode enable, boolean)
$40=22528
$41=17408
$42=20480
$43=5000
$50=22528
$51=17408
$52=20480
$53=5000
$60=20480
$61=17408
$62=18432
$63=5000
$80=0
$81=2438.400
$82=1219.200
$83=3019.425
$84=355.600
$85=1.004
$86=1.003
$100=127.775 (X-axis travel resolution, step/mm)
$101=127.775 (Y-axis travel resolution, step/mm)
$102=472.500 (Z-axis travel resolution, step/mm)
$110=1000.000 (X-axis maximum rate, mm/min)
$111=1000.000 (Y-axis maximum rate, mm/min)
$112=250.000 (Z-axis maximum rate, mm/min)
$120=25.000 (X-axis acceleration, mm/sec^2)
$121=25.000 (Y-axis acceleration, mm/sec^2)
$122=10.000 (Z-axis acceleration, mm/sec^2)
$130=45.000 (X-axis maximum travel, millimeters)
$131=21.000 (Y-axis maximum travel, millimeters)
$132=0.800 (Z-axis maximum travel, millimeters)
ok
error:9 (G-code lock)
client> $H
ok
error:1 (Expected command letter)
<Run|MPos:0.000,0.000,1.244|FS:229,0

G1 Z0.20000 F9.0 (line=10)
error:1 (Expected command letter)
error:1 (Expected command letter)
client> !
client> $X
client> $X
client>
Grbl 1.1g [‘$’ for help]
client> $X
ok
feeder> G0 X0 Y0
ok
feeder> G20
ok
feeder> G0 Z0
ok
error:1 (Expected command letter)
feeder> G91
feeder> G0 Z-0.05
feeder> G90
ok
ok
ok
feeder> G91
feeder> G0 Z-0.05
feeder> G90
ok
ok
ok
feeder> G91
feeder> G0 Z-0.05
feeder> G90
ok
ok
ok
feeder> G91
feeder> G0 Z-0.05
feeder> G90
ok
ok
ok
feeder> G91
feeder> G0 Z-0.02
feeder> G90
ok
ok
ok
feeder> G91
feeder> G0 Z-0.02
feeder> G90
ok
ok
ok
client> $H
ok
G1 X-1.07516 Y-0.48947 F30.0 (line=26)
error:1 (Expected command letter)
client> ~
G1 X-2.73285 Y-0.81165 F30.0 (line=45)
error:1 (Expected command letter)
error:1 (Expected command letter)
client> ~
G1 X-2.63879 Y-0.49905 F30.0 (line=60)
error:1 (Expected command letter)
client> ~
G1 X-2.74997 Y-0.38342 F30.0 (line=64)
error:1 (Expected command letter)
client> ~
G1 Z0.20000 F9.0 (line=74)
error:1 (Expected command letter)
client> ~
G1 X-2.73285 Y-0.81165 F30.0 (line=77)
error:1 (Expected command letter)
client> ~
G1 X-1.03857 Y-0.46512 F30.0 (line=89)
error:1 (Expected command letter)
client> ~
G1 Z0.20000 F9.0 (line=106)
error:1 (Expected command letter)
client> ~
G1 X-2.66595 Y-0.75671 F30.0 (line=111)
error:1 (Expected command letter)
client> ~
G1 X-2.71619 Y-0.46033 F30.0 (line=126)
error:1 (Expected command letter)
client> ~
G1 X1.01715 Y-0.81165 F30.0 (line=141)
error:1 (Expected command letter)
error:1 (Expected command letter)
client> ~
G1 X2.73410 Y-0.81378 F30.0 (line=148)
error:1 (Expected command letter)
client> ~
G1 X1.10065 Y-0.65146 F30.0 (line=167)
error:1 (Expected command letter)
client> ~
G1 X2.75000 Y-0.86636 F30.0 (line=181)
error:1 (Expected command letter)
client> ~
G1 X2.64999 Y-0.59799 F30.0 (line=201)
error:1 (Expected command letter)
client> ~
G1 Z-0.37500 F9.0 (line=204)
error:1 (Expected command letter)
error:1 (Expected command letter)
client> ~
G1 X1.10132 Y-0.59857 F30.0 (line=230)
error:1 (Expected command letter)
client> ~
G1 X2.73410 Y-0.81378 F30.0 (line=244)
error:1 (Expected command letter)
client> ~
G1 X1.00003 Y-0.38342 F30.0 (line=256)
error:1 (Expected command letter)

For some context, I’ve included screenshots of how my file looks in CNCjs and in Easel. I’ve also included couple of pictures of how the holes came out. You’ll notice that on the bottom left, there is a discrepancy where the cut, which should be horizontal, drops down to the lowest point in the “H” shaped dogbone. This does not match my intended result either, though I’m not sure where I went wrong in the process to produce this result.

Let me know if it would be helpful for me to post my workflow, my settings on Easel, or my Maslow settings.

Wonder if it’s dropping characters, buffer overflow perhaps? The initial G not being seen? Any flow control in CNCjs?

Also have to wonder why Easel is doing all that Z up and down stuff, not all that great for a Maslow.

For the sake of anyone else who might experience the same issues, I guess I’ll elaborate on my workflow and the trouble-shooting I’ve performed.

Workflow

I start by making my designs in Adobe Illustrator. Once made to my satisfaction, I export the designs as SVG files, and upload them to Easel, modifying them as necessary before exporting them once more as gcode. I then upload the gcode to CNCjs and begin cutting.

So far I have been working only with 1/2" material. Rather than using tabs to support the objects I cut, I tend to use a plastic nailer to secure the wood to a spoil board. Alternatively, and more commonly, I will simply route the edges of an object to 1/4" depth. When all paths have been carved, I will jig-saw my object out from the board, and route the edges to the lines cut by my CNC. I find this can be more time time efficient for repeated cuts and has so-far helped avoid some errors I’ve encountered.

Adobe Illustrator
I set my stroke weight to the size of my router bit, and offset the stroke to the inside out outside of the path depending on where I want the cut to fall. This is merely to remind myself whilst drafting where the cuts will fall. To make sure my joinery sits the way I want, I use dogbones. In Illustrator, this means placing ellipses the size of my router bit on all the areas that need this dogbone. I then take each object in my design and copy / paste it into a new document where I reduce the stroke to 0, and export the Illustrator file to an SVG file.

Easel
I then upload this SVG file to Easel. In Easel, I first select every path, set the depth to the depth of the material, and deselect “use tabs”. This is important because the “use tabs” function is selected by default. And, if like me, you only wish to cut half way through your material, the Maslow will still plunge to the full depth in order to carve around where it believes the tabs should be. Once I’ve deselected the “use tabs” option, I can specify the final depth of my cut, and the cut path (whether it clears a pocket, or falls inside / outside / on the SVG path). Then, for the dogbones, I find the coordinates of each ellipse and replace them with the “Drill” tool. When this has all been done I can export my designs as gcode.

My settings are shown here:

Initially when receiving the error 1 message, I believed it was because my designs contained too much information, and the exported gcode from Easel might have been corrupted slightly upon export. I have been designing some stackable crates, and the first attempts at cutting them meant cutting out multiple sides of said crates in one go. When the error message occurred repeatedly, requiring me to manually resume the operation, we figured we should take a different approach.
Here’s what the first series of passes looked like on Easel:

We then opted to cut one side at a time, which meant outputting each side in its respective coordinates as its own gcode file. I was initially concerned that the objects having negative coordinates would cause an error. However, this one-side-at-a-time approach seemed to miraculously smooth itself out. I managed to cut maybe 5 out of the 7 panels with no error messages whatsoever. Negative coordinates were not generating errors.
I double checked the machines settings of each file and noticed that some of my panels had been assigned a workspace smaller than the actual workspace of the Maslow. I corrected this to properly fit the coordinate grid on Easel.
From:


To:

Unfortunately, the errors have persisted.

To continue using the full sheet of plywood, the next series of cuts is supposed to look like:


Although I have successfully made these cuts, I cannot recall at this moment how frequently, if at all, I received any error messages. If my memory is right, I was able to cut these three panels without a hitch.

I then rotate the sheet of plywood 180 degrees and repeat the whole process. This fills the sheet of plywood with cuts like:

Fortunately, I am able to get these shapes aligned rather nicely. I have a couple of design kinks I’m working out one this next pass and I’m hoping to minimize the error 1 which has been plaguing me. I have attempted to solve this problem based on Easel’s workspace and machine settings, but it seems like the errors occur rather arbitrarily in that regard. I have also had success cutting full shapes without error whether or not they include negative coordinates. I wonder if the errors are occurring at points where the Z axis is being asked to plunge. At this moment in time, it remains unclear. I will try to update any solutions I may find.

WOW! After all that time it looks like it’s a hardware issue. Well, I’m guessing it is anyway.

My M2 cuts perfectly fine with no errors until I decide to use my computer while a cut is being performed! I’m going to chalk this up to weird programming on Apple’s part that causes some data interference with the USBC dongle I have to use to connect with my Arduino.

1 Like

One of the simpler options is to get a raspberry pi and interact with it via web page over wifi. 3B+ or 4 will work. Frees up the laptop usb.

1 Like

I am in the dedicated PC plus web control myself. Nothing to worry, and multiple control points.

Marie.o