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; }