Fecha de publicación: Mar 08, 2014 10:5:30 PM
Muchas veces, nos encontramos en la encrucijada en que a nuestros proyectos microcontrolados u con PLC (controladores lógicos programables) de automatización y control, le falta su software de control y monitoreo y por carencia de conocimientos en programacion, dejamos esta parte a un lado.
También podemos sumar la cuota de que quizás un PLC comercial no esta dentro del rango monetario que manejamos; Es por ello que como no hay tema similar en el foro, y creí que quizás a varios les puede llegar a interesar saber como crear sus propios automatismos e incluirles sus propias plataformas SCADA para monitorear y controlar variables en un proceso.... En otras palabras, decidí crear este mini tutorial para entrarlos en el tema... Aclaro:
1_"No importa si no tienes conocimientos de programacion de software, en este caso, vamos a dejar de lado VB u otros lenguajes de programacion complejos y vamos a tratar el tema con un sencillo editor y generador de SCADA open source".
2_"No importa si no sabes programar en lenguaje escalera... en pocos pasos, vamos a ver el tema y aprenderemos a programar en este lenguaje sencillo"
En paralelo a todo esto, conoceremos otro software libre para programar una sencilla placa con un microcontrolador (PIC - AVR), en lenguaje de escalera (LADDER), que es el lenguaje por lo general empleado, en la gran mayoría de los PLC...
Un dato relevante sobre estos dos software, es que XSACADA emplea varios protocolos de comunicación, lo cual nos permite hacer aplicaciones en las cuales podemos crear nuestras aplicaciones tanto como para controlar cosas desde el puerto serial de nuestra PC (Ethernet esta dentro de las posibilidades), también podemos comunicarnos con un microcontrolador u bien, emplear modbus y establecer comunicación con PLC comerciales....
Por otro lado, el editor y compilador LDmicro, que emplearemos para programar nuestras placas microcontroladas; Tiene todas las funciones que podemos encontrar en un PLC comercial, mas un par de funciones mas que lo complementan y hacen una herramienta eficaz.
Bueno, arranco subiendo dos sencillos videos. En el primero, a modo de ejemplo, intentare mostrarles básicamente como emplear el protocolo de comunicación empleado por el software editor gratuito XSCADA para generar sus propias aplicaciones de control.
El mismo puede ser empleado para lo que quieran (Control por puertos de la PC - Microcontroladores - Internet - PLC - Etc.)
El segundo video, ya es un ejemplo un poco mas comlpeto, y les muestro las distintas funcionalidades que le podemos dar. En el ejemplo, pueden ver un extracto de nuestra placa entrenadora (ver en la seccion descarga) y un scada armado para controlar y monitorear esta.
Arranquemos de lleno con el tema, viendo primero, un poco de informacion al respecto...
Un controlador lógico programable, más conocido por sus siglas en inglés PLC (Programmable Logic Controller), es una computadora utilizada en la ingeniería automática o automatización industrial, para automatizar procesos electromecánicos, tales como el control del proceso de una maquinaria en una fábrica ensambladoras de autopartes en vehiculos por ejemplo.
Los PLCs son utilizados en muchas industrias y máquinas. A diferencia de las computadoras de propósito general, el PLC está diseñado para múltiples señales de entrada y de salida, rangos de temperatura ampliados, inmunidad al ruido eléctrico y resistencia a la vibración y al impacto, ahorrando asi costos en mantenimiento y aumentando la confiabilidad de los equipos.
Además, programar un PLC resulta bastante sencillo.
Como ya mencione en reiteradas ocasiones, el campo de la automatización y control, es un campo muy abarcativo al igual que el campo de la instrumentación. Este sistema de control de procesos, no tuvo su origen cuando aparecieron en el mercado los PLC. En si, no voy a emplazarme hasta aquellas épocas para contarles con detalles cual fue su evolución, pero tratare de esforzarme y ser breve para crearles una noción básica.
Origen de la Automatizacion:
Esta es una ciencia que hace su aparición mucho antes de que el hombre descubriera la electricidad; si bien era bastante precaria, el ingenio del hombre, lo llevo a conocer y estudiar otras ciencias para aprender a emplearlas en sus automatismos (leyes de la física tales como palancas, poleas, niveles y hasta presión y caudal).
La automatización, hasta hoy en día fue evolucionando con las nuevas innovaciones tecnológicas hasta tener lo que llamamos controladores lógicos programables de la era análoga-digital; pero hasta hace tan solo unas décadas atrás, el hombre implementa su ingenio nuevamente, y descubre que controlando el paso de la energía, se puede hacer automatismos con lógicas cableadas.
Los 1eros PLC, eran sencillamente eso, inmensos tableros llenos de relay y cables que estaban armados de tal manera que daban una secuencia de permisos y condiciones para funcionar. Si bien eran muy lentos en el diseño y armado, también tenia la contra de que si se quería reformar su lógica de funcionamiento, había que arrancar prácticamente desde cero. A este tipo de sistemas, se los denomina: “Automatización con lógicas de contactos”.
Con la aparición de nuevos instrumentos electrónicos, esas inmensas estructuras de relay, se fueron achicando y simplificando, hasta llegar a lo que hoy en día conocemos como: “Automatización con lógicas cableadas”…
Si bien, la Automatizacion con logicas cableadas es un tecnica que hoy en dia seguimos imlementando; Las grandes empresas de tecnologia en automatizacion emplearon microprocesadores y microcontroladores para poder ahorrar aun mas el espacio de trabajo y el tiempo demandado en la creacion de un tablero de control cableado... Es aqui el nacimiento de los PLC (Controladores Logicos Programables). Que en si, son circuitos con una electronica programable, gobernado por una unidad de control o MCU que se encarga de procesar una logica de control, segun las directivas que se le dieron (temporixzadores - comparadores - logicas booleanas - etc) en base a una adquisicion de datos de campo (señales de entrada); Las cuales generan una respuesta en los puertos de salida del PLC.
SCADA viene de las siglas de "Supervisory Control And Data Adquisition", es decir: adquisición de datos y control de supervisión.
Basicamente se trata de una aplicación software especialmente diseñada para funcionar sobre ordenadores en el control de producción, proporcionando comunicación con los dispositivos de campo (controladores autónomos, autómatas programables, etc.) y controlando el proceso de forma automática desde la pantalla del ordenador. Además, provee de toda la información que se genera en el proceso productivo a diversos usuarios, tanto del mismo nivel como de otros supervisores dentro de la empresa: control de calidad, supervisión, mantenimiento, etc. En este tipo de sistemas usualmente existe un ordenador, que efectúa tareas de supervisión y gestión de alarmas, así como tratamiento de datos y control de procesos. La comunicación se realiza mediante buses especiales o redes LAN. Todo esto se ejecuta normalmente en tiempo real, y están diseñados para dar al operador de planta la posibilidad de supervisar y controlar dichos procesos. Los programas necesarios, y en su caso el hardware adicional que se necesite, se denomina en general sistema SCADA. Este gráfico es un ejemplo de la aplicación del sistema SCADA en áreas industriales. Éstas áreas pueden ser:
* Monitorizar procesos químicos, físicos o de transporte en sistemas de suministro de agua, para controlar la generación y distribución de energía eléctrica, de gas o en oleoductos y otros procesos de distribución.
* Gestión de la producción (facilita la programación de la fabricación);
* Mantenimiento (proporciona magnitudes de interés tales para evaluar y determinar modos de fallo, MTBF, índices de Fiabilidad, entre otros);
* Control de Calidad (proporciona de manera automatizada los datos necesarios para calcular índices de estabilidad de la producción CP y CPk, tolerancias, índice de piezas NOK/OK, etc;
* Administración (actualmente pueden enlazarse estos datos del SCADA con un servidor ERP (Enterprise Resource Planning o sistema de planificación de recursos empresariales), e integrarse como un módulo más);
* Tratamiento histórico de información (mediante su incorporación en bases de datos). Prestaciones.
Un paquete SCADA debe estar en disposición de ofrecer las siguientes prestaciones:
- Posibilidad de crear paneles de alarma, que exigen la presencia del operador para reconocer una parada o situación de alarma, con registro de incidencias.
- Generación de históricos de señal de planta, que pueden ser volcados para su proceso sobre una hoja de cálculo.
- Ejecución de programas, que modifican la ley de control, o incluso anular o modificar las tareas asociadas al autómata, bajo ciertas condiciones.
- Posibilidad de programación numérica, que permite realizar cálculos aritméticos de elevada resolución sobre la CPU del ordenador.
Con ellas, se pueden desarrollar aplicaciones para ordenadores (tipo PC, por ejemplo), con captura de datos, análisis de señales, presentaciones en pantalla, envío de resultados a disco e impresora, etc. Además, todas estas acciones se llevan a cabo mediante un paquete de funciones que incluye zonas de programación en un lenguaje de uso general (como C, Pascal, o Basic), lo cual confiere una potencia muy elevada y una gran versatilidad. Algunos SCADA ofrecen librerías de funciones para lenguajes de uso general que permiten personalizar de manera muy amplia la aplicación que desee realizarse con dicho SCADA.
Requisitos.
Un SCADA debe cumplir varios objetivos para que su instalación sea perfectamente aprovechada:
- Deben ser sistemas de arquitectura abierta, capaces de crecer o adaptarse según las necesidades cambiantes de la empresa.
- Deben comunicarse con total facilidad y de forma transparente al usuario con el equipo de planta y con el resto de la empresa (redes locales y de gestión).
- Deben ser programas sencillos de instalar, sin excesivas exigencias de hardware, y fáciles de utilizar, con interfaces amigables con el usuario.
Módulos de un SCADA.
Los módulos o bloques software que permiten las actividades de adquisición, supervisión y control son los siguientes:
- Configuración: permite al usuario definir el entorno de trabajo de su SCADA, adaptándolo a la aplicación particular que se desea desarrollar.
- Interfaz gráfico del operador: proporciona al operador las funciones de control y supervisión de la planta.
El proceso se representa mediante sinópticos gráficos almacenados en el ordenador de proceso y generados desde el editor incorporado en el SCADA o importados desde otra aplicación durante la configuración del paquete.
- Módulo de proceso: ejecuta las acciones de mando preprogramadas a partir de los valores actuales de variables leídas.
- Gestión y archivo de datos: se encarga del almacenamiento y procesado ordenado de los datos, de forma que otra aplicación o dispositivo pueda tener acceso a ellos.
- Comunicaciones: se encarga de la transferencia de información entre la planta y la arquitectura hardware que soporta el SCADA, y entre ésta y el resto de elementos informáticos de gestión.
Como desarrollar nuestro PLC y Scada Made in Home (en casa / casero)
Hace un par de días, en el grupo del facebook ( https://www.facebook.com/groups/EducTecInformal/ ) , preguntaban si era viable y o posible crear un PLC con un microcontrolador... La respuesta es rotundamente AFIRMATIVA ya que el hardware de un microcontrolador nos proporciona casi todo lo que requiere un PLC para funcionar (procesador, entradas digitales, entradas analogicas, salidas, pwm, comunicacion serial, entre otros); Lo que varia y le da utilidad / confiabilidad / flexibilidad / seguridad, es el diseño de los perifericos a este microcontrolador ( hardware para las entradas, salidas, etc) en nuestra placa experimental...
A continuacion, les comparto un diseño sencillo y experimental, de un Controlador Logico Programable (PLC), que corre en base a un PIC 16F877A (ver archivos adjuntos con el diseño de la placa - PCBWizard)
Se preguntaran en que lenguaje puede ser programado nuestro pequeño PLC casero... Sencillamente, para este caso en particular, vamos a implementar LDmicro ( ver archivos adjuntos que inclui el software, o bien puedes visitr la pagina oficial www.cq.cx/index.pl ); Un sencillo software de programacion en lenguaje LADDER ( escalera ), que nos permite crear nuestros proyectos al igual que en un PLC profesional y luego compilarlo para subir al microcontrolador...
Muchas veces queremos desarrollar proyectos para automatizar un proyectos necesitamos incorporar un software que desde nuestra PC, pueda no solo monitorear el proceso, si no que tambien pueda guardar estadisticas y datos relevantes adquiridos de nuestro controlador lofgico programable...
Es ahí donde entra en accion XScada 4.56 ( ver archivos adjuntos que inclui el software, o bien puedes visitr la pagina oficial http://micset.net ) , o sea, un software libre para realizar SCADA made in home... La caracteristica mas relevante, es que se puede establecer comunicacion serial con los microcontroladores (PIC-AVR-ETC) y PLC del mercado gracias a su extensa libreria de protocolos de comunicacion....
Empleo y programacion de Xscada (primeros pasos)
Empleo y programacion de LDmicro (primeros pasos)
(En construccion)
Bueno, en esta seccion del topico, voy a introducirlos practicamente en el manejo de LDmicro, y en paralelo, para los que desconocen el lenguaje escalera (ladder), voy a intentar enseñarles las reglas basicas de programacion para que se puedan insertar comodamente en este mundo apacionante de la automatizacion...
Como sabran, los lenguajes de programación son necesarios para la comunicación entre el usuario (sea programador u operario de la máquina o proceso donde se encuentre el PLC) y el PLC. La interacción que tiene el usuario con el PLC la puede realizar por medio de la utilización de un cargador de programa (loader Program) también reconocida como consola de programación o por medio de un PC (computador Personal).
Clasificación de los Lenguajes de Programación
Los lenguajes de programación para PLC pueden ser de dos tipos… visuales y escritos.
Los visuales admiten estructurar el programa por medio de símbolos gráficos, similares a los utilizados para describir los sistemas de automatización, planos, esquemáticos y diagramas de bloques.
Los escritos son listados de sentencias que describen las funciones a ejecutar.
Estos dos tipos de lenguajes mencionados anteriormente, son clasificados en dos niveles claramente marcados y o definidos; Al procesador le corresponde el nivel más bajo, y al usuario el nivel más alto.
Los programadores de PLC poseen formación en múltiples disciplinas y esto determina que exista una diversidad de lenguajes con los cuales podamos programarlos. Los programadores de aplicaciones familiarizados con el área industrial, por lo general prefieren lenguajes visuales, y por su parte quienes tienen formación en electrónica e informática optan, inicialmente por los lenguajes escritos (ASM,C, Basic, etc.).
Veamos con más detenimiento los Niveles de los lenguajes y cuál es la diferencia más notable entre ambos…
Lenguajes de Alto Nivel
Lenguaje de Maquina: Código binario encargado de la ejecución del programa directamente en el microprocesador.
Lenguaje Ensamblador: Lenguaje sintético de sentencias que representa cada una de las instrucciones que puede ejecutar el microprocesador. Una vez diseñado un programa en lenguaje ensamblador, es necesario para cargarlo en el sistema, convertirlo o compilarlo a lenguaje de máquina.
Lenguajes de Alto Nivel:
Se basan en la construcción de sentencias orientadas a la estructura lógica de lo deseado; una sentencia de lenguaje de alto nivel representa varias de bajo; cabe la posibilidad que las sentencias de un lenguaje de alto nivel no cubran todas las instrucciones del lenguaje de bajo nivel, lo que limita el control sobre la máquina. Para que un lenguaje de alto nivel sea legible por el sistema, debe traducirse a lenguaje ensamblador y posteriormente a lenguaje de máquina.
Como LDmicro trabaja en un lenguaje de AltoNivel, y para ser mas especifico, en lenguaje de contactos (lenguaje escalera o ladder); Vamos a ver y reconocer la estructura de este tippo de programacion para poder manejar este software.
Regla del Lenguaje de Plano de Contacto
El esquema se realiza entre dos líneas o barras de alimentación dispuestas verticalmente a ambos lados del diagrama, entre ellas se dibujan los elementos del lenguaje.
A la derecha del esquema se ubican los elementos de salida y a la izquierda los de entrada
El diagrama puede tener varias ramas o escalones.
Cada rama permite ubicar varios elementos de entrada pero sólo uno de salida.
La programación en cada bloque de contactos se realiza en el orden de izquierda a derecha y el sentido de programación de los bloques de contactos de un programa de ejecuta en el sentido de arriba para abajo.
No se puede conectar una salida directamente a la línea principal, en estos casos se intercala un contacto cerrado de una marca o bit o relé interno cualquiera.
Con relación a los contactos, tenga presente lo siguiente:
CONTACTOS DE ENTRADA
El número de contactos abiertos o cerrados que se pueden utilizar en un programa, por cada una de las entradas, es ilimitado; Es decir, que se puede repetir el mismo número de contacto cuantas veces quiera.
CONTACTOS DE SALIDA
El número de salidas o bobinas de salida o relay de salida (OUT) es fijo, por lo que no se puede repetir un mismo número de salida. Sin embargo, el número de contactos asociados a ellas es ilimitado.
Elementos del Lenguaje
Se clasifican en elementos de entrada y salida. Su estado es evaluado por el PLC para determinar un valor lógico, que recibe distintas denominaciones dependiendo del contexto de trabajo.
A continuación, se presenta una tabla donde se relacionan las denominaciones de los contextos con las usadas en este curso (activo e inactivo).
Elementos de Entrada
Los contactos, únicos elemento que se colocan a la entrada, son de tipo:
Normal Abierto (NO – Normal Open) --] [--
Normal Cerrado (NC- Normal Closed) --]/[--
Encima del contacto e escribe la variable a la cual hace referencia. El valor lógico del contacto depende directamente del valor lógico de su variable. Para lo contacto normal abierto, si la variable es V, el contacto era V y, si la variable es F, el contacto será F.
Lo contacto normal cerrado toman el valor inverso de su variable, si la variable e V, el contacto será evaluado como F y viceversa
Las variables a los cuales pueden referirse los contactos son:
Veámoslo de una manera más práctica…
Al energizar el contacto XI1 momentáneamente, automáticamente cerramos el circuito serie formado con XI2 y llegamos a la bobina interna RQ1. Este bit, lo implementaremos para cerrar el 1er contacto del segundo escalón, el cual, en la serie con el contacto XI3 alimentaran la salida YQ2.
El estado de YQ2, o sea, el bit de su estado (V-F/I-O/H-L/Encendido-Apagado), lo implementaremos en el contacto YQ2 del 1er escalón para generar un enclavamiento o memoria de retención. Con esto logramos que al soltar el pulsador que alimenta la entrada XI1, la salida YQ2 permanezca encendida.
Al abrir o des-energizar el contacto XI2, ya sea momentáneamente o permanentemente, automáticamente abrimos el circuito serie y noten como el bit de la bobina interna RQ1 cambia su estado (valor) en el contacto RQ1 del segundo escalón, el cual afecta inmediatamente la salida YQ2.
Esta salida, al estar en estado bajo (apagado), el contacto YQ2 que conmutaba según el valor del bit o estado de esta salida, ya no está en estado alto (encendido) y por ende, ya no tenemos la re-alimentación que mantenía cerrado el circuito (enclavamiento)
OPERACIONES LOGICAS
Las operaciones lógicas más utilizadas son: AND, OR, NOT, EXOR.
A continuación, conoceremos las cuatro tablas de la verdad que las definen y en paralelo, iremos conociendo las funciones que tenemos disponibles en LDmicro
AND (Conjunción)
La operación lógica AND se aplica en situaciones en las que se requiere realizar una acción si y sólo sí se cumplen un determinado número de condiciones.
En lenguaje de contactos se realiza disponiendo los contactos en serie…Veamos un Ejemplo:
En el circuito se activa YQ1cuandoXI0, XI1e XI2 son verdaderas.
De hecho el PLC evalúa la rama ejecutando la operación lógica YQ1 = XI0 AND XI1 AND XI2
OR (Disyunción)
La operación lógica OR, entrega como resultado V (VERDADERO) siempre que alguna de las entradas sea V (verdadera-presente-estado lógico uno-etc.).
En el lenguaje de contactos, se logra poniendo los contactos en paralelo… Veamos un ejemplo:
En el circuito se activa YQ1 si alguna de las entradas XI0 o XI1 se activa. La operación lógica es YQ1 =X I0 OR XI1
EXOR (OR Exclusiva)
La EXOR (OR exclusiva) es V (VERDADERO) si alguna de las entradas, pero nunca ambas, es V también; se puede decir que es V si y sólo si las entradas son distintas.
En el lenguaje de contactos es frecuente aquel caso en el cual las operaciones lógicas deben resolverse a partir de contactos normal abierto y normal cerrado. Veamos un ejemplo:
Para realizar la operación Q1.0 = I1.0 EXOR I1.1, se debe efectuar una combinación de operaciones AND y OR: YQ1.0 = ((XI0 AND (NOT XI1)) OR ((NOT XI0) AND XI1)).
NOT (Inversión)
La operación lógica NOT, entrega como resultado el estado contrario al presente en la entrada
En el lenguaje de contactos, esto se logra con el uso de Contactos Normal Cerrado. Veamos un ejemplo:
Función y operación realizada es YQ1 = NOT XI0
FUNCIONES ESPECIALES
Temporizadores:
LDmicro, tiene tres tipos herramientas que trabajan manipulando el tiempo de activación o desactivación de distintas variables… Estos temporizadores, se separan en tres funciones…
TON (tiempo de retardo en el encendido) Cuando tiene un 1 lógico, para proseguir el camino de la rama, tendrá un retardo del tiempo configurado.
TOFF (tiempo de retardo en el apagado) Cuando tiene un 1 Lógico, se activa y deja pasar la señal como si nada por el camino que indica la rama, pero cuando cambia de estado a 0 Lógico, el valor de este no cambia instantáneamente hasta pasado el tiempo configurado.
RTO (Encendido con retardo y memoria) Cuando tiene un 1 lógico, para proseguir el camino de la rama, tendrá un retardo del tiempo configurado. La diferencia más notable que tenemos con la instrucción TON, es que sin importar luego el estado de la entrada (verdadero - falso) de esta función, la salida seguirá encendida indefinidamente. La única manera de poder desactivar esta instrucción, es empleando la función RES (Contador/RTO reinicio) , que básicamente es un Reset para los contadores y el temporizador con retardo y memoria.
Contadores:
LDmicro, tiene tres herramientas que trabajan contando diferentes tipos de eventos y ese valor, es almacenado en una variable, la cual podremos implementar en el resto de nuestra lógica de control.
CTC (Contador Circular)
CTU (contador Incremental)
CTD (Contador Decremental)
manipulando el tiempo de activación o desactivación de distintas variables… Estos temporizadores, se separan en tres funciones…
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> ONE-SHOT RISING (FLANCO DE SUBIDA) _
--[OSR_/ ]--
Esta instrucción normalmente da una salida falsa. Si la entrada de instrucciones es cierto durante esta exploración y era falsa durante la exploración anterior, la salida es verdadera. Por lo tanto, genera un pulso deuna exploración de ancho a cada flanco ascendente de la señal de entrada. Esta instrucción es útil si desea desencadenar eventos fuera del borde ascendente de una señal.
> ONE-SHOT FALLING (FLANCO DE BAJADA) _
--[OSF \_]--
Esta instrucción normalmente da salida falsa. Si la entrada de instrucciones es falsa durante esta exploración y era verdad durante la exploración anterior, la salida es verdadera. Por lo tanto, genera un impulso deuna exploración de ancho a cada borde descendente de su señal de entrada. Esta instrucción es útil si desea desencadenar eventos fuera del borde descendente de una señal.
> MASTER CONTROL RELAY
-{MASTER RLY}-
Por defecto, la condición de entrada de renglón de cada renglón es verdadero. Si una instrucción de relé de control maestro se ejecuta con una condición de entrada de renglón de falso, entonces el renglón encondición para todos los siguientes peldaños se convierte en falsa. Esto continuará hasta que se alcance la siguiente instrucción relé de control maestro (independientemente del renglón en la condición de que la instrucción). Por tanto, estas instrucciones deben utilizarse en pares:
uno a (tal vez de forma condicional) inicie la sección posiblemente-discapacitados, y uno para acabar con ella.
> MOVE
{destvar := } {Tret := }
-{ 123 MOV}- -{ srcvar MOV}-
Cuando la entrada de esta instrucción es verdadera, se establece la variable de destino dado igual a la variable de origen determinado o constante. Cuando la entrada de esta instrucción es falsa, no pasa nada. Puede asignar a cualquier variable con la instrucción de movimiento; esto incluye las variables de temporizador y contador del estado, que se pueden distinguir por el líder `T 'o' C '. Por ejemplo, una instrucción en movimiento 0 en `Tret' es equivalente a un restablecimiento (RES) de instrucciones de ese temporizador. Esta instrucción debe ser la instrucción más a la derecha en su peldaño.
> ARITHMETIC OPERATION
{ADD kay :=} {SUB Ccnt :=}
-{ 'a' + 10 }- -{ Ccnt - 10 }-
> {MUL dest :=} {DIV dv := }
-{ var * -990 }- -{ dv / -10000}-
Cuando la entrada de esta instrucción es verdadera, se establece la variable de destino dado igual a la expresión dada. Los operandos pueden ser tanto variables (incluyendo temporizador y contador variables) o constantes. Estas instrucciones utilizan 16 bits con signo matemáticas. Recuerde que el resultado se evalúa cada ciclo cuando la condición de entrada cierto. Si va a aumentar o disminuir una variable (es decir, si la variable de destino es también uno de los operandos), entonces es probable que no quiere eso; normalmente usted usaría una sola toma de modo que sólo se evalúa en el flanco ascendente o descendente de lacondición de entrada. Divida truncado; 8/3 = 2 Esta instrucción debe ser la instrucción más a la derecha en sus peldaño.
> COMPARE
[var ==] [var >] [1 >=]
-[ var2 ]- -[ 1 ]- -[ Ton]-
> [var /=] [-4 < ] [1 <=]
-[ var2 ]- -[ vartwo]- -[ Cup]-
Si la entrada de esta instrucción es falsa entonces la salida es falsa. Si la entrada es cierto, entonces la salida es verdadero si y sólo si la condición dada es verdadera. Esta instrucción puede ser utilizado para comparar (igual, es mayor que, es mayor que o igual a, no es igual, es menor que, es menor que o igual a) una variable a una variable, o para comparar una variable a un 16 -bit firmaron constante.
> COUNTER
Cname Cname
--[CTU >=5]-- --[CTD >=5]--
A los incrementos del contador (CTU, cuentan hacia arriba) o decrementos (CTD, cuenta atrás) el recuento de asociado en cada flanco ascendente de la condición de entrada de renglón (es decir, lo que la condición de entrada de renglón va de falso a verdadero). La condición de salida del contador es cierto si la variable de contador es mayor que o igual a 5, y falso en caso contrario. La condición de salida de renglón puede ser cierto incluso si la condición de entrada es falsa; sólo depende de la variable contador. Usted puede tener CTU y CTD instrucciones con el mismo nombre, con el fin de incrementar y
disminuir el mismo contador. La instrucción RES puede reiniciar un contador, o usted puede realizar operaciones de variables generales sobre la variable de recuento.
> CIRCULAR COUNTER
Cname
--{CTC 0:7}--
Un contador circular funciona como un contador CTU normal, excepto que después de alcanzar su límite superior, se restablece su variable de contador de nuevo a 0 Por ejemplo, el contador se muestra arribacontaría 0, 1, 2, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 2, .... Esto es útil en combinación con instrucciones condicionales de la variable `Cname '; usted puede utilizar esto como un secuenciador. CTC contadores de relojen el flanco ascendente de la condición condición de entrada de renglón. Esta instrucción debe ser la instrucción más a la derecha en su peldaño.
> SHIFT REGISTER
{SHIFT REG }
-{ reg0..3 }-
Un registro de desplazamiento está asociado con un conjunto de variables. Por ejemplo, este registro de desplazamiento está asociado con las variables `reg0 ',` reg1', `reg2 ', y` reg3'. La entrada al registro de desplazamiento es `reg0 '. En cada flanco ascendente de la condición de entrada de renglón, el registro de desplazamiento se desplazará derecha. Eso significa que asigna `reg3: = reg2 ',` reg2: = reg1'. y `reg1: =reg0 '. `reg0 'se deja sin cambios. Un gran registro de desplazamiento puede consumir fácilmente una gran cantidad de memoria. Esta instrucción debe ser la instrucción más a la derecha en su peldaño.
> LOOK-UP TABLE
{dest := }
-{ LUT[i] }-
Una tabla de consulta es un conjunto ordenado de n valores. Cuando el renglón en la condición es verdadera, la variable entera dest se iguala a la entrada en la tabla de consulta correspondiente al número enterovariable `i '. El índice comienza desde cero, por lo que `i 'debe estar entre 0 y (n-1). El comportamiento de esta instrucción no se define si el índice está fuera de este rango. Esta instrucción debe ser la instrucciónmás a la derecha en su peldaño.
> PIECEWISE LINEAR TABLE
{yvar := }
-{ PWL[xvar] }-
Esta es una buena manera de aproximar una función complicada o curva. Podría, por ejemplo, puede ser útil si usted está tratando de aplicar una curva de calibración para convertir una tensión de salida en bruto deun sensor en unidades más convenientes.
Suponga que usted está tratando de aproximar una función que convierte una variable de entrada número entero, x, a una variable de salida número entero, y. Usted sabe la función en varios puntos; por ejemplo, usted puede ser que sepa que
f(0) = 2
f(5) = 10
f(10) = 50
f(100) = 100
Esto significa que los puntos
(x0, y0) = ( 0, 2)
(x1, y1) = ( 5, 10)
(x2, y2) = ( 10, 50)
(x3, y3) = (100, 100)
tumbarse en esa curva. Puede introducir esos 4 puntos en una tabla asociada a la instrucción lineal por tramos. La instrucción lineal por tramos se analizará el valor de xvar, y establecer el valor de yvar. Fijará yvarde tal manera que la curva lineal por tramos pasará por todos los puntos que usted le da; por ejemplo, si establece xvar = 10, entonces la instrucción establecerá yvar = 50.
Si usted le da la instrucción de un valor de xvar que se encuentra entre dos de los valores de x para los que le han dado puntos, entonces la instrucción establecerá yvar para que (xvar, yvar) se encuentra en la recta que une los dos puntos de la tabla. Por ejemplo, xvar = 55 da una potencia de Yvar = 75. (Los dos puntos en la tabla son (10, 50) y (100, 100). 55 es la mitad del camino entre el 10 y el 100, y el 75 es la mitad del camino entre 50 y 100, de modo (55, 75) se encuentra en la línea que conecta esos dos puntos.)
Los puntos deben ser especificadas en orden ascendente por coordenada x. Puede que no sea posible llevar a cabo operaciones matemáticas requeridas para ciertas tablas de consulta que utilizan 16 bits de matemáticas de enteros; si este es el caso, entonces LDmicro le avisará. Por ejemplo, esta tabla de consulta producirá un error:
(x0, y0) = ( 0, 0)
(x1, y1) = (300, 300)
Puede corregir estos errores al hacer la distancia entre puntos en la tabla pequeña. Por ejemplo, esta tabla es equivalente a la dada anteriormente, y que no produce un error:
(x0, y0) = (0, 0)
(x1, y1) = (150, 150)
(x2, y2) = (300, 300)
Debería ser necesario casi nunca utilizar más de cinco o seis puntos. La adición de más puntos hace que su código más grande y más lento para ejecutar. El comportamiento si se pasa un valor de `xvar 'mayor que los más grandes coordenada x en la tabla o menos de los más pequeños coordenada x en la tabla no está definido. Esta instrucción debe ser la instrucción más a la derecha en su peldaño.
> A/D CONVERTER READ
Aname
--{READ ADC}--
LDmicro puede generar código para utilizar los convertidores A / D incorporadas en ciertos microcontroladores. Si la condición de entrada a esta instrucción es verdadera, entonces una sola muestra del convertidor A / D se adquiere y almacena en la variable de Aname `'. Esta variable puede ser manipulado posteriormente con las operaciones de variables generales (menor que, mayor que, aritmética, y así sucesivamente). Asigne un alfiler para la variable `Axxx 'de la misma manera que a usted le asigne un alfiler a una entrada o salida digital, haciendo doble clic en él en la lista en la parte inferior de la pantalla. Si la condición de entrada a este renglón es falsa entonces la variable `Aname '
se deja sin cambios.
Para todos los dispositivos soportados actualmente-, 0 voltios de entrada corresponde a una lectura ADC de 0, y una entrada igual a Vdd (la tensión de alimentación) corresponde a una lectura ADC de 1023. Siusted está usando un AVR, conecte AREF a Vdd. Usted puede utilizar las operaciones aritméticas para escalar la lectura a las unidades más convenientes después, pero recuerde que usted está usando aritmética entera. En general no todos los pernos estarán disponibles para su uso con el convertidor A / D. El software no le permitirá asignar D pasadores no A / a una entrada analógica. Esta instrucción debe ser la instrucciónmás a la derecha en su peldaño.
> SET PWM DUTY CYCLE
duty_cycle
-{PWM 32.8 kHz}-
LDmicro puede generar código para utilizar el periférico PWM integrado en ciertos microcontroladores. Si la condición de entrada a esta instrucción es verdadera, entonces el ciclo de trabajo del PWM periférica se establece en el valor de la Duty_Cycle variable. El ciclo de trabajo debe ser un número entre 0 y 100; 0 corresponde a siempre baja, y 100 corresponde a
siempre alta. (Si usted está familiarizado con el funcionamiento de periféricos PWM, entonces cuenta de que eso significa que LDmicro escala automáticamente la variable ciclo de trabajo de por ciento a periodos de reloj PWM.)
Puede especificar la frecuencia PWM de destino, en Hz. La frecuencia que especifique puede no ser exactamente posible, en función de cómo se divide en frecuencia de reloj del microcontrolador. LDmicro elegirá la frecuencia alcanzable más cercano; si el error es grande, entonces se le avisará. Velocidades más rápidas pueden sacrificar resolución.
Esta instrucción debe ser la instrucción más a la derecha en su peldaño. El tiempo de ejecución de la lógica de escalera consume un temporizador para medir el tiempo de ciclo. Eso significa que PWM sólo está disponible en microcontroladores con al menos dos temporizadores adecuados. PWM utiliza CCP2 pin (no CCP1)
en chips PIC16 y OC2 (no OC1A) en RAV.
> MAKE PERSISTENT
saved_var
--{PERSIST}--
Cuando el renglón-en la condición de esta instrucción es verdadera, hace que la variable de entero especificado que se guarda automáticamente en la EEPROM. Eso significa que su valor persistirá, incluso cuando el micro pierde potencia. No hay necesidad de guardar explícitamente la variable en la EEPROM; que va a suceder de forma automática, siempre que cambie variables. La variable se carga automáticamente desdeEEPROM después de un reinicio de encendido. Si una variable que cambia con frecuencia se hace persistente, entonces la EEPROM en sus micro puede llevar a cabo muy rápidamente, ya que sólo es bueno paraun número limitado (~ 100 000) de escrituras. Cuando la condición de entrada de renglón es falsa, no pasa nada. Esta instrucción debe ser la instrucción más a la derecha en su peldaño.
> UART (SERIAL) RECEIVE
var
--{UART RECV}--
LDmicro puede generar código para utilizar el UART incorporada en ciertos microcontroladores. El AVR con múltiples UART sólo UART1 (no UART0) es compatible. Configure la velocidad de transmisión utilizandoConfiguración -> Parámetros de MCU. Ciertas velocidades de transmisión pueden no ser alcanzables con ciertas frecuencias de cristal; LDmicro le avisará si este es el caso. Si la condición de entrada de esta instrucción es falsa, entonces no pasa nada. Si la condición de entrada es cierto, entonces esta instrucción trata de recibir un solo personaje de la UART. Si no hay ningún carácter se lee a continuación, la condición de salida es falsa. Si un personaje se lee entonces su valor ASCII se almacena en `var ', y la condición de salida es cierto para un solo ciclo de PLC.
> UART (SERIAL) SEND
var
--{UART SEND}--
LDmicro puede generar código para utilizar las UARTs integradas en ciertos microcontroladores. En AVRS De con múltiples UART sólo UART1 (no UART0) es compatible. Configure la velocidad de transmisiónutilizando Configuración -> Parámetros de MCU. Ciertas velocidades de transmisión pueden no ser alcanzables con ciertas frecuencias de cristal; LDmicro le avisará si este es el caso.
Si la condición de entrada de esta instrucción es falsa, entonces no pasa nada. Si la condición de entrada es cierto, entonces esta instrucción escribe un carácter único a la UART. El valor ASCII del carácter que enviar previamente se han almacenado en `var '. La condición de salida del renglón es verdadero si la UART está ocupado (en la actualidad la transmisión de un carácter), y false en caso contrario.
Recuerde que los personajes toman un poco de tiempo para transmitir. Compruebe el estado de salida de esta instrucción para asegurar que el primer carácter ha sido transmitida antes de tratar de enviar unsegundo personaje, o utilizar un temporizador para introducir un retraso entre los personajes. Usted sólo tiene que traer la condición de entrada verdadero (intente enviar un personaje) cuando la condición de salida es falsa (UART no está ocupado).
Investigar la instrucción de cadena con formato (siguiente) antes de utilizar esta instrucción. La instrucción de cadena con formato es mucho más fácil de usar, y es casi seguro que capaz de hacer lo que quieres.
> FORMATTED STRING OVER UART
var
-{"Pressure: \3\r\n"}-
LDmicro puede generar código para utilizar las UARTs integradas en cierta microcontroladores. En AVRS De con múltiples UARTs sólo UART1 (no UART0) es compatible. Configure la velocidad de transmisiónmediante Settings -> MCU Parámetros. Ciertas velocidades de transmisión pueden no ser alcanzables con cierta frecuencias de cristal; LDmicro le avisará si este es el caso.
Cuando el renglón en condiciones para esta instrucción va de falso a cierto, éste empieza a enviar una cadena entera a través del puerto serie. Si la cadena contiene la secuencia especial `\ 3 ', entonces esa secuencia será reemplazado por el valor de `var ', que es automáticamente convierte en una cadena. Se formateará la variable a tener exactamente 3 caracteres; Por ejemplo, si `var 'es igual a 35, entonces la cadena exacta impresa será `Presión: 35 \ r \ n '(nota el extra espacio). Si en lugar de `var 'fuera igual a 1432, entonces el comportamiento haría
ser indefinido, ya que 1432 tiene más de tres dígitos. En ese caso sería necesario usar `\ 4 'en su lugar.
Si la variable podría ser negativo, entonces utilice `\-3d '(o` \ -4d' etc) en lugar. Eso causará LDmicro para imprimir un espacio inicial para números positivos y un signo menos para los números negativos.
Si varios formateado instrucciones de cadena se energizan a la vez (o si uno está energizado antes de que otro se complete), o si éstos instrucciones se entremezclan con las instrucciones UART TX, entonces el comportamiento no está definido.
También es posible utilizar esta instrucción a la salida de una cadena fija, sin interpolar el valor de una variable entera en el texto que se envía en serie. En ese caso, simplemente no incluyen el especial
secuencia de escape.
Use `\\ 'para una barra invertida literal. Además de la secuencia de escape para interpolar una variable entera, los siguientes caracteres de control están disponibles:
* \ R - retorno de carro
* \ N - salto de línea
* \ F - formfeed
* \ B - Retroceso
* \ XAB - personaje con valor ASCII 0xAB (hex)
La condición de salida de renglón de esta instrucción es verdadera mientras se está transmitiendo datos, cosa falsa. Esta instrucción consume una gran cantidad de memoria del programa, por lo que deben utilizarse con moderación. La implementación actual no es eficiente, pero uno mejor voluntad requerir modificaciones en todos los back-ends.
EN CONSTRUCCION