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

prg_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