--get_inport_state 	获得输入端口的状态，只能返回false或true，不能用0来表示false。
--get_outport_state	获得输出端口的状态，只能返回false或true，不能用0来表示false。
--set_outport       设置输入端口状态，可以用0和1表示false和true
--start_process			程序开始
--sys_stop					程序停止
--run_gcode					执行G代码
--get_state					获取当前系统状态
--get_mode					获取当前系统模式
--get_page_row			获取当前的一级菜单项
--show_message			在警报栏显示信息
--show_message_box	以对话框方式显示信息
--get_lang_version	获取系统语言
--get_tool_index		获取当前刀具号
--is_bkref					是否已回原点
--set_mode					设置当前系统模式
--set_state					设置当前系统状态
--get_tick_count		获取当前计数器的计数
--get_rparam        获取#变量
--set_rparam        设置#变量
--get_curpos		获取当前机械坐标
--get_workcoorno	获取当前机械坐标系
--set_customer      设置客户类型
--get_ClientAbbr	客户缩写
--get_BoardType		写号
--get_BoardCode		板卡号

--系统的状态：IDLE_STATE，IDLE_STATE，ESTOP_STATE，RUN_STATE，PAUSING_STATE
--系统的模式：BKREF_MODE，AUTO_MODE，JOG_MODE，INC_MODE，MDI_MODE

--模式
BKREF_MODE = 0x0100;
AUTO_MODE = 0x0200;
JOG_MODE = 0x0300;
INC_MODE = 0x0400;
MDI_MODE = 0x0500;

--对话框返回值
IDOK = 1
IDCANCEL = 0

--状态
IDLE_STATE = 0x0001;
LOCK_STATE = 0x0002;
ESTOP_STATE = 0x0003;
RUN_STATE = 0x0004;
PAUSING_STATE = RUN_STATE + 1;

--手持盒LED状态灯 对应值是逻辑地址 逻辑地址如果发生变化其也应该变化
LED_RUN         = 19
LED_SPIN        = 20
LED_ALM         = 21
LED_GY18        = 22
LED_GY19        = 23
LED_GY20        = 24

-------------------------------------------------------------------
--客户配置
CUSTOMER_NK105 = 0
CUSTOMER_NK105_TOOL = 0x70 --通用直排换刀
set_customer(CUSTOMER_NK105_TOOL)
-------------------------------------------------------------------


--get_ClientAbbr	客户缩写
--get_BoardType		写号
--get_BoardCode		板卡号

--开机启动校验
function nc_InitSystem()
	return true
	
	--if false then
	--	show_message_box("Can not start");
	--	return false
	--end
end

--220ms定时器				         
function ExIOFunction()
	CheckToolState()
	nc_check_air_state()
	nc_manual_tool_clamp_release()	
end

function CheckToolState()
	if get_state() ~= IDLE_STATE then
		return
	end
	
	--复位换刀状态
	if get_rparam(48) == 1 then
		set_rparam(48, 0)
	end
	
end

--实时检测气压状态
g_airalm = false   --防止多次进入
function nc_check_air_state()
  local bState =  get_state()
  
  if get_inport_state(24) then
	 show_message("s_szILLEGAL_AIR")
     if not g_airalm then
        g_airalm = true   
   
        --停止加工，空闲状态下，不能程序开始         
        if (bState == RUN_STATE  or bState == PAUSING_STATE) then
             sys_stop()
        end           
     end
     
  else
     g_airalm = false
  end
end

--100ms定时器
function nc_100ms_timer()

end

--手动松夹刀
g_spin_tool_oldmask = -1
g_timeDelay = -1
function nc_manual_tool_clamp_release()
	local bInport = get_inport_state(13)
	local spin_tool_mask = 0

	if g_timeDelay <= -1 and bInport then
		 g_timeDelay = 200
		 return
	elseif g_timeDelay > 0 then
	   if bInport then
	      g_timeDelay = g_timeDelay - 100
	   else
	      g_timeDelay = -1
	   end
	   return
	else
		g_timeDelay = -1
	end

	if bInport then
	  spin_tool_mask = 1
	else
	  spin_tool_mask = -1
	end

	if g_spin_tool_oldmask == spin_tool_mask then
		return
	end

    local state = get_state()
   --急停状态下 可以松夹刀
    --if state ~= ESTOP_STATE then
	    if state ~= IDLE_STATE then
		     show_message("s_szILLEGAL_OPER")
		     g_spin_tool_oldmask = spin_tool_mask
		     return
	    end
    --end
    
	if get_outport_state(0) or get_outport_state(1) then
	    show_message("s_szSpindleOpen")
	    g_spin_tool_oldmask = spin_tool_mask
        return
    end
    	
	--按下输出 弹起关闭
  if get_user_param(3) == 0 then
      if  bInport then
          g_spin_tool_oldmask = 1
          if not get_outport_state(9) then
              set_outport(9, 1)
          end
      else
          set_outport(9, 0)
          g_spin_tool_oldmask = -1
      end
  --按下输出，在按下关闭
  elseif get_user_param(3) == 1 then
      if  bInport then
          g_spin_tool_oldmask = 1
          if get_outport_state(9) then
              set_outport(9, 0)
          else
              set_outport(9, 1)
          end
      else
         g_spin_tool_oldmask = -1
      end 
  end
end


--K1按键
function AssistantK1Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	 if get_outport_state(0) or get_outport_state(1) then
			show_message("s_szSpindleOpen")
			return
	 end
	    
	 if get_outport_state(9) then
		  set_outport(9, 0);
	 else
	  
	    --打开时需要对话框提示
	  	if show_message_box("s_szEnsureTool") == IDCANCEL then;
		  	return;	
	  	end
	  		 
	  	set_outport(9, 1);
	 end		
end

--K2按键
function AssistantK2Func()
	if get_rparam(48) == 1 then
	   show_message("s_szChangeToolMode")
		 return
	end
	
	_bHasInport = get_outport_state(25);
	if _bHasInport then
		set_outport(25, 0);
	else
		set_outport(25, 1);
	end		
end

--此功能键目前只能在空闲状态下生效
--主轴启动
function axis_on()
	_state = get_state();
	_mode  = get_mode();
	if (_state == ESTOP_STATE) then
		show_message_box("s_szPROMPT_RUNSPINDLE");
		return;
	elseif (_state == RUN_STATE and (_mode == BKREF_MODE or _mode == MDI_MODE)) then
		show_message("s_szPROMPT_STARTSPINDLE")
		return;			
	elseif not get_inport_state(10) then
		if show_message_box("s_szNoClampSignal") == IDCANCEL then;
			return;	
		end
	end
	
	set_outport(1, 1);
	set_outport(6, 1);	
end

--此功能键目前只能在空闲状态下生效
--主轴停止
function axis_off()
	_state = get_state();
	_mode  = get_mode();
	if ((get_outport_state(1) == 1) and (_state == RUN_STATE or _state == PAUSING_STATE)) then
		if show_message_box("s_szPROMPT_SPINDLEOFF") == IDCANCEL then;
			return;	
		end
	end
	
	set_outport(1, 0);
	set_outport(6, 0);	
end

--程序开始
function start_auxiop()
	return true
end

--程序停止
function stop_auxiop()
	return true
end

--断点继续
function resume_auxiop()
	return true
end

--提供10组自定义组合键
function AssistantShift1Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T1")
end

function AssistantShift2Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T2")
end

function AssistantShift3Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T3")
end

function AssistantShift4Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T4")
end

function AssistantShift5Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T5")
end

function AssistantShift6Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T6")
end

function AssistantShift7Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T7")
end

function AssistantShift8Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T8")
end

function AssistantShift9Func()
	if get_state() ~= IDLE_STATE then
	  show_message("s_szILLEGAL_ASSISTANTOPER")
		return
	end
	
	set_mode(AUTO_MODE)
	run_gcode("T9")
end

function AssistantShift10Func()
end

--LED显示 定时器调用
function on_led()
	_state = get_state();
	
	--RUN_LED
	if _state == RUN_STATE or _state == PAUSING_STATE then
		 set_outport(LED_RUN, 1)
	else
	   set_outport(LED_RUN, 0)
	end
	
	--SPIN_LED
	if get_outport_state(1) then
		 set_outport(LED_SPIN, 1)
	else
	   set_outport(LED_SPIN, 0)
	end
	
	--ALM_LED
	if _state == ESTOP_STATE then
		 set_outport(LED_ALM, 1)
	else
	   set_outport(LED_ALM, 0)
	end
	
	--GY18_LED
	if get_outport_state(9) then
		 set_outport(LED_GY18, 1)
	else
	   set_outport(LED_GY18, 0)
	end
	
	--GY19_LED
	if get_outport_state(6) then
		 set_outport(LED_GY19, 1)
	else
	   set_outport(LED_GY19, 0)
	end
	
	--GY20_LED
	if get_outport_state(25) then
		 set_outport(LED_GY20, 1)
	else
	   set_outport(LED_GY20, 0)
	end
end