Esempio n. 1
0
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);
}
Esempio n. 3
0
/*
	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]);
}
Esempio n. 6
0
/*
 * 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);
}
Esempio n. 7
0
/*
	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;
}
Esempio n. 10
0
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();
}
Esempio n. 11
0
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;
}
Esempio n. 12
0
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);
  }
}
Esempio n. 13
0
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 );
}