how to level kossel's endstops? My printer is kossel (delta 3d printer).

I have a probe far away from the nozzle (offset -x45 y17),every time I run G29, the result is unacceptable, the z distance between points is over 0.5mm, it's not because of the probe's accuracy, I test repeatedly the result is the same.

I cost much time level the bed, finally I realize maybe it's because not only my bed, but also my z max endstops are not horizontal.

My question is 


how to level the z endstops? (now I think both bed and z endstops are not horizontal)
is my analyzation correct? any other possible?
First, you should make sure that printing surface is adjusted correctly: it must be perpendicular to all three delta columns, all other adjustable parts must be checked and adjusted if necessary (depending on actual printer design).

Assuming that upper end-stops can be adjusted as well.


Home effector with G28 command, then move it close to one column (some versions of Marlin have these commands hardcoded in the menu)
Move Z-axis slowly until the nozzle touches the bed
Record Z position
Repeat above steps for two remaining columns
Then adjust end stops: if you need to raise nozzle (it touches the bed too early), then you move endstop up. If nozzle is too high (it reaches Z0 and still toes not touch the bed), then move endstop down.
Move endstops very gently because sometimes it it can be a matter of a fraction of millimeter.
After endstops calibration is done, verify that nozzle is properly calibrated at the center of the bed. Or run G29 if you like.


This procedure should make your endstops properly adjusted relative to the printing bed.