This article serves as the main reference point for all myCNC material related to the myCNC Server API.
The server API allows to control movement and machine coordinates remotely, via a series of commands.
To enable Server API functionality, first head into your Settings > Config > Network, and enable the Server Interface option, as well as set a Server Port (the server port will be used to connect to your system via the telnet command, for example telnet 127.0.0.1 4266):
A list of Server API commands is presented below for jog control, etc. To obtain a full list of commands, type ? while connected to the remote host:
A full list of commands is provided below:
| Parameter | Description |
|---|---|
| EchoMode | |
| ProgramFileOpen | |
| ProgramBegin | |
| ProgramAppend | |
| ProgrmaEnd | |
| ProgramPlay | Starts running the program |
| ProgramPlayBack | |
| ProgramPlayStep | |
| ProgramPlayStepBack | |
| ProgramPause | |
| ProgramStop | Stops the running program |
| ProgramReset | Resets the program to the beginning |
| GetEstimateTime | |
| GetMachinePosition | Returns all of the current machine position coordinates |
| GetProcess | |
| GetWorkPosition | Returns all of the current work (program) coordinates |
| GetMyCNCVersion | |
| GetFVariable | Returns the value stored in a global variable (as double) |
| GetIVariable | Returns the value stored in a global variable (as int) |
| GetReady | |
| LineAppend | |
| GetScanData | |
| GetSensors | |
| GetMCC | Get Motion Control Code - read machine status, returns a number (for example, 3) |
| GetMCPtr | Get Motion Control Pointers |
| GetHW | |
| GetHWDAC | |
| GetHWADC | |
| GetHWInputBit | Returns (reads) the state of a particular input |
| GetHWInputs | Returns (reads) the state of an input group |
| GetHWOutputs | |
| GetHWPWM | |
| GetPWMs | |
| GetPausedLine | |
| GetLastMessage | |
| GetWorkState | |
| PendantWidgetShow | |
| PendantWidgetHide | |
| PendantWidgetHidden | |
| RunPLC | |
| SaveConfig | |
| SetG92 | Sets the current work position to the selected value (for example, SetG92 X0) |
| SetHWDAC | |
| SetHWOutputBit | |
| SetHWPWM | |
| SetPendant | |
| SetRotationAngle | |
| SetCNCVariable | |
| SetJog | |
| SetScale | |
| SetGVariable | |
| SinglePlay | |
| ShutDown | |
| GetJobName | Get the full job name and file path |
| GetSVariable8020 | Get the full job name and file path (same as GetJobName) |
| GetSVariable8109 | Get current job (file) size, in MB |
| GetSVariable8108 | Get the current job (file) folder path (same as GetJobName but without the actual file name) |
| GetSVariable8107 | Get the current job name without the folder path (name only) |
Command “SetJog” is used for Jog control through Sever API. Command syntax is “SetJog Parameter”. Parameters listed in table below:
| Parameter | Description |
|---|---|
| x+ | start jog X+ direction |
| x- | start jog X- direction |
| y+ | start jog Y+ direction |
| y- | start jog Y- direction |
| z+ | start jog Z+ direction |
| z- | start jog Z- direction |
| a+ | start jog A+ direction |
| a- | start jog A- direction |
| b+ | start jog B+ direction |
| b- | start jog B- direction |
| c+ | start jog C+ direction |
| c- | start jog C- direction |
| x+y+ | start jog in 2 axes X+,Y+ directions |
| x-y- | start jog in 2 axes X-,Y- directions |
| x+y- | start jog in 2 axes X+,Y- directions |
| x-y+ | start jog in 2 axes X-,Y+ directions |
| xstop | stop jog in X axis |
| ystop | stop jog in Y axis |
| zstop | stop jog in Z axis |
| astop | stop jog in A axis |
| bstop | stop jog in B axis |
| cstop | stop jog in C axis |
| xystop | stop jog in X, Y axes |
Server API has a command to simplify Pendant control emulation. This command can be used for writing third-party Pendant control device drivers.
Command: SetPendant
Format: SetPendant Parameter1;Parameter2
Parameter1 - Emulated Hand wheel position. It's supposed the handwheel has resolution of “100”, such that the position range can be (0…99)Parameter2 - 16-bit value, high byte is Step selector, low byte is Axis selector.| Example | Description |
|---|---|
| SetPendant 50;0x0300 | Axis=OFF, Mul=1, Wheel=50 - initial position |
| SetPendant 50;0x0301 | Axis=X, Mul=1, Wheel=50 - Turn ON X axis |
| SetPendant 55;0x0301 | Axis=X, Mul=1, Wheel=55 - Rotate wheel +5 “clicks”, will move X +5*1.0=5.0 mm |
| SetPendant 55;0x0302 | Axis=Y, Mul=0.01, Wheel=55 - Switch to Y axis |
| SetPendant 65;0x0302 | Axis=Y, Mul=0.01, Wheel=65 - Rotate wheel +10 “clicks”, will move Y +10*0.01=+0.1 mm |
| SetPendant 65;0x0302 | Axis=Z, Mul=0.1, Wheel=65 - Switch to Z axis |
| SetPendant 50;0x0302 | Axis=Z, Mul=0.1, Wheel=50 - Rotate wheel -15 “clicks”, will move Z -15*0.1=-1.5 mm |
There are 3 ways to manipulate myCNC control board Hardware outputs through Server API:
1) Direct manipulation through commands “SetHWBinaryOutput”, “SetHWDAC”, “SetHWPWM” 2) Manipulation through running PLC procedure with Hardware Outputs manipulation. 3) Manipulation though running short G/M-codes program
Command: SetHWBinaryOutput
Syntax: SetHWBinaryOutput <Port number> <Port value>
Port Number is number binary port. Its range is 0 to 159. Set Port value to “1” to turn ON binary output (relay, open collector), “0” to turn OFF the binary output.
| Example | Description |
|---|---|
| SetHWBinaryOutput 0 1 | Turn ON binary output #0 |
| SetHWBinaryOutput 1 1 | Turn ON binary output #1 |
| SetHWBinaryOutput 23 1 | Turn ON binary output #23 |
| SetHWBinaryOutput 0 0 | Turn OFF binary output #0 |
| SetHWBinaryOutput 1 0 | Turn OFF binary output #1 |
| SetHWBinaryOutput 19 0 | Turn OFF binary output #19 |
Command: SetHWPWM
Syntax: SetHWPWM <PWM channel> <PWM value>
PWM channel is the number of the PWM pin. Software range is 0 to 3, however the number of PWM channels depends on the myCNC Ethernet controller model. Controllers ET1, ET3, ET5 each contain 3 PWM pins.
| Example | Description |
|---|---|
| SetHWPWM 0 2000 | Set value “2000” to PWM#0 (PWM1). Max PWM value is 4095 |
| SetHWPWM 0 0 | Set value “0” to PWM#0 (PWM1). Max PWM value is 4095 |
| SetHWPWM 2 3500 | Set value “3500” to PWM#2 (PWM3). Max PWM value is 4095 |
| SetHWPWM 1 4095 | Set value “4095” (Maximum) to PWM#1 (PWM2). Max PWM value is 4095 |
Command: SetHWDAC
Syntax: SetHWDAC <DAC channel> <DAC value>
DAC channel is number of the DAC pin. Software range is 0 to 1, however real number of DAC channels depends on myCNC Ethernet controller model. Controllers ET1 and ET3 each contain 1 DAC pins, while the ET5 controller contains 6 DAC pins.
| Example | Description |
|---|---|
| SetHWDAC 0 1000 | Assign value “1000” to DAC#0 (DAC1). Max DAC value is 4095 |
| SetHWDAC 0 0 | Assign value “0” to DAC#0 (DC1). Max DAC value is 4095 |
| SetHWDAC 1 4095 | Assign value “4095” (Maximum) to DAC#1 (DAC2) |
Server API command “RunPLC” loads and runs PLC procedure on the controller end with a given parameter. We can run a PLC procedure that manipulates Hardware outputs to get a similar result. Normally, every profile configuration contains PLC procedures for Hardware outputs manipulation:
PLC procedure: M62
Syntax: M62 <Parameter>
M62 allows the user to turn ON a binary output pin with a given number (Parameter=Port number)
| Example | Description |
|---|---|
| M62 1 | Turn ON binary output #1 |
| M62 0 | Turn ON binary output #0 |
| M62 15 | Turn ON binary output #15 |
PLC Procedure: M63
Syntax: M63 <Parameter>
M63 allows the user to turn OFF a binary output pin with a given number (Parameter=Port number)
| Example | Description |
|---|---|
| M63 1 | Turn OFF binary output #1 |
| M63 0 | Turn OFF binary output #0 |
| M63 15 | Turn OFF binary output #15 |
Syntax: DAC <Parameter>
The low 12 bits (11…0) contain the value of DAC to be written, high bits (14..12) contain the DAC channel.
| Example | Description |
|---|---|
| DAC 0 | Set value “0” to DAC#0 (DAC1). Max DAC value is 4095 |
| DAC 0x0600 | Set value “0x600” (1536) to DAC#0 (DAC1). Max DAC value is 4095 |
| DAC 0x1400 | Set value “0x400” (1024) to DAC#1 (DAC2). Max DAC value is 4095 |
| DAC 0x1000 | Set value “0” to DAC#1 (DAC2). Max DAC value is 4095 |
Syntax: PWM <Parameter>
The low 12 bits (11…0) contain the value of PWM to be written, high bits (14..12) contain the PWM channel number.
| Example | Description |
|---|---|
| PWM 0 | Set value “0” to PWM#0 (PWM1). Max DAC value is 4095 |
| PWM 0x0600 | Set value “0x600” (1536) to PWM#0 (PWM1). Max PWM value is 4095 |
| PWM 0x1400 | Set value “0x400” (1024) to PWM#1 (PWM2). Max PWM value is 4095 |
| PWM 0x2000 | Set value “0” to PWM#2 (PWM3). Max PWM value is 4095 |
Examples of running these PLC procedures through the Server API are shown table below:
| Binary input manipulation | |
|---|---|
| Example | Description |
| RunPLC M62 1 | Turn ON output#1 |
| RunPLC M62 0 | Turn ON output#0 |
| RunPLC M63 3 | Turn OFF output#3 |
| RunPLC M63 5 | Turn OFF output#5 |
| PWM control | |
|---|---|
| Example | Description |
| RunPLC PWM 0x1350 | Write to PWM#1 (PWM2) a value of 0x350 |
| RunPLC PWM 0x250 | Write to PWM#0 (PWM1) value 0x250 |
| RunPLC PWM 0x2800 | Write to PWM#2 (PWM3) value 0x800 |
| RunPLC PWM 0x0 | Write to PWM#0 (PWM1) value 0 |
| RunPLC PWM 0x1000 | Write to PWM#1 (PWM2) value 0 |
| RunPLC PWM 0x2000 | Write to PWM#2 (PWM3) value 0 |
| SetHWDAC | |
|---|---|
| Example | Description |
| RunPLC DAC 0x1570 | Write to DAC#1 (DAC2) value 0x570 |
| RunPLC DAC 0x800 | Write to DAC#0 (DAC1) value 0x800 |
| RunPLC DAC 0x0 | Write to DAC#0 (DAC1) value 0 |
| RunPLC DAC 0x1000 | Write to DAC#1 (DAC2) value 0 |
Server API command “SinglePlay” will run a G-code line (or a number of G-code lines separated by the “;” symbol). It's possible to control binary outputs by running M-functions “M62” and “M63” (similar to the method described above). P-parameter sets the binary output number to control.
M-code: M62
Syntax: M62 P<number>
This will turn ON the binary output pin with the given number.
| Example | Description |
|---|---|
| M62 P1 | Turn ON binary output #1 |
| M62 P0 | Turn ON binary output #0 |
| M62 P15 | Turn ON binary output #15 |
Syntax: M63 P<number>
This will turn OFF the binary output pin with the given number.
| Example | Description |
|---|---|
| M63 P1 | Turn OFF binary output #1 |
| M63 P0 | Turn OFF binary output #0 |
| M63 P15 | Turn OFF binary output #15 |
Any custom PLC function can be written and assigned to M-code, then loaded through the CNC Server API.
The following videos show examples of using the server API to control a myCNC system (older versions of the software are used, however the principle is the same):
ProgramFileOpen and SetScale:
Hardware Binary Outputs:
Set Scale and Rotation Angle: