Beispiel #1
0
void FanucAdapter::getStatus()
{
  if (!mConnected)
    return;
  int ret;

  ODBST status;
  memset(&status, 0, sizeof(status));
  ret = cnc_statinfo(mFlibhndl, &status);
  if (ret == EW_OK)
  {
	// This will take care of JOG 
	if (status.aut == 5 || status.aut == 6) 
      mMode.setValue(ControllerMode::eMANUAL);
    else if (status.aut == 0 ||status.aut == 3) // MDI and EDIT
      mMode.setValue(ControllerMode::eMANUAL_DATA_INPUT);
    else // Otherwise AUTOMATIC
      mMode.setValue(ControllerMode::eAUTOMATIC);
              
    if (status.run == 3 || status.run == 4) // STaRT
      mExecution.setValue(Execution::eACTIVE);
    else 
    {
      if (status.run == 2 || status.motion == 2 || status.mstb != 0) // HOLD or motion is Wait
        mExecution.setValue(Execution::eINTERRUPTED);
      else if (status.run == 0) // STOP
        mExecution.setValue(Execution::eSTOPPED);
      else
        mExecution.setValue(Execution::eREADY);
    }
    if (status.emergency == 1)
      mEstop.setValue(EmergencyStop::eTRIGGERED);
    else
      mEstop.setValue(EmergencyStop::eARMED);

    char buf[1024];
    unsigned short len = sizeof(buf);
    short num;
    ret = cnc_rdexecprog(mFlibhndl, (unsigned short*) &len, &num, buf);
    if (ret == EW_OK)
    {
      buf[len] = '\0';
      for (int i = 0; i < len; i++)
      {
        if (buf[i] == '\n')
        {
          buf[i] = '\0';
          break;
        }
      }
              
      mBlock.setValue(buf);
    }
  }
  else
  {
    disconnect();
  }
}
int CiSeries::getStatus()
{
	GLogger.LogMessage("iSeries::getStatus Enter\n", 3);

	if (!_adapter->mConnected)
		return -1;

	short ret;
	IODBSGNL sgnl;

	/// Difference 15i versus 16/18/.. i series
	if (EW_OK == (ret=cnc_rdopnlsgnl(_adapter->mFlibhndl, 0xFFFF, &sgnl)))
	{
		std::string sFovr = StdStringFormat("%d", (int) sgnl.feed_ovrd );

		// Broken?
		//_adapter->SetMTCTagValue("path_feedrateovr", sFovr);
		_adapter->SetMTCTagValue("path_feedrateovr", "100");
			_adapter->SetMTCTagValue("Sovr", "100");
	}
	else
	{
		_adapter->SetMTCTagValue("Sovr", "100");
		_adapter->SetMTCTagValue("path_feedrateovr", "100");
		GLogger.Warning(StdStringFormat("Error: iSeries::cnc_rdopnlsgnl=%d\n", ret));
		LogErrorMessage("Error: iSeries::cnc_rdopnlsgnl", ret);
	}


	//this one may fail
	// bit 6	:	Spindle override signal (only Series 15)
	//if(EW_OK == cnc_rdopnlsgnl(_adapter->mFlibhndl, 0x40, &sgnl)) 
	//	_adapter->SetMTCTagValue("Sovr", StdStringFormat("%8.4f", sgnl.spdl_ovrd * 10.0));


	ODBST status;
	ret = cnc_statinfo(_adapter->mFlibhndl, &status);
	if (ret == EW_OK)
	{
		GLogger.Info(StdStringFormat("Controller mode iSeries::cnc_statinfo=%d\n", status.aut));
		// Series 16/18/21/0/Power Mate 
		if (status.aut == 0) // MDI for aut
		_adapter->SetMTCTagValue("controllermode", "MANUAL");
		else if (status.aut != 2) // Other than no selection or MDI
			_adapter->SetMTCTagValue("controllermode", "AUTOMATIC");
		else
			_adapter->SetMTCTagValue("controllermode", "MANUAL");

		/** run 
		Status of automatic operation 0  :  ****(reset)  
		1  :  STOP  
		2  :  HOLD  
		3  :  STaRT  
		4  :  MSTR(during retraction and re-positioning of tool retraction and recovery, and operation of JOG MDI)  
		*/
		GLogger.Info(StdStringFormat("Execution mode iSeries::cnc_statinfo=%d\n", status.run));

		if(status.run == 0 )
			_adapter->SetMTCTagValue("execution", "IDLE");
		else if (status.run == 1 || status.run == 2) //  STOP or HOLD is ePAUSED
			_adapter->SetMTCTagValue("execution", "PAUSED");
		else if (status.run >2) // STaRT
			_adapter->SetMTCTagValue("execution", "EXECUTING");
		//else if (status.run ==4) 
		//	_adapter->SetMTCTagValue("execution", "PAUSED");
		//else
		//	_adapter->SetMTCTagValue("execution", "PAUSED");
	}
	else
	{
		_adapter->disconnect();
	}
	GLogger.LogMessage("iSeries::getStatus Leave\n", 3);
	return EW_OK;
}