void FanucAdapter::configSpindleNames() { ODBSPDLNAME spindles[MAX_SPINDLE]; mSpindleCount = MAX_SPINDLE; short ret = cnc_rdspdlname(mFlibhndl, &mSpindleCount, spindles); if (ret == EW_OK) { int i = 0; for (i = 0; i < mSpindleCount; i++) { printf("Spindle %d : %c%c%c\n", i, spindles[i].name, spindles[i].suff1, spindles[i].suff2); char name[12]; int j = 0; name[j++] = spindles[i].name; if (spindles[i].suff1 > 0) name[j++] = spindles[i].suff1; name[j] = '\0'; char *cp = name + j; strcpy(cp, "speed"); mSpindleSpeed[i] = new Sample(name); addDatum(*mSpindleSpeed[i]); strcpy(cp, "load"); mSpindleLoad[i] = new Sample(name); addDatum(*mSpindleLoad[i]); } } else { printf("Failed to get splindle names: %d\n", ret); } }
FakeAdapter::FakeAdapter(int aPort) : Adapter(aPort, 1000), mAvailability("avail"), mSystem("system"), mPos("pos"), mExecution("exec") { addDatum(mAvailability); addDatum(mSystem); addDatum(mPos); addDatum(mExecution); }
/* Create and return a list that is ready for use with the sentence forms. For each node in the settings.wordFiles list, create a node whose left is the settings left (for example, %m) and whose right is the associated word list. */ list_t *loadWords(settings_t settings) { /* Variables used to create the list */ list_t *wordList = createList(); assignment_t *wordAssignment; list_t *wordFile; FILE *f; /* Variables from settings */ node_t *settingNode = settings.wordFiles->head; assignment_t *settingAssignment; char *settingFile; /* Load every node in settings.wordFiles */ while (settingNode != NULL) { settingAssignment = settingNode->datum; settingFile = settingAssignment->right; f = locateFile(settings, settingFile); wordFile = loadWordFile(f); fclose(f); wordAssignment = makeAssign(settingAssignment->left, wordFile); addDatum(wordList, wordAssignment); settingNode = settingNode->next; printf("Loaded %s\n", settingFile); } printf("Loaded the word files.\n\n"); return wordList; }
MtcOpcAdapter::MtcOpcAdapter(int aPort) : Adapter(aPort, 1000), mAvailability("avail") { addDatum(mAvailability); _bResetAtMidnight=false; _bRunning=false; _bOPCEnabled=false; }
void MtcOpcAdapter::AddCondition(std::string device, std::string tagname) { // static char name[] = "MtcOpcAdapter::AddCondition"; #ifdef MULTISHDR tagname=device+":"+tagname; #endif _conditions[tagname]=new Condition(tagname.c_str()); addDatum(*_conditions[tagname]); }
/* * Collect data from a pending-list page in preparation for insertion into * the main index. * * Go through all tuples >= startoff on page and collect values in accum * * Note that ka is just workspace --- it does not carry any state across * calls. */ static void processPendingPage(BuildAccumulator *accum, KeyArray *ka, Page page, OffsetNumber startoff) { ItemPointerData heapptr; OffsetNumber i, maxoff; OffsetNumber attrnum; /* reset *ka to empty */ ka->nvalues = 0; maxoff = PageGetMaxOffsetNumber(page); Assert(maxoff >= FirstOffsetNumber); ItemPointerSetInvalid(&heapptr); attrnum = 0; for (i = startoff; i <= maxoff; i = OffsetNumberNext(i)) { IndexTuple itup = (IndexTuple) PageGetItem(page, PageGetItemId(page, i)); OffsetNumber curattnum; Datum curkey; GinNullCategory curcategory; /* Check for change of heap TID or attnum */ curattnum = gintuple_get_attrnum(accum->ginstate, itup); if (!ItemPointerIsValid(&heapptr)) { heapptr = itup->t_tid; attrnum = curattnum; } else if (!(ItemPointerEquals(&heapptr, &itup->t_tid) && curattnum == attrnum)) { /* * ginInsertBAEntries can insert several datums per call, but only * for one heap tuple and one column. So call it at a boundary, * and reset ka. */ ginInsertBAEntries(accum, &heapptr, attrnum, ka->keys, ka->categories, ka->nvalues); ka->nvalues = 0; heapptr = itup->t_tid; attrnum = curattnum; } /* Add key to KeyArray */ curkey = gintuple_get_key(accum->ginstate, itup, &curcategory); addDatum(ka, curkey, curcategory); } /* Dump out all remaining keys */ ginInsertBAEntries(accum, &heapptr, attrnum, ka->keys, ka->categories, ka->nvalues); }
/* Load a file full of words into a list_t */ list_t *loadWordFile(FILE *f) { list_t *list = createList(); char *datum; while ((datum = readLine(f)) != NULL) addDatum(list, datum); return list; }
void MtcOpcAdapter::AddEvent(std::string device, std::string tagname) { // static char name[] = "MtcOpcAdapter::AddEvent"; #ifdef MULTISHDR tagname=device+":"+tagname; #endif _events[tagname]=new Event(tagname.c_str()); addDatum(*_events[tagname]); }
EmcAdapter::EmcAdapter(int aPort, const char *aNmlFile) : Adapter(aPort, 10), mAvail("avail"), mEstop("estop"), mExecution("execution"), mLine("line"), mPower("power"), mXact("Xact"), mYact("Yact"), mZact("Zact"), mXcom("Xcom"), mYcom("Ycom"), mZcom("Zcom"), mSpindleSpeed("spindle_speed"), mPathFeedrate("path_feedrate"), mProgram("program"), mMode("mode"), mBlock("block"), mPathFeedrateOverride("feed_ovr"), mSpindleSpeedOverride("SspeedOvr"), mLineMax("line_max"), mMessage("message") { addDatum(mEstop); addDatum(mMessage); addDatum(mPower); addDatum(mAvail); addDatum(mExecution); addDatum(mLine); addDatum(mXact); addDatum(mYact); addDatum(mZact); addDatum(mXcom); addDatum(mYcom); addDatum(mZcom); addDatum(mSpindleSpeed); addDatum(mPathFeedrate); addDatum(mProgram); addDatum(mMode); addDatum(mBlock); addDatum(mPathFeedrateOverride); addDatum(mSpindleSpeedOverride); addDatum(mLineMax); mErrorString[0] = 0; mEmcErrorBuffer = mEmcStatusBuffer = 0; strcpy(mNmlFile, aNmlFile); mConnected = false; mEstop = false; }
FanucAdapter::FanucAdapter(int aPort) : Adapter(aPort), mAvail("avail"), mExecution("execution"), mLine("line"), mPathFeedrate("path_feedrate"), mProgram("program"), mBlock("block"), mProgramComment("program_comment"), mMode("mode"), mMessage("message"), mEstop("estop"), mPathPosition("path_pos"), mServo("servo"), mComms("comms"), mLogic("logic"), mMotion("motion"), mSystem("system"), mSpindle("spindle"), mPartCount("part_count"), mProgramNum(-1), mToolId("tool_id"), mToolGroup("tool_group") { /* Alarms */ addDatum(mMessage); addDatum(mEstop); addDatum(mServo); addDatum(mComms); addDatum(mLogic); addDatum(mMotion); addDatum(mSystem); addDatum(mSpindle); /* Controller */ addDatum(mProgramComment); addDatum(mProgram); addDatum(mAvail); addDatum(mExecution); addDatum(mLine); addDatum(mPathFeedrate); addDatum(mMode); addDatum(mBlock); addDatum(mPartCount); addDatum(mToolId); addDatum(mToolGroup); addDatum(mPathPosition); mConfigured = mConnected = false; mAxisCount = mSpindleCount = mMacroSampleCount = mPMCCount = mMacroPathCount = 0; mXPathIndex = mYPathIndex = mZPathIndex = -1; mAvail.unavailable(); }
void FanucAdapter::configMacrosAndPMC(const char *aIniFile) { // Read adapter configuration mPort = ini_getl("adapter", "port", mPort, aIniFile); ini_gets("adapter", "service", "MTConnect Fanuc Adapter", mName, SERVICE_NAME_LEN, aIniFile); ini_gets("focus", "host", mDeviceIP, mDeviceIP, MAX_HOST_LEN, aIniFile); mDevicePort = ini_getl("focus", "port", mDevicePort, aIniFile); // Read adapter.ini to get additional macro variables and // PMC registers char name[100]; int idx; const static char *sDigits = "0123456789"; mMacroMin = 99999; mMacroMax = 0; // First look for macro variables for (idx = 0; ini_getkey("macros", idx, name, sizeof(name), aIniFile) > 0 && idx < MAX_MACROS; idx++) { char numbers[256]; ini_gets("macros", name, "", numbers, 256, aIniFile); if (numbers[0] == '[') { // We have a path macro. int x, y, z; char *cp = numbers + 1, *n; x = strtol(cp, &n, 10); if (cp == n) continue; cp = n; y = strtol(cp, &n, 10); if (cp == n) continue; cp = n; z = strtol(cp, &n, 10); if (cp == n) continue; int i = mMacroPathCount++; mMacroPath[i] = new MacroPathPosition(name, x, y, z); addDatum(*mMacroPath[i]); printf("Adding path macro '%s' at location %d %d %d\n", name, x, y, z); if (x > mMacroMax) mMacroMax = x; if (x < mMacroMin) mMacroMin = x; if (y > mMacroMax) mMacroMax = y; if (y < mMacroMin) mMacroMin = y; if (z > mMacroMax) mMacroMax = z; if (z < mMacroMin) mMacroMin = z; } else { char *cp = numbers, *n; long v = strtol(cp, &n, 10); if (cp == n) continue; int i = mMacroSampleCount++; mMacroSample[i] = new MacroSample(name, v); addDatum(*mMacroSample[i]); printf("Adding sample macro '%s' at location %d\n", name, v); if (v > mMacroMax) mMacroMax = v; if (v < mMacroMin) mMacroMin = v; } } for (idx = 0; ini_getkey("pmc", idx, name, sizeof(name), aIniFile) > 0 && idx < MAX_PMC; idx++) { long v = ini_getl("pmc", name, 0, aIniFile); mPMCVariable[idx] = new IntEvent(name); mPMCAddress[idx] = v; addDatum(*mPMCVariable[idx]); printf("Adding pmc '%s' at location %d\n", name, v); } mPMCCount = idx; }
void FanucAdapter::configAxesNames() { ODBAXISNAME axes[MAX_AXIS]; mAxisCount = MAX_AXIS; short ret = cnc_rdaxisname(mFlibhndl, &mAxisCount, axes); if (ret == EW_OK) { int i = 0; for (i = 0; i < mAxisCount; i++) { printf("Axis %d : %c%c\n", i, axes[i].name, axes[i].suff); char name[12]; int j = 0; name[j++] = axes[i].name; if (axes[i].suff > 0) name[j++] = axes[i].suff; name[j] = '\0'; if (axes[i].name == 'X' && (axes[i].suff == 0 || mXPathIndex == -1)) mXPathIndex = i; else if (axes[i].name == 'Y' && (axes[i].suff == 0 || mYPathIndex == -1)) mYPathIndex = i; else if (axes[i].name == 'Z' && (axes[i].suff == 0 || mZPathIndex == -1)) mZPathIndex = i; char *cp = name + j; strcpy(cp, "act"); mAxisAct[i] = new Sample(name); addDatum(*mAxisAct[i]); strcpy(cp, "com"); mAxisCom[i] = new Sample(name); addDatum(*mAxisCom[i]); strcpy(cp, "load"); mAxisLoad[i] = new Sample(name); addDatum(*mAxisLoad[i]); strcpy(cp, "travel"); mAxisTravel[i] = new Condition(name); addDatum(*mAxisTravel[i]); strcpy(cp, "overtemp"); mAxisOverheat[i] = new Condition(name); addDatum(*mAxisOverheat[i]); strcpy(cp, "servo"); mAxisServo[i] = new Condition(name); addDatum(*mAxisServo[i]); mAxisDivisor[i] = 1.0; } } else { printf("Failed to get axis names: %d\n", ret); exit(999); } short count, inprec[MAX_AXIS], outprec[MAX_AXIS]; ret = cnc_getfigure(mFlibhndl, 0, &count, inprec, outprec); if (ret == EW_OK) { for (int i = 0; i < count; i++) mAxisDivisor[i] = pow((long double) 10.0, (long double) inprec[i]); } else { printf("Failed to get axis scale: %d\n", ret); } }
void GuiGraphCtrl::onRender(Point2I offset, const RectI &updateRect) { if (mBlendSB.isNull()) { GFXStateBlockDesc desc; desc.setBlend(true, GFXBlendSrcColor, GFXBlendInvSrcColor); mBlendSB = GFX->createStateBlock(desc); desc.setBlend(false, GFXBlendOne, GFXBlendZero); mSolidSB = GFX->createStateBlock(desc); } GFX->setStateBlock( mBlendSB ); GFX->getDrawUtil()->drawRectFill( updateRect, mProfile->mFillColor ); GFX->setStateBlock( mSolidSB ); const Point2I globalPos = getGlobalBounds().point; const F32 midPointY = F32( globalPos.y ) + F32( getExtent().y ) * mCenterY; for( S32 k = 0; k < MaxPlots; ++ k ) { // Check if there is an autoplot and the proper amount of time has passed, if so add datum. if( mAutoPlot[ k ] && mAutoPlotDelay[ k ] < (Sim::getCurrentTime() - mAutoPlotLastDisplay[ k ] ) ) { mAutoPlotLastDisplay[ k ] = Sim::getCurrentTime(); addDatum( k, Con::getFloatVariable( mAutoPlot[ k ] ) ); } // Nothing to graph if( mGraphData[ k ].size() == 0 ) continue; // Adjust scale to max value + 5% so we can see high values F32 Scale = F32( getExtent().y ) / F32( mGraphMax[ k ] * 1.05 ); const S32 numSamples = mGraphData[ k ].size(); switch( mGraphType[ k ] ) { case Bar: { F32 prevOffset = 0; for( S32 sample = 0; sample < numSamples; ++ sample ) { PrimBuild::begin( GFXTriangleFan, 4 ); PrimBuild::color( mGraphColor[ k ] ); F32 offset = F32( getExtent().x ) / F32( MaxDataPoints ) * F32( sample + 1 ); PrimBuild::vertex2f( globalPos.x + prevOffset, midPointY - ( getDatum( k, sample ) * Scale ) ); PrimBuild::vertex2f( globalPos.x + offset, midPointY - ( getDatum( k, sample ) * Scale ) ); PrimBuild::vertex2f( globalPos.x + offset, midPointY ); PrimBuild::vertex2f( globalPos.x + prevOffset, midPointY ); prevOffset = offset; PrimBuild::end(); } break; } case Filled: { PrimBuild::begin( GFXTriangleStrip, numSamples * 2 ); // Max size correct? -pw PrimBuild::color( mGraphColor[ k ] ); for( S32 sample = 0; sample < numSamples; ++ sample ) { F32 offset = F32( getExtent().x ) / F32( MaxDataPoints - 1 ) * F32( sample ); PrimBuild::vertex2f( globalPos.x + offset, midPointY ); PrimBuild::vertex2f( globalPos.x + offset, midPointY - ( getDatum( k, sample ) * Scale ) ); } PrimBuild::end(); break; } case Point: case Polyline: { if( mGraphType[ k ] == Point ) PrimBuild::begin( GFXPointList, numSamples ); // Max size correct? -pw else PrimBuild::begin( GFXLineStrip, numSamples ); PrimBuild::color( mGraphColor[ k ] ); for( S32 sample = 0; sample < numSamples; ++ sample ) { F32 offset = F32( getExtent().x ) / F32( MaxDataPoints - 1 ) * F32( sample ); PrimBuild::vertex2f( globalPos.x + offset, midPointY - ( getDatum( k, sample ) * Scale ) ); } PrimBuild::end(); break; } } } if( mProfile->mBorder ) { RectI rect( offset.x, offset.y, getWidth(), getHeight() ); GFX->getDrawUtil()->drawRect( rect, mProfile->mBorderColor ); } renderChildControls( offset, updateRect ); }