Instrucción CPT
Instrucción CPT
Instrucción CPT
Hasta aqu todo bien, a todos nos dara por pensar que para dividir con esta instruccin
bastara con poner por ejemplo: 10 / 2, pero de intentarlo as nos saldra el error: Invalid
expresin!
A pesar de que en las explicaciones aparece bien explicado yo no me di cuenta hasta fracasar
varias veces, porque la lgica me deca que el smbolo de dividir es este / y no este |, en
Rslogix 5000 si es /.
En el teclado de mi PC del trabajo no encontr la lnea vertical, en m PC de casa est en el 1
debajo de F1, se inserta pulsando ALT GR + 1.
Para los teclados en los que no lo encontris en el mapa de caracteres nos dice que el
smbolo es 7C en hexadecimal 124 en decimal, sale pulsando ALT + 124.
En el mapa de caracteres de Windows lo podemos encontrar.
Se podra hacer con la instruccin MOV si solo es un valor, pero yo prefiero poner la
instruccin COP porque si queremos copiar ms de un dato podramos simplemente
cambiando el origen que tendra que ser de otro ARRAY y el largo que sera el que
necesitemos.
Yo he creado un ARRAY de longitud 32 para que cada da se guarde dentro del ARRAY en la
posicin que corresponda con el da y en la posicin 0 guardo el total del mes
Para borrar el mes cuando queramos utilizamos un bit que al pulsarlo habilita la instruccin
FLL que rellena archivos con un valor, ponemos en el origen un 0 en destino el primer valor
que queremos borrar y en el largo los que queramos borrar.
Aunque no tiene nada que ver con el ejemplo de direccionamiento indirecto, ya que estamos
explico que yo tambin sumo el total del mes.
No he encontrado ninguna instruccin que sume un array completo, se supone que con la
instruccin FAL se podra pero yo no lo he conseguido.
Con la instruccin AVE podemos calcular el promedio de un array, as que en tabla le
decimos donde tiene que empezar a promediar que es en el da 1 Calendario.Enero[1] en
destino le decimos donde queremos guardar el promedio en este caso es
Calendario.Media_mensual[1] y en el largo le decimos los das que tiene el mes y ya est.
Yo lo hago a travs de AVE por que no s cmo se hara de otro modo que sea as de fcil, as
que para saber el total del mes tenemos que multiplicar el promedio del mes por los das que
tiene el mes.
(AVE solo se ejecuta una vez cada vez que se activa, por eso utilizamos .DN de la propia
instruccin para que cada vez que se haya ejecutado se vuelva a ejecutar)
Dentro de Data Types Pulsamos con el botn derecho del ratn User-Defined
Se nos abre una ventana en la que rellenamos el nombre y una pequea descripcin
(Importante para en un futuro saber de qu se trata).
En mi caso:
- Name: Calendario
-Description: Registro diario de un dato, con media y total mensual; y total anual
Una vez hecho lo anterior pulsamos sobre Add Member
Dentro de Add Member rellenamos el nombre de la variable (Intentaremos que no sea muy
largo, pues la variable se va a llamar por el Como despus llamemos a la estructura.como se
llame la propia variable) y una pequea descripcin (Importante para en un futuro saber de
qu se trata).
En mi caso:
-Name: Enero
-Data Type: Un Array de 32 reales REAL[32]
-Description: Registro de Enero (Enero[0] total del mes y el resto coincide con el da por
ejemplo da 1 Enero[1])
Una vez hecho todo lo anterior pulsamos sobre OK y habremos terminado la estructura de
datos, a continuacin vamos a usarla.
Pulsamos donde queramos usar la estructura para que se nos abra el rbol, en mi caso la voy
a crear en el controlador, as que pulsamos sobre el nombre del controlador, y cuando se
despliegue el rbol pulsamos con el lado derecho del ratn sobre Controler Tags
Y ya tenemos creadas cerca de 400 Variables en un momento, reutilizable el dato tantas veces
necesitemos.
Esta estructura de datos la vamos a usar prximamente para crear un Bloque de funcin.
Para borrar los valores ponemos un botn que se llame Reset y movemos un 0 a N7:6 que es
el puntero, por seguridad movemos un 0 a N7:7 que es el canal que yo he utilizado para poder
borrar los valores de N113 ya que en la instruccin FLL no admite constantes, como la
instruccin solo admite 128 canales lo hacemos en dos veces.
En el artculo anterior se intento dar una posible solucin del siguiente ejercicio considerando
que la programacin la estabamos realizando en un S7-300/400/1200, hoy veremos como
resolverlo utilizando el RSLogix 5000.
Ejercicio:
Se trata de realizar un FB (Add-On en Rockwell) que filtre una seal de entrada analgica de
tipo WORD de la siguiente manera:
-Se activar el byte de marcas cclicas por hardware y se elegir el bit de marcas que permita
un muestreo de la seal analgica de 1s (Con el RSLogix 5000 no tenemos esta opcin con lo
cual nosotros generaremos la seal cada segundo)
-El FB deber tener una entrada de tipo BOOL (que ser el bit de ciclo mencionado en el
punto anterior) y una entrada de tipo WORD
(correspondiente a la seal analgica que se pretende muestrear)
-El FB tendr una salida (de tipo REAL) que corresponder, en cada instante de muestreo, a
la media de la muestra actual capturada de la seal analgica junto con sus tres muestras
anteriores. Todas ellas debern irse almacenando en el DB de instancia asociado al FB. Por
otro lado, se utilizarn las variables
temporales necesarias.
-El resultado que proporciona el FB (la media indicada) podr declararse como salida o como
variable esttica.
Con el RSLogix 5000 tenemos la opcin de crear nuestras propias funciones y reutilizarlas,
para la creacin de una nueva, en el directorio Add-On -> New Add-On Instruction
Se nos ha abierto el siguiente asistente, donde navegando por los diferentes menus, haremos
la configuracin.
Lo primero que vamos a definir, sern las variables de entrada y salida, especificando el tipo
de dato a utilizar en el menu de Parameters
Como estoy reutilizando el cdigo del ejercicio anterior, hay que hacer unas pequeas
modificacines, pero el cdigo en si, es el mismo, incluso un poco mas simplificadado, ya que
no hace falta las funciones que utilizabamos para las conversion de datos, para una mejor
visualizacin pulsa en la imagen.
Ya podemos utilizar nuestra funcin, pero antes de ello, definimos una nueva variable en
nuestro Program Tags, y especificamos que sea del tipo de nuestra funcin.
La variable que se nos crea, es del tipo estructura con los datos definidos, accedemos a sus
diferentes campos con el nombre de la variable (Estructura) "." seguido del campo que nos
interese.
Para la utilizacin de la funcin creamos una subrutina, donde le pasamos los valores de
entrada a nuestra funcion, seguido de la funcin y obtenemos los resultados al final
Y por ltimo hacemos la llamada desde el programa principal a las diferentes subrutinas y
comprobamos su funcionamiento que es correcto.