Buenos días Maximiliano,
Te paso los links así actualizas
StxLadder a la versión 1.7.9 que soporta números aleatorios:
http://www.slicetex.com/ladder/soft/old/StxLadder-Setup-1.7.9.zipEn el caso del PLC, debes actualizar el firmware a la version 204:
http://www.slicetex.com/hw/stx8092/soft.htmlPodes leer este documento para la actualización de firmware:
http://www.slicetex.com/ladder/docs/files/STXLADDER-FU.pdf
Adjunto te paso un ejemplo para usar las funciones
Ramdom().
El ejemplo genera secuencias de números pseudo-aleatorios y las muestra en
VirtualHMI.
Conectar VirtualHMI al PLC, tocar botón "ON" en VirtualHMI para conectarse, y esperar la secuencia de números que se imprimirán en la pantalla LCD de VirtualHMI, cambiando cada 3 segundos.
Las funciones disponibles son:RandomSeed(Seed) = Establece una semilla (
Seed) para generar una nueva secuencia de números pseudo-aleatorios. Debe llamarse antes de generar números con las funciones
Ramdom. Si la semilla es diferente, cada secuencia de N números generados por las funciones
Random será diferente, de lo contrario, serán secuencias iguales.
Ejemplo:
El siguiente ejemplo genera dos secuencias de 10 números aleatorios diferentes, ya que se utilizan dos semillas diferentes antes de la generacion de cada secuencia.
new NumbersA[10]
new NumbersB[10]
// Inicializar semilla.
RandomSeed(1)
// Generar secuencia de 10 números aleatorios.
for(new i=0; i < 10; i++)
{
// Generar un numero entre 0 y 1000.
NumbersA[i] = Random(1000)
}
// Inicializar semilla con otro valor.
RandomSeed(2)
// Generar secuencia de 10 números aleatorios.
for(new i=0; i < 10; i++)
{
// Generar un numero entre 0 y 1000.
NumbersB[i] = Random(1000)
}
Una semilla diferente puede obtenerse leyendo la hora/fecha en segundos con la función
RtcGetTimestamp(), pero este numero cambia cada 1 segundo. De la misma manera, la función
TimeGetTickCount() devuelve un numero entero diferente cada 10 mS. Ambas funciones pueden usarse como semillas, si las secuencias generadas pueden estar a intervalos mayores a los tiempos descriptos. De lo contrario, deben buscarse métodos alternativos para generar semillas.
RandomRange(Min, Max) = Genera un numero pseudo-aleatorio entre el rango Min y Max. Donde
Max es igual o mayor a
Min.
Ejemplo:
El siguiente ejemplo genera una secuencia de 10 números aleatorios diferentes.
new Numbers[10]
// Inicializar semilla.
RandomSeed(TimeGetTickCount() + RtcGetTimestamp())
// Generar secuencia de 10 números aleatorios.
for(new i=0; i < 10; i++)
{
// Generar un numero entre 0 y 1000.
Numbers[i] = RandomRange(0, 1000)
}
Random(Max) = Genera un numero pseudo-aleatorio entre el rango 0 y Max.
Ejemplo:
El siguiente ejemplo genera una secuencia de 10 números aleatorios diferentes.
new Numbers[10]
// Inicializar semilla.
RandomSeed(TimeGetTickCount() + RtcGetTimestamp())
// Generar secuencia de 10 números aleatorios.
for(new i=0; i < 10; i++)
{
// Generar un numero entre 0 y 1000.
Numbers[i] = Random(1000)
}
Nota: También existe la función
random(Max), que genera números entre el rango 0 y Max-1.
RandomR() = Genera un numero pseudo-aleatorio entre el rango 0 y la constante MATH_RAND_MAX (2147483647).
Esta función a diferencia de RandomRange(), Random() y random(), es mas rápida en cuanto a velocidad para generar el numero aleatorio, y puede ser utilizada en situaciones donde se deban generar grandes cantidades de números aleatorios por secuencia.
Ejemplo:
El siguiente ejemplo genera una secuencia de 10 números aleatorios diferentes.
new Numbers[10]
// Inicializar semilla.
RandomSeed(TimeGetTickCount() + RtcGetTimestamp())
// Generar secuencia de 10 números aleatorios.
for(new i=0; i < 10; i++)
{
// Generar un numero entre 0 y MATH_RAND_MAX .
Numbers[i] = RandomR()
}
Saludos, quedamos a disposición por cualquier duda.