Antes de continuar deciros que podéis ampliar información en la ayuda de Plc Control, en Information System.

Arrays.
En Plc Control se pueden crear arrays de hasta tres dimensiones.
Ejemplos de declaración Codesys.
Array1 :ARRAY [0..9] OF INT; Array2 :ARRAY[0..9,0..9,0..9] OF INT;
Ejemplo de declaración de array en Vb.net.
Dim Array1(10) As Short Dim Array2(10,10) As Short
Programa ejemplo para Codesys.
(*ZONA DE DECLARACIÖN*) PROGRAM MAIN VAR Memo :ARRAY[0..9] OF INT; Suma:INT; Valor:INT; MemoValor:INT; Media:INT; Indice:INT; i: BYTE; conf :BOOL; END_VAR (*ZONA DE PROGRAMA*) (*En este ejemplo calculamos la media de la variable valor. En lugar de hacerlo en un tiempo determinado lo haremos por cambio de valor de la variable de proceso. De esta manera la media se actualiza mas rápido cuando los cambio son rápidos. Pero TIENE EL GRAN INCONVENIENTE QUE SI NO CAMBIAN EL VALOR NO CAMBIARA LA MEDIA. Es solo un ejemplo*) (*Configuración para el primer ciclo de scan cuando la variable Valor es distinta de 0 llenamos la matriz con ese valor *) IF NOT Conf AND Valor <> 0 THEN FOR i := 0 TO 9 DO Memo[i] := Valor; END_FOR; Conf := TRUE; MemoValor := Valor; END_IF ; (*Si cambia la variable Valor llenamos el siguiente registro de la matriz*) IF Valor <> MemoValor THEN Memo[indice] := Valor; Indice := Indice + 1; IF Indice > 9 THEN Indice := 0; END_IF; MemoValor := Valor; END_IF; (*Calculamos la media*) Suma := 0; i:= 0; FOR i := 0 TO 9 DO Suma :=Suma + Memo[i]; END_FOR; IF Suma <> 0 THEN Media := Suma / 10; ELSE Media := 0; END_IF; (*FIN*)
Programa ejemplo para Vb.net
Public Class Form1 Dim Memo(10) As Short Dim MemoValor As Short Dim Conf As Short Dim Indice As Byte Private Sub buActualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buActualizar.Click Dim Valor As Short = TextBox1.Text Dim Media As Short Dim Suma As Short Dim i As Integer 'Configuración para la primera actualización If Not Conf And Valor <> 0 Then For i = 0 To 9 Memo(i) = Valor Next Conf = True MemoValor = Valor End If 'Si cambia la variable valor llenamos el siguiente registro de la matriz If Valor <> MemoValor Then Memo(Indice) = Valor Indice += 1 If Indice > 9 Then Indice = 0 MemoValor = Valor End If 'Calculamos la media For i = 0 To 9 Suma += Memo(i) Next 'Comprobamos que la suma no sea 0 para no dividir por 0 If Suma <> 0 Then Media = Suma / 10 Else Media = 0 laMedia.Text = Media End Sub End Class
NOTA: He modificado el programa de las cajas de código para poder ver el ST, aun quedan algunos detalles pero espero ir retocándolo (cuando tenga un poco de tiempo).
Categoria:
Conceptos basicos

Añadir un comentario