function SaveMachinePosition()   
   local inst = mc.mcGetInstance()
   mc.mcProfileWriteDouble(inst, "MyConfig", "MachinePosX", mc.mcAxisGetMachinePos(inst, mc.X_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "MachinePosY", mc.mcAxisGetMachinePos(inst, mc.Y_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "MachinePosZ", mc.mcAxisGetMachinePos(inst, mc.Z_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "MachinePosA", mc.mcAxisGetMachinePos(inst, mc.A_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "PosX", mc.mcAxisGetPos(inst, mc.X_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "PosY", mc.mcAxisGetPos(inst, mc.Y_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "PosZ", mc.mcAxisGetPos(inst, mc.Z_AXIS))
   mc.mcProfileWriteDouble(inst, "MyConfig", "PosA", mc.mcAxisGetPos(inst, mc.A_AXIS))
   mc.mcProfileSave(inst)
   mc.mcProfileFlush(inst)
end
function LoadMachinePosition()   
   local inst = mc.mcGetInstance()
   
   local MachinePosX = mc.mcProfileGetDouble(inst , "MyConfig", "MachinePosX", 0)
   local MachinePosY = mc.mcProfileGetDouble(inst , "MyConfig", "MachinePosY", 0)
   local MachinePosZ = mc.mcProfileGetDouble(inst , "MyConfig", "MachinePosZ", 0)
   local MachinePosA = mc.mcProfileGetDouble(inst , "MyConfig", "MachinePosA", 0)
   
   local PosX = mc.mcProfileGetDouble(inst , "MyConfig", "PosX", 0)
   local PosY = mc.mcProfileGetDouble(inst , "MyConfig", "PosY", 0)
   local PosZ = mc.mcProfileGetDouble(inst , "MyConfig", "PosZ", 0)
   local PosA = mc.mcProfileGetDouble(inst , "MyConfig", "PosA", 0)
   local HomeOffsetX_Saved, rc = mc.mcAxisGetHomeOffset(inst, mc.X_AXIS)
   local HomeOffsetY_Saved, rc = mc.mcAxisGetHomeOffset(inst, mc.Y_AXIS)
   local HomeOffsetZ_Saved, rc = mc.mcAxisGetHomeOffset(inst, mc.Z_AXIS)
   local HomeOffsetA_Saved, rc = mc.mcAxisGetHomeOffset(inst, mc.A_AXIS)
      
   local HomeInPlaceX_Saved, rc = mc.mcAxisGetHomeInPlace(inst, mc.X_AXIS)
   local HomeInPlaceY_Saved, rc = mc.mcAxisGetHomeInPlace(inst, mc.Y_AXIS)
   local HomeInPlaceZ_Saved, rc = mc.mcAxisGetHomeInPlace(inst, mc.Z_AXIS)
   local HomeInPlaceA_Saved, rc = mc.mcAxisGetHomeInPlace(inst, mc.A_AXIS)
   
   local SoftlimitEnableX_Saved, rc = mc.mcAxisGetSoftlimitEnable(inst, mc.X_AXIS)
   local SoftlimitEnableY_Saved, rc = mc.mcAxisGetSoftlimitEnable(inst, mc.Y_AXIS)
   local SoftlimitEnableZ_Saved, rc = mc.mcAxisGetSoftlimitEnable(inst, mc.Z_AXIS)
   local SoftlimitEnableA_Saved, rc = mc.mcAxisGetSoftlimitEnable(inst, mc.A_AXIS)
         
--   local MachinePosX=math.random()*100
   
   mc.mcAxisSetHomeInPlace(inst, mc.X_AXIS,1)
   mc.mcAxisSetHomeInPlace(inst, mc.Y_AXIS,1)
   mc.mcAxisSetHomeInPlace(inst, mc.Z_AXIS,1)
   mc.mcAxisSetHomeInPlace(inst, mc.A_AXIS,1)
   
   mc.mcAxisSetSoftlimitEnable(inst, mc.X_AXIS,1)
   mc.mcAxisSetSoftlimitEnable(inst, mc.Y_AXIS,1)
   mc.mcAxisSetSoftlimitEnable(inst, mc.Z_AXIS,1)
   mc.mcAxisSetSoftlimitEnable(inst, mc.A_AXIS,1)
   
   mc.mcAxisSetHomeOffset(inst,mc.X_AXIS, MachinePosX)
   mc.mcAxisSetHomeOffset(inst,mc.Y_AXIS, MachinePosY)
   mc.mcAxisSetHomeOffset(inst,mc.Z_AXIS, MachinePosZ)
   mc.mcAxisSetHomeOffset(inst,mc.A_AXIS, MachinePosA)
   rc=mc.mcProfileSave(0)
--   rc=mc.mcProfileFlush(0) --Flush changes to the INI file.
--   rc = mc.mcAxisDeref(inst, mc.X_AXIS);
--   rc = mc.mcAxisDeref(inst, mc.Y_AXIS);
--   rc = mc.mcAxisDeref(inst, mc.Z_AXIS);
--   rc = mc.mcAxisDeref(inst, mc.A_AXIS);
   rc = mc.mcAxisDerefAll(inst);
   
--   Message(HomeOffsetX_Saved.. " -X> ".. MachinePosX .. " mc.mcAxisGetHomeInPlace(inst, mc.X_AXIS)="..mc.mcAxisGetHomeInPlace(inst, mc.X_AXIS))
--   Message(HomeOffsetY_Saved.. " -Y> ".. MachinePosY)
--   Message(HomeOffsetZ_Saved.. " -Z> ".. MachinePosZ)
--   Message(HomeOffsetA_Saved.. " -A> ".. MachinePosA)
   local OSIG_MACHINE_ENABLED_saved = GetSignal(mc.OSIG_MACHINE_ENABLED)
   if (OSIG_MACHINE_ENABLED_saved==0) then
      mc.mcCntlEnable(inst,1)
--      Sleep(100)
   end
   
   mc.mcCntlReset(inst)
   rc = mc.mcAxisHome(   inst, mc.X_AXIS)
   mc.mcCntlReset(inst)
   rc = mc.mcAxisHome(   inst, mc.Y_AXIS)
   mc.mcCntlReset(inst)
   rc = mc.mcAxisHome(   inst, mc.Z_AXIS)
   mc.mcCntlReset(inst)
   rc = mc.mcAxisHome(   inst, mc.A_AXIS)
   mc.mcCntlReset(inst)
   
   mc.mcAxisSetHomeOffset(inst, mc.X_AXIS,HomeOffsetX_Saved)
   mc.mcAxisSetHomeOffset(inst, mc.Y_AXIS,HomeOffsetY_Saved)
   mc.mcAxisSetHomeOffset(inst, mc.Z_AXIS,HomeOffsetZ_Saved)
   mc.mcAxisSetHomeOffset(inst, mc.A_AXIS,HomeOffsetA_Saved)
   
   mc.mcAxisSetSoftlimitEnable(inst, mc.X_AXIS,SoftlimitEnableX_Saved)
   mc.mcAxisSetSoftlimitEnable(inst, mc.Y_AXIS,SoftlimitEnableY_Saved)
   mc.mcAxisSetSoftlimitEnable(inst, mc.Z_AXIS,SoftlimitEnableZ_Saved)
   mc.mcAxisSetSoftlimitEnable(inst, mc.A_AXIS,SoftlimitEnableA_Saved)
         
   mc.mcAxisSetHomeInPlace(inst, mc.X_AXIS,0)
   mc.mcAxisSetHomeInPlace(inst, mc.Y_AXIS,0)
   mc.mcAxisSetHomeInPlace(inst, mc.Z_AXIS,0)
   mc.mcAxisSetHomeInPlace(inst, mc.A_AXIS,0)
   
   rc=mc.mcProfileSave(0)
   rc=mc.mcProfileFlush(0) --Flush changes to the INI file.
   
   mc.mcAxisSetPos(inst, mc.X_AXIS,PosX)
   mc.mcAxisSetPos(inst, mc.Y_AXIS,PosY)
   mc.mcAxisSetPos(inst, mc.Z_AXIS,PosZ)
   mc.mcAxisSetPos(inst, mc.A_AXIS,PosA)
   
   mc.mcCntlEnable(inst,OSIG_MACHINE_ENABLED_saved)
end