Hoy te traigo cómo generar números aleatorios en TIA Portal.
Sí, ya sé que Siemens tiene la LGF que puedes encontrar aquí, y que tiene una función de generar números aleatorios.
Pero, ¿y si quisieras hacerlo por tu cuenta? ¿o para Step 7 clásico?
Pues aquí entra la imaginación… y las matemáticas.
Para generar números pseudoaleatorios, podemos usar el generador lineal congruencial.
Casi mejor, que te lo explico en el siguiente vídeo.
Números aleatorios en TIA Portal
Como ves, la gracia de este método es que podrías usarlo con un poco de imaginación en Step7 tradicional también.
Podrías usar valores como a(multiplicador) = 1103515245, c (incremeto) = 12345 y un módulo = 2^16
Lo mejor es que juegues con ello, eches un vistazo a las fórmulas y llegues a tu fórmula más adecuada para crear tus números aleatorios en TIA Portal.
¿Qué te ha parecido?
Espero tus comentarios sobre el tema.
Yo la verdad que a nivel industrial con un PLC nunca he usado un número random, pero nunca se sabe.
Además, ya tienes el código para saber cómo obtener la fecha y hora en UNIX en caso de necesidad.
Recuerda que los conocimientos de SCL lo puedes adquirir en el Curso completo de TIA Portal!
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
3 Comentarios
Buenas Iñigo, algo es algo, no es un reto como tal, pero no está mal.
Como sabes te sigo en tu blog porque me gusta, verás los números aleatorios como bien dices, de aleatorios tienen más bien poco, ya que si no se toman las debidas precauciones se repetirán cada vez que se ejecute la aplicación dentro del mismo PC, aquí la demostración:
https://youtu.be/VxnPZBq5kpQ
Por otra parte, en industria no se usan casi nunca por no decir nunca, pero por ejemplo en una simulación de presencia para hacer las maniobras en diferentes horas si sería una buena opción.
Yo los he usado en una aplicación que está en mi canal sobre una máquina tragaperras, obviamente yo fuerzo los aleatorios para que ANTES de que salga el premio, predecir cual será este, es más, en dicha aplicación obligo a que salga el premio que yo quiera con la particularidad de que aunque seleccione el mismo premio, este será en diferente orden de frutas, esa aplicación tiene su historia, resulta que un cliente mío tiene un pariente que se dedica al negocio de las tragaperras, pues en una barbacoa salió el tema de que esas máquinas no son del todo claras, el insistía en que no se pueden «manipular» las máquinas y que todo era producto del azar…hombre por favor…
https://youtu.be/xV0d59z-MmM
Aquí os la dejo para que tus alumnos puedan trabajar con aleatorios.
Saludos y gracias por compartir.
A ver, lo que sucede es simplemente que si no cambias la semilla, y empiezas desde cero siempre con la misma semilla, pues logicamente te salen los mismos resultados. Eso es lo que hace randomize, simplemente elegir una semilla diferente, cosa que se hace con la hora del reloj en el ejemplo que he puesto, ya que tú no eres capaz de saber en qué milisegundo va a pararse y por tanto, no puedes prever el siguiente número.
Además, lo suyo no es pedir un random cada vez que quieras, sino que el random se esté generando de forma continua de forma que cuando se solicite no sea, el 1, el 2, el 3.. sino que por si mismo sea aleatorio cuando se va a solicitar un número que se está generando de forma continua y por tanto, es impredicible cuál va a ser el siguiente número. Eso incluso sin cambiar de semilla.
La semilla con que se genere al principio del programa, sería suficiente si luego estas generando números aleatorios de continuo y simplemente lo que haces es consultar cuando necesites el número actual, el que toque en ese momento. pero no los obtienes de forma secuenciada.
De esa forma, ya te digo que no tienes cojones a saber cuál es el número que va a salir cuando pulses el botón, porque entre pulsaciones de botón se han generado un número indeterminado de números aleatorios, que no sabes cuántos y por tanto, si es aleatorio en gran medida por la simple incertidumbre de cuándo vas a pulsar el botón. Si a eso le añades que cada X tiempo de forma indeterminada (usando un temporizado que a su vez se base en un número aleatorio) cambie de semilla, empiezas a tener cada vez más aleatoriedad.
Hola Iñigo, totalmente de acuerdo con lo que escribes, yo lo hago operando con los milisegundos, los segundos, los minutos, incluso la hora, cualquier operación realizada con esas variables, dará un resultado diferente cada vez, eso está claro, es más, los guardas en cualquier forma para luego recorrerlos, si no está pues adelante…
Peeeeeeero, eso no quita de que la máquina tragaperras use la programación que yo he usado, y he aquí mi duda o pregunta, de la cual obviamente ya sé la respuesta, aún así te lo pregunto, ¿Cómo crees que se ha realizado esa configuración para que de antemano se obtenga cualquier combinación ganadora, o, de antemano se anteponga los premios que dará, sin repetir la posición de la fruta?.
La idea mía es obtener otras ideas, concretamente de gente como tú que son las que me interesan.
Saludos.