Testing the configuration in the simulation
In a simulation, it is easy to test the configuration of the universal kinematics using an NC program if you have an approximate idea of the axis motion to be expected when moving with a transformation.
The NC program below can be used as a template which may have to be slightly modified.
In the NC program, the axis positions are logged to an output file by the NC command #MSG.
(See Writing messages to a file (#MSG SAVE) and Definition of file names (#FILE NAME))
The logged axis positions must then be compared with the expected axis positions.
Programing Example
Type and source of risk
;----------------------------------------------------------
;
; First configure the universal kinematics in the NC
; program instead of in the channel list.
; This simplifies the test since then the lists need
; not be reloaded every time.
;
;----------------------------------------------------------
; Tool points in Z direction
N00110 V.G.KIN[91].ZERO_ORIENTATION[0] = 0
N00120 V.G.KIN[91].ZERO_ORIENTATION[1] = 0
N00130 V.G.KIN[91].ZERO_ORIENTATION[2] = 1
; Zero position of the flange
N00160 V.G.KIN[91].ZERO_POSITION[0] = 10000
N00170 V.G.KIN[91].ZERO_POSITION[1] = 20000
N00180 V.G.KIN[91].ZERO_POSITION[2] = 30000
; 5 axes XYZCA
N00210 V.G.KIN[91].NUMBER_OF_AXES = 5
; X axis, translatory
N00240 V.G.KIN[91].AXIS[0].TYPE = 1
N00250 V.G.KIN[91].AXIS[0].ORIENTATION[0] = 1
N00260 V.G.KIN[91].AXIS[0].ORIENTATION[1] = 0
N00270 V.G.KIN[91].AXIS[0].ORIENTATION[2] = 0
; Y axis, translatory
N00300 V.G.KIN[91].AXIS[1].TYPE = 1
N00310 V.G.KIN[91].AXIS[1].ORIENTATION[0] = 0
N00320 V.G.KIN[91].AXIS[1].ORIENTATION[1] = 1
N00330 V.G.KIN[91].AXIS[1].ORIENTATION[2] = 0
; Z axis, translatory
N00360 V.G.KIN[91].AXIS[2].TYPE = 1
N00370 V.G.KIN[91].AXIS[2].ORIENTATION[0] = 0
N00380 V.G.KIN[91].AXIS[2].ORIENTATION[1] = 0
N00390 V.G.KIN[91].AXIS[2].ORIENTATION[2] = 1
; A axis
N00420 V.G.KIN[91].AXIS[3].TYPE = 2
N00430 V.G.KIN[91].AXIS[3].ORIENTATION[0] = 1
N00440 V.G.KIN[91].AXIS[3].ORIENTATION[1] = 0
N00450 V.G.KIN[91].AXIS[3].ORIENTATION[2] = 0
N00460 V.G.KIN[91].AXIS[3].POINT[0] = 40000
N00470 V.G.KIN[91].AXIS[3].POINT[1] = 50000
N00480 V.G.KIN[91].AXIS[3].POINT[2] = 60000
; C axis
N00510 V.G.KIN[91].AXIS[4].TYPE = 2
N00520 V.G.KIN[91].AXIS[4].ORIENTATION[0] = 0
N00530 V.G.KIN[91].AXIS[4].ORIENTATION[1] = 0
N00540 V.G.KIN[91].AXIS[4].ORIENTATION[2] = 1
N00550 V.G.KIN[91].AXIS[4].POINT[0] = 70000
N00560 V.G.KIN[91].AXIS[4].POINT[1] = 80000
N00570 V.G.KIN[91].AXIS[4].POINT[2] = 90000
; Axis sequence in the kinematic chain: XYZCA
N00600 V.G.KIN[91].CHAIN[0] = 0
N00610 V.G.KIN[91].CHAIN[1] = 1
N00620 V.G.KIN[91].CHAIN[2] = 2
N00630 V.G.KIN[91].CHAIN[3] = 4
N00640 V.G.KIN[91].CHAIN[4] = 3
; Programming mode 12 or 13, P-CHAN-00112
N00670 V.G.KIN[91].PROGRAMMING_MODE = 13
; Set RTCP mode
N00700 V.G.KIN[91].RTCP = 1
; Fetch axes
N00730 #SET AX [X, 1, 0] [Y, 2, 1] [Z, 3, 2] [A, 4, 3] [C, 5, 4]
;----------------------------------------------------------
;
; Now the machine can be moved, various
; tool lengths tried out, etc.
;
; #CHANNEL INIT fetches the axis position
; and outputs it with #MSG and V.A.ACS.ABS to a
; text file (normally "message.txt").
;
;----------------------------------------------------------
; Select transformation
N00870 #KIN ID [91]
N00880 #TRAFO ON
; move
N00910 G00 X0 Y0 Z0 B0
N00920 #FLUSH WAIT
N00930 #CHANNEL INIT [CMDPOS]
N00940 #MSG SAVE EXCLUSIVE ["X setpoint: %f", V.A.ACS.ABS.X]
N00950 #MSG SAVE EXCLUSIVE ["Y setpoint: %f", V.A.ACS.ABS.Y]
N00960 #MSG SAVE EXCLUSIVE ["Z setpoint: %f", V.A.ACS.ABS.Z]
N00970 #MSG SAVE EXCLUSIVE ["A setpoint: %f", V.A.ACS.ABS.A]
N00980 #MSG SAVE EXCLUSIVE ["C setpoint: %f", V.A.ACS.ABS.C]
N00990 #MSG SAVE EXCLUSIVE [""]
; Deselect transformation
N01020 #TRAFO OFF
; Change tool length
N01050 V.G.WZ_AKT.L = 99
; Select transformation
N01080 #KIN ID [91]
N01090 #TRAFO ON
; move
N01120 G00 X0 Y0 Z0 B0
N01130 #FLUSH WAIT
N01140 #CHANNEL INIT [CMDPOS]
N01150 #MSG SAVE EXCLUSIVE ["X setpoint: %f", V.A.ACS.ABS.X]
N01160 #MSG SAVE EXCLUSIVE ["Y setpoint: %f", V.A.ACS.ABS.Y]
N01170 #MSG SAVE EXCLUSIVE ["Z setpoint: %f", V.A.ACS.ABS.Z]
N01180 #MSG SAVE EXCLUSIVE ["A setpoint: %f", V.A.ACS.ABS.A]
N01190 #MSG SAVE EXCLUSIVE ["C setpoint: %f", V.A.ACS.ABS.C]
N01200 #MSG SAVE EXCLUSIVE [""]
; move
N01230 G00 X0 Y0 Z0 B45
N01240 #FLUSH WAIT
N01250 #CHANNEL INIT [CMDPOS]
N01260 #MSG SAVE EXCLUSIVE ["X setpoint: %f", V.A.ACS.ABS.X]
N01270 #MSG SAVE EXCLUSIVE ["Y setpoint: %f", V.A.ACS.ABS.Y]
N01280 #MSG SAVE EXCLUSIVE ["Z setpoint: %f", V.A.ACS.ABS.Z]
N01290 #MSG SAVE EXCLUSIVE ["A setpoint: %f", V.A.ACS.ABS.A]
N01300 #MSG SAVE EXCLUSIVE ["C setpoint: %f", V.A.ACS.ABS.C]
N01310 #MSG SAVE EXCLUSIVE [""]
; Deselect transformation
N01340 #TRAFO OFF
; end
N01370 M30