Originally Posted by
blinkenlight
In the CNC milling world, there are generally two types of coordinate systems: work coordinates (which you may re-zero arbitrarily using touch-off whenever you want) and machine coordinates, that are supposed to be absolute, and used by the machine controller to know its own limits and avoid hitting the end of the axes. These are not supposed to be changed - you configure them once in your LinuxCNC config file (sorry, forgot which one exactly), and the machine is supposed to find / verify them using your home switches whenever you tell it to "home". With home switches disabled / unused your machine very likely has the wrong idea about where it actually is, and it clearly thinks it would hit the end if it moved the Z axis - what you can do is make sure you configured the actual z-travel you have in the appropriate config file (as advised above), then check the _machine coordinates_ LinuxCNC displays and make sure it actually is within the z-interval you configured...
EDIT: sorry, just noticed you are able to move even Z by jogging - if you can get it to move that way to the height you would expect to mill at, your machine coordinates are OK. However, you still need to tell the machine where you want to be when milling - a.k.a. touch off the Z-axis as well, normally to read zero when the tool touches the top of your workpiece (PCB surface, in this case).