Buenos dias,
Para crear un array bidimensional haces:
new Array[x][y]
Donde "x" es la fila e "y" es la columna. Pero "y" puede contener varios elementos y ser un "array" en si mismo.
Por ejemplo, si necesitas registrar "30" eventos con "2" valores enteros cada uno, haces:
new Array[30][2]
Para acceder al registro "15", y sumar los valores "1" y "2", podes hacer:
new Array[30][2]
new Suma
Suma = Array[14][0] + Array[14][1]
Notar que los elementos de cada array empiezan con el indice "0", por lo que acceder al elemento "1" de la fila "15", se indexa como: Array[14][0]
Finalmente, una forma simple de registrar hora/fecha es usar un "
TimeStamp".
Un
TimeStamp es un numero entero que contiene el numero de segundos que pasaron desde el 01/01/1970 a las 00:00 hs.
La función
RtcGetTimestamp() te devuelve el TimeStamp del segundo actual.
Entonces, teniendo ese numero entero, es facil almacenarlo de forma compacta en un array de enteros.
Luego la función
TimeConvertTimestamp() te permite convertir ese
TimeStamp en valores legibles por un humano.
Ejemplo:Supongamos que tenemos el timestamp de un evento que ocurrió en determinado momento (que pudo
haber ocurrido en cualquier fecha). Con la función TimeConvertTimestamp() podemos obtener la fecha y
hora en que el evento ocurrió.
// Variables que almacenará el TimeStamp y fecha/hora.
new TimeStamp, Day, Month, Year, Hour, Min, Sec
// Obtener timestamp actual
TimeStamp = RtcGetTimestamp()
// Esperar 1 segundo (solo a modo de ejemplo)
DelayS(1)
// Obtener fecha y hora a partir de variable TimeStamp.
TimeConvertTimestamp(TimeStamp, Day, Month, Year, Hour, Min, Sec)
// Imprimir fecha y hora del reloj en display LCD de VirtualHMI.
nLcdPrintf(0, 0, LCD_CLRLINE, "%02d/%02d/%d", Day, Month, Year)
nLcdPrintf(0, 1, LCD_CLRLINE, "%02d:%02d:%02d", Hour, Min, Sec)
Ve rmanual
STX80XX-MP-PLC-AX_CX_DX.pdf para descripción de funciones completas, ver pag. 161.
Para tu ejemplo de Array podes aplicarlo de la siguiente manera:
En cada minuto, almacenas el valor de la muestra analógica y el
TimeStamp.
Supongamos el siguiente código (ilustrativo):
new Samples[30][2]
// Almacenar en fila 0 del array muestra analogica y timestamp.
Samples[0][0] = VinRead(1)
Samples[0][1] = RtcGetTimestamp()
// ... 1 minuto despues ...
// Almacenar en fila 1 del array muestra analogica y timestamp.
Samples[1][0] = VinRead(1)
Samples[1][1] = RtcGetTimestamp()
Luego si queres obtener la hora/fecha de la muestra almacenada haces:
// Variables que almacenará el TimeStamp y fecha/hora.
new TimeStamp, Day, Month, Year, Hour, Min, Sec
// Obtener timestamp de muestra "5"
TimeStamp = Samples[4][1]
// Obtener fecha y hora a partir de variable TimeStamp.
// En las variables Day, Month, Year, Hour, Min, Sec queda el valor convertido.
TimeConvertTimestamp(TimeStamp, Day, Month, Year, Hour, Min, Sec)
Los mismo que para convertir a voltaje la muestra "5" obtenida con VinRead(1), podes hacer:
// Crear variable para almacenar voltaje.
new Float: Voltaje1 = 0
// Convertir la muestra binaria adquirida a voltaje, almacenar
// en variable "Voltaje1". Especificar como resolución 12 bits.
Voltaje1 = Float: VinToVoltage(1, Samples[4][0], 12)
Deberias hacer alguna funcion Pawn que emprolije el código y lo haga mas accesible.
Saludos