GCC Expert 24 Cutter Notes
Serial Connection
The plotter has a USB port, but it doesn’t show up as a USB serial device, and I can’t be bothered to figure it out when a perfectly good serial port is right beside the USB port.
I can’t find any documentation on how to change the serial port parameters, so it seems to be stuck at 9600N81, which is at least reasonable. The plotter needs RTS to be asserted, or it won’t talk to you. The VLDC2 software requires a full hardware handshake, so if you’re trying to use that, make sure to use a fully wired cable, and a USB to serial device that supports the RTS, CTS, DTR, and DSR pins.
HP-GL Commands
While the serial port supports HP-GL, GCC provides absolutely no documentation on it. Of course it does all the usual HPGL things, but any model-specific stuff is completely undocumented. So far, I’ve been able to deduce the existence of two non-standard HP-GL commands from looking at the output of Easy Cut Studio 6:
IN;PA;AS0.7;TO0.500;AB;SP0;TO0.500;VS15;FS70;...
Breaking it down:
IN; Initialize
PA; Plot Absolute
AS0.7; Acceleration Select
TO0.500; *** Non-Standard: Cutter Offset 0.500mm
AB; *** Non-Standard: ???
SP0; Select Pen 0
TO0.500; *** Non-Standard: Cutter Offset 0.500mm (again?)
VS15; Velocity Select
FS70; Force Select
Settings
The remainder of this document describes how settings are configured. This was determined by watching the conversation between GCC’s VLCD2 software and the plotter. VLCD3 exists, but it always crashed in my test environment when attempting to connect the plotter over serial.
Reading Settings
>> OH;
<< 0,0,1000000,7454\r
>> \x1b.R1:
<< OR1,40,81,0,1,0,0,1;\r
>> \x1b.R3:
<< OR3,16214,16387;\r
>> \x1b.R4:
<< OR4,GCC,Expert 24 ,3.01-01,Dec 31 2013,15:08:50;\r
R1 is the most interesting, containing the various settings we want to modify.
R3 contains the X and Y calibration values, in some weird units, presumably steps.
R4 contains model and version information
R1 Breakdown
OR1,<Media Weight>,<Blade Force>,<Blade Offset>,<Vector Quality>,<Vector Smooth>,<Auto Unroll>,1;\r
Media Weight
light = 40
heavy = 3
Blade Force
blade force in grams
Blade Offset
blade offset in micrometers
Vector Quality
fine = 1
draft = 3
Auto Unroll
disabled = 0
enabled = 1
Vector Smooth
disabled = 0
enabled = 1
Example
This is a capture of the dialog between VLCD2 and a Expert 24 cutter.
>> = from host
<< = from cutter
>> OH;
<< 0,0,1000000,7454\r
>> \x1b.R1:
<< OR1,40,81,0,1,0,0,1;\r
>> \x1b.R3:
<< OR3,16214,16387;\r
>> \x1b.R4:
<< OR4,GCC,Expert 24 ,3.01-01,Dec 31 2013,15:08:50;\r
Writing Settings
Breakdown
\x1b.C1;<Register>;<Value>:
Register 16 - Blade Offset
0.000 = 0
0.175 = 1
0.250 = 2
0.275 = 3
0.300 = 4
0.500 = 5
0.750 = 6
1.000 = 7
Register 22 - Cut Force (integer)
value = cut force in grams
Register 17 - Media Weight
light = 1
heavy = 0
Register 20 - Auto Unroll
disable = 0
enable = 1
Register 18 - Vector Quality
draft = 1
fine = 0
Register 19 - Vector Smooth
disable = 0
enable = 1
Register 21 - Unknown, maybe the sheet feed/roll feed toggle, but that isn't available on my machine
always = 1
TODO: I’m assuming that writing to register 0 triggers a write to EEPROM, this needs to be tested.
Example
\x1b.C1;16;0:
\x1b.C1;17;1:
\x1b.C1;18;0:
\x1b.C1;19;0:
\x1b.C1;20;0:
\x1b.C1;21;1:
\x1b.C1;22;81:
\x1b.C1;0;:
Calibration
WARNING: The Expert 24 has X and Y transposed. X represents movement of the feed rollers, Y represents movement of the carriage. I’m assuming that when doing the calibration process, knowing this is important.
- Command the plotter to draw a square of some size. GCC uses 100mm.
- Measure the square
Calculate calibration values thusly:
calX = 16214 # first value read from R3 calY = 16387 # second value read from R3 squareSide = 100 calX = trunc(calX*(measuredX/squareSide)) calY = trunc(calY*(measuredY/squareSide))Write the calibration values to the plotter:
\x1b.C6;1;<calX>:\x1b.C6;0;<calY>:\x1b.C1;0;:\x1b.C6;2;:PD;PU;
I’m not sure why there’s a pen down/up at the end, I’m assuming they’re using that as an indicator that the command is complete. I also don’t know what the write to C6.2 is there for, but I have to assume it’s required. Looking at a disassembly of VLCD2, there are no conditionals around the insertion of the C1.0 and C6.2 commands in the string, so they’re always there.
Example
Calibrate for 100x100:
\x1b.C6;1;16214:\x1b.C6;0;16387:\x1b.C1;0;:\x1b.C6;2;:PD;PU;