Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Conversión de C++ a Vi

Tengo 2 problemillas, estoy "pasando" un código de C++ a LabView 7.1. Según yo trabaja mas o menos mi código, cuando le doy en Highlight execution funciona bien (salvo corregir algunos detallitos de lógica). Pero lo ejecuto en forma normal, y se traba, y no tengo idea del porque. Estoy trabajando con Timers.
 
Esto es lo que quiero "pasar" de C++ a LabView ojalá me pudieran dar una mejor solución.:

Si esta en un lugar “x” y  su timer esta apagado, echo a andar el timer. Si sigue en ese lugar y cumplió el tiempo que tiene que estar ahí, apago el timer y enciendo la memoria:

Si ((vec_mar[x] = 1) y (vec_tiempo[xx].ban = 0))

{vec_tiempo[xx].time=Timer();

  vec_tiempo[0].ban=1;

}

Si ((vec_mar[x]= 1)  y (vec_tiempo[0].ban = 1))

{time=Timer();

 si (time >= vec_tiempo[0].time)

  { mtxx=1;

     vec_tiempo[0].ban=0;

   }

}

 sino

  mtxx=0;

}         

 

Estoy trabajando con Redes de Petri, (muy parecido a maquinas de estado), esa parte del código es la que me tiene con problemas.

0 kudos
Mensaje 1 de 3
3.282 Vistas
Intenté hacerlo de otra manera, pero sucede lo mismo, cuando lo ejecuto con el Highlight execution me funciona a la perfección. Pero cuando lo ejecuto normalmente con Run Continuously, ya no funciona, no hace lo mismo que con el Highlight execution. Espero su pronta ayuda. (ademas pues para no repetir eso lo quiero meter en una función, se como usar subvis, pero no con timers, porque necesito sacar unas salidas antes del timer y otras después del timer)
0 kudos
Mensaje 2 de 3
3.278 Vistas
 
 

Hola Fercho8,  cuando hay problemas de que funciona bien en HIghlight execution y no cuando corre normalmente son problemas de tiempo. Highlight execution solamente alentar la ejecución para poder verlo. Viendo tu código hay bastantes variables lo que puede producir una race condition.

 

 

Una race condition es cuando no sabes que dato se le o se escribe y en que orden. Por ejemplo en el siguiente diagrama no puedes saber el resultado (si les el valor para la operación o escribes el valor de la variable primero o si hay varios lugares en el que se escribe quien es el que escribió ates de que leyeras.

 

 

La forma más fácil de disminuir esto es reducir el número de variables. Para pasar los datos en un ciclo de la ejecución anterior a la nueva es mejor usar un shift register en lugar de una variable:

 

 

https://www.ni.com/docs/en-US/bundle/labview/page/passing-one-value-to-the-next-loop-iteration.html

 

 

Espero que esto te ayude con tu programa

 

 

Saludos

 

 

Mensaje editado por BeCeGa

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 3 de 3
3.266 Vistas