News:

SMF - Just Installed!

Main Menu

Crear sensor optico e inductivo personalizado

Started by Alejandro.Valera, May 14, 2012, 02:35:40 AM

Previous topic - Next topic

Alejandro.Valera

Muchas gracias, Rafael. Por la pronta respuesta de mi anterior post, me sirvio para dar con la soluciona a mi problema.

Estoy interesado en crear un detector optico y otro inductivo a partir de una malla de mi creacion.

He visto que creaste este tipo de detectores, el problema es que no puedo acceder a ellos desde el editor de componentes, y de esa manera ver el codigo fuente de su funcionamiento para adaptarlo a mi malla.

Podria encontrar informacion de C++ de XNA 2.0. que me sirviese. ¿Las funciones que usa el Machine Simulator en C++, son sacadas de XNA 2.0, o las has creado tu?

Estoy creando una simulacion de una estacion de aprendizaje de Festo (MPS), y me gustaria que fuese lo mas fidedigna posible a la original.

Un saludo, y gracias por tu ayuda.

EasyPLC_Master

Para detectar WorkParts simulando el funcionamiento de un sensor óptico o inductivo, Machines Simulator ofrece dicersas funciones algunas de ellas son:

int WorkPartCollisionId(int id);

   Description: Returns the WorkPart Id number that collides with the id box component.
   Example: int selWp = Editor.WorkPartCollisionId(1);

int WorkPartRayColId(int id, Vector3 pos, Vector3 target);

   Description: Returns the WorkPart Id number that collides with a Ray form the id box component, with pos Vecctor position and target direction.
   Example: int selWp = Editor.WorkPartRayColId(1, new Vector3(0.5f, 0, 0.2f), Vector3.Up);

int WorkPartDistRayColId(int id, Vector3 pos, Vector3 target, float distance);

   Description: Returns the WorkPart Id number that collides with a Ray form the id box component, with pos Vecctor position, target direction and the distance is equal or lower than distance.
   Example: int selWp = Editor.WorkPartDistRayColId(1, new Vector3(1.0f, 0, 0.2f), Vector3.Up, 0.5f);


Puedes ver algún ejemplo en el UserDefinedComponent VerticalGantry, este elemento tiene un dectector en la parte del electroimán para detectar cuando una pieza está en el area de captura:

if(IO.GetOutput("Active_Magnet"))
{
   if(!part)
      searchPart = box[9].WorkPartDistRayCol(box[9].body.Position, box[9].body.Orientation.Forward, detect);

      if(searchPart != null)
   {
      part = true;
      IO.SetInput("Part_Detected", true);
      TakePart();
   }

}
else
{
   if(searchPart != null)
   {
      searchPart.body.EnableBody();
      searchPart = null;
      IO.SetInput("Part_Detected", false);
      part = false;
   }
}

Espero que te sirva de ayuda.

Saludos.