Numeryx Home


Version 6.11

Copyright © 1988, 2007 by Gil Hagiz
Last updated Jan-17-2007


NCPLUS is an 8-axis Computerized Numerical Control software package, for high speed, high accuracy, machine tools.
NCPLUS platform is Pentium 300 MHz or better PC, running Dos or Win98.

The design goal has been to develop a modular and flexible control that will not be obsolete the moment it leaves the factory.
That goal is achieved by providing the machine builder with all the necessary tools for tailoring his exclusive suit.




NCPLUS is a versatile CNC software based on CNC development experience since 1975.
The language is an extended NC letter-address standard RS-274-D, (N, G, M, etc.) which includes additional commands in BASIC, such as IF, THEN, ELSE, GOTO, and other words such as ON, OFF, BLUE, PITCH, REPEAT (more than 280 words in plain English).


In addition to conventional CNC functions it performs:


NCPLUS compiles a user program and produces a machine code file, instead of interpreting each block while cutting. That means that all syntax and typing errors are detected before the actual cutting begins.
In addition, it takes less than 25 micro-second to process a block, while other high speed control builder are proud with 1 milli-second for the same.
(Test conditions: 300 MHz Pentium, sequence of blocks with N and X,Y,Z)
The time is saved because the compiler translates decimal numbers into binary format and replaces all Goto line numbers with absolute memory addresses.

High Speed

Processing speed of 40,000 block/sec doesn't ensure high speed machining.
A few factors affect high speed machining, all of them are handled by NCPLUS.

Nanometer Technology

All internal motion calculations are performed in 1 nanometer resolution (ultra-high-precision nano interpolation). Nano interpolation generates smoother path and better surface finish.

5-axis RTCP

For RTCP (Rotary Tool Center Point) additional driver files are provided.
The following geometries are currently supported:
Gimbal head: CA, CB
Tilting head: BA
Nutating head: CA, CB (programmable nutator angle)
Rotary: AB, AC, BC
Combo: B-tilting head and A or C rotary

TCP features


Jerk is the rate at which the acceleration changes. Jerk factor is the time it takes the acceleration to rise and fall, and it converts step acceleration into trapezoidal or triangular one.
Two linear Jerk factors can be set up to 250 msec- one for positioning and another for interpolation.
The Jerk factor generates bell-shaped feed profile and is essential for high-speed contouring.


If the spindle motor has an encoder it can be programmed both as an axis in degrees or as a spindle in RPM. This is used for some tool changers and for rigid tapping.
The mode can be switched anytime without losing position.

Endless rotary axis

When set, such an axis behaves as a linear axis for interpolation but its limits are set internally for thousands of revolutions.
Unwinding is performed automatically in the following cases:


Any axis can be switched to Follower mode.
In this mode the axis is moved by a feed command rather than position.
A follower axis can follow feedback signal (force, position), pushbuttons, another axis, etc.
The mode can be switched anytime without losing position.

Differential pair

Two axes can be setup as a differential pair, with the ratio between them.
This is required for some CA heads in which the A-axis is driven through the C-axis.


Up to 2 gantry axes, each driven by 2 independent servos, are supported.
If necessary, the Reference routine can align the 2 servos to ensure squareness.

Ball and Bull nose cutter radius comp

This compensation is used for 3D contouring. It requires a post-processor that can generate IJK vector in addition to XYZ.
It also works with 5-axis profiling.

Drilling cycles

Standard drilling cycles work with 5-axis TCP.
Rigid tapping can be used on machines with servo spindle.

N Display

Three different displays can show where the part-program is. They can be switched any time:

Mid-Program Start

A simple 4 step Start from the Middle sequence, no access to the program is needed. The computer picks-up the required data from the program automatically.
The operator can seek a line in the program or the current position of the tool.
The position and spindle are resumed simply by pressing Cycle Start, following on-screen instructions.

On-the-Fly offset

If this feature is used the offset is displayed in a window. The offset can be changed, by the handwheel and the jogging pushbuttons, before or while the program is running.
This feature can be set for all axes but it is mostly used for Z.

Virtual W

For 3-axis machine, virtual W looks like a 4th axis. Using it moves Z of course.
This lets you raise or lower the tool manually the same as with actual W, at rest and on the fly.


The Plc is implemented in software and runs constantly in the background.
It is used for background operations like preparing next tool, spindle control, display, alarm, watchdog, etc.
The Plc reads and writes I/O's from an I/O board with a supplied driver. The I/O ports are numbered by the retrofitter so there is no need to use absolute addresses. The Plc copies the I/O's to/from Plc designated registers. In addition, it intercepts all keyboard keys; these key-codes can be modified, used as inputs, or pass-thru.

700 registers are available, about 200 of them are associated with NCPlus variables that can be read and/or written, like mode, feed, position, leadscrew-comp, trace-error, etc.
Plc programs are written and compiled using the NCPlus editor, no tools are needed.
Arithmetic/Logic statements are used like:

#101= #2 * #123 / 10000 + 1
if #400&$20<>0 and (#300>=12 or #300<-12) then
#56=red #57=white sound(1000)

Plc registers can be displayed on the screen in real time in different formats. In addition to numerical values they can point to text messages with variable colors.

Tool Changer

All kinds of tool changers can be programmed in the internal PLC.
There are four basic types of tool changer:

For M6, T represents actual tool number. For a random ATC the computer finds and updates the pot number in the tool table. For non-random ATC the pot number is set to the tool number.
M6 also sets the tool offset according to the entry in the tool table.

Setup Tool Length

A pop up window lets the operator enter tool length either as a number (if known) or as measured on the machine.
The operator can use or ignore tool radius (for ball nose) and enter the current Z, if not zero, which is saved for the next tool.
In addition, tool length can be incremented.


Any automatic sequence that may require operator intervention, e.g. tool changer, can be displayed in real time. The full sequence is displayed while a moving color bar highlights the current operation. If an error occurs the erroneous operation stops and blinks. The operator can go backward and forward by the arrow keys. Once the problem is solved the program can be resumed.


Powerful word-processor for interactive program editing:


If security is a factor, the NC program source code can be deleted from the control (the compiled file is unreadable and useless for competitors).
For greater security, up to 9 levels of access are provided via user name and password.
Any access is logged to a file.

Technical Specification

Total controlled position axes	8
Follower/axis			8
Gantry pairs                    2
Spindle/axis			1
Differential pair 		1

Feed Range 			1 to 32,000 mm/min (0.04 to 1250 ipm)
Positioning			Up to 64,000 mm/min (2500 ipm)
Max encoder counts		16,000,000 count/sec
Min resolution                  0.001 micron (1 nano-meter)

Acceleration 			0.01 to 10g
Programmable max feed		per axis: positioning, jog, dryrun, feed
Programmable max acceleration	per axis: positioning and interpolation
Programmable Jerk factor	For all axes: Positioning and interpolation
Feedrate override 		up to 31 programmable steps, 0.0 to 199.9%
G0 override                     Programmable steps 1 to 100%, usually 25-50-75-100%
Linear axis travel 		About 2,000,000,000 encoder counts
Rotary axis travel		Same, with optional 'electronic-unwind'
Rotary axis programming	unit	Degree, regardless of inch/metric mode
Control accuracy 		15 digit floating point
Max value of any dimension 	1,000,000,000,000.000 mm
Dwell 				0.01 sec to 300,000 years
Max program size 		250 MB or 3,000,000 lines
Disk storage per 1 MB 		Equivalent to 2.5 km of tape (1.5 mile)
Tool data storage 		up to 253 tools per table
Settable fixture offsets        9 (g54 to g59.3) extendable to 99 
Lead screw compensation		1 table per axis, dynamically interpolated

Digital I/O			up to 320 inputs, 320 outputs
Analog and odd I/O's		up to 40 addresses
Look Ahead			80 Buffers
User Parameters			100 
System Parameters		100
Extra parameters or arrays      up to 8200
PLC Registers			700 (16 bit)
CNC Compiler			Virtual (Byte) code
PLC Compiler			Native intel® code

Basic Features

Note: the terms 'unlimited' and 'indefinitely' are used when a quantity is limited by memory size or when the limit is in the quadrillions and beyond any need.

Program debugging facilities:

CRT displays the following: (user arranged)



List of Functions

List of addresses

@@ Variable axis, used for jogging
A Rotary axis - angle about X axis
B Rotary axis - angle about Y axis
C Rotary axis - angle about Z axis
@C Chamfer
D Dwell
E Distance
F Feed
G Preparatory function
H TCP mode for rotary head
I,J,K Absolute polar center, offset for a Cartesian arc
L Not used
M Miscellaneous
N Block number
O Not used
P Angle for polar coordinates, look ahead angle
@P Vertical angle for spherical coordinates
Q Corner radius
R Radius
@R Smaller radius for toroid
S Spindle speed
T Tool number
U,V,W Secondary Cartesian axes
X,Y,Z Primary Cartesian axes

Note: the addresses X,Y,Z,U,V,W,A,B,C can be assigned to the 8 axes in any combination.
Unused addresses can be used as parameters to sub-programs.

G codes

Cartesian coordinates

G0 Positioning
G1 Linear interpolation
G2/3 Circular interpolation (X,Y,R or X,Y,I,J)
G4 No operation
G5 Polar zero from Cartesian
G7 3 point arc or circle

Polar coordinates

G10 Positioning
G11 Linear interpolation
G12/13 Circular interpolation
G14 Polar to Cartesian
G15 Polar zero shift

Spherical and Toroidal coordinates

G10.1 Positioning
G11.1 Linear interpolation
G12.1/13.1 Circular interpolation (using P or @P to select plane)
G14.1 Spherical to Cartesian
G15.1 Spherical zero shift

Plane select for circular interpolation and tool compensation

G16 Plane defined by PLANE(x,y,z)
G17 XY
G18 ZX
G19 YZ

Tool compensation (length & radius)

G40 Cancel tool radius compensation
G41/42 Tool radius compensation, left/right
G41.1/42.1 3D tool radius compensation


G5.1 Graphic zero
G52 Local coordinates
G53-59-59.3 Machine zero and fixture offsets
G8/9 No stop, Exact stop, single shot
G61 Exact stop mode
G62 Automatic stop mode (with tool compensation)
G64 Cutting feed mode
G70/71 or G20/21 Inch/Metric
G90/91 Absolute/Incremental
G92 Zero shift
G93/94/95 Inverse time, Feed per min, Feed per revolution
G96/97 Constant surface speed on/off
G98/99 Return to Z/R plane in drilling canned cycles

BASIC - Partial list of functions

CNC commands

Inch or IN Same as g70 or g20
Metric or MM Same as g71 or g21
Scale x1.1 y-1.1 Scale factor for the written axes and feed.
Negative scale is used for mirroring

Functions and procedures

Accel(n) Acceleration override, n = 1 to 100%
Plane(x,y,z) Define plane for g16
Rotate(x) Axis rotation (For the selected plane)
Azimuth(x), Yaw(x) Coordinate orientation
Elevation(x), Pitch(x) Coordinate orientation
Roll(x) Coordinate rotation
Tilt(az,el) Tilt & Swivel for polar coordinates
LH, RH (LeftHand, RightHand) Find intersection between a line and an arc
Leader(x,y) The leader of axis x is axis y (y can be zero)
Gearbox(x,r) Use gear ratio r for axis x
Cylinder(r,y) Project XY data on a cylindrical surface (not a rotary axis)
Position(x) Return the actual position of an axis
Gil(xo,xn) Used in a FOR loop; returns the relative value between xo and xn
Sphere Return center of a four point sphere


PI p , 3.14 (15 digit accuracy)


Black Gray
Blue Lightblue
Green Lightgreen
Cyan Lightcyan
Magenta Lightmagenta
Red Lightred
Brown Yellow
Lightgray White


TOOLRADIUS or TR set by g40 - g42
TOOLLENGTH or TL set by g40 - g42
TS (bull nose smaller radius) set by g40 - g42


#1 to #99 for the user
#100 to #199 for System

Data structures

Dim Define arrays: Dim a(10), b(8,8), C$(80)
Arrays names: A to Z
Total number of components: 8200
ReadMAT Read matrix components (fast)
READMAT A(1)=1,2,3,-45.88,0.1,0


** * / % power, multiply, divide, modulo
+ - add, sub (minus)
= Assign
> < == greater, less, equal
>= <= <> ge, le, ne
NOT AND OR XOR logical operations
~ & | ^ bit-wise not, and, or, xor

Arithmetic functions

ABS(x) Returns the absolute value of x
INT(x) Returns the integer part of x
FRAC(x) Returns the fraction part of x
SIGN(x) Returns the sign of x
SQR(x) Returns the square of x
SQRT(x) Returns the square-root of x
SIN(x) x is expressed in degrees
TAN(x) Tan(90) does not produce an error
ATN(x) Returns -90 to 90
ASN(x) Returns -90 to 90
LENGTH(x,y) Returns the length of a vector
ATAN2(y,x) Returns the direction of a vector -180 to 180
TRIANGLE(a,b,c) Returns the angle C (Cosine law)
LOG(x) Returns log10(x)
LN(x) Returns the natural log
EXP(x) Returns e**x
RND(x) If x=0 returns a random number 0 to .9999999 If x>0 then an integer 0 to x-1

File operations

FILES Open a directory for file selection
EXIST Identify Device, File, Directory, Network, or none
OPEN Open file (input, output, append, random)
CLOSE Close file(s)
EOF Return End-Of-File status
LOF Return Length-Of-File
POF Return Position-Of-File
TRUNCATE Truncate a file
FLUSH Flush file buffers to disk
PRINT# Write data to a text file
READ# Read data from a text file
SEEK# Locate a record
GET# PUT# Read/Write records from a random access file

String and Screen Control (colors: fg=foreground, bg=background)

Openwindow(x1,y1,x2,y2,fg,bg) Open a window
Color(fg,bg) Change window color
Closewindow Close window
Title Print a window title
Subtitle Print a window sub title
Cls Clear window
Help Display following text lines when pressing F1
Menu Define a menu. Menu items are written as lines of text
PickList Pick a menu item and return its number
Cursor(size) Set cursor size or hide cursor
Locate(r,c) Move cursor to Row, Column
Row, Col Return cursor position
Scratch(r,fg,bg) Select Row and colors for scratchpad
BAR(r,fg,bg) Draw a color bar
Center(x$,r) Print x$ at the center of Row
Place(v,r,c,s) Place Var at Row, Column and Size. Var is displayed in the background. Var can be an axis, N,L,F,S,T, or any PLC register
Print Write to screen
Format(n,d) Print format: n chars, d digits after DP
Readkey Wait and return a key
Inkey Get key, if available
INPUT(x) Display x and wait for a numerical input
INPUT$(x$) Display x$ and wait for a text input
CHR$(x) Convert x from ASCII to a character
ASC(x$) Convert the first character of x$ to ASCII
STR$(x) Convert x to string
VAL(x$) Convert x$ to a number
MID$(x$,P,N) Return substring of x$, begins at P with N char
INSTR(x$,y$) Return the position of y$ in x$
STG$(x$,N) Return string composed of N- first char of x$
FILES$(path) Display the 'path' matching files and return the file selected by the user
GETINI$(var) Read data from the INI file
PUTINI(var,text) Write data to the INI file
DATE$, TIME$ Return date and time, formatted by the Country command
KB(w) Plant a character into the keyboard buffer

Mouse Control

ShowMouse / HideMouse
DefRange / SetRange

Other functions and procedures

Delay(t) Wait t seconds (0.01)
Time Return the time in seconds from midnight. (0.05 sec)
Date Return the number of days passed from an historical date
IPORT(p) Return the input from the designated port
OPORT(p) Return the current output to the port
GETPLC(n) Return a value from the PLC's registers
PUTPLC(n,w) Write word w into PLC register n
Peek(a) / Poke(a,d) Read/Write byte, integer, longint, single, double and strings
Output(port, output, switch) Send an output. The switch can be: OFF, ON, ALL, TOGGLE
Beep(h,t) Beep at h Hertz for t milliseconds

Program control

BREAK Break from a loop
CONTINUE Continue a loop
SKIP Skip current motion or dwell on any desired event
CHAIN Chain another part-program
CALL Call a sub-program
RUN Run a new program
EXECDOS Call a DOS program

PLC commands - 16 bit integer arithmetic and logic

Registers #1 to #699 (16 bit)

Bottom(n) Display message 'n' on screen's bottom line
Sound(h) / Nosound Begin sound at h Hertz / Stop sound
Feed Return actual linear feed
Scan(word) Return the position of the highest set bit.
ClrTrace Clear trace error before drivers-on
GetIOP / PutIOP Read / write data from 8-16 bit port
Encoder Returns encoder changes (e.g., MPG)
Parity Get / Set parity
LogFile Write a record to the Log file