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::getLine() { GLogger.LogMessage("iSeries::getLine Enter\n", 3); std::string prognum,progname; short ret; if (!_adapter->mConnected) return -1; GLogger.Info("iSeries::getLine\n"); ODBSEQ block; ret = cnc_rdseqnum(_adapter->mFlibhndl, &block ); // 15,16,18,21,0,powermate if (ret == EW_OK) { _adapter->SetMTCTagValue("line", StdStringFormat("%d", block.data)); } else { GLogger.Info(StdStringFormat("Error iSeries::cnc_rdseqnum=%d\n", ret)); } ODBPRO buf ; ret = cnc_rdprgnum( _adapter->mFlibhndl, &buf ) ; // 15,16,18,21,0,powermate if (ret == EW_OK) { //prognum=StdStringFormat("O%04hd", buf.data); // mdata - Main program number. data- Running program number. prognum=StdStringFormat("O%04d", buf.data); // mdata - Main program number. data- Running program number. GLogger.Info(StdStringFormat("iSeries::cnc_rdprgnum prognum = %d\n", buf.mdata)); GLogger.Info(StdStringFormat("iSeries::cnc_rdprgnum prognum = %d\n",(int) (buf.mdata&0xFFFF))); GLogger.Info(StdStringFormat("iSeries::cnc_rdprgnum prognum data = %d\n",(int) (buf.data&0xFFFF))); } else { GLogger.Info(StdStringFormat("Error CiSeries::cnc_rdprgnum=%d", ret)); LogErrorMessage(" CiSeries::cnc_rdprgnum FAILED\n", ret ); } if(1) // Globals.ProgramLogic == "FirstComment") { short i, blk; unsigned short num; short top = 0; char prg[BUFSIZE+1]; std::string sLine; //do { num = BUFSIZE; ret = cnc_rdexecprog(_adapter->mFlibhndl,&num, &blk, prg); if ( ret == EW_LENGTH ) { LogErrorMessage(" iSeries::cnc_rdexecprog FAILED Length Error\n", ret ); goto error; } if ( ret ) { LogErrorMessage("iSeries::cnc_rdexecprog NOSPECIFIC ERROR\n", ret ); goto error; } // Find first comment ( ) SHOULD BE ON FIRST LINE // Extract comment, if not null assign to progname, which is output as program to MTConnect { //sLine = prg[i].comment; sLine = prg; // [i].comment; int n = sLine.find("("); int m= sLine.find(")"); if(std::string::npos ==n && std::string::npos ==m) { LOGONCE GLogger.Fatal(StdStringFormat("Didn't find comment %s\n",sLine.c_str())); goto error; } sLine= sLine.substr(n+1,m-n-1); if(!sLine.empty() && sLine != "()") { // GLogger.Fatal(StdStringFormat("Program Name = %s\n",sLine.c_str())); progname=sLine; } } } error: if(!progname.empty()) { _adapter->SetMTCTagValue("program", progname); } else if(!prognum.empty()) { _adapter->SetMTCTagValue("program", prognum); } else { _adapter->SetMTCTagValue("program", "O1"); } GLogger.LogMessage("iSeries::getLine Leave\n", 3); return EW_OK; }