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.
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.
All internal motion calculations are performed in 1 nanometer resolution (ultra-high-precision nano interpolation). Nano interpolation generates smoother path and better surface finish.
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
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.
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.
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.
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.
Three different displays can show where the part-program is. They can be switched any time:
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.
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.
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 ...... else ...... end #56=red #57=white sound(1000) #333=encoder(#2,#377)
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.
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.
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.
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
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.
n10 #1=SIN(#2 + LOG(15.37/2)) + sqrt(1+2)*3 n20 g1 If #2>=1.25 Then x1.25 Else x#2 end n30 WHILE #14<10 G81 x#14 y-1.7 #14+=2.25 WEND n40 FOR #1=1 TO 10 GOSUB 1000; NEXT #1
n100 g1 x10 y20 z=x+y n200 if s>3000 then s3000 end
n10 A$='abcd' B$=input$(B$) #1=asc('Y') n20 if A$==B$+'.CNC' then ...... endif n30 print 'par #1= ',#1; n40 print "That's all folks!" M2
For ... To ... Next While... Wend Repeat ... Until
Program debugging facilities:
CRT displays the following: (user arranged)
|@@||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|
|H||TCP mode for rotary head|
|I,J,K||Absolute polar center, offset for a Cartesian arc|
|P||Angle for polar coordinates, look ahead angle|
|@P||Vertical angle for spherical coordinates|
|@R||Smaller radius for toroid|
|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.
|G2/3||Circular interpolation (X,Y,R or X,Y,I,J)|
|G5||Polar zero from Cartesian|
|G7||3 point arc or circle|
|G14||Polar to Cartesian|
|G15||Polar zero shift|
|G12.1/13.1||Circular interpolation (using P or @P to select plane)|
|G14.1||Spherical to Cartesian|
|G15.1||Spherical zero shift|
|G16||Plane defined by PLANE(x,y,z)|
|G40||Cancel tool radius compensation|
|G41/42||Tool radius compensation, left/right|
|G41.1/42.1||3D tool radius compensation|
|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|
|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|
|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
|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|
|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)|
|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|
Define arrays: Dim a(10), b(8,8), C$(80)
Arrays names: A to Z
Total number of components: 8200
Read matrix components (fast)
|** * / %||power, multiply, divide, modulo|
|+ -||add, sub (minus)|
|> < ==||greater, less, equal|
|>= <= <>||ge, le, ne|
|NOT AND OR XOR||logical operations|
|~ & | ^||bit-wise not, and, or, xor|
|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)|
|LN(x)||Returns the natural log|
|RND(x)||If x=0 returns a random number 0 to .9999999 If x>0 then an integer 0 to x-1|
|FILES||Open a directory for file selection|
|EXIST||Identify Device, File, Directory, Network, or none|
|OPEN||Open file (input, output, append, random)|
|EOF||Return End-Of-File status|
|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|
|Title||Print a window title|
|Subtitle||Print a window sub title|
|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|
|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|
|ShowMouse / HideMouse|
|DefRange / SetRange|
|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|
|ON..., GOTO, GOSUB... RETURN|
|IF... THEN... ELSE... ENDIF|
|FOR... TO... NEXT (DOWNTO)|
|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|
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|