Вы находитесь на странице: 1из 419

C/ Cartagena.

245, 4, 1
08025 Barcelona (Spain)
Telf. 34 - 93 446 30 50
Fax. 34 - 93 446 30 51
E-mail: afei@afeisa.es
http://www.afeisa.es
MANUAL TCNICO
DE
PROGRAMACIN
MIDA
No est permitida la reproduccin total parcial de esta
informacin, ni su tratamiento informtico, ni la transmisin de ninguna
forma por cualquier medio, ya sea electrnico, mecnico, por
fotocopia, por registro u otros mtodos, sin el permiso previo y por
escrito de AFEI, Sistemas y Automatizacin, S.A.
Esta obra ha sido realizada por el siguiente equipo de tcnicos, todos
ellos directamente involucrados en el desarrollo.
Redaccin y composicin: Jordi Vila
Santiago Losada
Supervisin: Jordi Vila
Jordi Vives
Santiago Losada
La informacin contenida en este Manual Tcnico de
Programacin puede estar sometida a cambios sin previo aviso y en
ningn caso representa un compromiso por parte del vendedor.
Primera Edicin (Versin 00.07) Junio 2.002
.
IG
.
INDICE GENERAL IG-IG 1 99.01
IG - Indice
Indice General ............................................................. IG-IG-----01
Acerca de este Manual ............................................... IG-AM ---01
DP - Introduccin
Introduccin a la Familia MIDA................................. DP-FM --01
Definiciones Previas................................................... DP-DE---01
Organizacin de la Memoria...................................... DP-OM--01
Modos de Trabajo....................................................... DP-MT --01
Modos de Programacin............................................ DP-PR---01
Edicin de programas en entorno DOS........................ DP-PR---02
Directivas de Compilacin............................................ DP-PR---02
Simbologa .................................................................. DP-SI ----01
IN - Instrucciones
Descripcin Hoja de Instrucciones........................... IN-DI -----01
Clasificacin de las Instrucciones............................ IN-CL ----01
Instrucciones Lgicas y de Salto.............................. IN-LO----01
LD....................................................................... IN-LO----02
LDNT .................................................................. IN-LO----03
LDX..................................................................... IN-LO----04
XOR.................................................................... IN-LO----05
AND.................................................................... IN-LO----06
OR...................................................................... IN-LO----07
ANDNT ............................................................... IN-LO----08
ORNT ................................................................. IN-LO----09
ANDLD ............................................................... IN-LO----10
ORLD.................................................................. IN-LO----11
OUT.................................................................... IN-LO----12
OUTNT ............................................................... IN-LO----13
OUTX.................................................................. IN-LO----14
SET..................................................................... IN-LO----15
RESET................................................................ IN-LO----16
JZ........................................................................ IN-LO----17
JNZ..................................................................... IN-LO----18
Ejemplos ....................................................................... IN-LO----19
INDICE GENERAL IG-IG 2 99.01
Instrucciones de Deteccin de Flancos
FLANC................................................................ IN-FL---- 01
Temporizadores y Contadores.................................. IN-TC --- 01
Temporizadores............................................................ IN-TC --- 01
TIM...................................................................... IN-TC --- 05
TIMR................................................................... IN-TC --- 07
Contadores ................................................................... IN-TC --- 09
CNT .................................................................... IN-TC --- 13
CNTR.................................................................. IN-TC --- 15
Ejemplos ....................................................................... IN-TC --- 17
Instrucciones Aritmticas.......................................... IN-AR --- 01
MOVRI ................................................................ IN-AR --- 10
MOVCI ................................................................ IN-AR --- 11
STOI ................................................................... IN-AR --- 12
SETRI ................................................................. IN-AR --- 13
MOVIX................................................................ IN-AR --- 14
STOIX................................................................. IN-AR --- 15
MOVRF............................................................... IN-AR --- 16
STOF.................................................................. IN-AR --- 17
MOVCF............................................................... IN-AR --- 18
MOVFX............................................................... IN-AR --- 19
STOFX................................................................ IN-AR --- 20
ADDI ................................................................... IN-AR --- 21
SUBI ................................................................... IN-AR --- 22
MULI ................................................................... IN-AR --- 23
DIVI..................................................................... IN-AR --- 24
ADDC ................................................................. IN-AR --- 25
SUBC.................................................................. IN-AR --- 26
MULC ................................................................. IN-AR --- 27
DIVC................................................................... IN-AR --- 28
INC...................................................................... IN-AR --- 29
ADDF.................................................................. IN-AR --- 30
SUBF.................................................................. IN-AR --- 31
MULF.................................................................. IN-AR --- 32
DIVF.................................................................... IN-AR --- 33
MOVIF ................................................................ IN-AR --- 34
STOFI ................................................................. IN-AR --- 35
Ejemplos ....................................................................... IN-AR --- 36
INDICE GENERAL IG-IG 3 99.01
Comparaciones Aritmticas...................................... IN-CA----01
CPEI ................................................................... IN-CA----03
CPGEI ................................................................ IN-CA----04
CPLEI ................................................................. IN-CA----05
CPGI................................................................... IN-CA----06
CPLI.................................................................... IN-CA----07
CPEF.................................................................. IN-CA----08
CPGEF ............................................................... IN-CA----09
CPLEF................................................................ IN-CA----10
CPGF.................................................................. IN-CA----11
CPLF .................................................................. IN-CA----12
Ejemplos ....................................................................... IN-CA----13
Reconocimiento del Teclado..................................... IN-RT----01
Deteccin de Teclas ..................................................... IN-RT----02
INK...................................................................... IN-RT----03
Ejemplos ....................................................................... IN-RT----04
Introduccin de Datos Numricos ................................ IN-RT----07
INI ....................................................................... IN-RT----12
INF...................................................................... IN-RT----14
INICF .................................................................. IN-RT----16
INPIX.................................................................. IN-RT----18
INPFX................................................................. IN-RT----19
INPCX................................................................. IN-RT----20
Ejemplos ....................................................................... IN-RT----22
Visualizacin y Comunicaciones.............................. IN-VC----01
Visualizacin y Transmisin de Datos.......................... IN-VC----02
COM................................................................... IN-VC----04
Puntero del Buffer Intermedio....................................... IN-VC----05
CLEAR................................................................ IN-VC----06
LOC.................................................................... IN-VC----07
LOCX.................................................................. IN-VC----08
Mensajes y Caracteres ASCII ...................................... IN-VC----09
DISL.................................................................... IN-VC----10
DISLX................................................................. IN-VC----11
DISCH ................................................................ IN-VC----12
DISCX................................................................. IN-VC----13
Ejemplos ....................................................................... IN-VC----14
INDICE GENERAL IG-IG 4 99.01
Visualizacin y Transmisin de Datos Numricos........ IN-VC --- 16
DISRI .................................................................. IN-VC --- 17
DISIX .................................................................. IN-VC --- 18
DISRF................................................................. IN-VC --- 19
DISFX................................................................. IN-VC --- 20
Ejemplos ....................................................................... IN-VC --- 22
Visualizacin Rotativa en Display................................. IN-VC --- 26
Ejemplos ....................................................................... IN-VC --- 26
Reloj Interno en Tiempo Real .................................... IN-R ----- 01
DATE.................................................................. IN-R ----- 03
TIME................................................................... IN-R ----- 04
CLOCK ............................................................... IN-R ----- 05
CLKP .................................................................. IN-R ----- 06
Ejemplos ....................................................................... IN-R ----- 07
Estructuracin de Programas Subrutinas ............... IN-ES --- 01
CALL................................................................... IN-ES --- 04
RET..................................................................... IN-ES --- 05
JMP..................................................................... IN-ES --- 06
NOP.................................................................... IN-ES --- 07
END.................................................................... IN-ES --- 08
Ejemplos ....................................................................... IN-ES --- 09
ES Entradas / Salidas
Entrada de Contaje por Interrupciones.................... ES-EI---- 01
Ejemplos ....................................................................... ES-EI---- 05
Interrupciones por Software...................................... ES-IS---- 01
Ejemplos ....................................................................... ES-IS---- 05
Entradas y Salidas Analgicas ................................. ES-AD -- 01
Entradas Analgicas..................................................... ES-AD -- 01
Ejemplos ....................................................................... ES-AD -- 04
Salidas Analgicas ....................................................... ES-AD -- 12
Ejemplos ....................................................................... ES-AD -- 13
INDICE GENERAL IG-IG 5 99.01
FI Funciones Internas
Funciones Internas..................................................... FI-FI------01
Funciones de Pesaje.................................................. FI-PS ----01
Ejemplos ....................................................................... FI-PS ----08
Funcin PID................................................................. FI-CP ----01
Ejemplos ....................................................................... FI-CP ----05
DF Direccionamiento / Base Datos
Direccionamiento Indirecto ....................................... DF-DI ----01
Ejemplos ....................................................................... DF-DI ----06
Base de Datos............................................................. DF-BD---01
Ejemplos ....................................................................... DF-BD---10
FM Tratamiento Mdem
Introduccin................................................................ FM-TM --01
Funcionamiento Bsico ................................................ FM-TM --01
Configuracin Mdem................................................... FM-TM --03
Configuracin del SET-UP......................................... FM-TM --04
Rels y Registros........................................................ FM-TM --07
Respuestas Validas.................................................... FM-TM --10
Codigo PIN Mdem GSM ........................................... FM-TM --13
Reposicin Automtica Cdigo PIN ............................. FM-TM --13
Tratamiento de Errores PIN.......................................... FM-TM --15
Inicio Arranque MIDA y Mdem................................ FM-TM --16
Instrucciones AT......................................................... FM-TM --18
AT 0.................................................................... FM-TM --19
AT 1.................................................................... FM-TM --20
AT 2.................................................................... FM-TM --21
AT 6.................................................................... FM-TM --22
AT 3.................................................................... FM-TM --23
Recepcin de Mensajes Cortos SMS........................... FM-TM --24
AT 4.................................................................... FM-TM --26
AT 5.................................................................... FM-TM --28
Ejemplos ....................................................................... FM-TM --29
INDICE GENERAL IG-IG 6 99.01
PC Protocolos Comunicaciones
Protocolo MIDAbus .................................................... PC-MB-- 01
Protocolo MODbus ..................................................... PC-MD-- 01
Protocolo Libre ........................................................... PC-PL--- 01
DISB ................................................................... PC-PL--- 04
LECB .................................................................. PC-PL--- 06
COM................................................................... PC-PL--- 08
TE Tratamiento Errores
Tratamiento de Errores .............................................. TE-RE -- 01
Errores en Tiempo de Ejecucin .................................. TE-RE -- 01
Errores de Software...................................................... TE-RE -- 02
Errores de Hardware .................................................... TE-RE -- 06
Errores de Comunicaciones ......................................... TE-RE -- 14
Reles Estado de los Puertos de Comunicaciones ....... TE-RE -- 14
ACERCA DE ESTE MANUAL IG-AM 1 99.01
Antes de iniciar cualquier explicacin sobre la programacin de
los equipos MIDA nos permitimos en darle la bienvenida.
Redactar un manual de programacin siempre es una tarea
complicada, bien porque para unos, determinadas explicaciones sern
muy extensas, mientras que para otros sern todo lo contrario.
Buscar un equilibrio es difcil, pero creemos que nos hemos mantenido
en esa lnea, o por lo menos esa ha sido nuestra intencin. Por otro
lado, agradecer de ante mano todas las sugerencias que nos puedan
hacer sobre este manual.
Una sugerencia que se hace en todos los manuales, es la de
que se lea ntegramente todo el manual y a su vez se vayan
realizando los ejemplos propuestos, puesto que solo as lograremos
una visin total y dominio de la potencia que nos da el juego de
instrucciones.
No obstante como todos sabemos, bien por razones de tiempo,
proyectos, o cualquier otro motivo, lo que nos falta es precisamente
tiempo, y aun ms para leernos un manual de programacin. Por eso
el equipo de AFEISA ha diseado este manual, agrupando las
instrucciones por bloques, como por ejemplo: FUNCIONES LGICAS
(LD, AND, OR,...), CONTADORES Y TEMPORIZADORES (CNT,
TIM...) INSTRUCCIONES ARITMTICAS, etc.,. Tambin indicar que
con cada explicacin de cada instruccin se incluye un ejemplo de
aplicacin inmediata y al final de cada bloque de instrucciones se da
un ejemplo mas completo en el que se intentan integrar todas las
instrucciones explicadas en ese bloque.
Otra dificultad con la que nos hemos encontrado a la hora de
redactar este manual es que nos encontramos frente a unos equipos
que pueden trabajar como autmatas programables o como
microcontroladores, por eso cada instruccin se ha tratado de la forma
ms adecuada.
ACERCA DE ESTE MANUAL IG-AM 2 99.01
Antes de proseguir con la lectura de este manual creemos que
es conveniente hacer una serie de matizaciones de cmo estn
estructuradas las paginas:
ACERCA DE ESTE MANUAL IG
NOTA:
Sealar tambin que cada capitulo empieza en la pagina uno y
finaliza en la pagina correspondiente.
03 99.01
Titulo o Bloque del
apartado del
capitulo.
Capitulo
Pagina
Versin de la
documentacin
DP
.
INTRODUCCIN A LA FAMILIA MIDA DP-FM 1 99.01
AFEISA es una empresa con espritu joven, dinmico e
innovador y que aporta ms de 15 aos de experiencia en el diseo y
fabricacin de equipos para la automatizacin de procesos
industriales, ha creado los equipos MIDA, que marcan un nuevo
concepto dentro del campo de los PLCs, pero AFEISA no se ha
detenido ah, y ha dado un paso ms all, incorporando a sus equipos
las capacidades de pesaje, telegestin, regulacin industrial, data
logger, etc.
Los equipos MIDA suponen la integracin del dialogo hombre -
maquina en una sola unidad, creando as un equipo compacto,
robusto, sencillo y cmodo para el usuario. As mismo estos equipos
constituyen un sistema con distintas configuraciones de entradas-
salidas, tanto analgicas como digitales, que se adaptan a las
necesidades concretas de cada aplicacin.
Tambin cabe sealar la posibilidad que presentan algunos de
nuestros equipos de poseer teclado rotulable con leds de estado
incorporado que permiten una mayor personalizacin del equipo.
Adems, todas las unidades disponen de puertos de
comunicaciones serie RS-232 para gestionar impresoras, supervisin
desde un PC, conectar lectores de cdigos de barras, visualizadores,
conexin va-mdem o radio-mdem, etc.
Sealar tambin que se disponen de puertos de comunicacin
RS-485, por lo que es posible conectar hasta 32 unidades en 1200
metros de distancia, para de esta forma realizar controles distribuido,
descentralizacin de procesos, supervisin desde un PC, etc.
AFEISA dispone de un protocolo propio de comunicaciones
(MIDABUS), y la mayora de modelos disponen, el protocolo estndar
MODBUS. Adems del PROTOCOLO LIBRE que consiste en un juego
de instrucciones para leer o escribir otros protocolos
Estos protocolos permiten a estos equipos ser elementos
transparentes al PC, con total disponibilidad para la adquisicin y
gestin de datos sin necesidad de interrumpir la ejecucin del
programa.
INTRODUCCIN A LA FAMILIA MIDA DP-FM 2 99.01
Adems, disponen de un potente juego de instrucciones tanto
lgicas como aritmticas, registros enteros (16 bits) y en coma flotante
(32 bits), as como instrucciones para control de los displays y el
teclado, dependiendo de las prestaciones de cada equipo.
La programacin de las unidades MIDA es sumamente sencilla
y su lenguaje de alto nivel facilita la realizacin de complejos
proyectos, debido a que pueden realizarse programas que contengan
subrutinas, saltos condicionales incondicionales, registros indexados
y, adems, se puede estructurar el programa con un procedimiento
principal y rutinas secundarias.
DEFINICIONES PREVIAS DP-DE 1 99.01
Se establecen a continuacin definiciones que se van a utilizar a
partir de este punto en este Manual Tcnico con el fin de facilitar la
comprensin de las explicaciones.
Programa MIDA
Programa tipo PLC de aplicacin residente en la
FLASH EPROM del equipo y realizado por el
integrador.
Buffer intermedio
Zona de memoria RAM del equipo en la que se
preparan los envos de datos a los visualizadores
puertos de comunicaciones (impresoras, PC, etc.).
Pila (stack) lgica
Zona de memoria RAM del equipo en la que se
almacenan transitoriamente estados de 1 bit (rels,
entradas/salidas digitales) para ser gestionados por
el programa MIDA.
Pila (stack) aritmtica
Zona de memoria RAM del equipo en la que se
almacenan transitoriamente datos de 16 bits (datos
enteros) de 32 bits (datos en coma flotante) para
ser gestionados por el programa MIDA.
Pila (stack) de
subrutinas
Zona de memoria RAM en la que se almacenan
transitoriamente las direcciones de retorno de las
subrutinas.
Directiva
Instruccin del programa MIDA que afecta al trabajo
del Compilador.
Compilador
Programa que traduce el programa MIDA realizado
por el usuario en cdigo objeto ejecutable por el
equipo.
Instruccin
Componente principal de una lnea de programa
MIDA. Indica la accin a realizar con los operandos
de esa lnea de programa.
DEFINICIONES PREVIAS DP-DE 2 99.01
Nemnico
Nombre de cada una de instrucciones de
programacin.
Operando
Parte de la lnea de programa sobre la cual se
ejecuta la accin que indica la instruccin.
Representa a un rel, registro, entrada, salida, etc.
Lista de instrucciones
Modo de programacin basado en el uso de los
nemnicos y operandos como elementos
identificativos de las instrucciones que consisten en
editar una sucesin de ellas por orden de ejecucin.
Diagrama de rels
Ladder
Modo de programacin mediante smbolos grficos
que simula a los esquemas elctricos.
Programa intrprete
Es el programa maestro del sistema que permite
traducir el programa MIDA creado por el integrador
en instrucciones que ejecuta el microprocesador.
ORGANIZACIN DE LA MEMORIA DP-OM 1 99.01
Los tipos de memoria de que disponen los equipos MIDA son:
! EPROM-FLASH
Donde se almacenan el programa intrprete y el realizado por
el usuario de tipo PLC. Ambos programas se pueden transmitir va
serie desde un PC. Por lo cual es posible actualizar nuevas versiones
del programa intrprete y del programa MIDA sin necesidad de
sustituir la EPROM.
! NOVRAM
Memoria no voltil donde se almacenan datos intermedios de la
ejecucin del programa MIDA (rels, registros enteros y en coma
flotante). Es un tipo de memoria que no depende de la batera Ni-Cd y
que por lo tanto puede ser utilizada para almacenar datos importantes
para la ejecucin del programa (claves de acceso, constantes de
conversin, etc.).
La NOVRAM tiene las ventajas de la EEPROM y, adems, no
tiene limitado el nmero de escrituras a realizar. Dispone de dos
zonas: una para registros enteros de 16 bits con signo y otra de
registros en coma flotante de 32 bits.
! RAM
Donde se almacenan los datos intermedios de la ejecucin del
programa MIDA (rels, registros). Por su construccin, este tipo de
memoria es voltil. Sin embargo, el equipo dispone de una batera de
Ni-Cd para salvaguardar los datos almacenados en ella. La autonoma
de esta batera es de tres meses con el equipo sin tensin.
Dentro de la memoria RAM se pueden distinguir dos zonas:
- RAM de usuario.
- RAM temporal.
- RAM DE USUARIO
La RAM de usuario es no voltil, protegida por batera de Ni-Cd.
Se distinguen varias zonas en esta memoria:
ORGANIZACIN DE LA MEMORIA DP-OM 2 99.01
! Zona de almacenamiento reservado para el programa
intrprete del equipo.
! Zona de almacenamiento de posiciones de 1 bit (rels).
! Zona de almacenamiento de posiciones de 16 bits (registros
enteros).
! Zona de almacenamiento de posiciones de 32 bits (registros
en coma flotante).
- RAM TEMPORAL
Los equipos MIDA disponen de tres pilas (stacks) independientes y
un buffer intermedio:
! PILA LGICA (1 bit): para intercambio de estados
intermedios de un bit (rels, entradas, salidas digitales).
Tiene una capacidad de 50 niveles.
! PILA ARITMTICA (16 bits): para intercambio de datos de
16 y 32 bits (enteros y coma flotante, respectivamente).
Tiene una capacidad de 50 niveles.
! PILA SUBRUTINAS (16 bits): para almacenamiento de las
direcciones de retorno de las subrutinas (instrucciones
CALL). Tiene una capacidad de 50 niveles.
Las pilas son del tipo LIFO y en las explicaciones se considera
que el ltimo estado ( dato) ocupa la posicin superior de la pila y,
por lo tanto, es el primero en descargarse.
Los equipos MIDA disponen tambin de un BUFFER
INTERMEDIO (zona de almacenamiento de datos temporal) donde se
preparan las visualizaciones, transmisiones y recepciones va serie.
Tiene una longitud de 132 bytes.
Todas las zonas de memoria que se describen estn protegidas
contra desbordamiento.
ORGANIZACIN DE LA MEMORIA DP-OM 3 99.01
Al ejecutarse la instruccin END se comprueban todos los
niveles de las pilas lgica, aritmtica y de subrutinas para, en su caso,
inicializarlas de nuevo en caso de error de programacin.
En el caso del buffer intermedio es el propio programa intrprete
el que impide escribir fuera de los mrgenes de este buffer.
ORGANIZACIN DE LA MEMORIA DP-OM 4 99.01
.
MODOS DE TRABAJO DP-MT 1 99.01
Los equipos MIDA pueden estar en dos estados:
! MODO DE TRABAJO
Es el modo normal por defecto de funcionamiento del equipo
desde el cual se ejecuta el programa, tambin conocido como
funcionamiento en modo RUN.
El equipo entra en este modo de trabajo desde una puesta en
tensin del equipo y desde el MODO STOP cuando se pide una
inicializacin de programa (reset) ya sea por teclado por
comunicaciones.
! MODO STOP
Es el modo desde el que se puede detener la ejecucin del
programa mediante el teclado o por comunicaciones. Este modo es el
indicado para realizar tests y comprobaciones sobre el programa.
En este modo de trabajo, el equipo ejecuta el programa
normalmente pero atendiendo al teclado para detenerlo y acceder a
las funciones interiores del equipo: test del equipo y visualizacin
interna de los registros.
MODOS DE TRABAJO DP-MT 2 99.01
.
MODOS DE PROGRAMACIN DP-PR 1 99.01
El lenguaje de programacin del equipo es por Lista de Instrucciones o
por Diagrama de Contactos.
Para programar los equipos
MIDA se debe realizar un cdigo de
programa en un editor ASCII estndar,
compilarlo para obtener el cdigo
objeto y transferir este al equipo va
serie.
Tambin podemos utilizar un
editor denominado MIDAedit bajo el
entorno MIDAtools. En este editor se
introduce el programa que debe
controlar el MIDA, se realiza la
compilacin y una vez compilado se
transfiere va serie al equipo.
Mencionar tambin la existencia de
una potente herramienta de ayuda y
soporte al programador denominado
MIDAvisual.
MIDAvisual es un software, de
visualizacin y monitorizacin, en el
que podemos leer y modificar cualquier
registro interno del equipo MIDA, ver
errores internos y editar el programa.
Siendo una herramienta ideal para la
depuracin y deteccin de errores en
programas desarrollados con las
unidades de control industrial MIDA.
Respecto el funcionamiento de
la programacin con el entorno
MIDAtools: MIDAedit o MIDAvisual, se
describe en el manual que se entrega juntamente con cada uno.
Inicio
Edicin del
programa
Compilacin
del programa
Errores?
Setup
OK?
No
No
Modificar
crear un Setup
Si
Si
Trasnferir
cdigo objeto
al equipo
Fin
MODOS DE PROGRAMACIN DP-PR 2 99.01
! Edicin de programas en entorno DOS
Los programas se realizan mediante un editor ASCII estndar,
que no introduzca caracteres de control (no editar con: word,
wordperfect, wordpad...) mediante el PC.
Una vez editado el programa, este se guarda con extensin .PRG.
Un programa puede llegar a tener un mximo de lneas, que
puede ser variable segn el modelo de MIDA que utilicemos (ver
Manual Usuario del equipo).
Una lnea de programa puede llegar a constar como mximo de
un nemnico, tres etiquetas (operandos) y un comentario:
" Nemnico: constituye la instruccin que el equipo debe ejecutar.
" Etiqueta: nombre simblico que define un rel, registro,
constante, texto o salto de lnea.
" Operando: indica sobre que rel, registro, constante o salto de
lnea sobre el que se debe ejecutar el nemnico.
" Comentario: un signo ; indica al compilador que el escrito que
viene a continuacin es simplemente un comentario para el
programador. Los comentarios pueden estar situados en cualquier
posicin de la lnea de programa.
Respecto el funcionamiento del compilador y enviador de
programas, referirse al documento incluido en el disquete de
programacin.
! Directivas de Compilacin
Existen unas instrucciones (nemnicos) que solo tienen efecto
sobre el compilador, son las llamadas Directivas de Compilacin:
EQU LITE MIDA
INTER END_INTER FILE
MODOS DE PROGRAMACIN DP-PR 3 99.01
La descripcin de las Directivas de Compilacin: INTER y
END_INTER, son comentadas dentro del capitulo "Interrupciones de
Software", y la directiva FILE en el capitulo "Base de Datos" de este
mismo Manual.
" EQU: Se utiliza para asignar nombres simblicos (etiquetas) a
rels, registros, constantes y operandos. Una vez definida la
etiqueta, se puede usar sta en lugar de la expresin equivalente.
Ejemplo: Si la entrada de una marcha es la entrada digital 8 y la
salida de la bomba es la salida digital 100, su expresin puede
ser:
marcha equ 8
bomba equ 100
LD marcha
OUT bomba
Nota importante:
Para editar etiquetas se debe tener presente de no dejar ningn
espacio entre el margen izquierdo y el primer carcter de la etiqueta.
En la edicin del programa tenemos que tener en cuenta que entre la
etiqueta y el nemnico se debe dejar al menos un espacio, al igual que
entre el nemnico y el operando, y entre operandos.
" LITE: Se utiliza para asignar nombres simblicos (etiquetas) en
vez del numero de orden del literal (texto). Ejemplo: Si el literal
(texto) a visualizar es CONTROL A, su expresin puede ser:
controla lite "CONTROL A"
CLEAR
DISL controla
COM 0
El literal (texto) deber estar encerrado entre comillas y su
longitud depender del equipo MIDA que estemos utilizando. Un literal
(texto) que lo queramos dejar en blanco, tenemos que dejar un
espacio en blanco entre las comillas.
MODOS DE PROGRAMACIN DP-PR 4 99.01
Indicar que los literales (textos) deben estar editados
consecutivamente dentro de la tabla de definicin de etiquetas.
Un literal lo podemos llamar dentro del programa, o bien por el
numero de orden o por la etiqueta asignada en la tabla.
El primer literal (texto) dentro de la tabla tiene el numero de
orden 0 y el numero mximo depende del equipo que estemos
programando.
Nota importante:
Para editar etiquetas se debe tener presente de no dejar ningn
espacio entre el margen izquierdo y el primer carcter de la etiqueta.
En la edicin del programa tenemos que tener en cuenta que entre la
etiqueta y el nemnico se debe dejar al menos un espacio, al igual que
entre el nemnico y el operando, y entre operandos.
" MIDA: Se utiliza para indicar al compilador de programas, el
modelo de MIDA para cual esta editado el programa, para
compilarlo y dejarlo preparado para enviarlo. Por ejemplo si el
siguiente programa es editado para un MIDA14:
MIDA 14
marcha equ 8
bomba equ 100
LD marcha
OUT bomba
Nota importante:
Para utilizar esta Directiva se debe tener presente de dejar un
espacio entre el margen izquierdo y el primer carcter de la directiva.
Entre la directiva y el numero de modelo de MIDA (variable segn el
modelo) se debe dejar al un espacio.
SIMBOLOGA DP-SI 1 99.01
Smbolos que encontremos en el Manual
LECTURA DEL CONTACTO DE UN RELE (LD)
LECTURA DEL CONTACTO DE UN RELE NEGADO
(LDNT)
DESCONEXIN DE UN RELE (RESET)
CONEXIN DE UN RELE (SET)
SALIDA DIGITAL O RELE INTERNO (OUT)
SALIDA DIGITAL NEGADA O RELE INTERNO
NEGADO (OUTNT)
TEMPORIZADOR (TIM)
CONTADOR (CNT)
SIMBOLOGA DP-SI 2 99.01
REGISTRO CON SU CONTENIDO
PILA ARITMETICA
IN
.
DESCRIPCIN HOJA DE INSTRUCCIONES IN-DI 1 99.01
Antes de empezar ha detallar cada una de las instrucciones de
programacin, nos proponemos dar unas explicaciones que creemos
ayudaran a una mayor comprensin.
NOTA IMPORTANTE:
En este Manual se va a describir todas las instrucciones que nos
podemos encontrar en los diferentes equipos MIDA. Eso no quiere
decir que en un modelo de MIDA tengamos todas las instrucciones
descritas en este Manual disponibles.
As como los ejemplos descritos en este manual, deberemos
comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que
estamos programando.
Para ver que instrucciones, rels/registros y mrgenes de estos,
disponemos para cada modelo de MIDA tenemos que consultar el
Manual de Usuario de estos.
Las instrucciones pueden contener hasta dos operandos y estas
vienen dadas en el siguiente formato:
LD XXXX YYYY
Para ayudarle a localizar e identificar fcilmente la informacin
se ha desarrollado una hoja tipo en donde se encuentran detalladas
cada una de las instrucciones que utilizan los equipos MIDA. A
continuacin mostramos un esquema de cmo esta estructurada dicha
hoja:
INSTRUCCION
PRIMER
OPERANDO
SEGUNDO
OPERANDO
DESCRIPCIN HOJA DE INSTRUCCIONES IN-DI 2 99.01
LD XXXX
NEMNICO: LD
OPERANDO XXXX: Rel interno, entrada, salida.
CDIGO INSTRUCCIN: 01
DESCRIPCIN:
CARGA en pila lgica el estado del rel indicado por el operando.
Incrementa un nivel la pila lgica (+1).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
OUT 101 ;Descarga el ltimo estado de la pila lgica (el de la
;entrada 1) sobre la salida digital 101.
LD 1 OUT 101
LD
Nombre de la instruccin
Datos
descriptivos de
la instruccin.
Diagrama grfico del ejemplo descrito.
Ejemplo practico.
Nemnico
Descripcin y funcionamiento de la instruccin
Comentarios
CLASIFICACIN DE LAS INSTRUCCIONES IN-CL 1 99.01
Las instrucciones que utilizan los equipos MIDA pueden
clasificarse en varios grupos que a continuacin indicamos:
INSTRUCCIONES LGICAS Y DE SALTO.
Instrucciones para el control lgico de los automatismos de una
mquina sistema, y asociados a registros de un bit.
LD ANDNT OUT LDX
LDNT ORNT OUTNT OUTX
AND ANDLD SET XOR
OR ORLD RESET JZ
JNZ
INSTRUCCIONES DE TEMPORIZACIN Y CONTAJE.
Instrucciones de temporizacin de tiempo y de contaje,
asociadas a registros enteros de 16 bits.
TIM CNT TIMR CNTR
INSTRUCCIONES DE TRATAMIENTO ARITMTICO DE 16 BITS.
Instrucciones para realizar operaciones aritmticas con registros
enteros (16 bits con signo).
MOVCI MOVIX ADDI ADDC INC
MOVRI STOIX SUBI SUBC SETRI
STOI MULI MULC STOFI
DIVI DIVC
CLASIFICACIN DE LAS INSTRUCCIONES IN-CL 2 99.01
INSTRUCCIONES DE TRATAMIENTO ARITMTICO DE 32 BITS.
Instrucciones para realizar operaciones aritmticas con registros
en coma flotante (32 bits segn formato IEEE).
MOVCF MOVFX ADDF
MOVRF STOFX SUBF
STOF MOVIF MULF
DIVF
INSTRUCCIONES DE COMPARACION ARITMTICA
Instrucciones para realizar comparaciones entre registros enteros
(16 bits) en coma flotante (32 bits)
CPEF CPGF CPEI CPGI
CPGEF CPLF CPGEI CPLI
CPLEF CPLEI
INSTRUCCIONES DE VISUALIZACIN E IMPRESIN
Instrucciones que permiten visualizar datos alfanumricos,
imprimirlos, transmitir va serie, etc.
CLEAR DISRI DISIX DISL
LOC DISFX DISRF DISLX
LOCX DISCX DISCH COM
CLASIFICACIN DE LAS INSTRUCCIONES IN-CL 3 99.01
INSTRUCCIONES DE TECLADO
Instrucciones que permiten detectar la pulsacin de teclas
introducir datos numricos a registros internos del equipo.
INK INI INF INICF
INPIX INPFX INPCX
INSTRUCCIONES DE RELOJ
Instrucciones que permiten visualizar y modificar el reloj interno
del equipo.
TIME DATE CLOCK CLKP
INSTRUCCIONES DE CONTROL DE FLUJO DE PROGRAMA.
Instrucciones de saltos y de subrutinas que permiten realizar
cdigos de programa estructurados en un procedimiento principal y
otros secundarios.
CALL JMP END NOP
RET
INSTRUCCIONES DE DETECCIN DE FLANCOS
Instrucciones destinadas a la deteccin de flancos.
FLANC
INSTRUCCIONES DE TRATAMIENTO DE FICHEROS
Instrucciones para manipular los ficheros almacenados en la
zona de memoria reservada a tal fin.
WRITE READ
CLASIFICACIN DE LAS INSTRUCCIONES IN-CL 4 99.01
INSTRUCCIONES DE FUNCIONES INTERNAS DEL EQUIPO
Instrucciones que efectan una llamada a una funcin interna
del equipo.
FUNC
DIRECTIVAS DE COMPILACIN
Instrucciones que indican operaciones especiales al Compilador
para la obtencin del cdigo objeto ejecutable.
Una vez compilado el programa no aparecen en el cdigo objeto ni
realizan trabajo alguno en su ejecucin.
EQU LITE MIDA FILE
INTER END_INTER
INSTRUCCIONES DE INTERRUPCIONES POR SOFTWARE
Instrucciones destinadas al control y gestin de las
interrupciones por software.
INTER END_INTER IRET
INSTRUCCIONES DE PROTOCOLO DE COMUNICACIONES
Intrucciones para el manejo de datos del puerto serie de
comunicaciones, mediante el protocolo libre.
DISB LEBC COM
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 1 99.01
Las funciones lgicas son un grupo de instrucciones para la
programacin de los registros de un bit (rels internos, entradas y
salidas digitales).
Para la programacin de este grupo de instrucciones se puede
utilizar para su planteamiento cualquiera de los mtodos que facilitan
la programacin de dispositivos lgicos, como pueden ser diagramas
de rels, contactos y bobinas (LADDER), lgebra de Boole, Tablas de
Karnough, Graffcet, etc.
El cdigo de programa puede ser editado mediante dos
editores:
! Programacin mediante MIDAedit (entorno MIDATools
para Windows), que permite programacin en diagrama
de rels (Ladder) y en lista de instrucciones, as como una
combinacin de ambos.
! Programar mediante un editor ASCII estndar y las
herramientas de trabajo en DOS.
Se describen a continuacin cada una de las instrucciones de
este grupo:
LD ANDNT OUT LDX
LDNT ORNT OUTNT OUTX
AND ANDLD SET XOR
OR ORLD RESET JZ
JNZ
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 2 99.01
LD XXXX
NEMNICO: LD
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 01
DESCRIPCIN:
CARGA en pila lgica el estado del rel indicado por el operando.
Incrementa un nivel la pila lgica (+1).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica
OUT 101 ;Descarga el ltimo estado de la pila lgica (el de la
;entrada 1) sobre la salida digital 101.
RELE 1 RELE 101
LD
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 3 99.01
LDNT XXXX
NEMNICO: LDNT
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 02
DESCRIPCIN:
CARGA en pila lgica el estado negado del rel indicado por el
operando.
Incrementa un nivel la pila lgica (+1).
# Ejemplo:
LDNT 1 ;Carga el estado negado de la entrada digital 1 en pila
;lgica.
OUT 102 ;Descarga el ltimo estado de la pila lgica (el de la
;entrada 1 negado) sobre la salida digital 102.
RELE 1 RELE 102
LDNT
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 4 99.01
LDX XXXX
NEMNICO: LDX
OPERANDO XXXX: Registro entero.
CDIGO INSTRUCCIN: 15
DESCRIPCIN:
CARGA en pila lgica el estado del rel indicado en el operando.
El operando es el registro entero que contiene la direccin del rel a
cargar.
Incrementa un nivel la pila lgica (+1).
# Ejemplo:
MOVCI 5 ;Carga en pila el dato 5
STOI 300 ;Carga el dato 5 en el registro 300
LDX 300 ;Carga el estado del rel indicado en el reg. 300,
;en este caso la entrada 5.
OUT 103 ;Descarga el ltimo estado de la pila lgica (el de
;la entrada 5) sobre la salida digital 03.
RELE 5 RELE103
LDX
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 5 99.01
XOR XXXX
NEMNICO: XOR
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 20
DESCRIPCIN:
OR EXCLUSIVA entre el ltimo estado de la pila lgica y el
operando.
Mantiene inalterado el nivel de la pila lgica (0).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
XOR 2 ;OR EXCLUSIVA entre las entradas 1 y 2
OUT 106 ;El estado de la entrada 1 pasa a la salida digital 106.
RELE 1 RELE 1 RELE 106
RELE 2 RELE 2
XOR
0 1 0 1
0 0 1 1
--------------
0 1 1 0
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 6 99.01
AND XXXX
NEMNICO: AND
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 03
DESCRIPCIN:
AND entre el ltimo estado de la pila lgica y el operando, dejando el
resultado en la pila lgica.
Mantiene inalterado el nivel de la pila lgica(0).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
AND 2 ;AND lgica entre las entradas 1 y 2
OUT 302 ;El resultado pasa al rel interno 302
RELE 1 RELE 2 RELE 302
AND
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 7 99.01
OR XXXX
NEMNICO: OR
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 04
DESCRIPCIN:
OR entre el ltimo estado de la pila lgica y el operando, dejando el
resultado en pila lgica.
Mantiene inalterado el nivel de la pila lgica (0).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
OR 2 ;OR lgica entre las entradas 1 y 2
OUT 106 ;El resultado de la OR pasa a la salida digital 106.
RELE 1 RELE 106
RELE 2
OR
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 8 99.01
ANDNT XXXX
NEMNICO: ANDNT
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 05
DESCRIPCIN:
AND entre el ltimo estado de la pila lgica y el operando negado,
dejando el resultado en pila lgica.
Mantiene el nivel de la pila lgica inalterado (0).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila
;lgica.
ANDNT 2 ;AND entre la entrada 1 y la 2 negada
OUT 104 ;El resultado de la AND pasa a la salida digital
;104.
RELE 1 RELE 2 RELE 104
ANDNT
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 9 99.01
ORNT XXXX
NEMNICO: ORNT
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 06
DESCRIPCIN:
OR entre el ltimo estado de la pila lgica y el operando, dejando el
resultado en pila lgica.
Mantiene inalterado el nivel de la pila lgica (0).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
ORNT2 ;OR lgica entre las entradas 1 y la 2 negada
OUT 410 ;El resultado de la OR pasa al rel interno 410.
RELE 1 RELE 410
RELE 2
ORNT
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 10 99.01
ANDLD
NEMNICO: ANDLD
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 07
DESCRIPCIN:
Realiza una AND lgica con los dos ltimos estados de la pila lgica,
dejando el resultado en la misma.
Decrementa un nivel la pila lgica (-1).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital1 en pila lgica.
LD 250 ;Carga el estado del rel interno 250 en pila lgica.
ANDLD ;Cierra el bloque lgico realizando una AND entre la
;entrada 1 y el rel interno 250.
OUT 104 ;El resultado de la AND pasa a la salida digital 104.
RELE 1 RELE 250 RELE 104
ANDLD
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 11 99.01
ORLD
NEMNICO: ORLD
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 08
DESCRIPCIN:
Realiza una OR lgica con los dos ltimos estados de la pila lgica,
dejando el resultado en la misma.
Decrementa un nivel la pila lgica (-1).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila lgica.
LD 2 ;Carga el estado de la entrada digital 2 en pila lgica
ORLD ;Cierra el bloque lgico OR
OUT 106 ;El resultado de la OR pasa a la salida digital 106.
RELE 1 RELE 106
RELE 2
ORLD
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 12 99.01
OUT XXXX
NEMNICO: OUT
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 09
DESCRIPCIN:
DESCARGA el ltimo estado de la pila lgica en el operando.
Decrementa el nivel de la pila lgica (-1).
# Ejemplo:
LD 600 ;Carga el estado del rel interno 600 en pila lgica.
OUT 106 ;El estado de la entrada 1 pasa a la salida digital 106.
RELE 600 RELE 106
OUT
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 13 99.01
OUTNT XXXX
NEMNICO: OUTNT
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 10
DESCRIPCIN:
Descarga el ltimo estado de la pila lgica en el operando
negndolo.
Decrementa el nivel la pila lgica (-1).
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila
;lgica.
OUTNT 109 ;El estado negado de la entrada 1, pasa a la
;salida digital 109.
RELE 1 RELE 109
OUTNT
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 14 99.01
OUTX XXXX
NEMNICO: OUTX
OPERANDO XXXX: Registro entero
CDIGO INSTRUCCIN: 16
DESCRIPCIN:
DESCARGA el ltimo estado de la pila lgica en el rel indicado en
el operando.
El operando es el registro entero que contiene la direccin del rel
sobre el que se descarga.
Decrementa un nivel la pila lgica (-1).
# Ejemplo:
MOVCI 101
STOI 500 ;Almacena el dato 101 en el registro entero 500.
LD 1 ;Carga el estado de la entrada 1
OUTX 500 ;El estado de la entrada 1 pasa a la salida digital
;101 (direccin contenida en el registro 500).
OUTX
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 15 99.01
SET XXXX
NEMNICO: SET
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 11
DESCRIPCIN:
ACTIVA el rel indicado en el operando.
La ejecucin de esta instruccin no se debe asociar a ninguna
condicin lgica.
Un bit activado mediante esta instruccin puede ser desactivado por
el resultado de cualquier otra instruccin.
Mantiene el nivel de la pila lgica inalterado (0).
# Ejemplo:
SET 101 ;Activacin de la salida digital 101.
RELE 101
SET
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 16 99.01
RESET XXXX
NEMNICO: RESET
OPERANDO XXXX: Rel interno, entrada salida digital.
CDIGO INSTRUCCIN: 12
DESCRIPCIN:
DESACTIVA el rel indicado en el operando.
La ejecucin de esta instruccin no se debe asociar a ninguna
condicin lgica.
Un bit desactivado mediante esta instruccin puede ser activado por
el resultado de cualquier otra instruccin.
Mantiene el nivel de la pila lgica inalterado (0).
# Ejemplo:
RESET 104 ;Desactivacin de la salida digital 104.
RELE 104
RESET
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 17 99.01
JZ XXXX
NEMNICO: JZ
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 93.
DESCRIPCIN:
SALTA cuando el ltimo nivel de pila lgica es 0'.
En caso de que el nivel de la pila sea 1 continua el programa en la
lnea siguiente.
El operando es el nmero o etiqueta de lnea destino del salto.
Decrementa un nivel la pila lgica (-1).
# Ejemplo:
001 LD 8 ;Carga en pila lgica el estado de la entrada 8.
002 JZ 100 ;Si el estado de la entrada 8 es 0', la ejecucin del
;programa salta a la lnea 100, si es 1 pasa a la lnea
;siguiente 003.
003 LD 16
..... ..... ....
..... ..... ....
100 LD 610
JZ
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 18 99.01
JNZ XXXX
NEMNICO: JNZ
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 94.
DESCRIPCIN:
SALTA cuando el ltimo nivel de pila lgica es 1'.
En caso de 0 pasa a la lnea siguiente.
El operando es el nmero o etiqueta de lnea destino del salto.
Decrementa un nivel la pila lgica (-1).
# Ejemplo:
001 LD 8 ;Carga en pila lgica el estado de la entrada 8.
002 JNZ 100 ;Si el estado de la entrada 8 es 1', la ejecucin del
;programa salta a la lnea 100, si es 0 pasa a la lnea
;siguiente 003.
003 LD 2
..... ..... ....
..... ..... ....
100 LD 16
JNZ
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 19 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Realizar el siguiente diagrama de contactos por lista de
instrucciones
RELE 1 RELE 2 RELE 111
RELE 3 RELE 4 RELE 5
LD 1 ;Carga en pila lgica el estado del rel 1.
LD 2 ;Carga en pila lgica el estado del rel 2.
LD 3 ;Carga en pila lgica el estado del rel 3.
AND 4 ;AND lgica entre los rels 3 y 4.
AND 5 ;AND lgica entre el resultado anterior y el rel 5.
ORLD ;Cierra el bloque lgico OR entre el resultado
;anterior y el rel 2.
ANDLD ;Cierra el bloque lgico realizando una AND entre
;el resultado anterior y el rel 1.
OUT 111 ;El resultado anterior pasa al rel 111.
END
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 20 99.01
B.- Realizar el siguiente diagrama de contactos por lista de
instrucciones
RELE 1 RELE 2 RELE 111
RELE 3 RELE 4 RELE 5
RELE 6 RELE 7
RELE 8 RELE 9
LD 1 ;Carga en pila lgica el estado del rel 1.
LD 2 ;Carga en pila lgica el estado del rel 2.
LD 3 ;Carga en pila lgica el estado del rel 3.
LD 4 ;Carga en pila lgica el estado del rel 4.
AND 5 ;AND lgica entre los reles 4 y 5.
LD 6 ;Carga en pila lgica el estado del rel 6.
AND 7 ;AND lgica entre los reles 6 y 7.
ORLD ;Cierra el bloque lgico OR entre los resultados
;de las dos anteriores AND.
ANDLD ;Cierra el bloque lgico realizando una AND entre
;el resultado anterior y el rel 3.
ORLD ;Cierra el bloque lgico OR entre el resultado
;anterior y el rel 2.
ANDLD ;Cierra el bloque lgico realizando una AND entre
;el resultado anterior y el rel 1.
LD 8 ;Carga en pila lgica el estado del rel 8.
ANDNT 9 ;AND entre la entrada 8 y la 9 negada
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 21 99.01
ORLD ;Cierra el bloque lgico OR entre el resultado
;anterior y el ultimo estado de la pila
;lgica (resultado del cierre del bloque lgico
;realizado con una AND con el rel 1).
OUT 111 ;El resultado anterior pasa al rel 111.
END
Los ejemplos que siguen a continuacin los vamos a realizar tanto con
el sistema de asignacin numricas, a las entradas y salidas (como en
el caso de los ejemplos propuestos hasta ahora), y por el mtodo de
asignacin de etiquetas a las entradas y salidas respectivamente.
C.- PARO-MARCHA CON EMERGENCIA.
Primero realizaremos el programa por medio de asignacin de
nmeros a las variables que vamos a manejar, en este caso tres
entradas y una salida.
El funcionamiento del programa es el siguiente: Estando la seta de
emergencia no pulsada entrada 1 (no olvidemos que el contacto fsico
de la seta de emergencia es NC, normalmente cerrado), por lo tanto la
entrada 1 (rel 1) esta activada siempre que la seta de emergencia no
este pulsada, al pulsar el pulsador de marcha, (entrada 3 = rel 3), se
activa el contactor de puesta en marcha del motor (salida 101 = rel
101), y al soltar este queda enclavado por el propio rel 101.
Para desactivar la maniobra pulsamos el pulsador de paro (entrada 2
= rel 2), abriendo el circuito, desconectndose en ese momento el
contactor del motor (salida 101 = rel 101), y al mismo tiempo se
desactiva el rel 101.
Al pulsar en cualquier momento la seta de emergencia(entrada 1 =
rel 1), se desactiva toda la maniobra.
- Seta de emergencia. Entrada: 1
- Pulsador de paro. Entrada: 2
- Pulsador de marcha Entrada: 3
- Contactor de accionamiento del motor. Salida: 101
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 22 99.01
RELE 1 RELE 2 RELE 3 RELE 101
RELE 101
LD 1 ;Entrada Emergencia
LD 3 ;Entrada Marcha
OR 101 ;Entrada enclavamiento
ANDLD
ANDNT 2 ;Entrada Paro
OUT 101 ;Salida activacin - desactivacin contactor motor
A continuacin veremos el mismo ejemplo pero realizado mediante
etiquetas, es decir, en vez de asignar nmeros a las entradas y
salidas, lo realizaremos asignando etiquetas.
- Seta de emergencia. Entrada: 1
- Pulsador de paro. Entrada: 2
- Pulsador de marcha Entrada: 3
- Contactor de accionamiento del motor. Salida: 101
RELE 1 RELE 2 RELE 3 RELE 101
RELE 101
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 23 99.01
;DEFINICION DE ETIQUETAS
;Entradas digitales.
;
emerg equ 1 ;Emergencia.
paro equ 2 ;Paro
marcha equ 3 ;Marcha
;
;Salidas digitales.
;
motor equ 101 ;Contactor Motor
;
LD emerg ;Entrada Emergencia
LD marcha ;Entrada Marcha
OR motor ;Enclavamiento
ANDLD
ANDNT paro ;Entrada Paro
OUT motor ;Salida activacin - desactivacin
;contactor motor
INSTRUCCIONES LGICAS Y DE SALTO IN-LO 24 99.01
.
INSTRUCCIONES DE DETECCIN FLANCOS IN-FL 1 99.01
FLANC XXXX YYYY
NEMNICO: FLANC
OPERANDO XXXX: Nmero de rel
OPERANDO YYYY: Registro interno de estado del flanco (0 a 99).
CDIGO INSTRUCCIN: 36
DESCRIPCIN:
Detecta un flanco de subida en un registro determinado de tipo rel.
El operando XXXX es el rel sobre el cual se detectara el flanco.
El operando YYYY es el registro interno de flanco a utilizar (no
accesible por el usuario).
Retorna sobre la pila lgica un "1" si ha detectado un flanco de
subida y un "0" en caso contrario.
Cada vez que se llama a la funcin FLANC se almacena sobre un
registro interno de estado (operando YYYY) el contenido del rel
apuntado por el operando XXXX. Si este registro cambia del estado
"0" al estado "1", la funcin retorna un "1" sobre pila lgica, en caso
contrario, un "0".
Incrementa la Pila Lgica en 1.
# Ejemplo:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
FLANC 0 1 ;Detecta si hay flanco de subida en la
;entrada digital 0.
JZ ini1 ;Si no hay flanco de subida, salta a ini1,
;de lo contrario continua el programa.
INC 500 1 ;Incrementa en 1 el contenido del registro
;entero 500.
ini1 FLANC 1 2 ;Detecta si hay flanco de subida en la
;entrada digital 1.
JZ ini2 ;Si no hay flanco de subida, salta a ini2,
;de lo contrario continua el programa.
FLANC
INSTRUCCIONES DE DETECCIN FLANCOS IN-FL 2 99.01
INC 501 1 ;Incrementa en 1 el contenido del registro
;entero 501.
ini2 CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
LOC 0 ;Sita el puntero en la posicin 0.
DISRI 500 2 ;Copia en el buffer intermedio el contenido
;del registro 500 con 2 dgitos.
LOC 16 ;Sita el puntero en la posicin 16.
DISRI 501 2 ;Copia en el buffer intermedio el contenido
;del registro 501 con 2 dgitos.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
END ;Fin de programa.
.
TEMPORIZADORES Y CONTADORES IN-TC 1 99.01
Los equipos MIDA disponen de instrucciones para temporizar y
contar impulsos (TIM, TIMR, CNT y CNTR).
A continuacin se describe el modo de programacin de este
tipo de instrucciones.
! TEMPORIZADORES
Los temporizadores de los equipos MIDA son a la conexin y
decrementales, es decir, que cuando transcurre el tiempo
preseleccionado transfieren un estado lgico 1' a la pila y el tiempo de
preseleccionado se realiza en dcimas de segundo.
Empezaremos primero viendo que es una instruccin de
temporizacin, para seguir, con los tipos de instrucciones que poseen
los equipos MIDA y finalmente veremos como deberemos de utilizar
dichas instrucciones.
Una instruccin de temporizacin realiza la misma funcin que
un temporizador de hardware. Dicha instruccin consta de dos
operandos. El primer operando nos indica el temporizador que vamos
a seleccionar, pudiendo realizar dicha seleccin, bien por medio de la
asignacin del nmero de temporizador a utilizar o bien mediante la
asignacin de una etiqueta. (Ver ejemplos)
El segundo operando es el valor numrico de la temporizacin,
este se carga en el registro RAM de temporizacin que es el registro
sobre el que se ejecuta el decremento del valor numrico asignado
expresado en dcimas de segundo. El registro del primer operando,
indica el nmero del registro RAM en donde se carga el valor a
temporizar en el segundo operando, el cual no es accesible por el
temporizador ms que para la recarga cuando se produce la condicin
pertinente.
Cuando el contenido de este registro RAM perteneciente al
temporizador es cero, el tiempo programado ya ha pasado y por lo
tanto la temporizacin ha terminado, activndose un 1 en la pila lgica.
Si la temporizacin no ha finalizado se activa un cero en la pila lgica.
Este registro de temporizacin es uno normal accesible por el
programa MIDA, por lo tanto puede tratarse aritmticamente (sumar,
restar,..) compararse con constantes con el contenido de otros
registros, modificarse, visualizarse, etc.
TEMPORIZADORES Y CONTADORES IN-TC 2 99.01
Recordar que el valor de este registro es decremental, por lo
que representa las dcimas de segundo para llegar a cero, no el
tiempo transcurrido. Para conocer el tiempo transcurrido hay que
realizar la siguiente operacin aritmtica:
Valor Preseleccin Registro de Temporizacin = Tiempo Transcurrido.
Sealar que este valor numrico que se asigna al segundo
operando puede efectuarse bien, de forma directa o de forma
indirecta. La forma directa consiste en introducir en el segundo
operando el valor numrico de la temporizacin mientras que de forma
indirecta asignamos al segundo operando un registro entero en donde
se encuentra el valor de la temporizacin. Para introducir el valor de la
temporizacin de forma directa utilizaremos la instruccin TIM,
mientras que para realizarla de forma indirecta utilizaremos la
instruccin TIMR.
Tal y como hemos explicado, la instruccin TIM, su preseleccin
es una constante escrita en el mismo programa, con lo cual no nos
permite variar de una temporizacin a otra, mientras que la instruccin
TIMR, la preseleccin es el contenido de un registro entero (16 bits).
Por lo que la programacin del tiempo puede variar pudindose
emplear el mismo temporizador, para realizar diferentes
temporizaciones dentro de un mismo programa.
Llegados ha este punto, vamos ha explicar como debemos
utilizar una instruccin de temporizacin.
Para realizar una funcin de temporizacin necesitaremos tres
elementos tal y como vemos en el siguiente esquema, un rel de
entrada, un temporizador y finalmente un rel de salida:
Rel_Entrada Temporizador Rel_Salida
TEMPORIZADORES Y CONTADORES IN-TC 3 99.01
LD Rel_entrada
TIM Temporizador Valor de preseleccin
OUT Rel_salida
La funcin del rel de entrada es la de autorizar o no, la puesta
en marcha el temporizador. Este rel puede tener dos estados lgicos
1 y 0. El estado 1 corresponde al estado de activado y por el contrario
el estado cero corresponde al estado de desactivado. Con un 1 lgico
activamos el temporizador.
El temporizador es el que realiza propiamente la temporizacin
una vez que el rel de entrada lo ha activado. Este se activa mediante
un estado lgico 1. Debemos de tener en cuenta que una vez el rel
de entrada ha activado el temporizador, aunque luego este rel pase a
cero, el temporizador seguir efectuando la temporizacin. Mientras la
temporizacin no ha finalizado en la salida del temporizador existe un
cero lgico, una vez ha concluido este, en la salida del temporizador
aparece un 1 lgico.
El rel de salida es sobre el cual el temporizador descarga el
estado lgico resultado de la temporizacin (1' si ha terminado el
tiempo, 0' sino lo ha hecho). Tambin sealar que el rel de fin de
tiempo puede sustituirse, por ejemplo, por un salto condicional, JZ
JNZ, puesto que con estas instrucciones tambin se consigue
descargar el estado lgico que transfiere el temporizador a la pila.
Tambin existe un rel de final de temporizacin que sigue el
estado del temporizador por interrupciones de software. Este rel tiene
la misma direccin que el temporizador y su estado es 0' si el registro
del temporizador es diferente de cero (temporizacin no terminada)
1' si el registro del temporizador es cero (temporizacin terminada).
Las instrucciones con que contamos para realizar la
temporizacin en los equipos MIDA son TIM y TIMR. La diferencia
existente entre ambas es la siguiente: en la instruccin TIM el
temporizador se recarga su preseleccin que se encuentra contenida
en el programa como constante, mientras que en la instruccin TIMR
se recarga mediante un registro interno cualquiera, TIMR).
Recordar que el valor mximo a temporizar es 3276,7 seg. No
obstante si precisramos temporizadores mayores ver capitulo de
contadores.
TEMPORIZADORES Y CONTADORES IN-TC 4 99.01
Por ultimo sealar que para que una instruccin de
temporizacin funcione es necesario que se cumplan los siguientes
requisitos:
- Haya sido recargado a su preseleccin.
- Haya sido arrancado mediante la ejecucin del cdigo de
programa.
A continuacin describimos las instrucciones de temporizacin:
TEMPORIZADORES Y CONTADORES IN-TC 5 99.01
TIM XXXX YYYY
NEMNICO: TIM
OPERANDO XXXX: Direccin del temporizador.
OPERANDO YYYY: Constante que indica la preseleccin del
temporizador.
CDIGO INSTRUCCIN: 13
DESCRIPCIN:
Carga en pila lgica un estado 1' tras un TIEMPO programado.
El operando XXXX es la direccin del temporizador a utilizar.
El operando YYYY es la constante que indica la preseleccin del
temporizador, expresada en dcimas de segundo.
Si la preseleccin del temporizador tiene contenido cero, la salida
de la instruccin TIM es 1'.
Incrementa un nivel la pila lgica (+1).
REL
AUTORIZACIN
REG.
TEMPORIZACIN
(RAM)
REL FIN DE
TIEMPO
REL DE
SALIDA
ESTADO
0' Reg =
Preseleccin " 0
0' RECARGA
1'
Reg = Reg - 1 " 0
0' Temporizando
1' Reg = Reg - 1 = 0 1' FIN DE TIEMPO
0' 1 Reg = 0 1' Registro de
temporizacin es
cero
TIM
TEMPORIZADORES Y CONTADORES IN-TC 6 99.01
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1en pila
;lgica.
TIM 250 100 ;Temporizador 250 programado con 100 dcimas
;de segundo.
OUT 101 ;Al cabo de 10s (100 dcimas de segundo) que la
;entrada 1 se active, la salida101 se activar
;(tambin se activa por interrupciones el rel
;interno 250).
RELE 1 TEMPORIZADOR 250 RELE 101
100
TEMPORIZADORES Y CONTADORES IN-TC 7 99.01
TIMR XXXX YYYY
NEMNICO: TIMR
OPERANDO XXXX: Direccin del temporizador.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 21
DESCRIPCIN:
Carga en pila lgica un estado 1' tras un TIEMPO programado.
El operando XXXX es la direccin del temporizador a utilizar.
El operando YYYY es el registro entero que contiene la constante
que indica la preseleccin del temporizador, expresada en dcimas
de segundo.
Si el contenido del registro entero tiene valor cero, la salida de la
instruccin TIMR es 1'.
Incrementa un nivel la pila lgica (+1)
REL
AUTORIZACIN
REG.
TEMPORIZACIN
(RAM)
REL FIN
DE TIEMPO
REL DE
SALIDA
ESTADO
0' Reg =
Preseleccin " 0
0' RECARGA
1'
Reg = Reg - 1 " 0
0' Temporizando
1' Reg = Reg - 1 = 0 1' FIN TIEMPO
0' 1 Reg = 0 1' Registro de
temporizacin es cero
TIMR
TEMPORIZADORES Y CONTADORES IN-TC 8 99.01
# Ejemplo:
MOVCI 230 ;Carga en la pila aritmtica la constante
;230
STOI 615 ;Almacena el contenido de la pila
;aritmtica en el registro entero 615
LD 1 ;Carga el estado de la entrada digital 1 en
;pila lgica.
TIMR 280 615 ;Temporizador 280 programado con el
;contenido del registro entero 615 (230
;dcimas de segundo)
OUT 101 ;La salida 101 al cabo de 23s (230
;dcimas de segundo) se activa. (tambin
;se activa por interrupciones el rel interno
;280).
RELE 1 TEMPORIZADOR 280 RELE 101
230
TEMPORIZADORES Y CONTADORES IN-TC 9 99.01
! CONTADORES
Para comenzar este apartado diremos que los contadores de
los equipos MIDA son a la conexin (y decrementales), es decir, que
cuando termina el contaje de impulsos preseleccionado transfieren un
estado lgico 1' a la pila.
Dicho esto empezaremos por comentar que es una instruccin
de contador, para continuar con los diferentes tipos de instrucciones
para contadores que poseen los equipos MIDA, y finalmente veremos
como deberemos de utilizar dichas instrucciones.
Empecemos por comentar que una instruccin de contador
realiza la misma funcin que un contador de hardware. Dicha
instruccin consta de dos operandos. El primer operando indica el
contador a utilizar, es decir, el contador que vamos a seleccionar,
pudiendo realizar dicha seleccin, bien por medio de la asignacin del
nmero del contador a utilizar o bien mediante la asignacin de una
etiqueta. (Ver ejemplos).
El segundo operando es el valor numrico del contador, este se
carga en el registro RAM del contador que es el registro sobre el que
se efecta el decremento del valor numrico asignado. Este registro
RAM, es el indicado primer operando, y el valor que contendr es el
indicado por el segundo operando.
Cuando el contenido de este registro RAM perteneciente al
contador es igual a cero, el contador ha llegado al final, ha concluido la
cuenta, activndose un 1 en la pila lgica. Si la cuenta a realizar no
ha finalizado se activa un cero en la pila lgica.
Este registro del contador es uno normal accesible por el
programa MIDA, por lo tanto puede tratarse aritmticamente (sumar,
restar,..) compararse con constantes con el contenido de otros
registros, modificarse, visualizarse, etc.
Sealar que este valor numrico que se asigna al segundo
operando es decremental y que puede efectuarse bien, de forma
directa o de forma indirecta. La forma directa consiste en introducir en
el segundo operando el valor numrico de la cuenta a realizar,
mientras que de forma indirecta asignamos al segundo operando un
registro entero en donde se encuentra el valor de la cuenta que
queremos realizar. Para introducir el valor de la cuenta de forma
TEMPORIZADORES Y CONTADORES IN-TC 10 99.01
directa utilizaremos la instruccin CNT, mientras que para realizarla de
forma indirecta utilizaremos la instruccin CNTR.
Las instrucciones de contadores con que cuentan los equipos
MIDA son CNT y CNTR cuyo funcionamiento en lneas generales es el
descrito anteriormente. Tambin cabe resaltar que tal y como hemos
explicado en lneas anteriores, la instruccin CNT, su preseleccin es
una constante escrita en el mismo programa, con lo cual no nos
permite variar de una cuenta a otra, mientras que la instruccin CNTR,
la preseleccin es el contenido de un registro entero (16 bits). Por lo
que la programacin del tiempo puede variar en funcin a una
introduccin por teclado, a un resultado aritmtico, a un contaje de
impulsos y modificarse a voluntad a cada una de las temporizaciones.
Llegados ha este punto, vamos ha explicar como debemos
utilizar una instruccin de contador.
Para realizar una funcin de contador necesitaremos cuatro
elementos tal y como vemos en el siguiente esquema, un rel de
autorizacin, un rel de impulsos, un contador y finalmente un rel de
salida:
Rel_Autorizacin
Rel Salida
Rel_de_Impulsos Contador
LD Rel_autorizacin
LD Rel de impulsos
CNT Contador preseleccin
OUT Rel_salida
Antes de explicar la funcin de cada uno de estos elementos
permitamos hacer un parntesis para explicar brevemente las
entradas con que cuenta un contador. En lneas anteriores hemos
comentado que una instruccin de contador es idntica a un contador
TEMPORIZADORES Y CONTADORES IN-TC 11 99.01
de hardware, es decir, consta de una entrada que sirve para autorizar
o no la cuenta a efectuar y que a su vez sirve tambin para realizar un
RESET del mismo( puesta a cero del contador). Esta es la entrada
que vemos identificada como RST en el esquema anterior actuando
como rel para cargar y preseleccionar el contador.
La otra entrada con el que cuenta el contador es la de entrada
de impulsos, que es por la que se realiza la cuenta de impulsos y que
vemos en el esquema anterior referenciada como CNT. Por ultimo
cuenta con una salida por la cual enva una seal lgica 1 o 0
segn sea el estado en que se encuentre el contador, es decir, estado
1 si ha finalizado la cuenta, 0 si no lo ha hecho.
Dicho esto pasaremos a explicar el esquema anterior. La
funcin del rel de autorizacin de entrada es la de autorizar o no, la
puesta en marcha del contador. Este puede tener dos estados lgicos
1 y 0. El estado 1 corresponde al estado de activado y por el contrario
el estado cero corresponde al estado de desactivado. Con un 1 lgico
activamos el contador.
El rel de impulsos es la entrada por la que entran los impulsos
a descontar del valor preseleccionado en el contador hasta llegar a
cero.
El contador es el que realiza propiamente la cuenta una vez que
el rel de entrada lo ha activado. Este se activa mediante un estado
lgico 1. Mientras la cuenta no ha finalizado en la salida del contador
existe un cero lgico, una vez ha concluido esta, en la salida del
temporizador aparece un 1 lgico.
El rel de salida es sobre el cual el contador descarga el estado
lgico resultado de la cuenta efectuada (1' si ha terminado la cuenta,
0' sino lo ha hecho). Tambin sealar que el rel de fin de cuenta
puede sustituirse, por ejemplo, por un salto condicional, JZ JNZ,
puesto que con estas instrucciones tambin se consigue descargar el
estado lgico que transfiere el contador a la pila.
Existe un rel de final de cuenta que sigue el estado del
contador por interrupciones de software. Este rel tiene la misma
direccin que el contador y su estado es 0' si el registro del contador
es diferente de cero (cuenta no terminada) 1' si el registro del
contador es cero (cuenta terminada).
TEMPORIZADORES Y CONTADORES IN-TC 12 99.01
Las instrucciones con que contamos para realizar los
contadores en los equipos MIDA son CNT y CNTR. La diferencia
existente entre ambas es la siguiente: en la instruccin CNT el
CONTADOR se recarga su preseleccin que se encuentra contenida
en el programa como constante, mientras que en la instruccin CNTR
se recarga mediante un registro interno cualquiera).
Por ultimo comentar que es posible utilizar los contadores como
temporizadores si se utilizan rels de bases de tiempo como entradas
de impulsos:
LD 400
LD R_BASE ;El contador contar los impulsos de la
;base tiempos utilizada
CNT 200 Cont_tiempo
OUT 401
Como el contador cuenta los flancos ascendentes del R_BASE
se tiene que la precisin de este tipo de temporizacin es del doble del
de la base de tiempos empleada.
RELE DE IMPULSOS BASE DE TIEMPOS
OBTENIDA
MXIMO TIEMPO
TEMPORIZABLE
10ms 20ms 655.34s (11min)
100ms 200ms 6553.4s (109min)
.5s 1s 546min (9h)
1s 2s 1092min (18h)
10s 3s 182h (7.5das)
1 min. 2 min. 32767min (1365 das)
Por lo que se puede realizar el contaje de tiempo mediante una
base de tiempos fabricada por el mismo programador para obtener
temporizaciones mayores se puede encadenar varios contadores,
encargndose uno de ellos de acumular por ejemplo horas, das.
Describimos a continuacin las instrucciones de contador:
TEMPORIZADORES Y CONTADORES IN-TC 13 99.01
CNT XXXX YYYY
NEMNICO: CNT
OPERANDO XXXX: Direccin del contador.
OPERANDO YYYY: Constante que indica la preseleccin del
contador.
CDIGO INSTRUCCIN: 14
DESCRIPCIN:
Carga en pila lgica un estado 1' tras un CONTAJE programado.
El operando XXXX es la direccin del contador a utilizar.
El operando YYYY es la constante que indica la preseleccin del
contador, nmero de impulsos a contar.
Si el preseleccin del contador tiene contenido cero, la salida de la
instruccin CNT es 1'.
Incrementa un nivel la pila lgica. (+1).
REL
INICIO
ENT.
IMPULSO
REG. CONTAJE
(RAM)
REL
SALIDA
FINAL DE
CONTAJE
ESTADO
1' X Reg=Preseleccin 0' RECARGA
0' 0' , 1'
Reg. = Reg - 1 " 0
0' CONTANDO
0' 0' , 1' Reg. = Reg - 1 = 0 1' FIN CONTAJE
0' 1 X Reg. = 0 1' Reg. de contaje es
cero
CNT
TEMPORIZADORES Y CONTADORES IN-TC 14 99.01
# Ejemplo:
LD 1 ;Carga el estado de la entrada digital 1 en pila
;lgica (inicio de cuenta)
LD 2 ;Entrada de impulsos de cuenta.
CNT 200 100 ;Cuenta de 100 impulsos.
OUT 101 ;Cuando hayan entrado 100 impulsos por la
;entrada 2, la salida 101 se activa (tambin se
;activa por interrupciones el rel interno 200).
RELE 1 CONTADOR 200
RELE 101
100
RELE 2
TEMPORIZADORES Y CONTADORES IN-TC 15 99.01
CNTR XXXX YYYY
NEMNICO: CNTR
OPERANDO XXXX: Direccin del contador.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 22
DESCRIPCIN:
Carga en pila lgica un estado 1' tras un CONTAJE programado.
El operando XXXX es la direccin del contador a utilizar.
El operando YYYY es el registro entero que contiene la constante
que indica la preseleccin del contador, nmero de impulsos a
contar.
Si el contenido del registro entero tiene valor cero, la salida de la
instruccin CNTR es 1'.
Decrementa un nivel la pila lgica (-1).
REL
INICIO
ENT.
IMPULSO
REG. CONTAJE
(RAM)
REL
SALIDA
FINAL DE
CONTAJE
ESTADO
1' X Reg=Preseleccin 0' RECARGA
0' 0' , 1'
Reg. = Reg - 1 " 0
0' CONTANDO
0' 0' , 1' Reg. = Reg - 1 = 0 1' FIN CONTAJE
0' 1 X Reg. = 0 1' Reg. de contaje es
cero
CNTR
TEMPORIZADORES Y CONTADORES IN-TC 16 99.01
# Ejemplo:
MOVCI 100 ;Carga en la pila aritmtica la constante
;100
STOI 500 ;Almacena el contenido de la pila
;aritmtica en el registro entero 500
LD 1 ;Carga el estado de la entrada digital 1 en
;pila lgica (permisin de cuenta)
LD 2 ;Entrada de impulsos de cuenta.
CNTR 200 500 ;Cuenta de 100 impulsos (contenido de
;registro entero 500), por la entrada digital
;2 e inicindose cuando la entrada 1 pasa
;a estado 0'.
OUT 101 ;Cuando hayan entrado 100 impulsos, la
;salida 101 se activa (tambin se activa por
;interrupciones el rel interno 200).
RELE 1 CONTADOR 200
RELE 101
100
RELE 2
TEMPORIZADORES Y CONTADORES IN-TC 17 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Puesta en marcha y reset de un temporizador.
El funcionamiento de este ejemplo es el siguiente: una vez activada la
entrada 1 y siempre que la entrada 2 no este activada, hasta pasado
un tiempo predeterminado por el temporizador 250 la salida 104 no
pasara al estado "1" (ON). Si pulsamos la entrada 2 se produce un
reset en el temporizador y la salida 104 si esta en "1" pasara a "0".
LD 1 ;Puesta en marcha del
;temporizador
OR 400
ANDNT 2 :Puesta a cero de la salida 104 y
;reset del temporizador.
OUT 400 ;Salida digital controlada
LD 400
TIM 250 10 ;Tiempo de permanencia en ON
OUT 104 ;Salida digital temporizada
B.- Puesta en marcha y reset de un temporizador fijando el tiempo de
este por un registro entero.
El funcionamiento de este ejemplo es mismo que el anterior, pero en
este caso en vez de utilizar la instruccin TIM en donde se marca el
tiempo a temporizar directamente (segundo operando), hemos
utilizado la TIMR en donde el tiempo a temporizar se encuentra
almacenado en un registro interno de tipo entero, apuntado por el
segundo operando, tal y como se describe en los comentarios
adjuntos del programa ejemplo.
MOVCI 20 ;Carga en pila aritmtica la
;constate entera 20
STOI 300 ;Almacena dicha constante en el
;registro entero 300.
TEMPORIZADORES Y CONTADORES IN-TC 18 99.01
LD 1 ;Puesta en marcha del
;temporizador
OR 400
ANDNT 2 :puesta a cero de la salida 104 y
;reset del temporizador.
OUT 400 ;Salida digital controlada
LD 400
TIMR 250 300 ;Tiempo de permanencia en ON
OUT 104 ;Salida digital temporizada
C.- Generador de impulsos.
Sealar que la frecuencia de la salida impulsos estar en funcin de
los tiempos que se programen en los temporizadores.
LD 1 ;puesta en marcha generador de
;impulsos
LD 400
ORLD
ANDNT 2 ;paro generador de impulsos
OUT 400 ;autorizacin puesta en marcha
;generador de impulsos
LD 400
ANDNT 410 ;reset del temporizador ON
TIM 250 10 ;temporizador generado del estado
;ON
OUT 405
LD 405
AND 104 ;reset del temporizador OFF
TIM 251 10 ;temporizador generador del estado
;OFF
OUT 410
LD 405
OUT 104
TEMPORIZADORES Y CONTADORES IN-TC 19 99.01
D.- Contador de piezas
Se trata de contar 10 piezas y una vez se han contado dichas piezas
avisar que se ha finalizado la cuenta.
LD 1 ;Puesta en marcha contador.
OR 400
ANDNT 2 ;Paro contador y reset.
OUT 400 ;Autorizacin contador.
LDNT 400
LD 5 ;Entrada contador.
CNT 200 10 ;Contador con valor de cuenta a 10.
OUT 104 ;Salida seal aviso fin de cuenta.
TEMPORIZADORES Y CONTADORES IN-TC 20 99.01
.
INSTRUCCIONES ARITMETICAS IN-AR 1 99.01
Las funciones aritmticas que se pueden realizar con las
instrucciones de que disponen los equipos MIDA son las que
relacionamos a continuacin:
! Suma, resta, multiplicacin y divisin, en formatos entero y
coma flotante (operamos con registros de 16 bits y 32 bits
respectivamente).
! Almacenamiento y lectura del contenido de los registros
enteros y en coma flotante.
! Conversin de datos enteros en coma flotante.
! Conversin de datos en coma flotante en formato entero, con
redondeo.
El diagrama de flujo describe la forma de
realizar operaciones aritmticas.
Para realizar cualquier operacin
aritmtica, las instrucciones manipulan los
datos tanto enteros como en coma flotante a
travs de la pila aritmtica.
En todas las operaciones la forma de
operar es la misma: por cadenas polacas con
acumulador, utilizando la pila aritmtica como
memoria intermedia. Puede operarse con
contenidos de registros constantes
numricas tanto en formato entero en coma
flotante. Pero los datos empleados en cada
operacin deben de ser del mismo formato, es
decir, debe observarse la concordancia de
datos en todas las operaciones que se
efecten. Por ello, existen instrucciones de
conversin de datos enteros a coma flotante y
viceversa.
INICIO
Carga un dato
en la pila
aritmtica
Carga un dato
en la pila
aritmtica
Realiza la
operacin
aritmtica
resultado en
pila
INSTRUCCIONES ARITMETICAS IN-AR 2 99.01
! ALMACENAMIENTO Y LECTURA DE VALORES A REGISTROS.
Para asignar valores a registros, enteros en coma flotante se
debe realizar a travs de la pila aritmtica.
Un dato, ya sea entero coma flotante, debe ser introducido en
la pila aritmtica para luego ser almacenado en un registro del formato
correspondiente.
Para asignar el dato cte. al registro reg se debe realizar uno de
los siguientes cdigos de programa dependiendo del formato del
registro.
MOVCI cte
STOI reg
reg = cte
SETRI reg cte reg = cte
MOVCF cte
STOF reg
reg = cte
Todo almacenamiento de un dato en un registro lleva implcito
una lectura anterior ya sea de una constante del contenido de otro
registro.
As, en los cdigos descritos anteriormente, las instrucciones
MOVxx son de lectura y las STOxx son de almacenamiento.
La instruccin SETRI no utiliza la pila aritmtica.
Las instrucciones disponibles para lectura y escritura de los
registros son:
MOVRI MOVRF MOVIF STOF SETRI
MOVCI MOVCF STOI STOFX
MOVIX MOVFX STOIX STOFI
INSTRUCCIONES ARITMETICAS IN-AR 3 99.01
! OPERACIONES ARITMTICAS CON DATOS ENTEROS (16 bits
con signo).
Las operaciones aritmticas que pueden realizarse con las
instrucciones disponibles en los equipos MIDA son:
! Suma
! Resta
! Multiplicacin
! Divisin.
Todas estas operaciones se realizan con la precisin propia de
los datos enteros de 16 bits con signo; es decir, sin tener en cuenta
decimales y con una capacidad de clculo de:
-32768 a 32767 (2
15
* 2
15
-1).
Dato entero de 16 bits con signo
S S b b b b b b b b b b b b b b b
$ BYTE DE DATOS BYTE DE DATOS
(La flecha indica el bit de signo).
Las instrucciones disponibles son:
ADDI SUBI DIVI
ADDC MULI DIVC
SUBI MULC INC
INSTRUCCIONES ARITMETICAS IN-AR 4 99.01
Las operaciones pueden realizarse entre contenidos de
registros enteros, entre constantes bien entre ambos, tal como se
describe en la tabla siguiente:
MOVRI A
MOVRI B
ADDI
STOI C
regC = regA + regB
MOVRI A
MOVCI B
SUBI
STOI C
regC = regA - B
MOVCI A
MOVRI B
MULI
STOI C
regC = A * regB
MOVCI A
MOVCI B
DIVI
STOI C
regC = A / B
MOVRI A
MOVRI B
MOVRI C
ADDI
SUBI
STOI D
Reg D = A+B-C
INSTRUCCIONES ARITMETICAS IN-AR 5 99.01
Cuando se trata de operar el contenido de un registro con una
constante, se pueden utilizar las siguientes instrucciones para
ahorrar lneas de programa:
MOVRI A
ADDC B
STOI C
regC = regA + B
MOVRI A
SUBC B
STOI C
regC = reg A -B
MOVRI A
MULC B
STOI C
regC = regA * B
MOVRI A
DIVC B
STOI C
regC = regA / B
MOVRI A
MOVRI B
ADDC C
DIVI
STOI D
regC = reg B+C / A
INSTRUCCIONES ARITMETICAS IN-AR 6 99.01
! OPERACIONES ARITMTICAS CON DATOS EN COMA
FLOTANTE (32 bits IEEE).
Las operaciones aritmticas que pueden realizarse con las
instrucciones disponibles en los equipos MIDA son:
! Suma
! Resta
! Multiplicacin
! Divisin.
Todas estas operaciones se realizan con la precisin propia de
los datos en coma flotante de 32 bits en formato IEEE pero con una
capacidad de representacin en pantalla y de transmisin por los
puertos de comunicaciones de 16 cifras significativas.
La capacidad de clculo es de 3.4*10
38
a -3.4*10
38
( pero el nmero
mximo visualizable es de 16 cifras).
Dato en coma flotante de 32 bits IEEE
S Exponente Mantisa
$ EXPONENTE
(8 bits)
MANTISA
(23 bits)
(La flecha indica el bit de signo)
Las instrucciones de que disponen los equipos MIDA para este
tipo de operaciones son las siguientes:
ADDF SUBF MULF DIVF
INSTRUCCIONES ARITMETICAS IN-AR 7 99.01
Las operaciones pueden realizarse entre contenidos de
registros, entre constantes bien entre ambos, tal como se describe
en la tabla siguiente:
MOVRF A
MOVRF B
ADDF
STOF C
RegC = regA + regB
MOVRF A
MOVCF B
SUBF
STOF C
RegC = regA B
MOVCF A
MOVRF B
MULF
STOF C
RegC = A * regB
MOVCF A
MOVCF B
DIVF
STOF C
RegC = A / B
MOVCF A
MOVCF B
MOVCF C
MULF
DIV
STOI D
Reg D = B * C / A
INSTRUCCIONES ARITMETICAS IN-AR 8 99.01
! CONVERSIN DE TIPOS DE DATOS.
El equipo dispone de instrucciones para convertir datos enteros
en coma flotante y viceversa.
La conversin de datos enteros en coma flotante se realiza
a travs de la pila aritmtica mediante la instruccin MOVIF.
Las instrucciones de conversin pasan a pila aritmtica el
contenido de un registro entero convirtindolo en coma flotante. El
dato queda convertido en uno de formato de coma flotante de 32 bits,
de esta manera, poder operar con datos de esta precisin.
La conversin de datos en coma flotante en enteros se
realiza transportando desde la pila un dato en coma flotante y
almacenndolo en un registro de formato entero mediante la
instruccin STOFI.
Al almacenarlo, este dato se redondea por defecto exceso,
segn indica la siguiente tabla:
Hasta XX.4999 Por defecto XX
Desde XX.5000 Por exceso XX + 1
As, por ejemplo si el dato es 23.34 el resultado es 23. Por el
contrario, si este dato es 23.68 el resultado es 24.
INSTRUCCIONES ARITMETICAS IN-AR 9 99.01
El dato queda convertido en un formato entero de 16 bits para,
de esta manera, poder operar con datos de esta precisin
! INSTRUCCIONES RELACIONADAS
Antes de comenzar con la descripcin de cada una de las
instrucciones que componen este grupo, adjuntamos una tabla en
donde se encuentran relacionadas todas ellas.
MOVRI MOVRF ADDI ADDF
MOVCI MOVCF SUBI SUBF
MOVIX MOVFX MULI MULF
SETRI DIVI DIVF
ADDC
STOI STOF SUBC
STOIX STOFX MULC
MOVIF STOFI DIVC INC
Describimos a continuacin las instrucciones de este grupo:
INSTRUCCIONES ARITMETICAS IN-AR 10 99.01
MOVRI XXXX
NEMNICO: MOVRI
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 33
DESCRIPCIN:
CARGA en pila aritmtica el contenido del registro entero.
El operando es la direccin del registro entero cuyo contenido se
transfiere a la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1).
# Ejemplo:
MOVRI 300 ;Carga en la pila aritmtica el contenido del
;registro entero 300, por ejemplo 1378.
MOVRI
INSTRUCCIONES ARITMETICAS IN-AR 11 99.01
MOVCI XXXX
NEMNICO: MOVCI
OPERANDO XXXX: Constante entera de 16 bits.
CDIGO INSTRUCCIN: 32
DESCRIPCIN:
CARGA en pila aritmtica una constante en formato entero.
El operando es la constante entera, introducida en el programa en
decimal, que se transfiere a la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1)
# Ejemplo:
MOVCI 338 ;Carga en pila aritmtica la constante entera 338
STOI 500 ;Almacena el contenido de la pila aritmtica en el
;registro entero 500
MOVCI
INSTRUCCIONES ARITMETICAS IN-AR 12 99.01
STOI XXXX
NEMNICO: STOI
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 34
DESCRIPCIN:
ALMACENA en un registro entero el ltimo dato de la pila
aritmtica.
El operando es el registro entero donde se almacena el ltimo dato
de la pila aritmtica.
Decrementa un nivel la pila aritmtica (-1).
# Ejemplo:
MOVCI -152 ;Carga en la pila aritmtica la constante -152
STOI 800 ;Almacena el contenido de la pila aritmtica en el
;registro entero 800
STOI
INSTRUCCIONES ARITMETICAS IN-AR 13 99.01
SETRI XXXX YYYY
NEMNICO: SETRI
OPERANDO XXXX: Registro entero de 16 bits.
OPERANDO YYYY: Constante de formato entero.
CDIGO INSTRUCCIN: 35
DESCRIPCIN:
ALMACENA en el registro entero del primer operando la constante
indicada por el segundo operando.
El operando XXXX es la direccin del registro entero en donde se
va a cargar el dato.
El operando YYYY es la constante entera que va a almacenarse en
el registro entero apuntado por el operando XXXX.
Mantiene inalterado el nivel la pila aritmtica. (0)
# Ejemplo:
SETRI 300 3200 ;Almacena el dato 3200 en el registro
;entero 300.
SETRI
INSTRUCCIONES ARITMETICAS IN-AR 14 99.01
MOVIX XXXX
NEMNICO: MOVIX
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 30
DESCRIPCIN:
CARGA en pila aritmtica el contenido del registro entero apuntado.
El operando es el registro entero que contiene la direccin del
registro entero con el contenido a transferir a la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1)
# Ejemplo:
SETRI 300 137 ;Almacena la constante 137 en el reg.
;entero 300
SETRI 500 300 ;Almacena la constante 300 en el reg.
;entero 500
MOVIX 500 ;Carga en pila aritmtica el contenido del
;reg. entero 300, puesto que es el
;apuntado por el reg. entero 500, es decir
;el dato 137
STOI 600 ;Almacena el contenido de la pila
;aritmtica en el registro entero 600
MOVIX
INSTRUCCIONES ARITMETICAS IN-AR 15 99.01
STOIX XXXX
NEMNICO: STOIX
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 31
DESCRIPCIN:
ALMACENA el ltimo dato de la pila aritmtica en el registro entero
apuntado.
El operando es el registro entero que contiene la direccin del
registro entero donde se almacena el ltimo dato de la pila
aritmtica.
Decrementa un nivel la pila aritmtica (-1)
# Ejemplo:
SETRI 680 150 ;Almacena la constante 150 en el reg.
;entero 680
MOVCI 1850 ;Carga en pila aritmtica el dato 1850
STOIX 680 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 150, puesto
;que es el apuntado por el reg. entero 680.
STOIX
INSTRUCCIONES ARITMETICAS IN-AR 16 99.01
MOVRF XXXX
NEMNICO: MOVRF
OPERANDO XXXX: Registro en coma flotante de 32 bits.
CDIGO INSTRUCCIN: 27
DESCRIPCIN:
CARGA en pila aritmtica el contenido de un registro en coma
flotante.
El operando es la direccin del registro en coma flotante cuyo
contenido se transfiere a la pila aritmtica.
Incrementa dos niveles la pila aritmtica (+2).
# Ejemplo:
MOVRF 100 ;Carga en la pila aritmtica el contenido del reg.
;en coma flotante 100, por ejemplo 378.54
STOF 500 ;Almacena el contenido de la pila aritmtica en el
;reg. en coma flotante 500
MOVRF
INSTRUCCIONES ARITMETICAS IN-AR 17 99.01
STOF XXXX
NEMNICO: STOF
OPERANDO XXXX: Registro en coma flotante de 32 bits.
CDIGO INSTRUCCIN: 28
DESCRIPCIN:
ALMACENA en un registro en coma flotante el ltimo dato de la pila
aritmtica.
El operando es la direccin del registro en coma flotante sobre el
cual se almacena el ultimo dato de la pila aritmtica.
Decrementa dos niveles la pila aritmtica (-2)
# Ejemplo:
MOVCF 2.3458 ;Carga en pila aritmtica la constante
;2.3458
STOF 500 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 500
STOF
INSTRUCCIONES ARITMETICAS IN-AR 18 99.01
MOVCF XXXX
NEMNICO: MOVCF
OPERANDO XXXX: Constante en coma flotante.
CDIGO INSTRUCCIN: 26
DESCRIPCIN:
CARGA en pila aritmtica una constante en coma flotante.
El operando es la constante en coma flotante, introducida en el
programa en decimal, que se transfiere a la pila aritmtica.
Incrementa dos niveles la pila aritmtica (+2).
# Ejemplo:
MOVCF 100.54687 ;Carga en pila aritmtica la constante en
;coma flotante 100.54687
STOF 470 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 470
MOVCF
INSTRUCCIONES ARITMETICAS IN-AR 19 99.01
MOVFX XXXX
NEMNICO: MOVFX
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 23
DESCRIPCIN:
CARGA en pila aritmtica el contenido del registro en coma flotante
apuntado.
El operando es el registro entero que contiene la direccin del
registro en coma flotante con el contenido a transferir a la pila
aritmtica.
Incrementa dos niveles la pila aritmtica (+2).
# Ejemplo:
MOVCF 0.720 ;Carga en pila aritmtica la constante en
;coma flotante 0.720
STOF 100 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 100
SETRI 500 100 ;Almacena la cte. 100 en el reg entero 500
MOVFX 500 ;Carga en pila aritmtica el contenido del
;reg. en coma flotante 100, puesto que es
;el apuntado por el reg. entero 500, es
;decir el dato 0.720
STOF 600 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 600
MOVFX
INSTRUCCIONES ARITMETICAS IN-AR 20 99.01
STOFX XXXX
NEMNICO: STOFX
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 24
DESCRIPCIN:
ALMACENA el ltimo dato de la pila aritmtica en el registro en
coma flotante apuntado.
El operando es el registro entero que contiene la direccin del
registro en coma flotante donde se almacena el ltimo dato de la pila
aritmtica.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
SETRI 400 500 ;Almacena la constante 500 en el
;reg. entero 400
MOVCF 18558.2 ;Carga en pila aritmtica la constante en
;coma flotante 18558.2
STOFX 400 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 500,
;puesto que es el apuntado por el reg.
;entero 400.
STOFX
INSTRUCCIONES ARITMETICAS IN-AR 21 99.01
ADDI
NEMNICO: ADDI
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 40
DESCRIPCIN:
SUMA los dos ltimos datos enteros de la pila aritmtica y deja el
resultado en la pila aritmtica.
Decrementa un nivel la pila aritmtica (-1).
# Ejemplo:
MOVCI 100 ;Carga en pila aritmtica la constante 100
MOVRI 300 ;Carga en pila aritmtica el contenido del reg.
;entero 300 (por ejemplo 72)
ADDI ;Suma los dos ltimos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato 172
STOI 410 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 410 (resultado de la suma).
ADDI
INSTRUCCIONES ARITMETICAS IN-AR 22 99.01
SUBI
NEMNICO: SUBI
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 41
DESCRIPCIN:
RESTA los dos ltimos datos enteros de la pila aritmtica y deja el
resultado en la pila aritmtica.
El sustraendo es el ltimo dato de la pila aritmtica. El minuendo es
el anterior.
Decrementa un nivel la pila aritmtica (-1)
# Ejemplo:
MOVRI 300 ;Carga en la pila aritmtica el contenido del reg.
;entero 300 (por ejemplo 111).
MOVCI 2 ;Carga en la pila aritmtica la constante 2
SUBI ;Resta los dos ltimos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato 109
STOI 500 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 500 (resultado de la resta).
SUBI
INSTRUCCIONES ARITMETICAS IN-AR 23 99.01
MULI
NEMNICO: MULI
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 42
DESCRIPCIN:
MULTIPLICA los dos ltimos datos enteros de la pila aritmtica y
deja el resultado en la pila aritmtica.
Decrementa un nivel la pila aritmtica (-1).
# Ejemplo:
MOVRI 300 ;Carga el contenido del reg. entero 300 en la pila
;aritmtica (por ejemplo -128).
MOVCI 2 ;Carga la constante 2 en la pila aritmtica.
MULI ;Multiplica los dos ltimos datos contenidos en la
;pila aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato -256.
STOI 250 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 250 (resultado de la multiplicacin).
MULI
INSTRUCCIONES ARITMETICAS IN-AR 24 99.01
DIVI
NEMNICO: DIVI
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 43
DESCRIPCIN:
DIVIDE los dos ltimos datos enteros de la pila aritmtica y deja el
resultado en la pila aritmtica.
El divisor es el ltimo estado de la pila aritmtica. El dividendo es el
anterior.
Decrementa un nivel la pila aritmtica (-1)
# Ejemplo:
MOVRI 100 ;Carga en la pila aritmtica el contenido del reg.
;entero 100, por ejemplo -2002.
MOVCI 2 ;Carga en la pila aritmtica la constante 2.
DIVI ;Divide los dos ltimos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato -1001.
STOI 250 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 250 (resultado de la divisin).
DIVI
INSTRUCCIONES ARITMETICAS IN-AR 25 99.01
ADDC XXXX
NEMNICO: ADDC
OPERANDO XXXX: Constante de formato entero.
CDIGO INSTRUCCIN: 45
DESCRIPCIN:
SUMA al ltimo dato de la pila aritmtica la constante del operando.
El operando es la constante entera a sumar, introducida en el
programa en decimal, con el ltimo dato de la pila aritmtica.
Mantiene el nivel de la pila aritmtica inalterado (0).
# Ejemplo:
MOVCI -285 ;Carga en pila aritmtica la constante -285
ADDC 100 ;Suma al ltimo dato de la pila aritmtica la
;constante 100 y deja el resultado en la misma
;pila aritmtica, es decir, el dato -185.
STOI 255 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 255 (resultado de la suma).
ADDC
INSTRUCCIONES ARITMETICAS IN-AR 26 99.01
SUBC XXXX
NEMNICO: SUBC
OPERANDO XXXX: Constante de formato entero.
CDIGO INSTRUCCIN: 46
DESCRIPCIN:
RESTA al ltimo dato de la pila aritmtica la constante del operando.
El operando es el sustraendo constante entera a restar, introducida
en el programa en decimal, con el ltimo dato de la pila aritmtica.
Mantiene el nivel de la pila aritmtica inalterado (0).
# Ejemplo:
MOVCI 180 ;Carga en pila aritmtica la constante 180
SUBC 25 ;Resta al ltimo dato de la pila aritmtica la
;constante 25 y deja el resultado en la misma pila
;aritmtica, es decir, el dato 165.
STOI 525 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 525 (resultado de la resta).
SUBC
INSTRUCCIONES ARITMETICAS IN-AR 27 99.01
MULC XXXX
NEMNICO: MULC
OPERANDO XXXX: Constante de formato entero.
CDIGO INSTRUCCIN: 47
DESCRIPCIN:
MULTIPLICA el ltimo dato de la pila aritmtica con la constante del
operando.
El operando es la constante entera a multiplicar, introducida en el
programa en decimal, con el ltimo dato de la pila aritmtica.
Mantiene el nivel de la pila aritmtica inalterado (0).
# Ejemplo:
MOVRI 300 ;Carga en pila aritmtica el contenido del reg.
;entero 300, por ejemplo 40.
MULC 5 ;Multiplica al ltimo dato de la pila aritmtica la
;constante 5 y deja el resultado en la misma pila
;aritmtica, es decir, el dato 200.
STOI 815 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 815 (resultado de la multiplicacin).
MULC
PILA
ARITMET.
MULC 5
STOI
40
PILA
ARITMET.
200
REG CONTEN. REG CONTEN.
815 200
MOVRI
300 40
INSTRUCCIONES ARITMETICAS IN-AR 28 99.01
DIVC XXXX
NEMNICO: DIVC
OPERANDO XXXX: Constante de formato entero.
CDIGO INSTRUCCIN: 48
DESCRIPCIN:
DIVIDE el ltimo dato de la pila aritmtica con la constante del
operando.
El operando es el divisor a dividir, introducida en el programa en
decimal, con el ltimo dato de la pila aritmtica.
El operando es el divisor de la operacin.
Mantiene el nivel de la pila aritmtica inalterado (0).
# Ejemplo:
MOVRI 220 ;Carga en pila aritmtica el contenido del reg.
;entero 220, por ejemplo 1000.
DIVC 5 ;Divide al ltimo dato de la pila aritmtica la
;constante 5 y deja el resultado en la misma pila
;aritmtica, es decir, el dato 200.
STOI 635 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 635 (resultado de la divisin).
DIVC
INSTRUCCIONES ARITMETICAS IN-AR 29 99.01
INC XXXX YYYY
NEMNICO: INC
OPERANDO XXXX: Registro entero de 16 bits.
OPERANDO YYYY: Constante de formato entero.
CDIGO INSTRUCCIN: 44
DESCRIPCIN:
INCREMENTA DECREMENTA el contenido de un registro entero
una cantidad constante entera.
El operando XXXX es la direccin del registro entero a incrementar.
El operando YYYY es la cantidad que se incrementa decrementa
el registro entero, segn sea positivo negativo.
No opera con las pilas (0).
# Ejemplo:
MOVCI 1820 ;Carga en pila aritmtica la constante 1820
STOI 300 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 300.
INC 300 180 ;Incrementa el contenido del reg. entero
;300 en 180, por lo cual el contenido del
;reg. 300 pasa a ser 2000.
INC 300 -10 ;Decrementa el contenido del reg. entero
;300 en 10, por lo cual el contenido del reg.
;300 pasa a ser 1990.
INC
INSTRUCCIONES ARITMETICAS IN-AR 30 99.01
ADDF
NEMNICO: ADDF
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 49
DESCRIPCIN:
SUMA los dos ltimos datos en coma flotante de la pila aritmtica y
deja el resultado en la pila aritmtica.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
MOVCF 100.34 ;Carga en pila aritmtica la constante en
;coma flotante 100.34
MOVRF 300 ;Carga en pila aritmtica el contenido del
;reg. en coma flotante 300, por ejemplo
;0.286.
ADDF ;Suma los dos ltimos datos contenidos en
;la pila aritmtica y deja el resultado en la
;misma pila aritmtica, es decir, el dato
;100.626
STOF 41 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 41
;(resultado de la suma).
ADDF
INSTRUCCIONES ARITMETICAS IN-AR 31 99.01
SUBF
NEMNICO: SUBF
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 50
DESCRIPCIN:
RESTA los dos ltimos datos en coma flotante de la pila aritmtica y
deja el resultado en la pila aritmtica.
El sustraendo es el ltimo dato de la pila aritmtica. El minuendo es
el anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
MOVRF 100 ;Carga en la pila aritmtica el contenido del reg en
;coma flotante 100, por ejemplo 328.328
MOVCF 2.1 ;Carga en la pila aritmtica la constante 2.1
SUBF ;Resta los dos ltimos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato 326.228
STOF 260 ;Almacena el contenido de la pila aritmtica en el
;reg. en coma flotante 260 (resultado de la resta).
SUBF
INSTRUCCIONES ARITMETICAS IN-AR 32 99.01
MULF
NEMNICO: MULF
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 51
DESCRIPCIN:
MULTIPLICA los dos ltimos datos en coma flotante de la pila
aritmtica y deja el resultado en la pila aritmtica.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
MOVCF 250.1 ;Carga la constante 250.1 en la pila aritmtica.
MOVCF 97.09 ;Carga la constante 97.09 en la pila aritmtica.
MULF ;Multiplica los dos ltimos datos contenidos en la
;pila aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato 24282.209
STOF 515 ;Almacena el contenido de la pila aritmtica en el
;reg. en coma flotante 515 (resultado de la
;multiplicacin).
MULF
INSTRUCCIONES ARITMETICAS IN-AR 33 99.01
DIVF
NEMNICO: DIVF
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 52
DESCRIPCIN:
DIVIDE los dos ltimos datos en coma flotante de la pila aritmtica y
deja el resultado en la pila aritmtica.
El divisor es el ltimo estado de la pila aritmtica. El dividendo es el
anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
MOVCF 488.8 ;Carga en la pila aritmtica la constante 488.8
MOVCF 2.1 ;Carga en la pila aritmtica la constante 2.1.
DIVF ;Divide los dos ltimos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;aritmtica, es decir, el dato 232.761
STOF 1500 ;Almacena el contenido de la pila aritmtica en el
;reg. en coma flotante 1500 (resultado de la
;divisin).
DIVF
INSTRUCCIONES ARITMETICAS IN-AR 34 99.01
MOVIF XXXX
NEMNICO: MOVIF
OPERANDO XXXX: Registro entero de 16 bits.
CDIGO INSTRUCCIN: 25
DESCRIPCIN:
CARGA en pila aritmtica el contenido de un registro entero
convirtindolo en formato de coma flotante.
El operando es el registro entero cuyo contenido se convierte a
coma flotante y se pasa a pila aritmtica, es decir, convertimos un
dato entero de 16 bits en coma flotante de 32 bits.
Incrementa dos niveles la pila aritmtica (+2).
# Ejemplo:
MOVIF 300 ;Carga en pila aritmtica el contenido del reg.
;entero 300 (por ejemplo 1005), convirtindolo en
;formato de coma flotante (1005.00)
STOF 700 ;Almacena el contenido de la pila aritmtica en el
;reg. en coma flotante 700.
MOVIF
INSTRUCCIONES ARITMETICAS IN-AR 35 99.01
STOFI XXXX
NEMNICO: STOFI
OPERANDO XXXX: Registro en coma flotante de 16 bits.
CDIGO INSTRUCCIN: 29
DESCRIPCIN:
ALMACENA en un registro entero el ltimo dato de la pila aritmtica
de formato en coma flotante, convirtindolo previamente en entero.
El operando es la direccin del registro entero.
El dato en coma flotante de la pila aritmtica se almacena en formato
entero y se redondea (cuando el decimal es superior a 0.5 se
redondea por exceso, al contrario se redondea por defecto).
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
MOVRF 350 ;Carga en pila aritmtica el contenido del reg. en
;coma flotante 350, por ejemplo 100.58
STOFI 520 ;Almacena el contenido de la pila aritmtica en el
;reg. entero 520, redondendose en formato
;entero (dato 101).
STOFI
INSTRUCCIONES ARITMETICAS IN-AR 36 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Se trata de realizar la siguiente operacin matemtica:
(60 + 100) / 2 = R
donde R es el resultado de la operacin que visualizaremos por el
display.
MOVCI 60 ;Carga la constante entera 60 en la pila.
MOVCI 100 ;Carga la constante entera 100 en la pila.
ADDI ;Suma las dos constantes.
MOVCI 2 ;Carga la constante entera 2 en pila.
DIVI ;Divide el resultado de la suma anterior por la
;constante 2.
STOI 400 ;Almacena en el registro entero 400 el resultado
;de la operacin.
CLEAR ;Borra el buffer intermedio dejando el puntero
;de visualizacin en primera posicin.
DISRI 400 3 ;Copia en el buffer intermedio el contenido del
;registro entero 400 con tres cifras.
COM 0 ;Visualiza el contenido del buffer intermedio en el
;display LCD.
END
B.- Se trata de realizar prcticamente un ejemplo similar al anterior
pero visualizando los resultados intermedios en tres LCD. (Ejemplo
ejecutado en un equipo con tres visualizadores LCD).
La operacin matemtica en este caso es la siguiente:
[(60 + 100) / 2] * 40 = R
El resultado de la suma lo visualizamos en el display LCD 1.
El resultado de la divisin lo visualizamos en el display LCD 2.
El resultado de la multiplicacin lo visualizamos en el display LCD 3.
INSTRUCCIONES ARITMETICAS IN-AR 37 99.01
MOVCI 60 ;Carga la constante entera 60 en la pila aritmtica
MOVCI 100 ;Carga la constante entera 100 en la pila.
ADDI ;Suma las dos constantes.
STOI 400 ;Almacena el resultado de la suma en el registro
;entero 400
MOVRI 400 ;Carga el contenido del registro entero 400 en pila
;aritmtica.
MOVCI 2 ;Carga la constante entera 2 en pila aritmtica.
DIVI ;Realiza la divisin con los datos de la pila.
STOI 410 ;Almacena el resultado de la divisin en el registro
;entero 410
MOVRI 410 ;Carga el contenido del registro entero 410 en pila
;aritmtica.
MOVCI 40 ;Carga la constante entera 40 en pila aritmtica.
MULI ;Realiza la multiplicacin con los datos de la pila.
STOI 420 ;Almacena el resultado de la multiplicacin en el
;registro entero 420
CLEAR ;Borra el buffer intermedio y sita el puntero en la
;primera posicin.
DISRI 400 3 ;Copia en buffer intermedio el contenido del
;registro entero 400 con tres cifras en total.
COM 0 ;Visualiza el contenido del buffer intermedio
;en display LCD 1
CLEAR ;Borra el buffer intermedio y sita el puntero
;en la primera posicin.
DISRI 410 3 ;Copia en buffer intermedio el contenido del
;registro entero 410 con tres cifras en total.
COM 1 ;Visualiza el contenido del buffer intermedio
;en el display LCD 2
CLEAR ;Borra el buffer intermedio y sita el puntero
;en la primera posicin.
DISRI 420 3 ;Copia en buffer intermedio el contenido del
;registro entero 420 con tres cifras en total.
COM 2 ;visualiza el contenido del buffer intermedio
;en el display LCD 3
END
INSTRUCCIONES ARITMETICAS IN-AR 38 99.01
C.- Escribir en instrucciones la frmula siguiente (empleada para
linealizar una sonda PT100):
T = -244.913 + 0.0234 (K * ent_ad) + 0.0137 (K * ent_ad)
2
siendo K la constante y ent_ad una entrada analgica de un equipo
MIDA.
;Definicin de etiquetas
;
ent_ad equ xxx ;xxx = reg. entero equivalente a una entrada
;analgica
cons_k equ xxx ;xxx = reg. en coma flotante que contiene la
;constante K
inter equ xxx ;xxx = reg. en coma flotante para resultados de
;operaciones
resultado equ xxx ;xxx = reg. en coma flotante para dejar el
;resultado de la operacin.
;
MOVIF ent_ad ;Carga en pila aritmtica el contenido del
;reg. entero "ent_ad" convirtindolo en
;formato de coma flotante
MOVRF cons_k ;Carga en la pila aritmtica el contenido del
;reg. en coma flotante "cons_k"
MULF ;Multiplica los dos ltimos datos contenidos
;en la pila aritmtica y deja el resultado en
;la misma pila aritmtica.
STOF inter ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante
;"inter", resultado de la multiplicacin
;(K * ent_A/D)
MOVCF -244.913 ;Carga la constante -244.913 en la pila
;aritmtica.
MOVRF inter ;Carga en la pila aritmtica el contenido del
;reg. en coma flotante "inter"
MOVCF 0.0234 ;Carga la constante 0.0234 en la pila
;aritmtica.
MULF ;Multiplica los dos ltimos datos contenidos
;en la pila aritmtica y deja el resultado en
;la misma pila aritmtica (0.0234 * "inter")
INSTRUCCIONES ARITMETICAS IN-AR 39 99.01
ADDF ;Suma los dos ltimos datos contenidos en
;la pila aritmtica y deja el resultado en la
;misma pila aritmtica (-244.913 + el
;resultado de la multiplicacin anterior).
MOVRF inter ;Carga en la pila aritmtica el contenido del
;reg. en coma flotante "inter"
MOVCF 0.0137 ;Carga la constante 0.0137 en la pila
;aritmtica.
MULF ;Multiplica los dos ltimos datos contenidos
;en la pila aritmtica y deja el resultado en
;la misma pila aritmtica (0.0137 * "inter")
ADDF ;Suma los dos ltimos datos contenidos en
;la pila aritmtica y deja el resultado en la
;misma pila aritmtica (el resultado de la
;suma anterior + el resultado de la ultima
;multiplicacin).
STOF resultado ;Almacena el contenido de la pila
;aritmtica en un reg. en coma flotante
;(resultado de la suma).
INSTRUCCIONES ARITMETICAS IN-AR 40 99.01
.
COMPARACIONES ARITMETICAS IN-CA 1 99.01
El equipo dispone de instrucciones que permiten realizar todo
tipo de comparaciones aritmticas entre constantes, contenidos de
registros entre ambos:
" Si dos datos son IGUALES.
" Si un dato es MAYOR IGUAL a otro.
" Si un dato es MENOR IGUAL a otro.
" Si un dato es MAYOR que otro.
" Si un dato es MENOR que otro.
Todas las comparaciones
pueden realizarse en formato
entero en coma flotante. Pero
debe cumplir la concordancia de
datos, es decir, se deben
comparar siempre datos del
mismo tipo.
La forma de operar es a travs
de la pila aritmtica.
El diagrama de flujo
indica la forma de operar. Para
cargar los datos en la pila
aritmtica se utilizan las
instrucciones:
! MOVRI MOVCI para la
carga de datos enteros
(registros o constantes).
! MOVRF MOVCF para la
carga de datos en coma flotante
(registros o constantes).
INIC IO
C arga un dato
en la pila
aritmtica
C a r g a u n d a to
e n l a p il a
a r itm tic a
R e a l iza l a
c o m p a r a c i n
a r itm tic a
R e su l ta d o ?
SI
NO
E jecuta el
salto
No ejecuta el
salto
FIN
COMPARACIONES ARITMETICAS IN-CA 2 99.01
! INSTRUCCIONES RELACIONADAS
Las instrucciones de este grupo son:
CPEI CPEF
CPGEI CPGEF
CPLEI CPLEF
CPGI CPGF
CPLI CPLF
Describimos a continuacin las instrucciones de este grupo:
COMPARACIONES ARITMETICAS IN-CA 3 99.01
CPEI XXXX
NEMNICO: CPEI
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 60
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos enteros de la pila aritmtica es IGUAL.
El operando es el nmero o etiqueta de lnea destino del salto.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
0000 MOVRI 300 ;Carga en la pila aritmtica el reg. entero 300.
0001 MOVCI 2 ;Carga en la pila aritmtica la constante 2.
0002 CPEI 100 ;Si el contenido del reg. entero 300 es igual a 2, el
;programa salta a la lnea100, sino continua en la
;lnea 3.
0003 ---------
0004 ---------
------ ---------
0100 ---------
Compara que los datos introducidos en la pila aritmtica son
iguales. Al realizarse la comparacin el programa saltara a la lnea 100
si el contenido de ambos es el mismo y en el caso de que no sean
iguales, el programa continuara en la lnea 3
CPEI
COMPARACIONES ARITMETICAS IN-CA 4 99.01
CPGEI XXXX
NEMNICO: CPGEI
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 61
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos enteros de la pila aritmtica es MAYOR o
IGUAL.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
0030 MOVRI 350 ;Carga en la pila aritmtica el contenido del reg.
;entero 350.
0031 MOVCI 42 ;Carga en la pila aritmtica la constante 42.
0032 CPGEI 485 ;Si el contenido del reg. 350 es mayor igual que
;42, salta a la lnea de programa 485, sino
;continua en la lnea 33.
0033 ---------
0034 ---------
------ ---------
0485 ---------
Si el contenido del registro entero introducido en la pila
aritmtica en primer lugar es mayor o igual que la constante
introducida en segundo lugar, al realizarse la comparacin, la
ejecucin del programa pasara a la lnea 485, en caso contrario
seguir su ejecucin por la lnea 33.
CPGEI
COMPARACIONES ARITMETICAS IN-CA 5 99.01
CPLEI XXXX
NEMNICO: CPLEI
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 62
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos enteros de la pila aritmtica es MENOR o
IGUAL.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
0102 MOVRI 421 ;Carga en la pila aritmtica el contenido del reg.
;entero 421.
0103 MOVCI -250 ;Carga en la pila aritmtica la constante 250.
0104 CPLEI 1050 ;Si el contenido del reg. entero 421 es menor
;igual que -250, la ejecucin del programa salta a
;la lnea 1050, sino continua en la lnea 105.
0105 ---------
0106 ---------
------ ---------
1050 ---------
Si el contenido del registro entero introducido en la pila
aritmtica en primer lugar es menor o igual que la constante
introducida en segundo lugar, al realizarse la comparacin, la
ejecucin del programa pasara a la lnea 1050, en caso contrario
seguir su ejecucin por la lnea 105.
CPLEI
COMPARACIONES ARITMETICAS IN-CA 6 99.01
CPGI XXXX
NEMNICO: CPGI
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 63
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la
comparacin de los dos ltimos datos enteros de la pila aritmtica
es MAYOR.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
0010 MOVRI 930 ;Carga en la pila aritmtica el contenido del reg.
;entero 930.
0011 MOVCI 21 ;Carga en la pila aritmtica la constante 21.
0012 CPGI 90 ;Si el contenido del reg. entero 930 es mayor que
;21, la ejecucin del programa salta a la lnea 90,
;sino continua en la lnea 13.
0013 ---------
0014 ---------
------ ---------
0090 ---------
Si el contenido del registro entero introducido en la pila
aritmtica en primer lugar es mayor que la constante introducida en
segundo lugar, al realizarse la comparacin, la ejecucin del programa
pasara a la lnea 90, en caso contrario seguir su ejecucin por la
lnea 13.
CPGI
COMPARACIONES ARITMETICAS IN-CA 7 99.01
CPLI XXXX
NEMNICO: CPLI
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 64
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos enteros de la pila aritmtica es MENOR.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa dos niveles la pila aritmtica (-2).
# Ejemplo:
0035 MOVCI 282 ;Carga en la pila aritmtica la constante 282
0036 MOVRI 300 ;Carga en la pila aritmtica el contenido del reg.
;entero 300.
0037 CPLI 900 ;Si el contenido del reg. entero 300 es menor que
;282, la ejecucin del programa salta a la lnea
;900, sino continua en la lnea 38.
0038 ---------
0039 ---------
------ ---------
0900 ---------
Si la constante introducida en la pila aritmtica en primer lugar
es menor que el contenido del registro entero introducido en segundo
lugar, al realizarse la comparacin, la ejecucin del programa pasara a
la lnea 900, en caso contrario seguir su ejecucin por la lnea 38.
CPLI
COMPARACIONES ARITMETICAS IN-CA 8 99.01
CPEF XXXX
NEMNICO: CPEF
OPERANDO XXXX: Nmero de lnea de programa.
CDIGO INSTRUCCIN: 54
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos en coma flotante de la pila aritmtica es
IGUAL.
El operando es el nmero de lnea de programa destino del salto.
Decrementa cuatro niveles la pila aritmtica (-4).
# Ejemplo:
0000 MOVRF 100 ;Carga en la pila aritmtica el contenido del reg.
;en coma flotante 100, pe. 2.10001
0001 MOVCF 2.1 ;Carga en la pila la constante 2.1.
0002 CPEF 120 ;Si el contenido del reg. en coma flotante 100 es
;igual a 2.10001, la ejecucin del programa salta a
;la lnea 120, sino continua en la lnea 3.
0003 ---------
0004 ---------
------ ---------
0120 ---------
Si el contenido del registro en coma flotante introducido en la
pila en primer lugar es igual que la constante introducida en segundo
lugar, al realizarse la comparacin, la ejecucin del programa pasara a
la lnea 120, en caso contrario seguir su ejecucin por la lnea 3.
Sealar que los nmeros a comparar deben de ser exactamente
iguales, coincidiendo en todos sus decimales. En el ejemplo anterior si
los datos a comparar hubieran sido 2.1001 en primer lugar y 2.1 en
segundo lugar la ejecucin del programa proseguira en la lnea 3.
CPEF
COMPARACIONES ARITMETICAS IN-CA 9 99.01
CPGEF XXXX
NEMNICO: CPGEF
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 55
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos en coma flotante de la pila aritmtica es
MAYOR o IGUAL.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa cuatro niveles la pila aritmtica (-4).
# Ejemplo:
0002 MOVRF 100 ;Carga en la pila aritmtica el contenido del reg
;en coma flotante 100.
0003 MOVCF 2.1 ;Carga en la pila aritmtica la constante 2.1.
0004 CPGEF 190 ;Si el contenido del reg. en coma flotante 100
;es mayor igual que 2.1, la ejecucin del
;programa salta a la lnea de programa 190, sino
;continua en la lnea 5.
0005 ---------
------ ---------
0190 ---------
Si el contenido del registro en coma flotante introducido en la
pila aritmtica en primer lugar es mayor o igual que la constante
introducida en segundo lugar, al realizarse la comparacin, la
ejecucin del programa pasara a la lnea 190, en caso contrario
seguir su ejecucin por la lnea 5.
CPGEF
COMPARACIONES ARITMETICAS IN-CA 10 99.01
CPLEF XXXX
NEMNICO: CPLEF
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 56
DESCRIPCIN:
La ejecucin del programa SALTA si la comparacin de los dos
ltimos datos en coma flotante de la pila aritmtica es MENOR o
IGUAL.
El operando es el nmero de lnea o etiqueta destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa cuatro niveles la pila aritmtica (-4).
# Ejemplo:
0000 MOVRF 212 ;Carga en pila aritmtica el contenido del reg. en
;coma flotante 212.
0001 MOVCF 6.82 ;Carga en la pila la constante 6.82.
0002 CPLEF 100 ;Si el contenido del reg. en coma flotante 212 es
;menor igual que 6.82, la ejecucin del programa
;salta a la lnea de programa 100, sino continua en
;la lnea 3.
0003 ---------
0004 ---------
------ ---------
0100 ---------
Si el contenido del registro en coma flotante introducido en la
pila aritmtica en primer lugar es menor o igual que la constante
introducida en segundo lugar, al realizarse la comparacin, la
ejecucin del programa pasara a la lnea 100, en caso contrario
seguir su ejecucin por la lnea 3.
CPLEF
COMPARACIONES ARITMETICAS IN-CA 11 99.01
CPGF XXXX
NEMNICO: CPGF
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 57
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos en coma flotante de la pila aritmtica es
MAYOR.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa cuatro niveles la pila aritmtica (-4).
# Ejemplo:
0000 MOVRF 805 ;Carga en la pila aritmtica el contenido del reg
;en coma flotante 805,
0001 MOVCF 213.7 ;Carga en la pila aritmtica la constante 213.7.
0002 CPGF 1000 ;Si el contenido del reg en coma flotante 805 es
;mayor que 213.7, la ejecucin del programa salta
;a la lnea de programa 1000, sino continua en la
;lnea 3.
0003 ---------
0004 ---------
------ ---------
1000 ---------
Si el contenido del registro en coma flotante introducido en la
pila aritmtica en primer lugar es mayor que la constante introducida
en segundo lugar, al realizarse la comparacin, la ejecucin del
programa pasara a la lnea 1000, en caso contrario seguir su
ejecucin por la lnea 3.
CPGF
COMPARACIONES ARITMETICAS IN-CA 12 99.01
CPLF XXXX
NEMNICO: CPLF
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 58
DESCRIPCIN:
La ejecucin del programa SALTA si el resultado de la comparacin
de los dos ltimos datos en coma flotante de la pila aritmtica es
MENOR.
El operando es el nmero o etiqueta de lnea destino del salto.
El ltimo dato de la pila aritmtica es el que se compara con el
anterior.
Decrementa cuatro niveles la pila aritmtica (-4).
# Ejemplo:
0000 MOVCF 1.99 ;Carga en la pila aritmtica la constante 1.99.
0001 MOVRF 210 ;Carga en la pila aritmtica el contenido del reg.
;en coma flotante 210.
0002 CPLF 100 ;Si la constante es menor que el contenido del reg
;en coma flotante 210, la ejecucin del programa
;salta la la lnea de programa 100, sino continua
;en la lnea 3.
0003 ---------
0004 ---------
------ ---------
0100 ---------
Si la constante introducida en la pila en primer lugar es menor
que el contenido del registro en coma flotante introducido en segundo
lugar, al realizarse la comparacin, la ejecucin del programa pasara a
la lnea 100, en caso contrario seguir su ejecucin por la lnea 3.
CPLF
COMPARACIONES ARITMETICAS IN-CA 13 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Realizar un controlador sencillo de temperatura que cuando se
eleve la temperatura por encima de 70C dispare una alarma y corte el
encendido de los calefactores y por debajo de los 70C los conecte, es
decir, un control del tipo TODO / NADA.
Se trata pues de controlar una salida digital en funcin de una
temperatura y otra segunda que dispare una alarma en caso de que la
temperatura sea igual o supere los 70C.
;Definicin literales
txt0 lite AL.TEMP
;
inic MOVRF 400 ;Carga el contenido del registro en coma
;flotante en la pila aritmtica (el contenido
;del registro es la temperatura, convertida
;a grados, que se viene tratado en otra
;zona del programa).
STOF 401 ;Almacena el contenido de la pila
;aritmtica en el registro en coma flotante
;401 (registro de temperatura).
MOVRF 401 ;Carga el contenido del registro en coma
;flotante en pila aritmtica.
MOVCF 70 ;Carga la constante 70 en coma flotante en
;pila aritmtica.
CPGEF alar ;Compara si el contenido del registro en
;coma flotante401 es mayor o igual que la
;constante 70, si es as salta a la lnea
;"alar" del programa.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISRF 401 62 ;Copia en el buffer intermedio el contenido
;del registro en coma flotante 401.
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
SET 105 ;Activa el rel 105 (arranque calefactores).
COMPARACIONES ARITMETICAS IN-CA 14 99.01
RESET 106 ;Desactiva el rel 106 (alarma exceso
;temperatura).
JNZ inic
alar RESET 105 ;Desactiva el rel 105 (arranque
;calefactores).
SET 106 ;Activa el rel 106 (alarma exceso
;temperatura).
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL txt0 ;Carga en el buffer intermedio el mensaje
;de la tabla de literales "txt0".
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
END
Si queremos ver como funciona este programa de forma inmediata,
podemos sustituir las instrucciones MOVRF 400 por MOVCF 80 y
veremos que en el display aparece el mensaje AL.TEMP, si por el
contrario las sustituimos por MOVCF 60 veremos que se visualiza el
contenido del registro en coma flotante 401.
RECONOCIMIENTO DE TECLADO IN-RT 1 99.01
En los equipos MIDA disponemos de un teclado incorporado.
Dicho teclado puede utilizarse para activar desactivar salidas rels
internos, introducir datos numricos, as como para poner en hora el
reloj interno de equipo y crear mens personalizados.
Las instrucciones relacionadas con el teclado dependiendo
del equipo MIDA que estemos programando son las siguientes:
INK Detecta la pulsacin de una tecla predeterminada.
INI Permite la introduccin de datos enteros.
INF Permite la introduccin de datos en coma flotante.
INPIX
Permite la introduccin de datos enteros, sin detener
el programa.
INPFX
Permite la introduccin de datos en coma flotante,
sin detener el programa.
INICF Permite la introduccin de datos enteros.
INPCX
Permite la introduccin de datos enteros, sin detener
el programa.
Tambin puede considerarse la instruccin LD para detectar la
pulsacin de una tecla predeterminada.
Las acciones que pueden realizarse con las instrucciones
descritas pueden ser:
" Deteccin de pulsacin de teclas.
" Introduccin de datos enteros en coma flotante.
" Creacin de mens personalizados.
RECONOCIMIENTO DE TECLADO IN-RT 2 99.01
! DETECCIN DE TECLAS
La pulsacin de cualquier tecla del teclado puede detectarse
mediante la instruccin INK bien consultando el estado del rel
interno asociado a cada una de las teclas, mediante la instruccin LD.
Deteccin de pulsacin de teclas.
Cada una de las teclas tiene un cdigo asignado que coincide
con el del rel asociado a cada una de ellas (ver Direccionamiento de
la Memoria en el Manual de Usuario del equipo MIDA
correspondiente).
Existe un flag interno de tecla pulsada en el equipo que indica la
pulsacin de una tecla. La instruccin INK transfiere un 1' a la pila
lgica si ese flag esta a 1' y el cdigo de su operando coincide con el
de la ltima tecla que se puls.
Transfiere un 0' a la pila lgica si no coinciden esos cdigos
bien no ha habido pulsacin de ninguna tecla.
El flag interno de tecla pulsada se borra cada vez que el
resultado de una instruccin INK es 1'.
La deteccin es autorepetitiva (tal como se detectan las teclas
en un PC). Si se mantiene pulsada la tecla se va detectando
repetitivamente cada 0.5s, tras una espera inicial de 2s.
El resultado de la deteccin slo es 1' durante un scan de
programa.
Deteccin de estado de teclas.
Existen unos rels asociados a cada tecla (ver Direccionamiento
de la Memoria en el Manual de Usuario de cada equipo), estos rels
son reflejo del estado de cada una de las teclas.
Utilizando la instruccin LD puede detectarse la pulsacin de
teclas como si se tratase de pulsadores exteriores. As, por ejemplo
puede programarse:
LD 30 ;Deteccin de la tecla <ENTER> de un MIDA14.
OUT 100 ;La salida digital 100 est activada todo el tiempo que la
;tecla <ENTER> est pulsada.
Se debe observar el modo de programacin descrito en el
capitulo Instrucciones Lgicas y Saltos de este Manual Tcnico.
RECONOCIMIENTO DE TECLADO IN-RT 3 99.01
INK XXXX
NEMNICO: INK
OPERANDO XXXX: Constante que indica el cdigo de la tecla
CDIGO INSTRUCCIN: 85
DESCRIPCIN:
CARGA en pila lgica un estado 1' si el cdigo de la ltima tecla
pulsada coincide con el indicado con el operando, en caso contrario
el estado cargado es 0'.
El operando XXXX es el cdigo de la tecla que se desea detectar.
El cdigo de tecla es diferente en cada equipo MIDA, ver Manual de
Usuario de este.
Existe un registro de ltima tecla pulsada que se activa cuando se
pulsa cualquier tecla, y se desactiva cuando la instruccin INK
reconoce la tecla buscada.
Incrementa un nivel la pila lgica (+1)
# Ejemplo:
INK 340 ;Deteccin de la tecla <ENTER> de un MIDA64
JNZ 100 ;Si la ltima tecla pulsada es <ENTER>, la
;ejecucin pasa a la lnea de programa 100
INK 344 ;Deteccin de la tecla <7>
JNZ 200 ;Pero si la ltima tecla pulsada es <7>, la
:ejecucin pasa a la lnea de programa 200
INK 341 ;Deteccin de la tecla CLEAR>
OUT 500 ;Al pulsar <CLEAR>, el rel interno 500 se activa
;durante un scan de programa.
INK
RECONOCIMIENTO DE TECLADO IN-RT 4 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Tambin puede descargarse la pulsacin de una tecla sobre un
rel interno cualquiera:
INK 63 ;Deteccin del rel de una tecla
OUT 500 ;El rel interno 500 es 1' cada vez que se detecta
;la pulsacin de la tecla
El resultado de la deteccin slo es 1' durante un scan de programa.
B.- Paro / marcha mediante dos teclas definidas.
INK 340 ;Deteccin del rel de una tecla (paro).
OUT 400 ;Descarga la pulsacin de la tecla durante un
;scan de programa
INK 344 ;Deteccin del rel de una tecla (marcha)
OUT 401 ;Descarga la pulsacin de la tecla durante
;un scan de programa
LD 400
OR 101
ANDNT 401
OUT 101 ;Se realiza una malla de paro / marcha sencilla
C.- Realizacin de un men con tres opciones que atienda a las
pulsaciones de las teclas ENTER, UP y CLEAR para desviar el flujo de
programa hacia tres subrutinas diferentes en las que activarn rels.
;Tabla literales
texto0 lite PRIMER MENU
texto1 lite SEGUNDO MENU
texto2 lite TERCER MENU
;
RECONOCIMIENTO DE TECLADO IN-RT 5 99.01
tec0 INK 60 ;Deteccin de tecla <ENTER>, por ejemplo.
JZ tec1 ;Si ha sido pulsada la tecla <ENTER> continua en
;la siguiente lnea de programa, de lo contrario
;salta a la etiqueta de programa tec1.
CLEAR ;Borra el buffer intermedio y sita el puntero
:en primera posicin.
DISL 0 ;Copia en el buffer intermedio el primer mensaje
;de la tabla de literales.
COM 0 ;Visualiza el contenido del buffer intermedio en el
;display LCD.
CALL rut1 ;Llamada a la rutina de programa rut1.
tec1 INK 62 ;Deteccin de tecla <CLEAR>, por ejemplo.
JZ tec2 ;Si ha sido pulsada la tecla <CLEAR> continua en
;la siguiente lnea de programa, de lo contrario
;salta a la etiqueta de programa tec2.
CLEAR ;Borra el buffer intermedio y sita el puntero
:en primera posicin.
DISL 1 ;Copia en el buffer intermedio el segundo mensaje
;de la tabla de literales.
COM 0 ;Visualiza el contenido del buffer intermedio en el
;display LCD.
CALL rut2 ;Llamada a la rutina de programa rut2.
tec2 INK 63 ;Deteccin de tecla <UP>, por ejemplo.
JZ tec1 ;Si ha sido pulsada la tecla <UP> continua en
;la siguiente lnea de programa, de lo contrario
;salta a la etiqueta de programa tec1.
CLEAR ;Borra el buffer intermedio y sita el puntero
:en primera posicin.
DISL 2 ;Copia en el buffer intermedio el tercer mensaje
;de la tabla de literales.
COM 0 ;Visualiza el contenido del buffer intermedio en el
;display LCD.
CALL rut3 ;Llamada a la rutina de programa rut3.
END
rut1 RESET 101 ;Desactiva el rel 101.
RESET 102 ;Desactiva el rel 102.
SET 100 ;Activa el rel 100.
RET ;Vuelve a la lnea siguiente del programa desde
;donde se produjo la llamada (CALL) a esta
;subrutina.
RECONOCIMIENTO DE TECLADO IN-RT 6 99.01
rut2 RESET 100 ;Desactiva el rel 100.
RESET 102 ;Desactiva el rel 102.
SET 101 ;Activa el rel 101
RET ;Vuelve a la lnea siguiente del programa desde
;donde se produjo la llamada (CALL) a esta
;subrutina.
rut3 RESET 100 ;Desactiva el rel 100.
RESET 101 ;Desactiva el rel 101.
SET 102 ;Activa el rel 102.
RET ;Vuelve a la lnea siguiente del programa desde
;donde se produjo la llamada (CALL) a esta
;subrutina.
END
RECONOCIMIENTO DE TECLADO IN-RT 7 99.01
! INTRODUCCIN DE DATOS NUMERICOS.
Existe dos grupos de instrucciones para la introduccin de datos
numricos:
" Introduccin de datos, deteniendo el programa usuario.
" Introduccin de datos, sin detener el programa usuario.
Introduccin de datos, deteniendo el programa.
Dependiendo de las instrucciones INI, INF e INICF que
utilicemos, estas nos permiten introducir datos numricos enteros y en
coma flotante, desde el teclado del equipo (claves de acceso,
preselecciones de tiempos de contajes, consignas de alarma, etc.).
Cuando se ejecuta cualquiera de estas instrucciones aparece
en el punto del display LCD fijado por programa tantos asteriscos
como procedan segn el formato que se fija en el operando de la
instruccin. La introduccin de datos numricos se realiza mediante
las teclas del equipo. Si se comete cualquier error en la introduccin
del dato, puede anularse mediante la tecla <CLEAR>.
La introduccin finaliza cuando se pulsa la tecla <ENTER> para
aceptar el dato introducido, por lo tanto el programa queda esperando
el <ENTER> de la finalizacin de la entrada de datos, para continuar
la ejecucin del mismo, por lo que a la hora de utilizar estas
instrucciones deberemos de tener en cuenta que detenemos la
ejecucin del programa hasta que validamos la entrada del dato.
NOTA: Estas instrucciones detiene la ejecucin del programa usuario.
Cualquier tecla, si se mantiene pulsada un tiempo, produce una
autorepeticin, tal como ya se ha descrito ms arriba, de 0.5 seg.
despus de los 2 seg. de espera inicial.
Las instrucciones INI, INF e INICF disponen de un o dos
operandos, segn el equipo que estemos programando, siendo su
comportamiento diferente (ver Manual de Usuario del equipo
correspondiente para observar que instruccin se ha de utilizar):
RECONOCIMIENTO DE TECLADO IN-RT 8 99.01
INI A (introduccin de datos enteros)
A
Formato de la introduccin del dato. O nmero de
display LCD, sobre el cual se va a realizar la
introduccin (equipos con ms de un display LCD).
INF A B (introduccin de datos en coma flotante)
A
Formato de la introduccin del dato. O nmero de
display LCD, sobre el cual se va a realizar la
introduccin (equipos con ms de un display LCD).
B
Nmero de decimales (equipos con ms de un display
LCD)
INICF AB (introduccin de datos enteros con formato)
AB Formato de la introduccin del dato.
El nmero mximo en formato entero que puede introducirse
est comprendido entre -32768 y 32767 (datos enteros de 16 bits con
signo).
La posicin del primer carcter viene dada por la posicin del
puntero dentro del buffer intermedio (ver instruccin LOC).
En caso de que se este utilizando una instruccin INPIX, INPFX,
INPCX o CLKP se esperar a que dicha instruccin acaba antes de
ejecutar cualquier instruccin INI, INF o INICF.
RECONOCIMIENTO DE TECLADO IN-RT 9 99.01
Introduccin de datos, sin detener el programa usuario.
Tambin disponemos las instrucciones INPIX, INPFX e INPCX
para la introduccin datos enteros o coma flotante, con la diferencia de
la instrucciones anteriores (INI, INFe INICF) que estas no detienen la
ejecucin del programa del usuario.
El funcionamiento de las instrucciones INPIX, INPFX e INPCX
es a travs de interrupciones, lo cual permite que el programa usuario
no se detenga. Por el contrario el microprocesador del equipo MIDA
tendr ms interrupciones que atender provocando que el programa
usuario se ejecute ms lentamente.
Puede llegar a ocurrir que no se puedan atender todas las
interrupciones simultneamente perdiendo algunas interrupciones de
menor prioridad. Este efecto es el causante de que durante la
ejecucin de estas instrucciones, a veces falle algn mensaje de
comunicacin va RS. El fallo es espordico y si se tiene la precaucin
de que en caso de fallo, se realizan reintentos, el problema
desaparece.
Dada la compatibilidad con las instrucciones DISIX y DISFX,
para el caso de formatos negativos (justificacin izquierda) las
instrucciones INPIX, INPFX e INPCX tomaran el valor absoluto del
formato para as poder utilizar los mismos punteros que para las
instrucciones de visualizacin (esta compatibilidad depende del
modelo MIDA que estemos programando).
En el caso de la instruccin INPFX, el numero de decimales no
lo tiene en cuenta, (pero es necesario ponerlo para guardar la
compatibilidad con la instruccin DISFX) pues es el propio usuario que
al introducir el dato pone el punto decimal en el lugar que l lo desee.
Ejemplo: Podemos utilizar el contenido 62 de un registro entero para la
instruccin DISFX (6 dgitos, dos de ellos decimales), pero a la vez
tambin para la instruccin INPFX, pero esta ultima ignorara el
formato de nmero de decimales.
RECONOCIMIENTO DE TECLADO IN-RT 10 99.01
INPIX A BC (introduccin de datos enteros)
A
Registro entero que contiene la direccin del registro
entero donde almacenar el dato introducido.
BC
Registro entero que contiene el formato de la
introduccin del dato. O nmero de display LCD, sobre
el cual se va a realizar la introduccin (equipos con ms
de un display LCD).
INPFX A BC (introduccin de datos en coma flotante)
A
Registro entero que contiene la direccin del registro en
coma flotante donde almacenar el dato introducido.
BC
Registro entero que contiene el formato de la
introduccin del dato. O nmero de display LCD, sobre
el cual se va a realizar la introduccin, y numero de
decimales (equipos con ms de un display LCD).
INPCX A BC (introduccin de datos enteros con formato)
A
Registro entero que contiene la direccin del registro en
coma flotante donde almacenar el dato introducido
BC
Registro entero que contiene el formato de la
introduccin del dato.
El nmero mximo en formato en coma flotante (IEEE de 32
bits) que puede introducirse es el que resulta de la limitacin de los
dgitos que se pueden visualizar en los distintos displays de cada
equipo. Los datos al ser introducidos quedan en pila aritmtica.
La posicin del primer carcter viene dada por la posicin del puntero
dentro del buffer intermedio (ver instruccin LOC).
RECONOCIMIENTO DE TECLADO IN-RT 11 99.01
En caso de que se este ejecutando una instruccin INPIX,
INPFX, INPCX o CLKP, no se puede ejecutar otra vez una de estas
instrucciones, hasta que no se halla finalizado la primera.
En los equipos MIDA que dispongan de un display LCD,
mientras se esta introduciendo el dato se puede modificar el contenido
de este. En la zona no ocupada por la introduccin, el display LCD
funcionar normalmente y tras aceptar la introduccin del dato, el
display LCD recuperar el contenido enviado sobre la zona ocupada.
En el caso de que el equipo MIDA disponga mas de un display
LCD, los displays LCD no afectados por la instruccin funcionarn
normalmente y tras aceptar la introduccin del dato, el display LCD
ocupado recuperar el ltimo contenido enviado.
En las instrucciones INPIX, INPFX e INPCX el contenido
almacenado en los registros apuntados por los operandos debe estar
dentro de los mrgenes.
En el registro entero con la direccin de destino del resultado, si
no esta dentro de los mrgenes se activar el error del equipo "Fuera
de limites" en el registro entero de errores (ver Manual Usuario del
equipo). Este error se activar justo despus de ejecutar la instruccin.
En el registro entero con el formato del dato a introducir se
tomar un valor por defecto en caso de que el contenido no sea
correcto.
Existe un rel interno "Rel Input" (ver Manual Usuario del
equipo), el cual se activara al llamar cualquier de las instrucciones
INPIX, INPFX e INPCX y se mantendr activada mientras estemos
introduciendo el dato. Se desactivara en el momento que validemos el
dato con la tecla <ENTER>.
NOTA:
El registro destino de la introduccin del dato (mediante las
instrucciones INI, INF, INICF, INPIX, INPFX, e INPCX) solo puede ser
un registro que se encuentre dentro de la RAM o NOVRAM y no se
pueden utilizar registros que estn dentro de la EEPROM.
A continuacin describimos las instrucciones de cada grupo:
RECONOCIMIENTO DE TECLADO IN-RT 12 99.01
INI XXXX
NEMNICO: INI
OPERANDO XXXX: Constante que indica el formato de la
introduccin del dato o Nmero de display
LCD, sobre el cual se va a realizar la
introduccin.
CDIGO INSTRUCCIN: 86
DESCRIPCIN:
INTRODUCCIN por el teclado del equipo de datos numricos
enteros.
El operando fija el formato de introduccin en cuanto a la cantidad
de cifras que se van a permitir introducir (contando el signo) o es el
display LCD sobre el cual se va a realizar la introduccin del dato
(en equipos MIDA con mas de un display LCD).
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
El dato introducido se carga sobre la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1).
Detiene la ejecucin del programa.
# Ejemplo para un MIDA con un display LCD de 32 caracteres:
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
DISL 19 ;Copia en el buffer intermedio el mensaje
;declarado en vigsima posicin dentro de la
;tabla de textos del programa. Este mensaje s
;refiere al dato que se va a introducir.
LOC 20 ;Posiciona el puntero de visualizacin en la
;posicin 21 (centro de la segunda lnea del LCD).
COM 0 ;Copia el contenido del buffer intermedio en el
;LCD para que aparezca el mensaje referente al
;dato que se va a introducir.
INI 4 ;Permite introducir un dato entero de cuatro cifras.
INI
RECONOCIMIENTO DE TECLADO IN-RT 13 99.01
STOI 300 ;Almacena en el registro entero 300 el dato
;introducido por teclado.
# Ejemplo para un MIDA con tres displays LCD de 4
1/2
dgitos:
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
DISL 0 ;Copia en el buffer intermedio el mensaje
;declarado en la primera posicin dentro de la
;tabla de textos del programa. Este mensaje se
;refiere al dato que se va a introducir.
COM 0 ;Copia el contenido del buffer intermedio en el
;primer LCD (superior), para que aparezca el
;mensaje referente al dato que se va a introducir.
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
INI 2 ;Permite introducir un dato entero en el tercer
;LCD (inferior).
STOI 450 ;Almacena en el registro entero 450 el dato
;introducido por teclado.
RECONOCIMIENTO DE TECLADO IN-RT 14 99.01
INF XXXX YYYY
NEMNICO: INF
OPERANDO XXXX: Constante que indica el formato de la
introduccin del dato o Nmero de display
LCD, sobre el cual se va a realizar la
introduccin.
OPERANDO YYYY: Constante que indica el nmero de decimales
(solo en equipos MIDA con mas de un display
LCD).
CDIGO INSTRUCCIN: 87
DESCRIPCIN:
INTRODUCCIN por el teclado del nmero de display o de datos
numricos en coma flotante.
El operando XXXX el formato de introduccin en cuanto a la
cantidad de cifras que se van a permitir introducir (se debe contar el
signo y el punto decimal) o es el display LCD sobre el cual se va a
realizar la introduccin del dato (segn equipo MIDA).
El operando YYYY indica el nmero de decimales (solo en equipos
MIDA con mas de un display LCD).
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
El dato introducido se carga sobre la pila aritmtica.
Incrementa dos niveles la pila aritmtica (+2).
Detiene la ejecucin del programa.
# Ejemplo para un MIDA con un display LCD de 32 caracteres:
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
DISL 5 ;Copia en el buffer intermedio el mensaje
;declarado en la posicin 6 dentro de la tabla de
;textos del programa
INF
RECONOCIMIENTO DE TECLADO IN-RT 15 99.01
LOC 1 ;Posiciona el puntero de visualizacin en la
;posicin 2 del display LCD.
COM 0 ;Copia el contenido del buffer intermedio en el
;display para que aparezca el mensaje referente
;al dato que se va a introducir.
INF 8 ;Permite introducir un dato en coma flotante de
;ocho cifras.
STOF 300 ;Almacena en el registro en coma flotante 300 el
;dato introducido por teclado.
# Ejemplo para un MIDA con tres displays LCD de 4
1/2
dgitos:
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
DISL 1 ;Copia en el buffer intermedio el mensaje declarado
;en la posicin 2 dentro de la tabla de textos
COM 1 ;Copia el contenido del buffer intermedio en el
;segundo LCD (medio), para que aparezca el
;mensaje referente al dato que se va a introducir.
INF 2 1 ;Permite introducir un dato en coma flotante en el
;tercer LCD (inferior), con un decimal.
STOF 300 ;Almacena en el registro en coma flotante 300 el
;dato introducido por teclado
RECONOCIMIENTO DE TECLADO IN-RT 16 99.01
INICF XXXX
NEMNICO: INICF
OPERANDO XXXX: Constante que indica el formato de la
introduccin del dato.
CDIGO INSTRUCCIN: 86
DESCRIPCIN:
INTRODUCCIN por el teclado del equipo de datos numricos
enteros.
El operando XXXX fija el formato de introduccin en cuanto a la
cantidad de cifras que se van a permitir introducir (sin tener en
cuenta el signo y el punto decimal) e indica la posicin del punto
decimal.
El formato es el siguiente: AB
donde A es el nmero de cifras que se van a permitir introducir y
donde B, indica la posicin del punto decimal.
Esta instruccin formatea la entrada de datos desde teclado en
cuanto a nmeros de cifras y de decimales, pero el almacenamiento
en memoria se realiza siempre sin decimales.
Por lo que no se puede almacenar un nmero mayor de 3.2767 o
menor de -327.68, puesto que los datos que se almacena son 32767
y -32767 (dato entero de 16 bits con signo).
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
El dato introducido se carga sobre la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1).
Detiene la ejecucin del programa.
# Ejemplo para un MIDA con un display LCD de 8 caracteres:
CLEAR ;Borra el buffer intermedio y posiciona el puntero
;de visualizacin en la primera posicin.
LOC 2 ;Posiciona el puntero de visualizacin en la
;posicin 3 del display LCD.
INICF
RECONOCIMIENTO DE TECLADO IN-RT 17 99.01
INICF 32 ;Permite introducir un dato entero de tres cifras,
;y el punto decimal despus de la primera cifra.
STOI 400 ;Almacena en el registro entero 400 el dato
;introducido por teclado.
RECONOCIMIENTO DE TECLADO IN-RT 18 99.01
INPIX XXXX YYYY
NEMNICO: INPIX
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 88
DESCRIPCIN:
INTRODUCCIN por el teclado del equipo de datos numricos en
enteros.
El operando XXXX es el registro entero que contiene la direccin del
registro entero donde almacenar el dato introducido.
El operando YYYY es el registro entero que contiene el formato de
la introduccin del dato. O es el display LCD sobre el cual se va a
realizar la introduccin del dato (en equipos MIDA con mas de un
display LCD).
El formato es el nmero de cifras a visualizar, incluyendo el signo. Si
el formato es negativo se justifica a la izquierda y si es positivo a la
derecha.
Existe un rel interno "Rel Input" (ver Manual Usuario del equipo),
el cual se activara al llamar esta instruccin y se mantendr activada
mientras estemos introduciendo el dato. Se desactivara en el
momento que validemos el dato con la tecla <ENTER>.
No opera con las pilas (0).
No detiene la ejecucin del programa.
# Ejemplo para un equipo con un display LCD:
SETRI 725 400 ;Almacena el dato 400 en el reg. entero
;725
SETRI 300 4 ;Almacena el dato 4 en el reg. entero 300.
INPIX 725 300 ;Permite introducir un dato cuyo formato es
;el contenido del reg. entero 300 y
;almacena el dato introducido en el reg.
;entero 400, puesto que es el apuntado por
; el reg. entero 725.
INPIX
RECONOCIMIENTO DE TECLADO IN-RT 19 99.01
INPFX XXXX YYYY
NEMNICO: INPFX
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 89
DESCRIPCIN:
INTRODUCCIN por el teclado del equipo de datos numricos en
coma flotante.
El operando XXXX es el registro entero que contiene la direccin del
registro en coma flotante donde almacenar el dato introducido.
El operando YYYY es el registro que contiene el formato de la
introduccin del dato. El formato es el siguiente: ABC
donde AB es el nmero de cifras a introducir, incluyendo el signo. O
es el display LCD sobre el cual se va a realizar la introduccin del
dato (en equipos MIDA con mas de un display LCD).
Y donde C es el nmero de decimales (Ver compatibilidad de
formato con la instruccin DISFX, al principio este capitulo).
Existe un rel interno "Rel Input" (ver Manual Usuario del equipo),
el cual se activara al llamar esta instruccin y se mantendr activada
mientras estemos introduciendo el dato. Se desactivara en el
momento que validemos el dato con la tecla <ENTER>.
No opera con las pilas (0).
No detiene la ejecucin del programa.
# Ejemplo para un equipo con mas de un display LCD:
SETRI 310 250 ;Almacena el dato 250 en el reg. entero
;310.
MOVCI 23 ;Carga en pila aritmtica la constante 60.
STOI 251 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 251.
INPFX 310 251 ;Permite introducir un dato cuyo formato es
;el contenido del registro 251 (6 = 6 cifras
;con signo) y Almacena el dato introducido
;en el reg. en coma flotante 250, puesto
;que es el apuntado por el reg. entero 310.
INPFX
RECONOCIMIENTO DE TECLADO IN-RT 20 99.01
INPCX XXXX YYYY
NEMNICO: INPCX
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 88
DESCRIPCIN:
INTRODUCCIN por el teclado del equipo de datos numricos
enteros.
El operando XXXX es el registro entero que contiene la direccin del
registro entero donde almacenar el dato introducido.
El operando YYYY es el registro entero que contiene el formato de
la introduccin del dato en cuanto a la cantidad de cifras que se van
a permitir introducir (sin tener en cuenta el signo y el punto decimal)
e indica la posicin del punto decimal.
El formato es el siguiente: AB
Donde A es el nmero de cifras que se van a permitir introducir y
donde B, indica la posicin del punto decimal.
Esta instruccin formatea la entrada de datos desde teclado en
cuanto a nmeros de cifras y de decimales, pero el almacenamiento
en memoria se realiza siempre sin decimales.
Por lo que no se puede almacenar un nmero mayor de 3.2767 o
menor de -327.68, puesto que los datos que se almacena son 32767
y -32767 (dato entero de 16 bits con signo).
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
Existe un rel interno "Rel Input" (ver Manual Usuario del equipo),
el cual se activara al llamar esta instruccin y se mantendr activada
mientras estemos introduciendo el dato. Se desactivara en el
momento que validemos el dato con la tecla <ENTER>.
El dato introducido se carga sobre la pila aritmtica.
Incrementa un nivel la pila aritmtica (+1).
No detiene la ejecucin del programa.
INPCX
RECONOCIMIENTO DE TECLADO IN-RT 21 99.01
# Ejemplo para un MIDA con un display LCD de 8 caracteres:
MOVCI 500 ;Carga en pila aritmtica la constante 500.
STOI 650 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 650.
MOVCI 52 ;Carga en pila aritmtica la constante 52.
STOI 700 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 700.
INPCX 650 700 ;Permite introducir un dato cuyo formato es
;el contenido del registro 700 (5 cifras con
;dos decimales) y Almacena el dato
;introducido en el reg. entero 500, puesto
;que es el apuntado por el reg. entero 650.
RECONOCIMIENTO DE TECLADO IN-RT 22 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Para un display LCD de 16x2 caracteres.
Introduccin de un dato entero de dos cifras con signo, a partir del
primer punto de la segunda lnea del display. En la primera lnea del
display LCD debe aparecer un texto.
El dato se almacenar posteriormente en el registro entero 800.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL texto ;Copia en el buffer intermedio el mensaje
;de la tabla de textos apuntado.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
INI 3 ;Permite la introduccin de tres cifras
;(uno va a ser el signo). Una vez
;introducido y pulsado la tecla ENTER,
;dejamos el resultado en la pila aritmtica.
STOI 800 ;Almacena en el contenido de la pila
;aritmtica en el registro entero 800
En el display LCD aparece:
M E N S A J E I N T R O D .
* * *
RECONOCIMIENTO DE TECLADO IN-RT 23 99.01
B.- Introduccin de un dato en coma flotante de ocho cifras con
posibilidad de ser negativo a partir de la tercera posicin de la primera
lnea del display.
Al final del dato que se introduce debe visualizarse la leyenda m/s.
El dato se almacenar en el registro en coma flotante 500.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
LOC 12 ;Posiciona puntero visualizacin
DISCH 109 ;Copia al buffer intermedio el carcter "m"
DISCH 47 ;Copia al buffer intermedio el carcter "/"
DISCH 115 ;Copia al buffer intermedio el carcter "s"
DISCH 46 ;Copia al buffer intermedio el carcter "."
LOC 2 ;Posiciona puntero de visualizacin.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD (m/s).
INF 10 ;Permite la introduccin de 10 cifras
;(uno puede ser el signo y otro el punto
;decimal). ). Una vez introducido y pulsado
;la tecla ENTER, dejamos el resultado en
;la pila aritmtica.
STOF 500 ;Almacena en el contenido de la pila
;aritmtica en el registro en coma flotante
;500
El aspecto del display es:
* * * * * * * * * * m / s .
RECONOCIMIENTO DE TECLADO IN-RT 24 99.01
C.- Se trata de introducir un dato en coma flotante por teclado de cinco
cifras con signo. Al mismo tiempo que se introduce el dato utilizaremos
el rel interno "Rel Input" para activar una salida.
;Definicin de textos
text0 lite PULSA F1
text1 lite INTROD CODIGO
SETRI 600 500 ;Almacena el dato 500 en el reg. entero
;600.
SETRI 300 6 ;Almacena el dato 6 en el reg. entero 300.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en primera posicin
DISL text0 ;Copia en el buffer intermedio el texto de la
;tabla de textos "text0"
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD
INK 356 ;Detecta la pulsacin una tecla
RESET 104 ;Desactiva el rel 104
JZ fin ;Salta a "fin" si la tecla no ha sido pulsada
conti CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text1 ;Copia en el buffer intermedio el texto de la
;tabla de textos "text1"
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD
INPFX 600 300 ;Permite la introduccin de un dato cuyo
;formato se encuentra en el reg entero 300
;y almacena el dato introducido en el reg.
;entero que se encuentra apuntado por el
;registro entero 600.
LD 391 ;Carga en pila lgica el estado del rel 391
;(correspondiente al Rel Input)
OUT 104 ;Carga el valor lgico del rel 391 a la
;salida 104
INK 340 ;Deteccin de una tecla
JZ conti ;Si no se pulsa la tecla salta a "conti"
fin END
RECONOCIMIENTO DE TECLADO IN-RT 25 99.01
D.- Se trata de introducir un nmero de cuatro cifras con 2 decimales y
almacenar el dato en el registro 500. Al mismo tiempo que
introducimos el dato tenemos una salida la 105, que esta mandando
un tren de impulsos. Dicha salida se conecta con la entrada 1 y se
detiene con la entrada 2. Tambin podemos observar que el "Rel
Input", se pone a uno mientras llamamos a la instruccin INPCX.
Observaremos que mientras se ejecuta dicha instruccin la salida
pulsante sigue actuando, con lo que vemos que el programa no se
detiene.
;Definicin de textos
text1 lite INTROD CODIGO
LD 1 ;Carga en pila lgica el estado de la
;entrada 1
LD 400 ;Carga en pila lgica el estado del rel 400
ORLD ;Realiza una or lgica entre la entrada 1 y
;el rel400.
ANDNT 2 ;Realiza una and negada de la entrada 2
;con el bloque lgico anterior.
OUT 400 ;Descarga el resultado de la funcin lgica
;realizada sobre el rel 400
LD 400 ;Carga en pila lgica el estado de la
;entrada 400
ANDNT 401 ;Realiza una and negada de la entrada 401
;con la entrada anterior 400
TIM 250 10 ;Temporiza 10 dcimas de segundo
OUT 105 ;Descarga el resultado de la funcin lgica
;realizada sobre la salida 105
LD 105 ;Carga en pila lgica el estado de la
;entrada 105
TIM 251 10 ;Temporiza 10 dcimas de segundo
OUT 401 ;Descarga el resultado de la funcin lgica
;sobre la salida del rel 401.
MOVCF 500 ;Carga en pila aritmtica la constante 500
STOF 600 ;Almacena en el registro entero 600 la
;constante 500.
MOVCI 42 ;Carga en pila aritmtica la constante 42
RECONOCIMIENTO DE TECLADO IN-RT 26 99.01
STOI 300 ;Almacena en el registro entero 300 la
;constante 42.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en primera posicin
DISL text1 ;Copia en el buffer intermedio el texto de la
;tabla de textos "text1"
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD
INPCX 600 300 ;Permite la introduccin de un dato cuyo
;formato se encuentra en el registro entero
;300 y almacena el dato introducido en el
;registro entero apuntado por el registro
;300
LD 391 ;Carga en pila lgica el estado del rel 391
;(correspondiente al Rel Input)
OUT 104 ;Saca el valor por la salida 104
END
VISUALIZACIN Y COMUNICACIONES IN-VC 1 99.01
Las instrucciones que utilizaremos para la visualizacin y
transmisin por los puertos de comunicaciones son:
CLEAR DISRI DISIX DISL
LOC DISRF DISFX DISLX
LOCX DISCH DISCX COM
! MODO DE PROGRAMACIN
Mediante el juego de instrucciones descrito se pueden visualizar
transmitir por los puertos de comunicaciones:
" Contenidos de registros enteros.
" Contenidos de registros en coma flotante.
" Caracteres de la tabla ASCII.
" Los mensajes de la tabla de textos del programa.
El buffer intermedio disponible es de 132 bytes. Todas las
instrucciones descritas operan sobre el buffer intermedio. Slo la
instruccin COM lo hace directamente sobre los visualizadores
puertos de comunicaciones.
El operando de la instruccin COM indica donde se enva el
contenido del buffer intermedio:
La programacin consiste en componer la visualizacin en el
buffer intermedio y luego copiarla sobre el destino deseado.
VISUALIZACIN Y COMUNICACIONES IN-VC 2 99.01
! VISUALIZACIN Y TRANSMISIN DE DATOS.
Todas las instrucciones de visualizacin y transmisin operan
sobre el buffer intermedio. Slo la instruccin COM opera
directamente sobre los visualizadores puertos de comunicaciones.
Toda la composicin que se realice sobre el buffer intermedio
mediante las instrucciones descritas debe ser copiado sobre los
visualizadores los puertos de comunicaciones. La instruccin que
permite esta copia es COM.
El modo de programacin con los puertos de comunicaciones
es exactamente la misma que la de visualizacin.
Cada equipo dispone de un registro entero para cada uno de los
puertos de comunicaciones, en donde se especifica el ancho de
transmisin (Ver Manual de Usuario del equipo correspondiente).
El valor que contenga este registro es el nmero de caracteres que el
puerto de comunicaciones transmitir al ejecutarse una instruccin
COM.
Por ejemplo, si tenemos el registro entero que corresponde al ancho
de transmisin en 40, cada vez que el equipo realiza una inicializacin
carga dicho dato sobre el registro. Si se precisa otro ancho debe
inicializarse este registro al principio del programa.
El equipo dispone de rels internos para detectar el estado y el
time-out de los puertos de comunicaciones, ver Manual de Usuario del
equipo correspondiente.
Los rels que disponemos son, segn los equipos:
! De Recepcin: Se activa cada vez que hay una recepcin.
! De Transmisin: Se activa cada vez que hay una transmisin.
! De seal CTS: Permanece activado siempre que la seal de
hardware CTS esta activado.
Indicando que el equipo puede transmitir.
! De Time-Out: Se activa cada vez que el equipo llega a un
Time-Out, es decir, 5 seg. despus de un
intento de transmisin sin xito.
VISUALIZACIN Y COMUNICACIONES IN-VC 3 99.01
As por ejemplo, es posible realizar programas que detecten si una
impresora est en off-line para dar el error pertinente mediante un
mensaje de reintentar abandonar la impresin.
La direccin de los displays consultar en el Manual de Usuario del
equipo correspondiente.
En la visualizacin el equipo empleara los n primeros
caracteres enviados para completar el display, el resto se
despreciara.
Por ejemplo: en un display de 8 caracteres enviamos un texto de
16, nicamente visualizara los ocho primeros.
En algunos equipos se dispone de la posibilidad de visualizar
textos ms largos que su propio display mediante la rotacin de
textos.
VISUALIZACIN Y COMUNICACIONES IN-VC 4 99.01
COM XXXX
NEMNICO: COM
OPERANDO XXXX: Constante que indica el destino de la copia
procedente del buffer intermedio.
CDIGO INSTRUCCIN: 80
DESCRIPCIN:
COPIA del buffer intermedio a visualizadores y/ puertos de
comunicaciones.
El operando es el destino de la copia (ver Manual de Usuario del
equipo correspondiente).
No opera con las pilas (0)
# Ejemplo para un MIDA64:
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
DISL 1 ;Copia en buffer intermedio el mensaje en
;primera posicin de la tabla de textos del
;programa.
COM 0 ;Copia el contenido del buffer intermedio en el
;display LCD.
COM 1 ;Tambin copia el contenido del buffer intermedio
;al puerto de comunicaciones COM1.
COM 2 ;Tambin copia el contenido del buffer intermedio
;al puerto de comunicaciones COM2.
COM 3 ;Y tambin copia el contenido del buffer intermedio
;al display de 6 dgitos rojo.
COM
VISUALIZACIN Y COMUNICACIONES IN-VC 5 99.01
! PUNTERO DEL BUFFER INTERMEDIO.
El posicionamiento de los datos en el buffer intermedio se hace
mediante las instrucciones CLEAR, LOC y LOCX.
El puntero (cursor) de visualizacin es un registro interno
reservado que contiene la posicin en la que se va a colocar el
prximo carcter que se va a introducir en el buffer intermedio.
El puntero de visualizacin se va moviendo a medida que se
van ejecutando las instrucciones de visualizacin y en funcin de la
cantidad de datos que se graban en el buffer intermedio.
NOTA: Tener en cuenta que la primera posicin del buffer intermedio
es la 0.
Mediante las instrucciones indicadas, es posible alterar este
puntero para controlar la visualizacin.
La instruccin CLEAR posiciona el puntero en la primera
posicin del buffer intermedio, habiendo borrado previamente el
contenido del buffer.
Las instrucciones LOC y LOCX simplemente posicionan el
cursor (puntero de visualizacin) en la posicin indicada por sus
operandos.
El operando de la instruccin LOC indica en valor absoluto el
lugar donde se posiciona el cursor.
El operando de la instruccin LOCX indica el registro que
contiene el lugar donde se posiciona el cursor.
A continuacin describimos las instrucciones de este grupo:
VISUALIZACIN Y COMUNICACIONES IN-VC 6 99.01
CLEAR
NEMNICO: CLEAR
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 70
DESCRIPCIN:
BORRA el contenido del buffer intermedio y pone el puntero de
visualizacin en la primera posicin (posicin 0).
No opera con las pilas (0).
# Ejemplo:
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin de la
;izquierda (la cero).
COM 0 ;Borra el LCD
COM 1 ;Enva por COM1 (RS232) una lnea en blanco.
COM 2 ;Enva por COM2 (RS485) una lnea en blanco.
hasta 132 caracteres
(Buffer intermedio)
CLEAR
VISUALIZACIN Y COMUNICACIONES IN-VC 7 99.01
LOC XXXX
NEMNICO: LOC
OPERANDO XXXX: Constante que indica la posicin dentro del
buffer intermedio.
CDIGO INSTRUCCIN: 75
DESCRIPCIN:
POSICIONA el puntero de visualizacin en un punto determinado del
buffer intermedio.
El operando es el punto del buffer intermedio donde se almacenar
el prximo carcter.
La primera posicin es la 0.
No opera con las pilas (0)
# Ejemplo:
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
LOC 4 ;Posiciona el puntero de visualizacin en la
;cuarta posicin (la primera es la cero).
DISL 29 ;Copia en el buffer intermedio el mensaje
;declarado en la posicin treinta (el primero es el
;cero) dentro de la tabla de textos del programa.
COM 0 ;Copia el contenido del buffer intermedio en el
;display LCD.
M I M E N S A
hasta 132
caracteres
$ (Buffer intermedio)
LOC
VISUALIZACIN Y COMUNICACIONES IN-VC 8 99.01
LOCX XXXX
NEMNICO: LOCX
OPERANDO XXXX: Registro entero.
CDIGO INSTRUCCIN: 76
DESCRIPCIN:
POSICIONA el puntero de visualizacin en el punto del buffer
intermedio contenido en un registro entero.
El operando es la direccin del registro entero que contiene el punto
del buffer intermedio donde se almacenar el prximo carcter.
La primera posicin es la 0.
No opera con las pilas (0)
# Ejemplo:
MOVCI 1 ;Carga en pila aritmtica la constante 2.
STOI 300 ;Almacena el contenido de la pila aritmtica en el
;registro entero 300
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
LOCX 300 ;Posiciona el puntero de visualizacin en la
;primera posicin (la primera es la cero).
DISL 29 ;Copia en el buffer intermedio el mensaje
;declarado en la posicin treinta (el primero es el
;cero) dentro de la tabla de textos del programa
COM 0 ;Copia el contenido del buffer intermedio en el
;display LCD.
O T R O M E N S A J
hasta 132
caracteres
$ (Buffer intermedio)
LOCX
VISUALIZACIN Y COMUNICACIONES IN-VC 9 99.01
! MENSAJES Y CARACTERES ASCII.
Para visualizar y transmitir los mensajes utilizamos las
instrucciones DISL y DISLX. El equipo dispone de una tabla de un
nmero determinado de mensajes y de caracteres cada uno. (ver el
Manual de Usuario).
Estos mensajes deben declararse en el mismo programa
mediante la directiva LITE, en caso de programar el equipo con un
editor standard.
Cada mensaje dispone de un nmero de caracteres, tanto si
son completos como sino. As pues, aunque un mensaje contenga 1, 2
3 caracteres, su visualizacin ocupar igualmente el mximo de
longitud de caracteres que acepta el mensaje, puesto que el resto se
completa con espacios en blanco.
En el buffer intermedio los mensajes pueden encadenarse unos
a otros para formar otros ms largos.
Mediante las instrucciones LOC y LOCX, se puede manejar el
puntero de visualizacin para que podamos intercalar en un mensaje
datos numricos, caracteres adicionales, etc.
El operando de la instruccin DISL indica en valor absoluto la
posicin del mensaje dentro de la tabla de textos, empieza desde
cero.
El operando de la instruccin DISLX indica el registro entero
que contiene la posicin del mensaje dentro de la tabla.
Tambin podemos visualizar caracteres ASCII de forma
individual mediante la instruccin DISCH.
Por ultimo comentar la instruccin DISCX, que contiene un
operando en el que situamos el registro entero que contiene el
carcter ASCII a grabar en el buffer intermedio.
Consultar la tabla de caracteres ASCII disponible para cada
equipo y tipo de display en el Manual de Usuario correspondiente a
este.
Si el mensaje enviado al buffer intermedio es mayor a los
caracteres disponibles en el display, visualiza los primeros caracteres
despreciando el resto de ellos.
A continuacin describimos las instrucciones de este grupo:
VISUALIZACIN Y COMUNICACIONES IN-VC 10 99.01
DISL XXXX
NEMNICO: DISL
OPERANDO XXXX: Constante que indica la direccin del mensaje
dentro de la tabla de textos.
CDIGO INSTRUCCIN: 71
DESCRIPCIN:
COPIA en el buffer intermedio un mensaje de la tabla de textos del
programa.
El operando es la direccin del mensaje dentro de la tabla de textos.
El primer mensaje de la tabla es el 0.
No opera con las pilas. (0)
# Ejemplo:
Text1 lite "Mensaje Uno"
Text2 lite "Mensaje Dos"
Text3 lite "Mensaje Tres"
Text4 lite "Mensaje Cuatro"
Text5 lite "Mensaje Cinco"
CLEAR ;Borra buffer intermedio, dejando el cursor
;primera posicin (la cero).
DISL 3 ;Copia en el buffer intermedio el texto nmero 4
;(direccin 3) de la tabla, colocndolo en la
:primera posicin del buffer intermedio (la
;direccin del primer mensaje es la 0).
COM 0 ;Copia el mensaje "Mensaje Cuatro" del buffer
;intermedio al display LCD.
DISL
VISUALIZACIN Y COMUNICACIONES IN-VC 11 99.01
DISLX XXXX
NEMNICO: DISLX
OPERANDO XXXX: Registro entero.
CDIGO INSTRUCCIN: 72
DESCRIPCIN:
COPIA en el buffer intermedio el mensaje apuntado.
El operando es el registro entero que contiene la direccin del
mensaje dentro de la tabla de textos del programa.
El primer mensaje de la tabla es el 0.
No opera con las pilas. (0)
# Ejemplo:
Text1 lite "Mensaje Uno"
Text2 lite "Mensaje Dos"
Text3 lite "Mensaje Tres"
Text4 lite "Mensaje Cuatro"
Text5 lite "Mensaje Cinco"
MOVCI 2 ;Carga en pila aritmtica la constante 2.
STOI 410 ;Almacena el contenido de la pila aritmtica en el
;registro entero 410.
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
DISLX 410 ;Copia en el buffer intermedio el texto nmero 3
;(direccin 2) de la tabla de textos (la direccin del
;primer mensaje es la 0).
COM 0 ;Copia el mensaje "Mensaje Tres" del buffer
;intermedio al display LCD.
DISLX
VISUALIZACIN Y COMUNICACIONES IN-VC 12 99.01
DISCH XXXX
NEMNICO: DISCH
OPERANDO XXXX: Valor decimal del carcter ASCII.
CDIGO INSTRUCCIN: 77
DESCRIPCIN:
COPIA en el buffer intermedio el carcter ASCII indicado.
El operando es el valor decimal del carcter ASCII correspondiente.
Consultar el Manual de Usuario correspondiente para cada equipo
para ver los caracteres ASCII compatibles para estos.
No opera con las pilas. (0)
# Ejemplo:
CLEAR ;Borra el buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin.
DISCH 79 ;Copia en el buffer intermedio el carcter O.
DISCH 75 ;Copia en el buffer intermedio el carcter K.
COM 1 ;Copia el contenido del buffer intermedio al
;puerto de comunicaciones.
DISCH
VISUALIZACIN Y COMUNICACIONES IN-VC 13 99.01
DISCX XXXX
NEMNICO: DISCX
OPERANDO XXXX: Registro entero.
CDIGO INSTRUCCIN: 81
DESCRIPCIN:
COPIA en el buffer intermedio el carcter ASCII apuntado en el
registro indicado en el operando.
El operando XXXX es el registro entero que contiene el valor decimal
del carcter ASCII a transferir.
Consultar el Manual de Usuario correspondiente para cada equipo
para ver los caracteres ASCII compatibles para estos.
No opera con las pilas (0)
# Ejemplo:
MOVCI 79 ;Carga en pila aritmtica la constante 79.
STOI 200 ;Almacena el contenido de la pila aritmtica en el
;registro entero 200.
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
DISCX 200 ;Copia en el buffer intermedio el carcter ASCII 79
;(O) puesto que es el apuntado por el registro
;entero 200.
COM 0 ;Copia el contenido del buffer intermedio al
;display LCD.
DISCX
VISUALIZACIN Y COMUNICACIONES IN-VC 14 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.-
;DEFINICIN DE TEXTOS
text1 lite Este es un texto
text2 lite de 32 caracteres
text3 lite s
;
MOVCI 33 ;Carga en pila aritmtica la constante 33.
STOI 20 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 20. (registro
;correspondiente al ancho de transmisin
;deseado para COM1)
MOVCI 16 ;Carga en pila aritmtica la constante 16.
STOI 21 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 21. (registro
;correspondiente al ancho de transmisin
;deseado para COM2)
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text1 ;Carga en el buffer intermedio el mensaje
;de la tabla de textos apuntado.
DISL text2 ;Carga en el buffer intermedio el mensaje
;de la tabla de textos apuntado.
DISL text3 ;Carga en el buffer intermedio el mensaje
;de la tabla de textos apuntado.
COM 1 ;Transmisin del buffer intermedio a COM1
COM 2 ;Transmisin del buffer intermedio a COM2
Resultado:
Este es un texto de 32 caracteres
(Transmisin por COM1)
Este es un texto
(Transmisin por COM2)
VISUALIZACIN Y COMUNICACIONES IN-VC 15 99.01
B.-
;DECLARACIN DE TEXTOS
;
texto_A lite Este es texto 1
texto_B lite Alarma tension
;
;PROGRAMA
...
...
MOVCI 1 ;Carga en pila aritmtica la constante 1
STOI 500 ;Almacena el contenido de la pila
;aritmtica en el reg. entero 500.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL texto_A ;Carga en el buffer intermedio el mensaje
;de la tabla de textos apuntado.
DISLX 500 ;Copia en el buffer intermedio el texto
;nmero 2 (direccin 1) de la tabla de
;textos (la direccin del primer mensaje es
;la 0).
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
E s t e e s t e x t o
1 A l a r m a t e n s i
o n Hasta 132 caracteres
(Buffer intermedio)
VISUALIZACIN Y COMUNICACIONES IN-VC 16 99.01
! VISUALIZACIN Y TRANSMISIN DE DATOS NUMRICOS.
Se pueden visualizar y transmitir datos numricos en formatos
entero y coma flotante.
Para ello tenemos las instrucciones DISRI y DISRF en las
cuales consta de dos operandos.
El segundo operando de estas instrucciones indica cmo se
formatea el dato, es decir, con cuntos dgitos y decimales, as como
la justificacin derecha izquierda.
Cuando se visualicen datos introducidos desde el teclado debe
tenerse en cuenta el formato con que se han introducido.
El signo negativo se visualiza, pero el positivo no. Esto implica
que la visualizacin se corre un lugar a la izquierda dejando un
espacio en blanco cuando el dato es positivo.
Si se introduce un formato de visualizacin 0 en enteros, el
equipo visualiza el dato utilizando todos las caracteres necesarios
para su representacin.
Si se introduce un formato de visualizacin 0 en coma flotante,
el equipo visualiza el dato utilizando todos los caracteres necesarios
para su representacin con 0 decimales.
El equipo reserva espacio en el buffer intermedio para la
visualizacin, segn sea el formato programado dejando el resto de
los caracteres en blanco. Pero si el dato es mayor que el formato (por
error, etc.), el equipo siempre visualiza utilizando los caracteres
necesarios para no falsear la visualizacin.
En visualizacin de datos en coma flotante si se utilizan
formatos de una sola cifra, el nmero de decimales que se van a
visualizar es 0.
Se deben evitar formatos de visualizacin imposibles no
correctos, ya que podran producirse efectos no deseados en la
visualizacin general del equipo. El compilador no detecta los formatos
no permitidos.
Adems, disponemos de dos instrucciones DISIX y DISFX, las
cuales funcionan iguales que las anteriores, pero estas son indexadas
(ver compatibilidad de formato con las instrucciones INPIX e INPFX en
el capitulo "Reconocimiento de Teclado" en este mismo Manual).
A continuacin describimos las instrucciones de este grupo:
VISUALIZACIN Y COMUNICACIONES IN-VC 17 99.01
DISRI XXXX YYYY
NEMNICO: DISRI
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Constante que indica el formato con que se
va a copiar.
CDIGO INSTRUCCIN: 73
DESCRIPCIN:
COPIA en el buffer intermedio el contenido de un registro entero.
El operando XXXX es la direccin del registro entero que se copia.
El operando YYYY es el formato del dato a copiar.
El formato puede ser AB o ABC, dependiendo del equipo que
estemos programando:
donde AB es la cantidad de cifras que se van a copiar.
donde C indica la posicin del punto decimal.
Si el segundo operando es positivo la visualizacin se justifica a la
derecha.
Si el segundo operando es negativo, la visualizacin se justifica a la
izquierda.
No opera con las pilas.(0)
# Ejemplo:
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
DISRI 300 -3 ;Copia en el buffer intermedio el contenido del
;registro entero 300 con 3 cifras en total (contando
;el signo). La justificacin es a la izquierda, pues
;el formato es negativo.
COM 0 ;Copia el contenido del buffer intermedio en el
;display LCD.
DISRI
VISUALIZACIN Y COMUNICACIONES IN-VC 18 99.01
DISIX XXXX YYYY
NEMNICO: DISIX
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 74
DESCRIPCIN:
COPIA en el buffer intermedio el contenido del registro entero
apuntado.
El operando XXXX es el registro entero que contiene la direccin del
registro entero a copiar.
El operando YYYY es la direccin del registro entero que contiene el
formato del dato a copiar.
El formato puede ser AB o ABC, dependiendo del equipo que
estemos programando:
donde AB es la cantidad de cifras que se van a copiar.
donde C indica la posicin del punto decimal.
Si el formato es positivo la visualizacin se justifica a la derecha.
Si el formato es negativo, la visualizacin se justifica a la izquierda.
No opera con las pilas (0).
# Ejemplo:
SETRI 300 500 ;Almacena el dato 500 en el reg. entero 300.
SETRI 301 3 ;Almacena el dato 3 en el reg. entero 301.
CLEAR ;Borra buffer intermedio, dejando el
;puntero de visualizacin en la posicin 0.
DISIX 300 301 ;Copia en el buffer intermedio el contenido
;del reg. entero 500, puesto que es el
;apuntado por el reg. entero 300, con un
;formato de 3 cifras (mas el signo) y
;justificado a la derecha, que es el indicado
;por el contenido del reg. entero 301.
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
DISIX
VISUALIZACIN Y COMUNICACIONES IN-VC 19 99.01
DISRF XXXX YYYY
NEMNICO: DISRF
OPERANDO XXXX: Registro en coma flotante.
OPERANDO YYYY: Constante que indica el formato con que se
va a copiar.
CDIGO INSTRUCCIN: 68
DESCRIPCIN:
COPIA en el buffer intermedio el contenido de un registro en coma
flotante.
El operando XXXX es la direccin del registro en coma flotante que
se copia.
El operando YYYY es el formato en cuanto a la cantidad de cifras y
decimales que se van a copiar. El formato es el siguiente: ABC
donde AB es el nmero de dgitos a visualizar, incluyendo signo y
punto decimal, y donde C es el nmero de decimales.
Si el formato es positivo la visualizacin se justifica a la derecha.
Si el formato es negativo, la visualizacin se justifica a la izquierda.
No opera con las pilas. (0)
# Ejemplo:
MOVCF -28.5 ;Carga en pila aritmtica la constante en
;coma flotante -28.5
STOF 100 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 100
CLEAR ;Borra buffer intermedio, dejando el
;puntero de visualizacin en la primera
;posicin (la cero).
DISRF 100 73 ;Copia en el buffer intermedio el contenido
;del reg. en coma flotante 100 con 7 cifras
;en total, de las cules 3 sern decimales.
;La justificacin es a la derecha
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
DISRF
VISUALIZACIN Y COMUNICACIONES IN-VC 20 99.01
DISFX XXXX YYYY
NEMNICO: DISFX
OPERANDO XXXX: Registro entero.
OPERANDO YYYY: Registro entero.
CDIGO INSTRUCCIN: 69
DESCRIPCIN:
COPIA en el buffer intermedio el contenido de un registro en coma
flotante apuntado.
El operando XXXX es el registro entero que contiene la direccin del
registro en coma flotante que se copia.
El operando YYYY es la direccin del registro entero que contiene el
formato con el cual se copia. El formato es el siguiente: ABC
donde AB es el nmero de dgitos a visualizar, incluyendo signo y
punto decimal, y donde C es el nmero de decimales.
Si el formato es positivo la visualizacin se justifica a la derecha.
Si el formato es negativo, la visualizacin se justifica a la izquierda.
No opera con las pilas.(0)
# Ejemplo:
SETRI 500 100 ;Almacena el dato 100 en el reg. entero
;500.
SETRI 301 62 ;Almacena el dato 62 en el reg. entero 301.
MOVCF 33.1578 ;Carga en pila aritmtica la constante en
;coma flotante 33.1578
STOF 100 ;Almacena el contenido de la pila
;aritmtica en el reg. en coma flotante 100
CLEAR ;Borra buffer intermedio, dejando el
;puntero de visualizacin en la primera
;posicin (la cero).
DISFX 500 301 ;Copia en el buffer intermedio el contenido
;del reg. en coma flotante 100, puesto que
;es el apuntado por el reg. entero 500, con
;un formato de 6 cifras (mas el signo), de
DISFX
VISUALIZACIN Y COMUNICACIONES IN-VC 21 99.01
;las cules 2 sern decimales y justificado
;a la derecha, ya que es el indicado por el
;contenido del reg. entero 301.
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
VISUALIZACIN Y COMUNICACIONES IN-VC 22 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Visualizacin de un registro entero utilizando dos mtodos,
mediante las instrucciones DISRI y DISIX en un mismo display
MOVCI -1435 ;Carga en la pila aritmtica la constante
; -1435
STOI 500 ;Almacena el contenido de la pila
;aritmtica en el registro entero 500.
MOVCI 500 ;Carga en la pila aritmtica la constante
;500.
STOI 501 ;Almacena el contenido de la pila
;aritmtica en el registro entero 501.
MOVCI 5 ;Carga en la pila aritmtica la constante 5.
STOI 502 ;Almacena el contenido de la pila
;aritmtica en el registro entero 502.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISRI 500 5 ;Copia en el buffer intermedio el
;contenido del registro 500 con 5
;dgitos.
LOC 16 ;Sita el puntero en la posicin 16.
DISIX 501 502 ;Copia en el buffer intermedio el
;contenido del registro 501 con el
;formato que figura en el registro 502.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
Resultado:
- 1 4 3 5
- 1 4 3 5
(Visualizador LCD)
VISUALIZACIN Y COMUNICACIONES IN-VC 23 99.01
B.- Visualizacin de un mismo registro en coma flotante utilizando dos
mtodos, mediante las instrucciones DISRF y DISFX en un mismo
display
MOVCF -1435.5 ;Carga en la pila aritmtica la constante
;1435.5.
STOF 500 ;Almacena el contenido de la pila
;aritmtica en el registro en coma flotante
;500.
MOVCF 500 ;Carga en la pila aritmtica la constante
;500.
STOF 501 ;Almacena el contenido de la pila
;aritmtica en el registro en coma flotante
;501.
MOVCF 71 ;Carga en la pila aritmtica la constante
;71.
STOF 502 ;Almacena el contenido de la pila
;aritmtica en el registro en coma flotante
;502.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISRF 500 71 ;Copia en el buffer intermedio el contenido
;del registro 500 en el formato indicado
;por el segundo operando 71
LOC 16 ;Sita el puntero en la posicin
;indicada.
DISFX 501 502 ;Copia en el buffer intermedio el contenido
;del registro 501 con el formato apuntado
:por el contenido del registro 502
;en el registro 502.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
Resultado:
- 1 4 3 5 . 5
- 1 4 3 5 . 5
(Visualizador LCD)
VISUALIZACIN Y COMUNICACIONES IN-VC 24 99.01
C.- Visualizar:
- Un texto
- El contenido en un registro en coma flotante con dos decimales
que puede variar entre 0 y 327.67, con justificacin izquierda.
- Un carcter ASCII en el display LCD.
- Transmitir por ambos puertos de comunicaciones un mensaje de
32 caracteres.
;DEFINICIN DE ETIQUETAS
;
texto1 lite ESTA ES LA MITAD
texto2 lite - - - - - - - - - - - - - - -
texto3 lite V=
;
;PROGRAMA
;
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL texto3 ;Copia al buffer intermedio el texto de la
;tabla de textos apuntado
LOC 2 ;Sita el puntero en la posicin indicada.
DISRF 500 -62 ;Copia en el buffer intermedio el contenido
;del reg. en coma flotante 500 con el
;formato indicado por el segundo operando
LOC 5 ;Sita el puntero en la posicin indicada.
DISCH 65 ;Copia en el buffer intermedio el carcter
;ASCII A.
COM 0 ;Visualiza el contenido del buffer
;intermedio por el LCD.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin
DISL texto1 ;Copia al buffer intermedio el texto de la
;tabla de textos apuntado.
DISL texto2 ;Copia al buffer intermedio el texto de la
;tabla de textos apuntado.
COM 1 ;Transmite el contenido del buffer
;intermedio por el puerto de comunicacin.
COM 2 ;Transmite el contenido del buffer
;intermedio por el puerto de comunicacin
VISUALIZACIN Y COMUNICACIONES IN-VC 25 99.01
D.- Visualizar y transmitir por el puerto de comunicaciones
- Un texto apuntado por un registro.
- Una variable en el interior de este texto con un decimal que
puede variar entre 0 y 99.9, con justificacin izquierda.
- Transmitir hora y fecha por el puerto de comunicacin RS232.
;DEFINICIN DE ETIQUETAS
;
texto32 lite VALOR:
;
;PROGRAMA
MOVCI 0 ;Carga en pila aritmtica la constante 0.
STOI 500 ;Almacena el contenido de la pila
;aritmtica en el registro entero 500.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISLX 500 ;Copia en el buffer intermedio el texto
;indicado por el contenido del reg. entero
;500.
LOC 6 ;Sita el puntero en la posicin indicada.
DISRF 501 -41 ;Copia en el buffer intermedio el contenido
;del registro entero 501 con el formato
;indicado por el segundo operando.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
TIME ;Copia en el buffer intermedio la hora
;en el formato HH:MM:SS.
DISCH 32 ;Copia en el buffer intermedio el
;carcter ASCII "espacio en blanco".
DATE ;Copia en el buffer intermedio la fecha
;en formato DD:MM:AA.
COM 1 ;Transmite el contenido del buffer
;intermedio por el puerto COM1.
VISUALIZACIN Y COMUNICACIONES IN-VC 26 99.01
! VISUALIZACIN ROTATIVA EN DISPLAY
Existe en algn modelo de equipo MIDA, la posibilidad de que
los textos, mensajes y/o visualizacin de cualquier rel / registro
salgan de forma rotativa en el display LCD.
Para ello se dispone de un rel denominado "Display Modo
Rotativo" (ver Mapa de Memoria del Manual de Usuario del equipo).
Al ejecutar la instruccin COM x (x es el display en el cual se
direcciona) el contenido del buffer intermedio aparecer fijo si el rel
"Display Modo Rotativo" esta a "0" o aparecer por la derecha del
display desplazndose hacia la izquierda si dicho rel esta a "1".
Para fijar la longitud del texto a visualizar, se puede colocar un
carcter con valor ASCII "0" al final del texto. La longitud mxima del
texto es la longitud mxima de texto admitido por el equipo, y cualquier
carcter que se aada de ms ser despreciado.
Las instrucciones de reconocimiento de teclado y los comandos
del MIDAbus que afectan a los visualizadores, no tienen en cuenta el
estado del rel "Display Modo Rotativo".
Modificar el estado del rel no cambiar el comportamiento del
display, solo al ejecutar una instruccin COM podremos modificar
dicho comportamiento (y su contenido si fuera necesario).
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.-
;Definicin de etiquetas
rotar equ xx (indicar el rel "Display Modo Rotativo".
;
;Definicin de textos
texto1 lite MI TEXTO ES DE 24 CARAC
.....
VISUALIZACIN Y COMUNICACIONES IN-VC 27 99.01
CLEAR ;Borra el buffer intermedio, dejando el
;puntero de visualizacin en la primera
;posicin.
DISL texto1 ;Copia en el buffer intermedio el texto
;TEXTO1 de la tabla de literales,
;colocndolo en la primera posicin del
;buffer intermedio.
LOC 23 ;Posiciona el puntero de visualizacin en la
;posicin 24 (la primera es la cero).
DISCH 0 ;Copia en el buffer intermedio el carcter
;0.
SET rotar ;Activa el rel "Display Modo Rotativo".
COM 0 ;Copia el contenido del buffer intermedio
;al display LCD.
El texto que mostrar es: MI TEXTO ES DE 24 CARAC en un display
LCD de 8 caracteres:
M
M I
M I
M I T
4 C A R A C M
C A R A C M I
C A R A C M I
A R A C M I T
Se puede observar que al rotar el texto, el final del mismo se
enlaza con el principio quedando escrito un "CARACMI TEXTO ES DE
24 ", por eso se ha de tener en cuenta de aadir algn carcter de
separacin entre textos (por ejemplo espacios blancos).
VISUALIZACIN Y COMUNICACIONES IN-VC 28 99.01
B.-
Supongamos estamos controlando un proceso, y en el registro entero
250 tenemos el tiempo transcurrido (en minutos) y en el registro entero
260 la temperatura (en dcimas de grado). Queremos mostrar un texto
rotativo que indique el tiempo y la temperatura, y si la temperatura es
mayor de 50 grados mostrar un texto fijo en el que ponga "ALARMA"
;Definicin de etiquetas
tiempo equ xxx ;(registro entero).
temp equ xxx ;(registro entero)
grados equ xxx ;(registro entero)
rotar equ xxx ;(rel "Display Modo Rotativo")
;
;Definicin de textos
txt lite TIEMPO XXX MIN. TEMPERATURA XX.X "
txt_ala lite ALARMA"
MOVRI temp
MOVCI 500 ;50 grados (en dcimas de grados).
CLEAR
CPGI alr ;Salta si hay alarma (TEMP>50)
DISL txt ;Copia al buffer el texto
LOC 7
DISRI tiempo 30
LOC 28
DISRI grados 41
LOC 34
DISCH 0 ;Copiamos carcter 0 al final
SET rotar ;Activa el rel "Display Modo
;Rotativo".
COM 0
.....
.....
alr RESET rotar ;Desactiva el rel "Display Modo
;Rotativo".
CLEAR
DISL txt_ala
COM 0
.....
RELOJ INTERNO EN TIEMPO REAL IN-R 1 99.01
Los equipos MIDA disponen de un reloj en tiempo real protegido
por una batera de Ni-Cd.
El equipo MIDA dispone de unos registros enteros de 16 bits
donde se actualizan automticamente sus contenidos, ya que son un
reflejo de la hora/fecha del reloj interno.
Estos registros pueden ser tratados aritmticamente de igual forma
que cualquier otro registro entero del equipo.
As, un programa MIDA puede acceder a los registros que se
describen a continuacin.
DATO REGISTRO
Segundo del
minuto
Indica el nmero de segundos que han transcurrido
dentro del minuto en curso.
(0 - 59)
Minuto de la
hora
Indica el nmero de minutos que han transcurrido
dentro de la hora en curso.
(0 - 59)
Hora del da
Indica la hora del da en curso.
(0 - 23)
Horario
Indica el nmero de minutos que han transcurrido
desde la ltima hora cero (nmero de minutos del
da).
(hora * 60 + minuto)
Da del mes
Indica el da del mes.
(1 - 31)
Da de la
semana
Indica el da de la semana.
(0 - 6, lunes domingo)
Mes del ao
Indica el mes del ao.
(1 - 12)
Ao
Indica el ao.
(los dos ltimos dgitos)
RELOJ INTERNO EN TIEMPO REAL IN-R 2 99.01
! MODO DE PROGRAMACIN
Todos los registros descritos son accesibles por el programa
para tratar aritmticamente, visualizar, comparar, almacenar en
registros de los ficheros de la base de datos, etc.
Algunas de las funciones principales para las que se emplea el reloj en
tiempo real son:
" Realizacin de programaciones horarias.
" Visualizacin y/ transmisin va serie.
" Puesta en hora del reloj.
Realizacin de programaciones horarias: este tipo de funcin es
adecuada para la ejecucin de un proceso a una determinada hora,
minuto, da de la semana, etc.
Para ello se deben emplear los registros descritos realizando
comparaciones y/ tratamientos aritmticos segn las explicaciones
de los apartados Instrucciones Aritmticas y Comparaciones
Aritmticas de este Manual Tcnico.
Visualizacin y/ transmisin va serie: se pueden utilizar las
instrucciones de visualizacin y comunicacin de registros descritas
en el apartado Visualizacin y Comunicaciones las instrucciones
especiales que puedan disponer cada uno de los equipos.
Existen unas instrucciones especialmente diseadas para la
visualizacin transmisin de datos por los puertos serie: una
impresora, PC, etc. Estas son:
DATE TIME
Puesta en hora el reloj del equipo. Existen unas instrucciones para
esta accin:
CLOCK CLKP
RELOJ INTERNO EN TIEMPO REAL IN-R 3 99.01
DATE
NEMNICO: DATE
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 78
DESCRIPCIN:
COPIA en el buffer intermedio la fecha en formato DD/MM/AA, para
visualizar en el/los displays transmitir por cualquier puerto de
comunicaciones la fecha del reloj interno del equipo.
Tambin se puede utilizar para almacenar en registros de algn
fichero de la base de datos (si el MIDA dispone de ella).
No opera con las pilas (0)
# Ejemplo:
CLEAR ;Borra buffer intermedio, dejando el cursor en la
;primera posicin (la cero).
DATE ;Copia en buffer intermedio la fecha en formato
;DD/MM/AA.
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
DATE
RELOJ INTERNO EN TIEMPO REAL IN-R 4 99.01
TIME
NEMNICO: TIME
OPERANDO XXXX: No dispone de operando.
CDIGO INSTRUCCIN: 79
DESCRIPCIN:
COPIA en el buffer intermedio la hora en formato HH/MM/SS, para
visualizar en el/los displays transmitir por cualquier puerto de
comunicaciones la hora del reloj interno del equipo.
Tambin se puede utilizar para almacenar en registros de algn
fichero de la base de datos (si el MIDA dispone de ella).
No opera con las pilas (0)
# Ejemplo:
CLEAR ;Borra buffer intermedio, dejando el puntero de
;visualizacin en la primera posicin (la cero).
TIME ;Copia en buffer intermedio la hora en formato
;HH:MM:SS
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
TIME
RELOJ INTERNO EN TIEMPO REAL IN-R 5 99.01
CLOCK
NEMNICO: CLOCK
OPERANDO XXXX: No dispone de operando
CDIGO INSTRUCCIN: 84
DESCRIPCIN:
Permite una PUESTA en HORA/FECHA del reloj interno del equipo
mediante el teclado.
Al ejecutarse esta instruccin se detiene la ejecucin del programa y
aparece en el display LCD la fecha, hora y da de la semana.
Una vez visualizado, se puede realizar la puesta en hora/fecha.
Para modificar la hora/fecha pulsaremos la tecla <CLEAR>.
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
No opera con las pilas (0).
Detiene la ejecucin del programa.
# Ejemplo:
INK 340 ;Deteccin de una tecla.
JZ et1 ;Si la tecla ha sido pulsada, continua a la
;siguiente lnea, de lo contrario salta a "et1".
CLOCK ;Se ejecuta la funcin de PUESTA en HORA y se
;detiene el programa, esperando la pulsacin de
;la tecla <ENTER>.
......
et1 ......
CLOCK
RELOJ INTERNO EN TIEMPO REAL IN-R 6 99.01
CLKP
NEMNICO: CLKP
OPERANDO XXXX: No dispone de operando
CDIGO INSTRUCCIN: 97
DESCRIPCIN:
Permite una PUESTA en HORA/FECHA del reloj interno del equipo
mediante el teclado, sin detener el programa usuario.
En caso de que se este ejecutando una instruccin INPIX, INPFX o
INPCX, la instruccin CLKP no se ejecutar.
Al ejecutarse esta instruccin no se detiene la ejecucin del
programa y aparece en el display LCD la fecha, hora y da de la
semana.
Una vez visualizado, se puede realizar la puesta en hora/fecha.
Para modificar la hora/fecha pulsaremos la tecla <CLEAR>.
La ejecucin de esta instruccin termina con la pulsacin final de la
tecla <ENTER>.
Existe un rel interno "Rel Input" (ver Manual Usuario del equipo),
el cual se activara al llamar esta instruccin y se mantendr activada
mientras estemos introduciendo el dato. Se desactivara en el
momento que validemos el dato con la tecla <ENTER>.
Mientras se esta introduciendo la hora/fecha se puede modificar el
contenido del display, el cual se actualizara cuando validemos la
nueva hora/fecha.
No opera con las pilas (0).
No detiene la ejecucin del programa.
# Ejemplo:
INK 30 ;Deteccin de una tecla.
JZ et1 ;Si la tecla ha sido pulsada, continua a la
;siguiente lnea, de lo contrario salta a "et1".
CLKP ;Se ejecuta la funcin de PUESTA en HORA,
;activa el "Rel Input" y continua el programa.
et1 ......
CLKP
RELOJ INTERNO EN TIEMPO REAL IN-R 7 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Visualizar, la hora y la fecha en el principio de cada una de las
lneas del LCD y un mensaje OK al final de la primera lnea. Y
transmitir por COM1 slo la fecha y hora separadas por un espacio en
blanco.
CLEAR ;Borra el buffer intermedio y sita el puntero
;en la primera posicin.
TIME ;Copia en el buffer intermedio la hora.
LOC 16 ;Sita el puntero en la posicin indicada.
DATE ;Copia en el buffer intermedio la fecha.
LOC 14 ;Sita el puntero en la posicin indicada.
DISCH 79 ;Copia en el buffer intermedio el carcter en
;formato ASCII O.
DISCH 75 ;Copia en el buffer intermedio el carcter en
;formato ASCII K.
COM 0 ;Visualiza el contenido del buffer intermedio
;en el display LCD.
CLEAR ;Borra el buffer intermedio y sita el puntero
;en la primera posicin.
DATE ;Copia en el buffer intermedio la fecha.
DISCH 32 ;Copia en el buffer intermedio el carcter en
;formato ASCII "espacio en blanco".
TIME ;Copia en el buffer intermedio la hora.
COM 1 ;Transmite el contenido del buffer intermedio
;por el puerto de comunicaciones.
Resultados:
H H : M M : S S O K
D D / M M / A A
(Visualizador LCD)
DD/MM/AA HH:MM:SS
(Transmisin por COM1)
RELOJ INTERNO EN TIEMPO REAL IN-R 8 99.01
B.- Activar una salida digital el da 23 de abril de 1999 a las 11.30h
durante 10s.
RESET 400 ;Desactiva el rel 400.
MOVRI 47 ;Carga registro de ao en curso.
MOVCI 99 ;Carga en pila aritmtica la constante 99.
CPEI eti1 ;Detecta si es el ao en que se debe
;conectar la salida digital.
JMP exit ;Salta si no cumple la comparacin a "exit".
eti1 MOVRI 46 ;Carga registro de mes en curso.
MOVCI 4 ;Carga en pila aritmtica la constante 4.
CPEI eti2 ;Detecta si es el mes en que se debe
;conectar la salida digital.
JMP exit ;Salta si no cumple la comparacin a "exit".
eti2 MOVRI 44 ;Carga registro de da en curso.
MOVCI 23 ;Carga en pila aritmtica la constante 23.
CPEI eti3 ;Detecta si es el da en que se debe
;conectar la salida digital.
JMP exit ;Salta si no cumple la comparacin a "exit".
eti3 MOVRI 43 ;Carga registro horario (nmero de minutos
;transcurridos del da).
MOVCI 690 ;Carga las 11.30h convertido a minutos (11
;* 60 + 30 = 690).
CPEI eti3 ;Detecta si es el momento de la conexin
;de la salida digital.
JMP exit ;Salta si no cumple la comparacin a "exit".
eti3 SET 400 ;Activa el rel interno que indica que la
;salida digital se debe conectar.
exit LD 400 ;Inicio malla de control.
OR 101
ANDNT 401
ANDNT 402
OUT 101 ;Malla de control de la salida digital.
LD 101
TIM 250 100 ;Temporizacin de 10s a partir de la
;activacin del rel 400.
OUT 401 ;Rel interno de desactivacin de la salida
;digital al cabo de la temporizacin (10s).
LD 401
RELOJ INTERNO EN TIEMPO REAL IN-R 9 99.01
AND 101
OR 402
AND 400
OUT 402 ;Rel que impide conectar de nuevo la
;salida digital dentro del minuto de
;permanencia en 1' del rel 400.
... ;Sigue el programa...
El rel interno 402 se utiliza para impedir que la salida digital se vuelva
a conectar transcurridos los 10s de activacin, ya que el rel 400 se
mantendr en estado 1' todo el tiempo que la comparacin de la lnea
"eti3" d resultado IGUAL (1min).
En este ejemplo se supone que el MIDA64 estar en marcha la fecha
en que se debe conectar la salida digital y que no es necesario prever
esta contingencia.
C.- Activar una salida digital cada mircoles a las 12.00h durante un
minuto.
MOVRI 45 ;Carga el da de la semana en curso.
MOVCI 2 ;Carga en pila aritmtica la constante 2.
CPEI eti1 ;Detecta si es mircoles (2).
JMP eti2 ;Salta si no cumple la comparacin a "eti2"
eti1 SET 400 ;Activa el rel interno que indica la
;conexin de la salida digital.
LD 400 ;Carga en pila lgica el estado del rel 400
OUT 101 ;Control de la salida digital.
JMP fin ;Salta a la lnea "fin".
eti2 RESET 400 ;Desactiva el rel.
fin END
RELOJ INTERNO EN TIEMPO REAL IN-R 10 99.01
D.- Cada vez que se active una entrada digital almacenar la fecha,
hora y el valor de una entrada analgica en una tabla (array) de
registros.
LD 0 ;Carga en pila lgica el estado de la
;entrada digital 0.
ANDNT 400
OUT 401 ;Detecta el flanco de activacin de la
;entrada digital.
LD 0 ;Carga en pila lgica el estado de la
;entrada digital 0.
OUT 400 ;Almacena el estado de la entrada en el
;rel interno de memoria del estado
;anterior.
LD 400 ;Carga en pila lgica el estado del rel 400
JZ eti1 ;Detecta si debe almacenar los datos en la
;tabla de registros.
;A partir de este punto de programa se almacenan los
;datos en la tabla de registros
MOVRI 60 ;Carga en pila aritmtica la entrada
;analgica.
STOI 300 ;Almacena el dato de la entrada analgica
;en un registro entero 300 para fijar su
;valor instantneo.
MOVRI 101 ;Carga en pila aritmtica el da del mes.
STOIX punt ;Almacena el da del mes en el registro
;entero apuntado por "punt".
INC punt 1 ;Incrementa el valor del registro puntero a
;la tabla de registros.
MOVRI 46 ;Carga en pila aritmtica el mes del ao.
STOIX punt ;Almacena el mes del ao en el registro
;apuntado por el puntero.
INC punt 1 ;Incrementa el valor del registro puntero a
;la tabla de registros.
MOVRI 103 ;Carga en pila aritmtica el ao.
STOIX punt ;Almacena el mes del ao en el registro
;apuntado por el puntero.
RELOJ INTERNO EN TIEMPO REAL IN-R 11 99.01
INC punt 1 ;Incrementa el valor del registro puntero a
;la tabla de registros.
MOVRI 99 ;Carga en pila aritmtica el numero de
;minutos que han transcurrido desde la
;ultima hora cero.
STOIX punt ;Almacena el da del mes en el registro
;entero apuntado por "punt".
INC punt 1 ;Incrementa el valor del registro puntero a
;la tabla de registros.
MOVRI 300 ;Carga en pila aritmtica el registro entero
;300.
STOIX punt ;Almacena el valor de la entrada analgica
;en el momento de la activacin de la
;entrada digital en el registro entero
;apuntado por "punt".
INC punt 1 ;Incrementa el valor del registro puntero a
;la tabla de registros para dejarlo
;preparado para el prximo ciclo de
;escritura en la tabla de registros
eti1 ... ;Sigue el programa...
E.- Realizar un cambio de hora/fecha, mediante la instruccin CLKP.
Para ello hemos programado una salida pulsante, la 104 y
observaremos que cuando entramos a realizar los cambios de los
parmetros anteriormente descritos la salida 104 no se detiene, con lo
que vemos que la ejecucin del programa continua.
;Definicin de textos
text0 lite PULSA F1
ini LD 1 ;Carga en pila lgica el estado de la
;entrada 1
OR 400 ;Realiza con rel 400 una funcin Or lgica
;con la entrada 1
ANDNT 2 ;Realiza una andnt con la entrada 2
OUT 400 ;Descarga el resultado del bloque lgico
;sobre el rel 400.
LD 400 ;Carga en pila lgica el estado del rel 400
ANDNT 401 ;Realiza una funcin andnt con el rel 401
RELOJ INTERNO EN TIEMPO REAL IN-R 12 99.01
TIM 250 10 ;Carga el temporizador
OUT 105 ;Descarga el resultado en la salida 105
LD 105 ;Carga en la pila lgica la entrada 105
TIM 251 10 ;Carga el temporizador
OUT 401 ;Descarga el resultado del bloque lgico
;sobre el rel 401
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin
DISL text0 ;Copia en el buffer intermedio el texto de
;la tabla de textos "text0"
LOC 17 ;Sita el puntero en la posicin indicada.
TIME ;Copia en el buffer intermedio la hora/fecha
COM 0 ;Visualiza el contenido del buffer
;intermedio por el display LCD.
RESET 104 ;Desactiva el rel 104
INK 356 ;Deteccin de una tecla.
JZ ini ;Si no ha sido pulsada salta a "ini"
CLEAR ;Borra el buffer intermedio y sita el
;puntero en primera posicin
CLKP ;Permite introducir la puesta en hora/ fecha
COM 0 ;Visualiza el contenido del buffer
;intermedio por el display LCD.
LD 391 ;Carga en pila lgica el estado del rel
;"Rel Input".
OUT 104 ;Descarga el estado de la pila lgica sobre
;la salida 104
END
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
1 99.01
Cmo estructurar un programa?. Esta es la pregunta que nos
planteamos todos a la hora de tener que realizar uno. No es objetivo
de este apartado, ni de este manual dar un curso de programacin,
pero si de hacer una serie de sugerencias que creemos ayudaran a
realizar esta tarea, como mnimo de una forma ms ordenada.
Un buen punto de partida sera recordar, aunque ya sabemos
que es obvio, que entendemos por programa. As pues lo podemos
definir como una secuencia de instrucciones a ejecutar por un
computador a fin de obtener un resultado determinado
Una forma de estructurar los programas que pueden realizar los
equipos MIDA podra ser la descrita a continuacin:
" Programa Principal.
" Procedimientos Principales.
" Subrutinas secundarias.
Sera recomendable, aunque no estrictamente necesario, que
todo programa MIDA se estructura de la forma arriba indicada.
Analicemos a continuacin cada uno de los elementos que lo
componen:
" Programa Principal es la parte del programa desde donde se
llama a todas los Procedimientos Principales (control de
automatismos, visualizacin del programa, deteccin del teclado,
deteccin de alarmas, etc.) y debe terminar con la instruccin END
para producir un final de ciclo o programa.
" Procedimientos Principales son subrutinas que son llamadas
desde el Programa Principal mediante la instruccin CALL y que
definen los diferentes trabajos que va a realizar el programa del
equipo. Deben terminar con la instruccin RET, provocando as el
regreso al programa principal.
" Subrutinas Secundarias son subrutinas que son llamadas por
cualquiera de los Procedimientos Principales mediante la
instruccin CALL, cuantas veces sea necesario para realizar
tareas accesorias. Deben terminar con la instruccin RET,
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
2 99.01
provocando de esta manera el regreso al procedimiento principal
correspondiente.
A continuacin describimos un posible diagrama de cmo se
puede estructurar un programa:
Llegados a este punto nos planteamos la siguiente pregunta. Y
que es una subrutina?
Una subrutina es un conjunto de instrucciones que son
llamadas desde un programa o procedimiento principal, mediante una
instruccin CALL y de la que salimos para volver desde donde la
hemos llamado mediante una instruccin RET.
Programa
Principal
Procedimiento
Principal
1
Procedimiento
Principal
2
Procedimiento
Principal
3
Subrutina
Secundaria
1
Subrutina
Secundaria
2
Subrutina
Secundaria
3
Subrutina
Secundaria
4
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
3 99.01
A continuacin un diagrama de flujo de un programa
desarrollado slo hasta sus Procedimientos Principales:
El cdigo de programa asociado a este
diagrama de flujo es:
;PROGRAMA PRINCIPAL
CALL INICIO
CALL MOVE
CALL TECLADO
CALL VISUA
CALL ALARMA
END
Cada una de las lneas de este programa
es un Procedimiento Principal en donde se
realizan las tareas principales llamando a su vez
a otras Subrutinas secundarias.
De esta manera se facilitan las posibles
modificaciones del diagrama que haya que
realizar en el futuro ya que slo ser necesario
modificar el Procedimiento afectado. Dentro de
cada uno de estos Procedimientos Principales
habr tantas llamadas a subrutinas Secundarias
como sean necesarias.
NOTA: En la pila de Subrutinas tiene un
almacenamiento mximo de 50 direcciones de
retorno. Por lo que nunca debemos detener 51
llamadas (CALL) abiertas.
Describimos a continuacin las instrucciones de este grupo:
CALL RET
JMP NOP END
I N I C I O
I n i c i a l i z a c i n
d e l
p r o g r a m a
C o n t r o l
d e l o s
a u t o m a t i s m o s
D e t e c c i n
d e l
t e c l a d o
V i s u a l i z a c i n
d e l
p r o g r a m a
D e t e c c i n
d e
a l a r m a s
E N D
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
4 99.01
CALL XXXX
NEMNICO: CALL
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 95
DESCRIPCIN:
LLAMADA a una subrutina.
El operando es el nmero o etiqueta de lnea de programa donde
inicia la subrutina.
Incrementa un nivel la pila de subrutinas (+1).
# Ejemplo 1:
CALL 100 ;Al llegar a este punto, la ejecucin del
;programa salta a la lnea 100 donde se
;inicia la subrutina pertinente.
# Ejemplo 2:
REMO equ 200
CALL REMO ;Al llegar a este punto, la ejecucin del
;programa salta a la lnea 200 indicada por
;la etiqueta donde se inicia la subrutina
;pertinente.
CALL
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
5 99.01
RET
NEMNICO: RET
OPERANDO XXXX: No dispone de operandos.
CDIGO INSTRUCCIN: 96
DESCRIPCIN:
RETORNO de una subrutina.
El retorno se ejecuta a la lnea siguiente donde se produjo la
llamada, mediante la instruccin CALL.
Decrementa un nivel la pila de subrutinas (-1).
# Ejemplo:
RET ;Al llegar a este punto, la ejecucin del programa salta a
;la lnea siguiente donde se produjo la instruccin CALL
;pertinente.
RET
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
6 99.01
JMP XXXX
NEMNICO: JMP
OPERANDO XXXX: Nmero o etiqueta de lnea de programa.
CDIGO INSTRUCCIN: 92
DESCRIPCIN:
SALTO incondicional a una lnea de programa.
El operando es el nmero o etiqueta de lnea de programa destino
del salto.
No opera con las pilas (0).
# Ejemplo:
JMP 3000 ;Al llegar a este punto la ejecucin del
;programa pasa a la lnea de 3000,
;continuando la ejecucin a partir de este
;punto.
JMP
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
7 99.01
NOP
NEMNICO: NOP
OPERANDO XXXX: No dispone de operandos.
CDIGO INSTRUCCIN: 0
DESCRIPCIN:
NO OPERA.
No opera con las pilas (0).
# Ejemplo:
LD 100
OUT 300
NOP ;Esta lnea de programa no produce ningn efecto.
END
NOP
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
8 99.01
END
NEMNICO: END
OPERANDO XXXX: No dispone de operandos.
CDIGO INSTRUCCIN: 98
DESCRIPCIN:
Indica el FIN de programa.
La ejecucin del programa retorna a la lnea cero y se detectan
errores en tiempo de ejecucin activndose los rels internos
pertinentes
No opera con las pilas (0)
# Ejemplo:
END ;Al llegar a este punto, la ejecucin del programa retorna
;a la lnea 0 y se detectan los posibles errores en tiempo
;de ejecucin.
NOTA: Es imprescindible que todos los programas ejecuten de forma
habitual la instruccin END. De esta manera, el equipo es capaz de
detectar errores del programa MIDA en tiempo de ejecucin.
END
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
9 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Realizacin de un esqueleto estructurado de un programa.
;DEFINICIN DE ETIQUETAS
;
scan equ xxx ;xxx = rel de 1 scan
;PROGRAMA PRINCIPAL
tem CALL inicio ;Inicializacin del programa
CALL tempe ;Lectura de la temperatura
CALL correc ;Correccin de los grados
CALL teclado ;Deteccin del teclado
CALL visua ;Visualizacin del programa
END
;PROCEDIMIENTOS PRINCIPALES
;INICIALIZACION DEL PROGRAMA
inicio LD scan ;Carga en pila lgica el estado del rel del
;de 1 scan (solo estar a 0 en el primer
;scan de programa.
JZ inic0 ;Detecta el rel de primer scan de
;programa para realizar una inicializacin
;previa de datos
RET
... ;En este punto de programa se realizarn todas las
... ;operaciones previas a la ejecucin del programa y que
... ;slo debe ejecutarse una sola vez a la puesta en tensin
... ;equipo
inic0 ...
...
RET
;LECTURA DE LA TEMPERATURA
tempe ... ;lectura de la sonda de temperatura
... ;calculo y resultado final en grados
ESTRUCTURACIN DE PROGRAMAS IN-ES
SUBRUTINAS
10 99.01
...
RET
;CORRECIN DE LOS GRADOS
correc ... ;correccin de los grados medidos segn unas
... ;condiciones especiales
...
RET
;DETECCIN DEL TECLADO
teclado ... ;subrutina para efectuar un men, en donde detectamos
... ;la tecla pulsada para saltar a diferentes subrutinas
... ;secundarias
...
RET
;VISUALIZACIN DEL PROGRAMA
visua ... ;subrutina en donde efectuamos la visualizacin de datos
... ;y mensajes
...
RET
;
;SUBRUTINAS SECUNDARIAS
;
www ... ;subrutina secundaria llamada por la subrutina de
... ;Deteccin de Teclado
RET
xxx ... ;subrutina secundaria llamada por la subrutina de
... ;Deteccin de Teclado
RET
yyy ... ;subrutina secundaria llamada por la subrutina de
... ;Deteccin de Teclado
RET
zzz ... ;subrutina secundaria llamada por la subrutina de
... ;Deteccin de Teclado
RET
ES
.
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
1 99.01
Algunos equipos MIDA disponen de entradas digitales que
poseen una doble caracterstica, por un lado se pueden utilizar como
entradas digitales propiamente dichas, y por otro lado se pueden
utilizar como entradas de contaje rpido por interrupciones.
Sealar que no se debe realizar ninguna parametrizacin para
utilizar dichas entradas en un modo u otro. El programa MIDA puede
utilizar estas entradas de cualquier modo sin previa parametrizacin.
Por tanto, los equipos disponen de una o ms entradas de
contaje rpido por interrupciones, adems debemos de tener en
cuenta que cada una de estas entradas lleva asociada otra entrada
para seleccin del sentido de contaje (ver Manual de Usuario del
equipo correspondiente). Aunque estas entradas de contaje no se
utilicen por el programa MIDA, los registros asociados a ellas se van
actualizando por interrupciones.
Estas entradas pueden ser utilizadas para captadores de
impulsos, encoders, detectores de proximidad, detectores magnticos,
etc.
! Propiedades del contaje
El contaje se realiza por interrupciones sin influir en el tiempo de
scan del programa MIDA.
El tipo de entradas es el mismo que el de las entradas digitales
discretas del equipo: libres de tensin (por contacto) para detectores
NPN.
Cada una de estas entradas dispone de unos registros enteros
asociados de 16 bits que variaran segn el modelo de equipo MIDA a
programar (ver Manual de Usuario del equipo correspondiente).
En algunos equipos MIDA los registros enteros asociados son
diferentes si el contaje es por impulsos o por encoder.
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
2 99.01
REGISTRO ENTERO DESCRIPCIN
Total entrada impulsos
Registro contador totalizador de la
entrada de impulsos.
Destino entrada impulsos
Registro donde se debe programar la
preseleccin del contaje.
Cada vez que la entrada cuenta un
impulso se comprueba si el contaje ha
llegado a la preseleccin para desactivar
el rel preseleccionado.
Parcial entrada impulsos
Registro donde contiene el contaje
parcial desde cero hasta la preseleccin
del registro "Destino entrada impulsos".
Inicializandose automticamente a cero
cada vez que ha llegado a la
preseleccin del contaje.
Diferencia impulsos
(destino - parcial)
Registro que contiene la diferencia en
valor absoluto entre el registro "Destino
entrada impulsos" y el registro "Parcial
entrada impulsos".
Rel asociado
Registro que contiene la direccin del
rel que se desactivar cuando el
registro "Total entrada impulsos" y el
registro "Destino entrada impulsos"
contengan el mismo dato.
! Modo de programacin
El tratamiento de todos los registros descritos anteriormente es
igual al indicado para los registros enteros pudindose consultar,
comparar, modificar, etc., bien por programa bien desde un PC.
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
3 99.01
Cada vez que el equipo detecta un impulso lo contabiliza sobre
el registro "Total entrada impulsos" y comprueba si el contenido de
este registro es IGUAL que el de "Destino entrada impulsos" de
final de contaje.
En caso de que estos dos registros contengan el mismo valor,
el equipo desactiva el rel (interno, salida digital,etc) cuya direccin
esta almacenada en el registro "Rel asociado".
En caso de no precisar desactivar un rel, podemos programar
una preseleccin imposible, por ejemplo un valor negativo (-32000),
para que el sistema nunca llegue este final de contaje, bien puede
programarse una direccin de rel de final de contaje que no afecte al
funcionamiento del programa.
Para realizar un cdigo de programa de contaje hay que realizar
los siguientes pasos:
" Inicializar el registro "Total entrada impulsos", ponindolo a cero
almacenando su valor actual de un registro intermedio.
" Programar el registro de "Destino entrada impulsos" de contaje
con el dato adecuado. Programar el registro de "Rel asociado"
final de contaje con la direccin del rel que se va a usar,
normalmente la salida digital que activa el movimiento de la
mquina que se desea posicionar; de esta manera, el equipo la
desactivar por interrupciones cuando los registros de "Total
entrada impulsos" y de "Destino entrada impulsos" tengan el
mismo valor.
Modos de empleo: principalmente hay dos modos de empleo para las
entradas de contaje:
" Posicionamiento
" Contaje de impulsos.
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
4 99.01
" Para posicionamiento se puede utilizar el
rel apuntado por el registro "Rel asociado"
para dar movimiento a la mquina. Este rel se
desactivar por interrupciones cuando los
registros de "Total entrada impulsos" y
"Destino entrada impulsos" tengan el mismo
valor.
" Para contaje de impulsos, el registro
"Destino entrada impulsos" puede tener
almacenado un valor imposible de alcanzar por el
sistema para por programa recoger el nmero de
impulsos para comparar tratar aritmticamente
utilizar el rel apuntado por el registro "Rel
asociado" para detectar la llegada a una
preseleccin.
Detectar la condicin de final de contaje
por la desactivacin del rel interno salida digital
cuya direccin se almacena en el registro "Rel
asociado".
Si se trataba de posicionar la mquina, el
rel asociado de final de contaje puede haber
desconectado el movimiento.
En el caso de que queramos contar impulsos y
no hayamos puesto a cero el registro de "Total
entrada impulsos", tendremos que tomar el valor del registro de
"Total entrada impulsos" y restarle el valor inicial que se ley al
inicio del contaje.
INICIO
Inicializacin
de los
registros de
contaje
Deteccin
del fin de
contaje
Resultado
del
contaje
FIN
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
5 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- En el presente ejemplo pretendemos realizar un posicionamiento
de una maquina 100 cm (1000 mm) de su origen y a su vez ver la
utilizacin de todos los rels asociados a las entradas de contaje
rpido que en esta ocasin es la entrada cero.
LD 399 ;Carga en pila lgica el rel de primer scan
JNZ ini ;Si est a 1 salta a "ini".
SETRI 0 0 ;Almacena la constante 0 en el registro
;entero 0 (puesta a cero el registro "Total
;entrada impulsos)
SETRI 1 100 ;Almacena la constante 100 en el registro
;entero 1 (fin de posicionamiento en el
;registro "Destino entrada impulsos)
SETRI 2 101 ;Almacena la constante 101 en el registro
;entero 2 (asignacin del "Rel asociado")
ini SET 101 ;Activa la salida 101("Rel asociado").
MOVRI 0 ;Carga en pila aritmtica el contenido del
;registro entero 0 (registro "Total entrada
;impulsos)
MOVRI 1 ;Carga en pila aritmtica el registro entero
;1 (registro "Destino entrada impulsos).
CPGEI vis ;Compara si el reg. entero 0 es mayor o
;igual que el reg. entero 1 salta a "vis".
JMP fin ;Salto incondicional a "fin"
vis INK 356 ;Deteccin de una tecla
JZ vis ;Si no ha sido pulsada la tecla salta a "vis"
SETRI 0 0 ;Si ha sido pulsada la tecla, almacena la
;constante 0 en el registro entero 0 (puesta
;a cero el registro "Total entrada impulsos).
fin END ;Fin de programa
ENTRADAS DE CONTAJE POR ES-EI
INTERRUPCIONES
6 99.01
.
INTERRUPCIONES SOFTWARE ES-IS 1 99.01
Los equipos MIDA pueden disponer de una entrada de
interrupcin software.
Dicha entrada suele ser una entrada digital que posee una
caracterstica de funcionamiento, en la cual puede comportarse de tres
formas distintas:
" Se puede utilizar como entrada digital propiamente dicha.
" Se puede utilizar como entrada de contaje rpido por
interrupciones.
" Se puede utilizar como una entrada de interrupcin de
software.
En el Manual de Usuario de cada equipo, vendr especificada que
entrada digital tiene la caracterstica antes mencionada.
Una interrupcin por software es una subrutina que se ejecuta
cada vez que se activa una entrada digital del equipo, interrumpiendo
la ejecucin normal del programa.
Por lo tanto el programa no actualizar contadores, temporizadores,
bases de tiempos, entradas, etc. en el tiempo que dure la ejecucin de
la interrupcin software.
Una vez terminada esta subrutina, la ejecucin del programa regresa a
la lnea donde se produjo la interrupcin.
Una subrutina de interrupcin por software se debe identificar
de una manera especial, mediante unas Instrucciones Directivas, para
que el compilador la ubique entre las lneas de programa indicadas
para tal fin.
Las Directivas de Compilacin asociadas al uso de la interrupcin por
software son:
INTER END_INTER
Y la instruccin asociada es:
IRET
INTERRUPCIONES SOFTWARE ES-IS 2 99.01
Si un programa no dispone de las instrucciones directivas de
compilacin que se han citado, la entrada correspondiente como una
entrada de interrupciones por software, no se comporta como tal,
pasando a ser slo una entrada de contaje y entrada digital discreta.
! Modo de programacin
Como ejemplo de tratamiento de interrupcin escribimos el cdigo de
un contador de impulsos con sentido.
INTER ;Inicio de la interrupcin por software
LD 1 ;Carga en pila lgica el estado de la
;entrada 1
JZ eti1 ;Determina si se debe incrementar
;decrementar el registro entero "conta".
INC conta -1 ;Decrementa el registro entero "conta".
IRET ;Retorno de la interrupcin al programa
;principal del MIDA.
eti1 INC conta 1 ;Incrementa el registro CONTA
IRET ;Retorno de la interrupcin al programa
;principal del MIDA.
END_INTER ;Fin de la interrupcin por software
Viendo el ejemplo descrito, se pueden hacer las siguientes
consideraciones:
" Las Directivas de compilacin INTER y END_INTER se colocan al
inicio y al final respectivamente del cdigo de programa de la
interrupcin.
De esta forma, el cdigo de programa de la interrupcin es posible
ubicarlo en cualquier posicin del programa MIDA.
" La instruccin que produce el salto de regreso al programa
principal MIDA es la IRET y se debe insertar al final del cdigo del
programa de interrupcin (recordar que la finalizacin del cdigo
del programa de interrupcin es mediante la instruccin
"END_INTER")
Por lo tanto, no est permitido el uso de la instruccin RET dentro
de una interrupcin, el compilador nos indicar un error.
INTERRUPCIONES SOFTWARE ES-IS 3 99.01
" Estn permitidas todas las dems instrucciones de la Lista de
Instrucciones del equipo dentro de esta subrutina.
" Las instrucciones de salto (JZ, JNZ, JMP) no se pueden emplear
para saltar desde fuera a dentro de la interrupcin, por ello si se
produce un salto hacia fuera de la interrupcin no podrn regresar
hacia dentro de la misma.
" Sin embargo, es posible llamar a subrutinas, mediante la
instruccin CALL, desde el mdulo de interrupciones.
Nota importante:
Se debe tener en cuenta que el tiempo de ejecucin de las
instrucciones contenidas en la interrupcin (incluyendo subrutinas) sea
menor que el tiempo preciso para realizar otros procesos importantes
del programa MIDA, como lectura de entradas, contajes,
temporizaciones, etc. Para evitar que se interrumpan ignoren.
! Descripcin
DIRECTIVA DE
COMPILACIN
DESCRIPCIN
INTER
Directiva de compilacin que indica al compilador
dnde empieza la interrupcin.
END_INTER
Directiva de compilacin que indica al compilador
dnde termina la interrupcin.
INTERRUPCIONES SOFTWARE ES-IS 4 99.01
IRET
NEMNICO: IRET
OPERANDO XXXX: No dispone de operandos.
CDIGO INSTRUCCIN: 91
DESCRIPCIN:
Instruccin que produce el salto de regreso desde la interrupcin de
software a la ejecucin normal de programa.
El retorno se ejecuta a la lnea siguiente donde se produjo la
deteccin de la interrupcin, mediante la entrada digital
correspondiente.
No opera con pilas (0).
# Ejemplo:
INTER ;Inicio de la interrupcin por software
LD 1 ;Carga en pila lgica el estado de la
;entrada 1
JZ eti1 ;Determina si se debe incrementar
;decrementar el registro entero "conta".
INC conta -1 ;Decrementa el registro entero "conta".
IRET ;Retorno de la interrupcin al programa
;principal del MIDA., donde se produjo la
;deteccin de la misma.
eti1 INC conta 1 ;Incrementa el registro CONTA
IRET ;Retorno de la interrupcin al programa
;principal del MIDA., donde se produjo la
;deteccin de la misma.
END_INTER ;Fin de la interrupcin por software
IRET
INTERRUPCIONES SOFTWARE ES-IS 5 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Utilizar la entrada digital correspondiente a la de interrupciones
software para detectar alarmas, almacenndolas en una tabla de
registros.
;Programa principal MIDA
LD 10 ;Carga en pila lgica el estado de la
;entrada 10.
OR 101
ANDNT 11
OUT 101 ;Control paro / marcha de la salida digital
;101
...
;Fin del programa
;Subrutina de mantenimiento de la tabla de registros, (puede ser
;llamada desde cualquier punto del programa)
ant MOVRI punt_texto ;Carga en pila aritmtica el
;contenido del reg. entero
STOIX punt_tabla ;Almacena en una tabla de registros
;la direccin del texto asociado a la
;entrada digital de alarma que se ha
;activado.
INC punt_tabla 1 ;Incrementa el puntero a la tabla de
;registros para la prxima anotacin
;en la tabla.
RET
;Inicio de la interrupcin software. Este conjunto de instrucciones se
;ejecuta cada vez que se activa la entrada.
INTER ;Inicio de la interrupcin
SETRI punt_texto 0 ;Inicializa el puntero a la tabla de
;textos
LD 12 ;Carga en pila lgica el estado de
;la entrada digital 12
INTERRUPCIONES SOFTWARE ES-IS 6 99.01
JZ eti1 ;Si no se ha activado la alarma
;salta a "eti1".
CALL ant ;Almacena en la tabla de los
;registros si hay activacin de la
;entrada 12
eti1 INC punt_texto 1 ;Incrementa el puntero a la tabla de
;los textos
LD 13 ;Carga en pila lgica el estado de la
;entrada 13
JZ eti2 ;Si no se ha activado la alarma
;salta a "eti2".
CALL ant ;Almacena en la tabla de los
;registros si hay activacin de la
;entrada 13
eti2 INC punt_texto 1 ;Incrementa el puntero a tabla de
;textos
LD 14 ;Carga en pila lgica el estado de la
;entrada 14
JZ eti3 ;Si no se ha activado la alarma
;salta a "eti3".
CALL ant ;Almacena en la tabla de los
;registros si hay activacin de la
;entrada 14
eti3 INC punt_texto 1 ;Incrementa el puntero a la tabla de
;textos
IRET ;Retorno de la interrupcin
END_INTER ;Fin de la interrupcin por software.
;
;Fin de la interrupcin software
No es recomendable el uso de subrutinas dentro de una interrupcin
por el tiempo de ejecucin que transcurre.
Se debe ser muy cuidadoso en observar que el tiempo de ejecucin
TOTAL (subrutinas incluidas) de la interrupcin sea inferior al tiempo
entre dos interrupciones.
INTERRUPCIONES SOFTWARE ES-IS 7 99.01
B.- Utilizar la entrada digital correspondiente a la de interrupciones
software para contar eventos, detectando si se ha llegado a una
preseleccin almacenada en un registro entero normal.
INTER ;Inicio de la interrupcin
SET rel_fin ;Activa el rel interno que indica fin
;de contaje.
INC conta 1 ;Incrementa contador de eventos
MOVRI conta ;Carga en pila aritmtica el
;contenido del reg. entero "conta"
;(contador).
MOVRI presel ;Carga en pila aritmtica el
;contenido reg. entero "presel"
;(preseleccin).
CPGEI eti1 ;Detecta si el contador ha llegado a
;la preseleccin
RESET rel_fin ;Desactiva el rel interno que indica
;fin de contaje
eti1 IRET ;Retorno de la interrupcin
END_INTER ;Fin de la interrupcin por software.
Este conjunto de instrucciones se ejecuta cada vez que se activa la
entrada digital correspondiente a la de interrupciones software.
La interrupcin se limita a activar desactivar el rel interno indicando
si se ha llegado no a la preseleccin contenida en un registro entero
normal.
C.- Utilizar la entrada digital correspondiente a la de interrupciones
software para contar impulsos en una base de tiempos dada.
;Programa principal
LDNT 400
TIM 250 10 ;Temporizador base de tiempos de
;1seg
OUT 400
...
... ;Continua el programa
INTERRUPCIONES SOFTWARE ES-IS 8 99.01
;Inicio de la interrupcin
INTER ;Inicio de la interrupcin
INC conta 1 ;Incrementa contador de impulsos
LD 250
JZ eti1 ;Detecta si ha transcurrido el tiempo
;de la base de tiempos
MOVRI conta
STOI inter ;Almacena en un reg. entero "inter"
;el resultado del contaje para
;clculos posteriores para ahorrar
;tiempo dentro de la interrupcin
eti1 IRET ;Retorno de la interrupcin
END_INTER ;Fin de la interrupcin por software.
Dentro de una interrupcin slo se deben realizar las operaciones
estrictamente necesarias de cara a economizar el mximo tiempo de
ejecucin posible.
As, en el ejemplo se descarga el resultado del contaje sobre un
registro intermedio para utilizarlo posteriormente en el programa
normal para clculos (velocidad, etc).
Si en lugar de la instruccin TIM se utiliza la TIMR, la base de tiempos
INC conta 1 ;Incrementa contador de eventos
MOVRI conta
MOVRI presel
CPGEI eti1 ;Detecta si el contador ha llegado a
;la preseleccin
RESET rel_fin ;Desactiva el rel interno que indica
;fin de contaje
eti1 IRET ;Retorno de la interrupcin
END_INTER
La interrupcin se limita a activar desactivar en rel interno
indicando si se ha llegado no a la preseleccin contenida en un
registro entero normal..
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 1 99.01
Los equipos MIDA disponen de entradas y/o salidas analgicas,
en el propio equipo o mediante mdulos o cartas de ampliaciones.
! ENTRADAS ANALGICAS
Las entradas analgicas puede ser de dos tipos:
" Entradas Analgicas Diferenciales.
" Entradas Analgicas Comunes.
Modo de programacin.
La adquisicin de los valores de las entradas analgicas la
realiza el equipo por interrupciones.
Para obtener estos valores lo nico que debemos hacer es leer
el contenido de los registros enteros pertinentes (vase Manual de
Usuario del equipo que se utilice del mdulo o carta de ampliacin).
Estos registros son accesibles por el programa MIDA pudiendo
realizar tratamientos aritmticos, de comparaciones, de visualizacin,
etc... Son, en definitiva, unos registros enteros normales en los que
cada cierto tiempo el equipo actualiza su contenido en funcin al valor
de la entrada analgica pertinente.
Los valores mximo y mnimo que pueden contener estos
registros viene dado por la resolucin del conversor.
La actualizacin de los registros de las entradas se hace
proporcionalmente a la seal aplicada a la entrada correspondiente.
As, por ejemplo:
MOVRI 60 ;Carga en pila aritmtica el valor del
;registro entero 60, equivalente a una
;entrada analgica
STOI 500 ;Almacena el contenido en la pila
;aritmtica en el registro entero 500
en el registro entero 500 se almacenar un valor entre 0 y 4000 en el
caso de una entrada analgica comn o un valor entre +/- 32.767 en el
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 2 99.01
caso de una entrada analgica diferencial, proporcional a la seal
analgica conectada a la entrada analgica (registro entero 60).
El conversor analgico diferencial es del tipo extensiomtrico,
y a final de escala puede no haber alcanzado los puntos de resolucin
que se especifican en el Manual de Usuario. Por lo tanto es preciso
realizar rutinas de calibracin para calcular la pendiente de la recta
correspondiente a esta entrada.
As por ejemplo:
Se deben obtener dos lecturas de puntos: una a un valor de
entrada cero y otra a un valor cualquiera lo ms prximo al fondo de
escala de la seal exterior.
Seguidamente se calcula la pendiente de la recta sabiendo dos puntos
de la misma.
De esta manera se obtiene un factor de escala que, operado
con la seal exterior, siempre da como resultado un punto situado
encima de la recta.
As, al multiplicar los puntos analgicos de entrada obtendremos las
unidades de ingeniera (kg, C, %Hr, etc.). Tanto en las entradas de
tipo diferencial como en las de tipo comn.
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 3 99.01
Rel Fin de Conversin A/D.
Existe en algunos equipos MIDA uno o varios rels internos
denominados "Rel Fin de Conversin A/D", el cual se activa cada vez
que el conversor A/D hace una lectura. Dicho rel tiene la misma
direccin que el registro entero correspondiente a la entrada
analgica.
Dependiendo el tipo de conversor (segn modelo MIDA o
ampliacin), cada entrada analgica tiene un rel asociado para cada
una, o comparte el mismo rel para varias entradas analgicas (ver
Manual Usuario del equipo MIDA y/o carta o mdulos de ampliacin).
Hay que tener en cuenta que el "Rel Fin de Conversin A/D"
se activa la primera vez que detecta una conversin A/D, manteniendo
el estado de dicho rel en "1", hasta que, mediante el programa
usuario no lo desactivemos. As en la prxima conversin A/D, el rel
se volver a activar, pudiendo controlar todas la conversiones A/D que
efecta el conversor.
Este rel es muy til para poder promediar lecturas de la
entrada analgica, como veremos en los ejemplos de a continuacin.
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 4 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Visualizar el valor de una entrada analgica de un captador de
temperatura, cuyas lecturas mxima y mnima son de 0 a 100
o
C.
Un ejemplo para una entrada analgica es de 0-20mA y otro para una
entrada analgica es de 4-20mA, ambos de 4000 ptos de resolucin.
0 - 20mA
MOVIF ent_1 ;Carga el contenido registro entero "ent_1"
;equivalente a una entrada analgica en
;formato en coma flotante.
MOVCF 100 ;Carga en pila aritmtica la constante 100
;en coma flotante.
MULF ;Multiplica los dos datos contenidos en la
;pila aritmtica, dejando el resultado en la
;misma.
MOVCF 4000 ;Carga en pila aritmtica la constante 4000
;en coma flotante.
DIVF ;Divide los dos datos contenidos en la pila
;aritmtica.
STOF temper ;Almacena el resultado anterior en un
;registro en coma flotante, ej. "temper".
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin
DISRF temper 51 ;Carga en el buffer intermedio el contenido
,del registro en coma flotante "temper", con
;un decimal.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 5 99.01
4-20 mA.
MOVIF ent_1 ;Carga el contenido registro entero "ent_1"
;equivalente a una entrada analgica en
;formato en coma flotante.
MOVCF 800 ;Carga en pila aritmtica la constante 800
;en coma flotante.
SUBF ;Divide los dos datos contenidos en la pila
;aritmtica (Calcula el offset de la seal de
;entrada de 4mA).
MOVCF 100 ;Carga en pila aritmtica la constante 100
;en coma flotante.
MULF ;Multiplica los dos datos contenidos en la
;pila aritmtica, dejando el resultado en la
;misma.
MOVCF 4000 ;Carga en pila aritmtica la constante 4000
;en coma flotante.
DIVF ;Divide los dos datos contenidos en la pila
;aritmtica.
STOF temper ;Almacena el resultado anterior en un
;registro en coma flotante, ej. "temper".
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin
DISRF temper 51 ;Carga en el buffer intermedio el contenido
,del registro en coma flotante "temper", con
;un decimal.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 6 99.01
B.- Tomar el dato de una entrada analgica promediando su valor un
nmero prefijado de veces.
;Definicin de etiquetas
fin_ad equ xxx ;rel "Fin de conversin" de la entrada analgica
ent_1 equ xxx ;registro entero de una entrada analgica
cont equ xxx ;registro entero (contador de lecturas realizadas)
resul equ xxx ;registro entero (medida promediada)
inter equ xxx ;registro en coma flotante (acumulador medidas)
prom equ xxx ;constante entera (n de promedios)
;
MOVCF 0 ;Carga en pila aritmtica la constante 0 en coma
;flotante.
STOF inter ;Inicializa un registro en coma flotante como
;acumulador de las medidas, almacenando la
;constante 0.
MOVCI 0 ;Carga en pila aritmtica la constante indicada 0
STOI cont ;Inicializa un registro entero como contador de
;lecturas realizadas, almacenando la constante 0.
LD fin_ad;Carga en la pila lgica el estado del rel fin de
;conversin "fin_ad" correspondiente a la entrada
;analgica.
JZ eti ;Si este rel = 1', es que se ha producido una
;nueva lectura analgica, por lo que se debe leer
;de lo contrario, salta a la lnea "eti".
RESET fin_ad;Se desactiva el rel de fin de conversin "fin_ad"
;para preparar la prxima deteccin de lectura
MOVIF ent_1 ;Carga en pila el valor de la lectura analgica
;convertido a formato en coma flotante
MOVRF inter ;Carga en pila aritmtica el contenido del registro
;en coma flotante "inter".
ADDF ;Suma los datos de la pila aritmtica.
STOF inter ;Acumula los valores de las lecturas analgicas
INC cont 1;Incrementa en una unidad el contador de lecturas
;realizadas.
MOVRI cont ;Carga en pila aritmtica el contenido del registro
;entero "cont".
MOVCI prom ;Carga en pila aritmtica la constante "prom"
;(nmero de promedios).
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 7 99.01
CPLEI eti ;Comprueba si ya se ha realizado el nmero
;de lecturas preseleccionadas
MOVRF inter ;Carga en pila aritmtica el contenido del registro
;en coma flotante "inter".
MOVIF cont ;Carga en pila aritmtica el contenido del registro
;entero "cont" en formato coma flotante.
DIVF ;Clculo de la media aritmtica de las lecturas
;realizadas (acumulador/n_de_lecturas)
STOFI resul ;Almacena el resultado, convertiendolo en entero,
;en el registro entero "resul".
eti -------- ;Sigue el programa...
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 8 99.01
C.- Programa ejemplo de calibracin y visualizacin de una PT100.
Contiene rutinas de Calibracin de la sonda PT100 y Visualizacin de
grados leda por la sonda PT100
;Definicin rels
r1 equ 60 ;Rel de fin de conversin entrada A/D
si equ 600 ;Flag de confirmacin respuesta
tec1 equ 352 ;Tecla <9>Calibracin sonda PT100
tec2 equ 355 ;Tecla <.> Confirmacin
;Definicin registros enteros
pt100 equ 60 ;Entrada analgica sonda PT100
puntos equ 500 ;Intermedio puntos A/D
temp1 equ 501 ;Puntos temperatura mnima
temp2 equ 502 ;Puntos temperatura mxima
conta equ 503 ;Contador de lecturas A/D
inter equ 504 ;Intermedio para clculos
offset equ 505 ;Offset de la sonda PT100
;Definicin registros en coma flotante
acum equ 0 ;Acumulador de lecturas A/D
tempox equ 1 ;Temperatura mnima calibrado en grados
tempoy equ 2 ;Temperatura mxima calibrado en grados
tempo equ 4 ;Temperatura calculada en grados
factor equ 5 ;Pendiente recta sonda PT100
;Definicin constante
nveces equ 9 ;num lecturas A/D para promediar
;Definicin literales
text0 lite "PT100"
text1 lite "PT100 C minima"
text2 lite "Temp. Min. Cal.?"
text3 lite "PT100 C maxima"
text4 lite "Temp. Max. Cal.?"
text5 lite "PULSAR... <.> "
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 9 99.01
;PROGRAMA PRINCIPAL
eti CALL cal1 ;Calculo de la temperatura
CALL visua ;Visualizacin de la temperatura
INK tec1 ;Deteccin tecla
JZ eti0 ;Mira si pulsa tecla de calibracin
CALL cali ;Calibracin de sonda PT100
eti0 END
;CALCULO DE LA TEMPERATURA DE LA PT100
cal1 MOVRI pt100 ;Carga puntos entrada sonda
MOVRI offset ;Carga el offset
SUBI ;Resta offset a los puntos medidos
STOI inter ;Guarda resultado
MOVIF inter ;Carga registro intermedio
MOVRF factor ;Carga el factor de calibracin
DIVF ;Multiplica para dar temperatura
STOF tempo ;Temperatura en C
RET
;VISUALIZACION DE PROGRAMA
visua CLEAR ;Borra buffer intermedio
DISL text0 ;Texto "PT100"
LOC 7 ;Posicin puntero buffer intermedio
DISRF tempo 42 ;Visualizacin temperatura
LOC 13 ;Posicin puntero buffer intermedio
DISCH 67 ;Carga carcter "C"
DISCH 223 ;Carga carcter ""
COM 0 ;Visualiza en display LCD
RET
;CALIBRACION PT100 (factor = tempoy - tempox / temp2 - temp1)
;procede a calibrar temperatura mnima (calcula pendiente de recta)
cali CLEAR ;Borra buffer intermedio
DISL text2 ;Texto "Temp. Min. Cal.?"
LOC 28 ;Posicin puntero buffer intermedio
DISCH 67 ;Carga carcter "C"
DISCH 223 ;Carga carcter ""
COM 0 ;Visualiza en display LCD
LOC 21 ;Posicin puntero buffer intermedio
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 10 99.01
INF 6 ;Introduccin temperatura mnima
STOF tempox ;Guarda introduccin
CLEAR ;Borra buffer intermedio
DISL text1 ;Texto "PT100 C minima"
LOC 6 ;Posicin puntero buffer intermedio
DISCH 223 ;Carga carcter ""
LOC 16 ;Posicin puntero buffer intermedio
DISL text5 ;Texto "PULSAR... <.> "
COM 0 ;Visualiza en display LCD
cali1 CALL sip ;Comprueba confirmacin
JZ cali1
CALL tom0 ;Toma puntos temperatura mnima
MOVRI puntos ;Carga puntos promediados
MOVRI puntos ;Carga puntos promediados
STOI temp1 ;Guarda calculo de pendiente min.
STOI offset ;Guarda calculo del offset
;procede a calibrar temperatura mxima (calcula pendiente de recta)
CLEAR ;Borra buffer intermedio
DISL text4 ;Texto "Temp. Max. Cal.?"
LOC 28 ;Posicin puntero buffer intermedio
DISCH 67 ;Posicin puntero buffer intermedio
DISCH 223 ;Carga carcter ""
COM 0 ;Visualiza en display LCD
LOC 21 ;Posicin puntero buffer intermedio
INF 6 ;Introduccin temperatura mxima
STOF tempoy ;Guarda introduccin
CLEAR ;Borra buffer intermedio
DISL text3 ;Texto "PT100 C maxima"
LOC 6 ;Posicin puntero buffer intermedio
DISCH 223 ;Carga carcter ""
LOC 16 ;Posicin puntero buffer intermedio
DISL text5 ;Texto "PULSAR... <.> "
COM 0 ;Visualiza en display LCD
cali5 CALL sip ;Comprueba confirmacin
JZ cali5
CALL tom0 ;Toma puntos temperatura mxima
MOVRI puntos ;Carga puntos promediados
STOI temp2 ;Guarda calculo de pendiente max.
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 11 99.01
MOVIF temp2 ;Carga calculo de pendiente max.
MOVIF temp1 ;Carga calculo de pendiente min.
SUBF ;Calcula diferencia pendiente
MOVRF tempoy ;Carga temperatura max. calibrada
MOVRF tempox ;Carga temperatura min. calibrada
SUBF ;Calcula diferencia temperatura
DIVF ;Calcula factor de la pendiente
STOF factor ;Guarda factor pendiente de la recta
RET
;TOMA PUNTOS DE CONVERSOR PROMEDIANDO
tom0 SETRI acum 0 ;Inicializa acumulador de lecturas
SETRI conta 0 ;Inicializa contador de promedios
tom1 LD r1 ;Carga "Rel fin conversin A/D"
JZ tom1
RESET r1 ;Reseta "Rel fin conversin A/D"
MOVIF pt100 ;Carga puntos entrada sonda
MOVRF acum ;Carga acumulador de lecturas
ADDF ;Suma puntos A/D y acumulador
STOF acum ;Guarda en el acumulador lecturas
INC conta 1 ;Incrementa contador de lecturas
MOVRI conta ;Carga contador de lecturas
MOVCI nveces ;Carga constante de promedios
CPLEI tom1 ;Comprueba si ha llegado
MOVRF acum ;Carga acumulador de lecturas
MOVIF conta ;Carga contador de lecturas
DIVF ;Divide acumulador con promedios
STOFI puntos ;Guarda puntos promediados
RET
;PREGUNTA CONFIRMACIN
sip SET si ;Activa flag de confirmacin
INK tec2 ;Deteccin tecla
JNZ sip1 ;Comprueba la confirmacin
RESET si ;Borra flag de confirmacin
sip1 LD si ;Activa flag de confirmacin
RET
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 12 99.01
! SALIDAS ANALGICAS
Los equipos MIDA disponen de salidas analgicas, mediante
mdulos o cartas de ampliaciones
La informacin especfica de cada uno de estos mdulos o cartas de
ampliaciones se encuentra en el Manual del Usuario de estos.
Modo de programacin
Las salidas analgicas del MIDA son de 4000ptos de resolucin
y un rango de 0/4 - 20mA.
El equipo produce una salida analgica proporcional al contenido del
registro entero asociado a dicha salida.
As, si el registro entero xxx (registro entero correspondiente a una
salida analgica de 0-20mA) contiene el dato:
4000 ,la salida ser de 20mA
2000 ,la salida ser de 10mA
0 ,la salida ser de 0mA
Los registros de las salidas analgicas son accesibles por el
programa MIDA para tratarlos aritmticamente, compararlos,
modificarlos, visualizarlos, etc.
En todo momento, el MIDA producir una salida analgica
proporcional al contenido del registro.
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 13 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Se toma el valor de dos entradas analgicas (de 32767 puntos), se
realiza la media aritmtica y se produce una salida analgica (de 4000
puntos) proporcional a este clculo.
Salida Analgica = (Entrada Analgica 1) + (Entrada Analgica 2) / 2
MOVIF 60 ;Carga en la pila aritmtica el valor de una
;entrada analgica en formato coma flotante.
MOVIF 61 ;Carga en pila aritmtica el valor de la segunda
;entrada analgica en formato coma flotante
ADDF ;Suma los dos datos contenidos en la pila
;aritmtica y deja el resultado en la misma pila
;(Ent_A/D1 + Ent_A/D2 = suma).
MOVCF 2 ;Carga la constante 2 en pila aritmtica.
DIVF ;Divide los dos datos contenidos en la pila
;aritmtica (Suma / 2 = media_aritmtica) y deja el
;resultado en la misma pila.
STOF 0 ;Almacena en el registro en coma flotante 0 el
;contenido de la pila aritmtica (media aritmtica
;de las dos entradas analgicas)
MOVRF 0 ;Carga en la pila aritmtica el contenido del
;registro en coma flotante 0.
MOVCF 4000 ;Carga en pila aritmtica la constante 4000.
MULF ;Multiplica los dos datos de la pila aritmtica (La
;media se multiplica por la resolucin de la salida
;analgica)
MOVCF 32767;Carga la constante en coma flotante 32767 (se
;divide por la resolucin estimada de las
;entradas analgicas
DIVF ;Divide los datos de la pila aritmtica dejando el
;resultado en la misma pila (realiza la regla de tres
;para calcular la salida analgica proporcional a la
;media aritmtica de las entradas analgicas
STOFI 1000 ;El resultado (en coma flotante) contenido en la
;pila aritmtica, debe ser convertido a entero para
;poderse almacenar en el registro entero
;correspondiente a la salida analgica.
ENTRADAS Y SALIDAS ANALOGICAS ES-AD 14 99.01
.
FI
.
FUNCIONES INTERNAS FI-FI 1 99.01
Existe en algunos equipos MIDA la disponibilidad de una nueva
instruccin denominada FUNC.
Dicha instruccin, dependiendo del operando, nos har una llamada
interna a una funcin determinada: funcin de control PID, funcin de
pesaje, ...
La descripcin de la instruccin FUNC, varia segn para cada
funcin. El formato de la instruccin en modo genrico es:
FUNC XXXX YYYY
NEMNICO: FUNC
OPERANDO XXXX: Constante la cual indica la funcin a llamar.
OPERANDO YYYY: Constante la cual indica un parmetro
opcional para la funcin llamada.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Descripcin de la funcin y de sus operandos
En los siguientes captulos describimos la funciones disponibles.
FUNC
FUNCIONES INTERNAS FI-FI 2 99.01
.
FUNCIONES DE PESAJE FI-PS 1 99.01
Dentro del programa interno de algunos equipos MIDA,
disponemos de rutinas para pesaje, en la que incluye las siguientes
funciones especificas:
" Set-up usuario / avanzado de las bsculas.
" Calibracin de las bsculas.
" Ajuste de autotara.
El sistema nos permite disponer de hasta 18 bsculas,
dependiendo del modelo de equipo MIDA (consultar Manual de
Usuario).
! Funciones para la programacin de pesaje
Para utilizar las funciones de pesaje hemos de utilizar la
instruccin FUNC con cuatro operandos diferentes.
FUNC 7 n ;Ajuste de autocero de una bascula.
FUNC 8 0 ;Calibracin automtica de la bscula.
FUNC 9 0 ;Set-up Usuario de la bascula.
FUNC 9 1 ;Set-up Avanzado de la bascula.
! Parmetros de una bscula
Los parmetros que disponemos para cada una de las
bsculas, segn el tipo de funcin que llamemos son los siguientes:
Opciones FUNC 9 0 FUNC 9 1 FUNC 8 FUNC 7
Estado ON / OFF Accesible Accesible ------ ------
Promedios 1 / 2 / 4 / 8 Accesible Accesible ------ ------
Cadencia 1 / 2 / 5 Accesible Accesible ------ ------
N decimales 0 / 1 / 2 / 3 Accesible Accesible ------ ------
Factor
Escala
Coma
Flotante
------ Accesible Automtico ------
Cero Entero ------ Accesible Automtico ------
Tara Entero ------ Accesible Se borra Automtico
FUNCIONES DE PESAJE FI-PS 2 99.01
! Registros utilizados por las bsculas.
Los rels / registros utilizados en las funciones de pesaje para
cada bascula y accesibles por el usuario son:
" Rel de fin de pesada (rel de fin de conversin A/D)
" Registro Entero de puntos de conversin A/D (entrada analgica).
" Registro en Coma Flotante (resultado del pesaje)
" Registro Entero indicando numero de decimales.
NOTA: El resultado de pesaje es el registro en coma flotante
equivalente al numero de bascula.
! Ecuaciones funcionamiento bscula
El parmetro promedio especifica el nmero de medidas que ha
de realizar la entrada analgica A/D para obtener un peso
promediado. Con este parmetro se elimina ruido en el pesaje, pero
disminuye la velocidad del mismo.
Primero se calcula la media en puntos de conversor de la
entrada. Luego se resta el cero, la tara y se divide por el factor de
escala.
Luego se cortan los decimales segn indique el parmetro N
de decimales y se redondea a mltiplos de 1, 2 5 segn indique el
parmetro cadencia. Y se guarda el peso total en el registro en coma
flotante equivalente al nmero de bascula.
Peso almacenado = redondeo(peso, N decimales, cadencia)
#
$ conversor puntos
promedio
1
media
escala factor
tara - cero - media
peso $
FUNCIONES DE PESAJE FI-PS 3 99.01
FUNC XXXX YYYY
NEMNICO: FUNC
OPERANDO XXXX: Constante 7
OPERANDO YYYY: Registro entero que contiene el nmero de
bscula a ajustar.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Realiza ajuste de autocero (autotara).
El operando XXXX es la constante 7, llamada a la funcin de
autocero.
El operando YYYY es la direccin del registro entero con el nmero
de bascula.
La primera bascula es la 0, que equivale a la primera entrada
analgica detectada.
Mensaje por display: Ninguno
No opera con las pilas (0)
Nota: La bscula correspondiente debe estar activada mediante la
FUNC 9, sino no ejecutara el autocero.
# Ejemplo:
MOVCI 2 ;Carga la constante 2.
STOI 600 ;Almacena la constante en el reg. entero
INK tecla ;Deteccin de una tecla.
JZ sub1 ;Si detecta la tecla pulsada, ejecuta FUNC.
;de lo contrario salta a "sub1".
FUNC 7 600 ;Realiza el autocero (tara) del nmero de
bascula contenido en el reg. entero 600, es
;decir la bascula nmero 3 (la primera es
;la cero).
sub1 .....
.....
FUNC
FUNCIONES DE PESAJE FI-PS 4 99.01
FUNC XXXX YYYY
NEMNICO: FUNC
OPERANDO XXXX: Constante 8
OPERANDO YYYY: Constante 0
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Calibracin automtica de la bscula.
El operando XXXX es la constante 8, llamada a la funcin de men
de calibracin.
El operando YYYY es la constante 0.
Mensaje por display: Si
No opera con las pilas (0)
Para seleccionar la entrada A/D de la bascula a calibrar, se
efecta mediante las teclas <%> y/o <&> del teclado del equipo MIDA.
Si la bscula seleccionada no esta activada aparecer el texto -
OFF- en el display y no podr ser calibrada. Si no existe o no funciona
la entrada A/D de la bascula seleccionada el mensaje aparecer
parpadeando y no se podr calibrar.
Nota: La bscula correspondiente debe estar activada mediante la
FUNC 9
El esquema del men de calibracin de la bascula es:
FUNC
FUNCIONES DE PESAJE FI-PS 5 99.01
FUNCIONES DE PESAJE FI-PS 6 99.01
FUNC XXXX YYYY
NEMNICO: FUNC
OPERANDO XXXX: Constante 9
OPERANDO YYYY: Modo de Set-up de la bascula.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Permite entrar al modo de Set-up indicado en el operando YYYY,
para parmetrizar el funcionamiento de la bascula.
El operando XXXX es la constante 9, llamada a la funcin de Set-up
de la bascula.
El operando YYYY es la constante que nos indica que modo de Set-
up deseamos que nos muestre:
0 Set-up Usuario
1 Set-up Avanzado
Mensaje por display: Si
No opera con las pilas (0)
Para seleccionar la entrada A/D de la bascula a calibrar, se
efecta mediante las teclas <%> y/o <&> del teclado del equipo MIDA.
Si la bscula seleccionada no esta activada aparecer el texto -
OFF- en el display y no podr ser calibrada. Si no existe o no funciona
la entrada A/D de la bascula seleccionada el mensaje aparecer
parpadeando y no se podr calibrar.
Mediante esta instruccin activaremos las rutinas de pesaje de
cualquier bascula, adems de definir los parmetros de
funcionamiento de dicha bascula. Todo ello se almacena en EEPROM
no voltil de forma que al apagar y encender el equipo MIDA no se
pierdan los parmetros.
Para configurar una bascula se puede ejecutar la siguiente
instruccin:
FUNC 9 1 ;Set-up Avanzado.
FUNC
FUNCIONES DE PESAJE FI-PS 7 99.01
Para cual se deben conocer los parmetros de Factor de Escala
y el Cero. Tambin se puede automatizar la obtencin de dichos
parmetros mediante la funcin (. Entonces para configurar un bascula
podramos ejecutar las siguientes instrucciones:
FUNC 9 0 ;Set-up Usuario
FUNC 8 0 ;Calibracin Automtica de bascula
El esquema del Set-up de la bascula es:
FUNCIONES DE PESAJE FI-PS 8 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
;Programa ejemplo para MIDA 64.
;Programa de muestra da la utilizacin de las funciones de pesaje
; Tecla Accin
; -------- ---------
; F5 Ejecuta "FUNC 7 basc"
; F6 Ejecuta "FUNC 8 0"
; F7 Ejecuta "FUNC 9 0"
; F8 Ejecuta "FUNC 9 1"
; SUBIR Pasa a mostrar la siguiente bscula
; BAJAR Pasa a mostrar la bscula anterior
;Mientras no se pulse ninguna tecla mostrar en pantalla nmero de
;bscula y el peso medido.
;Definicin de teclas a usar
f5 equ 360 ;Rel correspondiente a la tecla <F5>.
f6 equ 361 ;Rel correspondiente a la tecla <F6>.
f7 equ 362 ;Rel correspondiente a la tecla <F7>.
f8 equ 363 ;Rel correspondiente a la tecla <F8>.
subir equ 342 ;Rel correspondiente a la tecla <UP>.
bajar equ 343 ;Rel correspondiente a la tecla <DOWN>.
;Definicin registros enteros
basc equ 400 ;Registro para almacenar el nmero de bscula.
frm equ 401 ;Registro contiene formato display en DISFX.
;Definicin literales
txt0 lite "BASCULA :"
txt1 lite "PESO :"
FUNCIONES DE PESAJE FI-PS 9 99.01
SETRI basc 0 ;Almacenamos la constante 0 en el registro
;entero "basc" (n de bascula).
SETRI frm 93 ;Almacenamos la constante 93 en el reg.
;entero "frm" (formato de visualizacin).
inic INK f5 ;Detectamos la tecla <F5>.
JZ sal1
FUNC 7 basc ;Autocero bscula con n almacenado en
;en el registro entero "basc".
sal1 INK f6 ;Detectamos la tecla <F6>.
JZ sal2
FUNC 8 0 ;Calibracin bscula
sal2 INK f7 ;Detectamos la tecla <F7>.
JZ sal3
FUNC 9 0 ;Parmetros bscula usuario
sal3 INK f8 ;Detectamos la tecla <F8>.
JZ sal4
FUNC 9 1 ;Parmetros bscula avanzados
sal4 INK subir ;Detectamos la tecla <UP>.
JZ sal5
INC basc 1 ;Incrementamos el contenido del reg.
;entero "basc" en 1.
MOVRI basc ;Carga en la pila aritmtica el contenido del
;reg. entero "basc".
MOVCI 18 ;Carga en la pila aritmtica la constante 18
CPLI sal5 ;Si el contenido del reg. entero "basc" no
;es 18 salta a la lnea "sal5".
SETRI basc 0 ;Si "basc" > = 18 poner "basc" = 0;
sal5 INK bajar ;Detectamos la tecla <DOWN>.
JZ sal6
INC basc -1 ;Decrementamos el contenido del reg.
;entero "basc" en 1.
MOVRI basc ;Carga en la pila aritmtica el contenido del
;reg. entero "basc".
MOVCI 0 ;Carga en la pila aritmtica la constante 0
CPGEI sal6 ;Si el contenido del reg. entero "basc" es
;igual o mayor de 0 salta a la lnea "sal6".
SETRI basc 17 ;Si "basc" < 0 poner "basc" =17;
sal6 CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
FUNCIONES DE PESAJE FI-PS 10 99.01
DISL txt0 ;Carga en el buffer intermedio el mensaje
;de la tabla de literales "txt0"
LOC 14 ;Posiciona el puntero de visualizacin en la
;decimocuarta posicin (la primera es la
;cero).
DISRI basc 2 ;Copia en el buffer intermedio el contenido
;del reg. entero "basc" con 2 cifras.
LOC 16 ;Posiciona el puntero de visualizacin en la
;decimosexta posicin (la primera es la
;cero).
DISL txt1 ;Carga en el buffer intermedio el mensaje
;de la tabla de literales "txt1"
LOC 23 ;Posiciona el puntero de visualizacin en la
;vigsima tercera posicin (la primera es la
;cero).
DISFX basc frm ;Copia en el buffer intermedio el contenido
;del reg. en coma flotante, apuntado por el
;reg. entero "basc", con el formato
;contenido en el reg. entero "frm".
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
JMP inic ;Salto incondicional a la lnea "inic".
FUNCION CONTROL PID FI-CP 1 99.01
Algunos equipos MIDA incorporan una funcin interna para la
programacin de un control PID, una de cuyas utilidades se encuentra
reservada al campo de las aplicaciones donde necesitemos utilizar
controles del tipo proporcional integral derivativo tambin conocidos
ms popularmente como funciones de control PID.
! Control PID
Un control de PID es un sistema que utilizamos en procesos de
control realimentados en un sistema que llamamos de lazo cerrado. La
idea bsica del controlador de PID es hacer de que la salida busque y
siga las variaciones de la seal de entrada, en tiempo real. EL mtodo
para realizar dichos ajustes viene dado por un sistema basado en
controles de tipo Proporcional, Integral y Derivativo, y que como
podemos comprobar, adems, coincide con las siglas del sistema
denominado control de PID.
Lo que nos permite la funcin de PID implementada en nuestros
equipos es evitar al programador el que tenga que realizar todos estos
clculos propios en un proceso de regulacin. En el que como
sabemos es un proceso en el que una determinada magnitud de
entrada, variable en el tiempo (magnitud regulada, valor actual,...) de
un sistema y detectada continuamente, es comparada con otra
magnitud dada (valor prescrito, fijado...) e influenciada en el sentido de
una igualacin. El proceso de actuacin obtenido se desarrolla en un
sistema como ya comentamos anteriormente de lazo cerrado.
Las ventajas con la funcin de PID implementadas en nuestros
equipos Mida son claras, todas las operaciones que deberamos de
realizar para tener un sistema de control y regulacin de un proceso y
garantizar su estabilidad, nos las evitamos, ahorrndonos una
considerable cantidad de tiempo al utilizar dichas funciones de control
de PID y cuyo funcionamiento pasamos a describir a continuacin..
! Programacin PID
La programacin de un control PID se realizar a travs de la
instruccin de autmata denominada FUNC y deberemos de seguir
unas pautas concretas que relacionamos a continuacin:
FUNCION CONTROL PID FI-CP 2 99.01
" Lo primero que deberemos de hacer es configurar la funcin de
PID para lo que utilizaremos la instruccin FUNC 1 n, donde n
ser el nmero de PID a utilizar (de 0 a 9, mximo 10 controles
PID).
" Una cuestin importante y que no debemos de olvidar es el hecho
de que antes de realizar la funcin de control de PID deberemos
de resetear las variables internas de la funcin de PID, para lo
cual deberemos de utilizar la instruccin FUNC 2 n, donde n es el
numero de PID a utilizar.
" El paso siguiente es el de realizar la funcin de control de PID
propiamente dicha para lo que utilizaremos la instruccin FUNC 0
n, donde n es el numero de PID a utilizar.
Llegados a este punto habremos observado que dentro del apartado
del control PID disponemos de tres instrucciones, FUNC 0, FUNC 1 y
FUNC 2 y que seguidamente pasaremos a detallar.
FUNCION CONTROL PID FI-CP 3 99.01
FUNC XXXX YYYY
NEMONICO: FUNC
OPERANDO XXXX: Constante 0
OPERANDO YYYY: Nmero de PID a efectuar el control.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Realiza el control PID.
El operando XXXX es la constante 0, llamada a la funcin de control
PID.
El operando YYYY indica el nmero de PID a utilizar, de 0 a 9.
Descarga de la pila aritmtica el contenido de un registro entero
cargado previamente (valor de la medida realizada) para
posteriormente efectuar el control PID y dejar el resultado sobre la
misma pila aritmtica.
No altera la pila aritmtica.
Nota: El error (Consigna Medida) y el valor de control estn
normalizados de -10000 a 10000.
# Ejemplo:
Ver final de este capitulo.
FUNC
FUNCION CONTROL PID FI-CP 4 99.01
FUNC XXXX YYYY
NEMONICO: FUNC
OPERANDO XXXX: Constante 1
OPERANDO YYYY: Nmero de PID a parametrizar.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Configuracin de los parmetros del PID.
El operando XXXX es la constante 1, llamada a la funcin de
parametrizacin del PID.
El operando YYYY es el nmero de PID a parametrizar, de 0 a 9.
Descarga de la pila aritmtica el valor el cual indica la Direccin de
inicio de los parmetros del PID:
Direccin inicio (registro entero x): valor deConsigna
Direccin x+1 (registro entero x+1): valor K*100
Direccin x+2 (registro entero x+2): valor P
I
Direccin x+3 (registro entero x+3): valor P
D
*10
Las Direcciones (registros enteros) anteriores han de ir consecutivos
y en el orden indicado. Los valores del PID, son los contenidos de
estos registros enteros.
Decrementa un nivel la pila aritmtica (-1).
Nota: Todos los valores estn normalizados de -10000 a 10000.
Como el valor almacenado en Direccin+1 es K*100 esto nos
da que K varia de -100.00 a 100.00, donde el signo negativo sirve
para indicar sistemas de accin inversa (un error negativo da una
salida positiva).
En Direccin+2, P
I
puede valer de 0 a 10000, donde el cero
indica que no hay accin integral.
En Direccin+3 se almacena P
D
*10 lo que nos da que P
D
varia
de 0 a 1000.0 (P
D
acostumbra a ser mucho ms pequeo que P
I
). Si
P
D
vale 0 no habr accin diferencial.
FUNC
FUNCION CONTROL PID FI-CP 5 99.01
P
I
= T
R
/T
o
T
R
- Tiempo de reajuste integral.
T
A
- Tiempo de avance derivativo.
P
D
= T
A
/T
o
T
o
- Tiempo de muestreo.
La direccin solo incluye registros de RAM voltiles e intentar usar
registros no voltiles de EEPROM nos producir un error.
# Ejemplo:
Ver final de este capitulo.
FUNC XXXX YYYY
NEMONICO: FUNC
OPERANDO XXXX: Constante 2
OPERANDO YYYY: Nmero de PID a inicializar.
CDIGO INSTRUCCIN: 90
DESCRIPCIN:
Inicializacin de las variables internas del control PID:
El operando XXXX es la constante 2, llamada a la funcin de
inicializacin del control PID.
El operando YYYY es el nmero de PID a inicializar.
No opera con las pilas (0).
# Ejemplo:
Ver final de este capitulo.
FUNC
FUNCION CONTROL PID FI-CP 6 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A. Control PID para un sistema trmico;
Por un lado tendremos una sonda con la cual medimos la
temperatura a travs de una entrada analgica (tendremos puntos de
conversor y no grados centgrados).
Y por el otro lado tendremos una resistencia con la cual
podemos calentar el sistema. Dicha resistencia solo podemos
encenderla o apagarla.
El control PID nos retorna un valor de control. La salida la
controlaremos por ancho de pulso. Es decir que de todo el tiempo To
que ha de transcurrir entre dos medidas tendremos un tiempo
encendida la resistencia y el resto apagada.
;Definicin de etiquetas
rele equ 500 ;Rel para temporizadores
salida equ 100 ;Salida digital que activa la resistencia
;cns,K,Pi,Pd han de ir consecutivos y en este orden.
cns equ 300 ;Reg. entero que contiene el valor de
;consigna
K equ 301 ;Reg. entero que contiene el valor de K
Pi equ 302 ;Reg. entero que contiene el valor de Pi
Pd equ 303 ;Reg. entero que contiene el valor de Pd
offs equ 19843 ;Offset restado a la medida
tmm equ 400 ;Direccin temporal para almacenar la
;medida
control equ 401 ;Direccin almacenar variable de control
tmp equ 402 ;Direccin temporal para clculos
timer equ 250 ;Temporizador
medida equ 60 ;Entrada analgica
;En este ejemplo, tras iniciar el control PID se queda encerrado en
;un bucle leyendo la entrada, ejecutando la funcin de control PID y
;en funcin de la respuesta activando la salida.
FUNCION CONTROL PID FI-CP 7 99.01
MOVCI cns ;Carga en la pila aritmtica la constante
;"cns" (direccin del reg. entero que
;contiene el valor de consigna.
FUNC 1 0 ;Descarga de la pila aritmtica el valor que
;indica la direccin inicial de los
;parmetros para el PID 0 (Importante no
;olvidrselo)
FUNC 2 0 ;Inicializa las variables internas del PID 0
bucle MOVRI medida ;Carga en pila aritmtica el registro entero,
;con el valor de la entrada analgica
SUBC offs ;Restar la constante indicada (equivalente
;al offset calculado en una rutina de
;calibracin).
STOI tmm ;Almacena el resultado en el reg. entero "tmm"
MOVRI tmm ;Carga en pila aritmtica el contenido del
;registro entero "tmm".
FUNC 0 0 ;Descarga el contenido de la pila aritmtica
;para efectuar el control del PID 0, y deja el
;resultado en la misma pila aritmtica.
STOI control ;Almacena el contenido de la pila
;aritmtica en el registro entero "control".
CALL displ ;Llama a la rutina "displ" (visualizacin)
CALL rut_ct ;Llama a la rutina rut_ct
JMP bucle ;Salto incondicional a "bucle".
;Muestra por el display la variable de entrada y la variable de control.
displ CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISRI tmm 4 ;Carga en el buffer intermedio el contenido
;del reg. entero "tmm" con el formato
;especificado por el segundo operando.
LOC 5 ;Posiciona el puntero de visualizacin
MOVRI control ;Carga en pila aritmtica el contenido del
;reg. entero "control".
DIVC 100 ;Divide por la constante indicada (pasa a
;tanto por ciento).
STOI tmp ;Almacena el contenido de la pila
;aritmtica en el reg. entero "tmp".
FUNCION CONTROL PID FI-CP 8 99.01
DISRI tmp 2 ;Carga en el buffer intermedio el contenido
;del reg. entero "tmp" con el formato
;especificado por el segundo operando.
COM 0 ;Visualiza el contenido del buffer
;intermedio en el display LCD.
RET ;Retorno de rutina
;Control de la salida por ancho de pulso
;Los temporizadores del MIDA utilizan una base de tiempos de
;100ms. Dividiendo la variable de control (0..10000) por 100
;obtendremos un control de tiempo de 0 a 10 segundos.
rut_ct MOVRI control ;Carga en pila aritmtica el contenido del
;reg. entero "control".
MOVCI 0 ;Carga en pila aritmtica la constante 0
CPLI c_neg ;Compara la constante 0 con el registro
;control y en caso de que control sea
;negativo salta a c-neg.
MOVRI control ;Carga en pila aritmtica el contenido del
;reg. entero "control" (obtencin de un
;tiempo de 0 a 10 segundos).
DIVC 100 ;Divide por la constante 100
STOI tmp ;Carga en pila aritmtica el contenido del
;reg. entero "tmp".
JMP ctr ;Salto incondicional a "ctr"
c_negMOVCI 0 ;Carga en pila aritmtica la constante 0.
STOI tmp ;Almacena el contenido de la pila
;aritmtica en el reg. entero "tmp".
ctr SET salida ;Activa el rel "salida" (activo la salida)
SET rele ;Activa el rel "rele"
tim1 LDNT rele ;Carga en pila lgica el estado negado
;del rel "rele".
TIMR timer tmp ;Temporiza tmp/10 segundos
OUT rele ;Descarga el resultado del temporizador
;sobre el rel "rele".
LD rele ;Carga en pila lgica el estado del rel
;"rele"
JZ tim1 ;Salta si el temporizador "timer" no ha
;finalizado
FUNCION CONTROL PID FI-CP 9 99.01
MOVCI 100 ;Carga en pila aritmtica la constante 100
MOVRI tmp ;Carga en pila aritmtica el contenido del
;reg. entero "tmp"
SUBI ;Resta los datos contenidos en la pila
;aritmtica
STOI tmp ;Almacena el resultado de la resta en el
;registro entero "tmp" (100 - tmp)
RESET salida ;Desactiva el rel "salida" (desactiva la
;salida.
SET rele ;Activa el rel "rele".
tim2 LDNT rele ;Carga en pila lgica el estado negado
;de rel "rele".
TIMR timer tmp ;Temporiza el resto hasta 10 segundos
OUT rele ;Descarga el resultado del temporizador
;sobre el rel "rele".
LD rele ;Carga en pila lgica el estado del rel
;"rele".
JZ tim2 ;Salta si el temporizador "timer" no ha
;finalizado
RET ;Retorno de rutina.
FUNCION CONTROL PID FI-CP 10 99.01
.
DF
.
DIRECCIONAMIENTO INDIRECTO DF-DI 1 99.01
! PUNTEROS Y TABLAS DE REGISTROS (ARRAYS).
Los equipos MIDA disponen de un juego de instrucciones
denominadas de direccionamiento indirecto.
Mediante este juego de instrucciones es posible realizar o utilizar
punteros para indexar tablas de registros (arrays) de mensajes.
! INSTRUCCIONES DE DIRECCIONAMIENTO INDIRECTO
El juego de instrucciones de direccionamiento indirecto es el
que adjuntamos en la tabla siguiente:
LDX MOVIX DISIX INPIX
OUTX STOIX DISFX INFPX
MOVFX DISLX INPCX
STOFX LOCX
La descripcin de cada una de estas instrucciones ya ha sido tratada
en el capitulo "IN" de este manual, no obstante, en este capitulo
ampliaremos algunas cuestiones sobre el uso de las instrucciones
indexadas.
! ACCIONES QUE SE PUEDEN REALIZAR POR PROGRAMA
Las acciones que pueden realizarse con las instrucciones
anteriormente descritas son las siguientes:
" Manipulacin de una tabla de rels (carga y descarga).
" Manipulacin de una tabla de registros enteros en coma
flotante (carga y descarga).
" Visualizacin de mensajes y registros enteros en coma
flotante mediante el direccionamiento indirecto.
" Posicionamiento del cursor de visualizacin mediante el
direccionamiento indirecto.
DIRECCIONAMIENTO INDIRECTO DF-DI 2 99.01
" Introduccin de datos numricos enteros en coma flotante
mediante el direccionamiento indirecto
! Modo de programacin
La forma de utilizar este grupo de instrucciones ya ha sido
descrito con anterioridad su apartado correspondiente de este Manual
Tcnico.
Los elementos software que se utilizan son punteros y tablas de
registros y de mensajes.
! Manipulacin de una tabla de rels (LDX, OUTX).
Las instrucciones LDX y OUTX cargan y descargan de la pila
lgica estados de rels.
La direccin del rel que cargan descargan es la contenida en
un registro de formato entero que hace las veces de puntero.
As para descargar el estado de la entrada 0 sobre la salida 101
puede realizarse del siguiente modo:
SETRI puntero1 0 ;Almacena el dato 0 en el registro
;entero "puntero1"
SETRI puntero2 101 ;Almacena el dato 101 en el registro
;entero "puntero2"
LDX puntero1 ;Carga en la pila lgica el estado
;del rel indicado en el registro
;entero "puntero1", en este caso la
;entrada digital 0.
OUTX puntero2 ;Descarga de la pila lgica el
;estado de la entrada 0 sobre el rel
;apuntado por el registro entero
;"puntero2", en este caso la salida
;digital 101.
Las dos primeras lneas de este programa sirven para que los
registros enteros tomen el valor de las direcciones de los rels a los
que apuntan.
DIRECCIONAMIENTO INDIRECTO DF-DI 3 99.01
! Manipulacin de tablas de registros (MOVIX, STOIX, MOVFX,
STOFX).
Las instrucciones que se citan cargan y descargan datos
enteros en coma flotante de la pila aritmtica.
La direccin del registro que cargan descargan es la
contenida en un registro de formato entero que hace las veces de
puntero.
As para transferir datos de un registro a otro puede realizarse:
SETRI puntero1 500 ;Almacena el dato 500 en el registro
;entero "puntero1"
SETRI puntero2 600 ;Almacena el dato 600 en el registro
;entero "puntero2"
SETRI puntero3 0 ;Almacena el dato 0 en el registro
;entero "puntero3"
SETRI puntero4 100 ;Almacena el dato 100 en el registro
;entero "puntero4"
;Trasvase entre registros enteros
MOVIX puntero1 ;Carga en pila aritmtica el contenido del
;registro entero apuntado por el registro
;"puntero1", es decir el contenido del
;registro entero 500
STOIX puntero2 ;Almacena el contenido de la pila
;aritmtica en el registro entero apuntado
;por el registro "puntero2", es decir en el
;registro entero 600
;Trasvase entre registros en coma flotante
MOVFX puntero3 ;Carga en pila aritmtica el contenido del
;registro en coma flotante apuntado por el
;registro entero "puntero3", es decir el
;contenido del registro en coma flotante 0
STOFX puntero4 ;Almacena el contenido de la pila
;aritmtica en el registro en coma flotante
;apuntado por el registro entero "puntero4",
;es decir en el reg. en coma flotante 100
DIRECCIONAMIENTO INDIRECTO DF-DI 4 99.01
Las cuatro primeras lneas de este programa sirven para que los
registros enteros tomen el valor de las direcciones de los registros a
los que apuntan.
! Posicionamiento del cursor y visualizacin de registros y
mensajes (LOCX, DISLX, DISIX, DISFX).
Todas las visualizaciones (y transmisiones) se pueden realizar
utilizando el direccionamiento indirecto:
" El cursor de visualizacin puede situarse sobre una posicin del
buffer intermedio indicada por el contenido de un registro.
" Pueden visualizarse contenidos de registros cuya direccin est
contenida en otro registro puntero.
" Pueden, tambin, visualizarse textos cuya direccin est
contenida en un registro.
A continuacin describimos un cdigo de programa con estas tres
operaciones:
;Inicializacin de punteros
SETRI puntero1 10 ;Almacena el dato 10 en el registro
;entero "puntero1"
SETRI puntero2 400 ;Almacena el dato 400 en el registro
;entero "puntero2"
SETRI puntero3 20 ;Almacena el dato 20 en el registro
;entero "puntero3"
;Visualizacin y transmisin por un puerto de comunicaciones.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin
LOCX puntero1 ;Posiciona el puntero de
;visualizacin en la posicin 10,
;puesto que es el contenido del
;registro entero "puntero1".
DIRECCIONAMIENTO INDIRECTO DF-DI 5 99.01
DISIX puntero2 form ;Copia en el buffer intermedio el
;contenido del reg. entero apuntado
;por el reg. entero "puntero2", con
;un formato indicado por el
;contenido del reg. entero "form".
DISLX puntero3 ;Copia en el buffer intermedio el
;texto indicado por el contenido del
;reg. entero "puntero3".
DISFX puntero2 form ;Copia en el buffer intermedio el
;contenido del reg. en coma flotante
;apuntado por el reg. entero
;"puntero2", con un formato
;indicado por el contenido del reg.
;entero "form".
COM 0 ;Copia el contenido del buffer
;intermedio al el display LCD
COM 1 ;Transmite el contenido del buffer
;intermedio por el puerto COM1.
! Introduccin de datos numricos enteros en coma flotante
(INPX, INPFX, INPCX).
La direccin del registro que se introduce el dato es la contenida
en un registro de formato entero que hace las veces de puntero.
Se puede utilizar el mismo registro puntero para las
instrucciones descritas anteriormente.
El formato de introduccin de datos contenido en un registro
entero guarda la compatibilidad con el formato de las instrucciones
DISIX y DISFX.
DIRECCIONAMIENTO INDIRECTO DF-DI 6 99.01
EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Cargar una tabla de registros en formato entero (desde el 400 al
490) con el dato 3.
;Definicin de textos
text0 lite EJEMPLO-A DF-DI
text1 lite EJEMPLO RUN
LD 340 ;Detecta si la tecla correspondiente esta
;pulsada.
JZ fin ;De lo contrario salta a "fin"
SETRI 300 490 ;Almacena el dato 490 en el reg.entero 300
SETRI 301 400 ;Almacena el dato 400 en el reg.entero 301
SETRI 302 3 ;Almacena el dato 3 en el registro entero 3
eti1 MOVRI 302 ;Carga en pila aritmtica contenido del
;registro entero 302
STOIX 301 ;Almacena el contenido de la pila
;aritmtica en el registro entero apuntado
;por el registro entero 301, es decir en el
;registro entero 400
INC 301 1 ;Incrementa contenido del reg. entero 301
;en una unidad (incrementa el puntero en
;la tabla de registros)
MOVRI 301 ;Carga en pila aritmtica el contenido del
;registro entero 301.
MOVRI 300 ;Carga en pila aritmtica el contenido del
;registro entero 300.
CPLEI eti1 ;Si el contenido del reg. entero 301 es
;menor o igual al contenido del reg. entero
;300, la ejecucin del programa salta a
;"eti1", de lo contrario continua (detecta el
;fin de carga de la tabla)
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text1 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "text1".
DIRECCIONAMIENTO INDIRECTO DF-DI 7 99.01
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
JMP fin1 ;Salto incondicional a "fin1"
fin CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text0 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "text0".
COM 0 ;Copia el contenido del buffer intermedio
;el display LCD.
fin1 END ;Fin de programa
B.- Visualizar en el display LCD del equipo el mes en curso.
;Definicin de textos
text0 lite
text1 lite ENERO
text2 lite FEBRERO
text3 lite MARZO
text4 lite ABRIL
text5 lite MAYO
text6 lite JUNIO
text7 lite JULIO
text8 lite AGOSTO
text9 lite SETIEMBRE
text10 lite OCTUBRE
text11 lite NOVIEMBRE
text12 lite DICIEMBRE
;
CLEAR ;Borra el buffer intermedio y sita el puntero en la
;primera posicin.
DISLX 46 ;Copia en el buffer intermedio el texto cuyo
;nmero de orden est contenido en el registro
;entero 46 (direccin del registro. entero
;correspondiente al "Mes del Ao").
COM 0 ;Copia el contenido del buffer intermedio en
;el display LCD.
END ;Fin de programa
DIRECCIONAMIENTO INDIRECTO DF-DI 8 99.01
Los mensajes tienen asociada una direccin que coincide con el orden
en que se han declarado. En el ejemplo se ha nombrado a cada texto
con una etiqueta que indica el nmero de orden de cada texto. Sin
embargo un texto puede ser nombrado con cualquier etiqueta vlida.
C.- Detectar cul de entre los rels del 400 al 500 est activado (se
supone que hay uno slo). Visualizar la direccin del rel detectado. Si
no se detecta ninguno, indicarlo por el display
;Declaracin de etiquetas
punt1 equ 600 ;Registro entero para el puntero 1
;Declaracin de textos
detect lite RELE ACTIVADO
nodet1 lite RELE
nodet2 lite NO ENCONTRADO
MOVCI 400 ;Carga en pila aritmtica la constante 400.
STOI punt1 ;Almacena el contenido de la pila
;aritmtica en el registro entero "punt1"
;(con la direccin del primer rel interno de
;la tabla de rels).
SET 600 ;Activa el rel interno 600 (indica que se ha
;encontrado un rel activado).
eti1 LDX punt1 ;Carga el estado del rel indicado en el
;reg. entero "punt1" en la pila lgica
JNZ eti2 ;Detecta si el rel apuntado por "punt1"
;esta activado.
INC punt1 1 ;Incrementa el contenido del reg. entero
;"punt1" en una unidad (incrementa el
;puntero de la tabla de rels)
MOVRI punt1 ;Carga en pila aritmtica el contenido del
;registro entero "punt1".
MOVCI 500 ;Carga en pila aritmtica la constante 500.
CPLEI eti1 ;Detecta si ya ha terminado la transferencia
;de datos, compara si la constante 500 es
;menor o igual que el registro entero "punt1"
;si es as salta a "eti1".
DIRECCIONAMIENTO INDIRECTO DF-DI 9 99.01
RESET 600 ;Desactiva el rel 600 si no se ha detectado
;ningn rel activado en la tabla.
;Visualizacin del resultado de la exploracin de la tabla de rels.
eti2 CLEAR ;Borra buffer intermedio y sita el
;puntero en la primera posicin.
LD 600 ;Carga el estado del rel 600 en pila lgica
JZ eti3 ;Detecta si se ha encontrado algn rel
;activado. De lo contrario salta a "eti3"
;Visualizacin de rel encontrado con su direccin.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL detect ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "detect".
LOC 21 ;Sita el puntero en la posicin indicada
DISRI punt1 3 ;Copia en el buffer intermedio el contenido
;del registro entero "punt1" con el formato
;indicado por el segundo operando
JMP eti4 ;Salto incondicional a "et4"
;Visualizacin del rel no encontrado
eti3 LOC 5 ;Sita el puntero en la posicin indicada
DISL nodet1 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "nodet1".
LOC 17 ;Sita el puntero en la posicin indicada
DISL nodet2 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "nodet2".
eti4 COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
END ;Fin de programa
DIRECCIONAMIENTO INDIRECTO DF-DI 10 99.01
D.- Realizar una transferencia de datos entre dos tablas de registros
en formato entero.
La tabla A es del registro 400 al 450 y la tabla B del registro 500 al
550.
;Definicin de etiquetas
punt1 equ 600 ;Registro entero para el puntero 1
punt2 equ 602 ;Registro entero para el puntero 2
;Definicin de textos
text0 lite EJEMPLO-D DF-DI
text1 lite EJEMPLO RUN
LD 340 ;Detecta si la tecla correspondiente esta
;pulsada.
JZ fin ;De lo contrario salta a "fin"
MOVCI 400 ;Carga en pila aritmtica la constante 400.
STOI punt1 ;Almacena el contenido de la pila
;aritmtica en el registro entero "punt1"
;(direccin del primer registro de la tabla A)
MOVCI 500 ;Carga en pila aritmtica la constante 500.
STOI punt2 ;Almacena el contenido de la pila
;aritmtica en el registro entero "punt2"
;(direccin del primer registro de la tabla B)
eti1 MOVIX punt1 ;Carga en la pila aritmtica el contenido del
;registro entero apuntado por el reg. entero
;"punt1".
STOIX punt2 ; ;Almacena el contenido de la pila
;aritmtica en el registro entero apuntado
;por el registro "punt2".
INC punt1 1 ;Incrementa el contenido del reg. entero
;"punt1" en una unidad (incrementa el
;puntero de la tabla A).
INC punt2 1 ;Incrementa el contenido del reg. entero
;"punt2" en una unidad (incrementa el
;puntero de la tabla B).
MOVRI punt1 ;Carga en pila aritmtica el contenido del
;registro entero "punt1".
MOVCI 450 ;Carga en pila aritmtica la constante 450.
DIRECCIONAMIENTO INDIRECTO DF-DI 11 99.01
CPLEI eti1 ;Detecta si ya ha terminado la transferencia
;de datos, compara si la constante 450 es
;menor o igual que el registro entero "punt1"
;si es as salta a "eti1".
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text1 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "text1".
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
JMP fin1 ;Salto incondicional a "fin1"
fin CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text0 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "text0".
COM 0 ;Copia el contenido del buffer intermedio
;el display LCD.
fin1 END ;Fin de programa
DIRECCIONAMIENTO INDIRECTO DF-DI 12 99.01
E.- Realizar una transferencia de datos desde una tabla de registros
en formato en coma flotante hasta otra de formato entero.
La tabla A (en coma flotante) es del registro 100 al 110 y la tabla B (en
formato entero) de los registros 400 al 410.
La transferencia se debe realizar registro a registro mediante
pulsacin de una tecla visualizando los contenidos de registros origen
y final.
;Definicin de etiquetas
punt1 equ 600 ;Registro entero para puntero 1
punt2 equ 602 ;Registro entero para puntero 2
inter equ 603 ;Registro entero para datos intermedios
form equ 605 ;Registro entero para el formato
;Inicializacin de los registros puntero
SETRI form 51 ;Almacena el dato 51 en el reg. entero "form"
MOVCI 100 ;Carga en pila aritmtica la constante 100.
STOI punt1 ;Almacena el contenido de la pila
;aritmtica en el registro entero "punt1"
;(direccin del primer registro de la tabla A)
MOVCI 400 ;Carga en pila aritmtica la constante 400.
STOI punt2 ;Almacena el contenido de la pila
;aritmtica en el registro entero "punt2"
;(direccin del primer registro de la tabla B)
;Bucle de transferencia de datos
eti1 INK 340 ;Deteccin de una tecla
JZ eti1 ;Espera la pulsacin de la tecla para
;realizar la transferencia de cada dato. De
;lo contrario salta a "eti1"
MOVFX punt1 ;Carga en la pila aritmtica el contenido del
;reg. en coma flotante apuntado por el reg.
;entero "punt1".
STOFI inter ;Almacena el contenido de la pila
;aritmtica en el registro entero "inter",
;redondendolo en formato entero.
;convertido en entero.
DIRECCIONAMIENTO INDIRECTO DF-DI 13 99.01
MOVRI inter ;Carga en pila aritmtica el contenido
;del registro entero "inter".
STOIX punt2 ;Almacena el contenido de la pila
;aritmtica en el registro entero apuntado
;por el registro "punt2".
;Visualizacin del programa
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISFX punt1 form ;Copia en el buffer intermedio el contenido
;del reg. en coma flotante apuntado por el
;registro entero "punt1", con un formato
;indicado por el contenido del reg. entero
;"form".
LOC 16 ;Sita el puntero en la posicin indicada
DISIX punt2 form ;Copia en el buffer intermedio el contenido
;del reg. entero apuntado por el reg. entero
;"punt2", con un formato indicado por el
;contenido del reg. entero "form".
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
;Control de los punteros a las dos tablas
INC punt1 1 ;Incrementa el contenido del reg. entero
;"punt1" en una unidad (incrementa el
;puntero de la tabla A).
INC punt2 1 ;Incrementa el contenido del reg. entero
;"punt2" en una unidad (incrementa el
;puntero de la tabla B).
MOVRI punt1 ;Carga en pila aritmtica el contenido del
;registro entero "punt1".
MOVCI 110 ;Carga en pila aritmtica la constante 110.
CPLEI eti1 ;Detecta si ya ha terminado la transferencia
;de datos, compara si la constante 110 es
;menor o igual que el registro entero "punt1"
;si es as salta a "eti1".
DIRECCIONAMIENTO INDIRECTO DF-DI 14 99.01
F.- Introduccin de cinco datos enteros, en los registros enteros 400 al
404 diferentes, sin para la ejecucin del programa con su texto para
cada uno.
;Definicin de etiquetas
scan equ 399 ;Rel interno "Rel de 1 scan"
r_in equ 391 ;Rel interno "Rel Input"
punt1 equ 600 ;Registro entero para puntero 1
punt2 equ 602 ;Registro entero para puntero 2
form equ 605 ;Registro entero para el formato
;Definicin de textos
text0 lite "Consigna 1"
text1 lite "Consigna 2"
text2 lite "Consigna 3"
text3 lite "Consigna 4"
text4 lite "Consigna 5"
text5 lite "Trabajando"
LD scan ;Carga el estado del rel "scan " en la pila
;lgica
JNZ ini ;En el primer scan de programa inicializa
;los punteros. Al siguiente scan salta a"ini"
SETRI punt1 400 ;Almacena el dato 400 en el reg entero
;"punt1"
SETRI punt2 0 ;Almacena el dato 0 en el reg. entero
;"punt2"
SETRI form 4 ;Almacena el dato 4 en el reg. entero
;"form"
ini INK 356 ;Deteccin de una tecla
JZ fin ;Espera la pulsacin de la tecla para
;realizar la introduccin de cada dato. De
;lo contrario salta a "fin"
LD r_in ;Carga el estado del rel "r_in" en la pila
;lgica.
JNZ fin ;Si el rel "r_in" esta activado (rel input)
;salta a "fin". De lo contrario continua con
;la siguiente introduccin de datos.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DIRECCIONAMIENTO INDIRECTO DF-DI 15 99.01
DISLX punt2 ;Copia en el buffer intermedio el texto cuyo
;nmero de orden est contenido en el
;registro entero "punt2" entero 46 (puntero
;(tabla de textos).
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
INPIX punt1 form ;Introduccin de un dato en el reg. entero
;apuntado por el reg "punt1" (puntero de
;registros), con un formato indicado en el
;registro entero "form"
INC punt1 1 ;Incrementa el contenido del reg. entero
;"punt1" en una unidad (incrementa el
;puntero de la tabla de registros).
INC punt2 1 ;Incrementa el contenido del reg. entero
;"punt2" en una unidad (incrementa el
;puntero de la tabla de textos).
MOVRI punt2 ;Carga en pila aritmtica el contenido del
;registro entero "punt2".
MOVCI 4 ;Carga en pila aritmtica la constante 4.
CPLEI fin ;Detecta si ya ha terminado la introduccin
;de datos, compara si la constante 4 es
;menor o igual que el registro entero "punt2"
;si es as salta a "fin".
SETRI punt1 400 ;Almacena el dato 400 en el reg entero
;"punt1"
SETRI punt2 0 ;Almacena el dato 0 en el reg entero
;"punt2"
JMP fin ;Salto incondicional a "fin"
fin LD r_in ;Carga el estado del rel "r_in" en la pila
;lgica.
JNZ fin1 ;Si el rel "r_in" esta activado (rel input)
;salta a "fin1". De lo contrario nos continua
;el programa.
CLEAR ;Borra el buffer intermedio y sita el
;puntero en la primera posicin.
DISL text5 ;Copia en el buffer intermedio el mensaje
;de la tabla de textos "text5".
COM 0 ;Copia el contenido del buffer intermedio
;en el display LCD.
fin1 END ;Fin de programa
DIRECCIONAMIENTO INDIRECTO DF-DI 16 99.01
.
BASE DE DATOS DF-BD 1 99.01
Dentro de la familia MIDA, existe equipos que disponen de una
memoria para base de datos de 64K, en la cual se puede almacenar
hasta 10 bases de datos diferentes.
Cada una de ellas (que llamaremos fichero) est numerado del
0 al 9 y cualquier accin referida a un fichero llevara el nmero del
mismo.
Los ficheros disponen de registros (fichas) en nmero limitado
nicamente por la memoria disponible. Cada registro (ficha) se
compone de campos con un nmero mximo total de 200, de esta
forma si utilizamos los 10 ficheros podremos tener 20 campos por
fichero o si utilizamos solo 1 fichero podr llegar a tener 200 campos.
Se describe a continuacin una posible organizacin de la base
de datos del equipo.
En ella se puede ver dos ficheros (1 y 2) con 10 y 6 campos
respectivamente y n registros:
BASE DE DATOS
(mximo 10 ficheros, 200 campos en total entre todos los ficheros y
64K de memoria total utilizable)
Registro
(ficha)
Fichero 1
(10 campos)
Fichero 2
(6 campos)
(10 ficheros mximo)
1
(200 campos mximo
en total)
2
3
N
64Kb mximo
BASE DE DATOS DF-BD 2 99.01
Cada campo puede ser de uno de los siguientes tipos:
TIPOS DE CAMPOS
LETRA NOMBRE TIPO TAMAO
R REL Rel 1 byte
I INT Entero 2 bytes
F FLOAT Coma flotante 4 bytes
S STRING Cadena de caracteres Variable
D DATE Fecha 3 bytes
T TIME Hora 3 bytes
Para un campo tipo STRING el tamao es el nmero de
caracteres que se indican en la definicin del fichero.
El tamao de un registro (ficha) se calcula sumando los
tamaos de cada uno de sus campos el cual est indicado en la tabla
anterior.
El tamao que ocupa un fichero es el tamao de un registro
multiplicado por el nmero de registros (fichas) que se han definido
mediante la Directiva de Compilacin FILE.
La lectura y escritura de los ficheros se hace por registros
completos mediante las instrucciones READ y WRITE.
El nmero de registro (ficha) sobre el que se va a leer escribir
en cada momento (puntero) est almacenado en registros enteros (ver
Direccionamiento de la Memoria del Manual de Usuario del equipo
correspondiente). El valor del puntero se puede modificar a voluntad
permitiendo la lectura y escritura de cualquier registro del fichero de la
base de datos.
En caso de se pida una operacin con un fichero no definido o a
un nmero de registro inexistente, estos comandos no harn nada e
indicaran error.
BASE DE DATOS DF-BD 3 99.01
! DEFINICION DE LA ESTRUCTURA DE LOS FICHEROS.
DIRECTIVA FILE
Con la Directiva de Compilacin FILE, se define la estructura de
un fichero determinado. Para utilizar esta Directiva se debe tener
presente de dejar un espacio entre el margen izquierdo y el primer
carcter de la directiva en la edicin del programa:
FILE N,C1,..,Cn,len=XXX,type=?
donde:
N Nmero del fichero (0 - 9)
C1,...Cn Definicin de los campos
Len = XXX Longitud (XXX = nmero de registros)
Type Tipo de fichero C/L (C = cclico, L = lineal).
N es el nmero de fichero que va del 0 al 9 e indica el fichero de
los diez disponibles que queremos utilizar. Cualquier operacin con
este fichero llevara dicho nmero para referenciarlo.
Cn es la definicin de los campos del fichero. Se compone de
un nmero y una letra, y en un mismo fichero se pueden definir tantos
campos como se deseen (mx 200). La letra define el tipo de campo
(ver tabla anterior) y el nmero el lugar de destino (numero de rel o
registro). Los tipos de campos se describen en la siguiente pagina.
Len = XXX es la longitud del fichero. Indica el nmero de
registros de que se compone el fichero. El nmero puede ir de 1 hasta
65535, aunque este ltimo depende de la memoria libre dejada por
otros ficheros y del tamao de un registro. Por ejemplo len=1000'
definir un fichero con 1000 registros (fichas).
Type es el tipo de fichero determinado como lineal o cclico. Si
se indica cclico type=c, el fichero tras llenar el ultimo registro (ficha)
retornara directamente al primero. Si se indica lineal type=l, el fichero
tras llenar el ultimo registro (ficha) no permite llenar mas registros
(fichas) indicando error, evitando as una posible sobre escritura. Si se
omite este termino se tomara por defecto un fichero de tipo lineal
(type=l).
BASE DE DATOS DF-BD 4 99.01
! TIPOS DE CAMPOS DE LOS REGISTROS
! RELS (1 bit)
Se definen con xxxR donde xxx es el nmero del rel sobre el
cual se escribir leer el valor del campo RELE almacenado. El
nmero de rel es la direccin de cualquier rel que se encuentre en
RAM y RAM batera.
! INT (16 bits)
Se definen con xxxI donde xxx es la direccin del registro entero
sobre el cual se escribir leer el valor del campo INT almacenado.
El nmero del entero es la direccin de cualquier registro entero que
se encuentre en RAM batera.
! FLOAT (32 bits)
Se definen con xxxF donde xxx es el nmero del nmero en
coma flotante sobre el cual se escribir leer el valor del campo
FLOAT almacenado. El nmero del float es la direccin de cualquier
registro en coma flotante que se encuentre en RAM batera.
! STRING (variable)
Se define con xxxS donde xxx es el nmero de caracteres que
componen el texto.
Dicho texto se escribir leer sobre el buffer intermedio del
equipo MIDA.
! DATE (3 bytes)
Se define con xxxD donde xxx es la direccin de cualquier
registro entero que se encuentre en RAM batera.
Para leer la fecha del reloj interno se utilizan los registros
enteros correspondientes, indicados en el Direccionamiento de la
Memoria (ver Manual Usuario del equipo).
Para escribir la fecha del reloj interno sobre el fichero pertinente
se considera los datos almacenados en el orden que se indica a
continuacin:
XXX (da), XXX+1 (da de la semana), XXX+2 (mes), XXX+3 (ao).
BASE DE DATOS DF-BD 5 99.01
As, por ejemplo, si en la definicin del fichero se elige como
XXXD la direccin del registro entero 500, se tendrn los datos
organizados de la siguiente manera:
REGISTRO RAM DATO
500 Da
501 Da de la semana
502 Mes
503 Ao
! TIME (3 bytes)
Se define con xxxT donde xxx es la direccin de cualquier
registro entero que se encuentre en RAM batera.
Para leer la hora del reloj interno se utilizan los registros enteros
correspondientes, indicados en el Direccionamiento de la Memoria
(ver Manual Usuario del equipo).
Para escribir la hora del reloj interno sobre el fichero pertinente
se considera los datos almacenados en el orden que se indica a
continuacin:
XXX (segundos), XXX+1 (minutos) y XXX+2 (horas).
As, por ejemplo, si en la definicin del fichero se elige como
XXXT la direccin del registro entero 600, se tendrn los datos
organizados de la siguiente manera:
REGISTRO RAM DATO
600 Segundos
601 Minutos
602 Horas
BASE DE DATOS DF-BD 6 99.01
! TAMAO DE LOS FICHEROS
La capacidad mxima total que se puede almacenar en el/los
ficheros es de 64Kb, es decir, 65536 bytes. El tamao de un fichero es
el producto del tamao de un registro por el nmero de registros
(fichas).
El tamao de un registro (ficha) se calcula sumando los
tamaos de cada uno de sus campos (dicho tamao esta indicado en
la tabla Tipos de Campos, vista anteriormente). Para un registro tipo
STRING el tamao es el nmero de caracteres que se indican en la
definicin del fichero. Ejemplo, supongamos un fichero con cuatro
campos, un rel, un entero, un string de 10 caracteres y un time, con
la siguiente definicin:
FILE 1,400R,300I,10S,310T,len=1000,type=C
Tipo de Campo Tamao
REL 1
INT 2
STRING de 10 10
TIME 3
Total 16
Por lo tanto como el fichero tiene 1000 registros (fichas).
Tendremos un tamao total para el fichero de 16000 bytes,
quedndonos hasta 65536 (64Kb) un total de 49536 bytes libres para
otros ficheros.
BASE DE DATOS DF-BD 7 99.01
# Ejemplos de definicin de ficheros:
A.- Para definir el fichero 7 con los 4 campos siguientes:
- 2 Rels (rels 600 y 601)
- 1 Registro Entero (registro entero 400)
- 1 String (texto de 9 caracteres)
- La hora (en el registro entero 700)
y con un total de 500 registros y de tipo cclico, la definicin ser:
FILE 7,600R,601R,400I,9S,700T,len=500,type=C
B.- Para definir el fichero 3 con los 4 campos siguientes:
- 2 Registros en coma flotante (registros en coma flotante 20 y 55)
- La fecha (en el registro entero 400)
- La hora (en el registro entero 410)
y con un total de 1000 registros y de tipo lineal, la definicin ser:
FILE 3,20F,55F,400D,410T,len=1000,type=L
BASE DE DATOS DF-BD 8 99.01
READ XXXX YYYY
NEMNICO: READ
OPERANDO XXXX: Nmero del fichero de la base de datos.
OPERANDO YYYY: Constante para el puntero.
CDIGO INSTRUCCIN: 38
DESCRIPCIN:
LEE los datos de un fichero de la base de datos y los graba en los
registros (rels, registros enteros, registros en coma flotante)
especificados en la definicin (FILE) del fichero del indicado en el
operando XXXX.
El operando XXXX es el nmero del fichero de la base de datos a
leer. El valor permitido es de 0 a 9.
El operando YYYY es la constante que indica donde colocar el
puntero de lectura. El valor de la constante debe ser +1, 0 o -1:
+1 El puntero al registro (ficha) debe incrementarse tras el
acceso para pasar a la ficha siguiente.
0 El puntero al registro (ficha) debe dejarse inalterado
tras el acceso.
-1 El puntero al registro (ficha) debe decrementarse tras el
acceso, para pasar a la ficha anterior.
No opera con las pilas (0).
# Ejemplo:
ETI1 INK 340 ;Detecta la tecla.
JZ ETI1 ;Espera se pulse la tecla. Si no se ha
;pulsado, el programa regresa a ETI1.
READ 0 1 ;Cada vez que se pulsa la tecla lee del
;fichero 0 de la base de datos la ficha
;en donde esta sealando el puntero del
;fichero y se incrementa una unidad
;para la prxima lectura.
END
READ
BASE DE DATOS DF-BD 9 99.01
WRITE XXXX YYYY
NEMNICO: WRITE
OPERANDO XXXX: Nmero del fichero de la base de datos.
OPERANDO YYYY: Constante para el puntero.
CDIGO INSTRUCCIN: 37
DESCRIPCIN:
ESCRIBE sobre el fichero de la base de datos el contenido de los
registros (rels, registros enteros, registros en coma flotante)
especificados en la definicin (FILE) del fichero del indicado en el
operando XXXX.
El operando XXXX es el nmero del fichero de la base de datos a
escribir. El valor permitido es de 0 a 9.
El operando YYYY es la constante que indica donde colocar el
puntero de escritura. El valor de la constante debe ser +1, 0 o -1:
+1 El puntero al registro (ficha) debe incrementarse
tras el acceso para pasar a la ficha siguiente.
0 El puntero al registro (ficha) debe dejarse inalterado
tras el acceso.
-1 El puntero al registro (ficha) debe decrementarse tras el
acceso, para pasar a la ficha anterior.
No opera con las pilas (0).
# Ejemplo:
ETI1 INK 60 ;Detecta la tecla.
JZ ETI1 ;Espera se pulse la tecla. Si no se ha
;pulsado, el programa regresa a ETI1.
WRITE 2 0 ;Cada vez que se pulsa la tecla, escribe
;en el fichero 2 de la base de datos la ficha
;en donde esta sealando el puntero del
;fichero y no se altera el puntero, para la
;prxima escritura.
END
WRITE
BASE DE DATOS DF-BD 10 99.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
A.- Se trata de imprimir los datos de un fichero en un MIDA64:
" Fichero n0 de Tipo lineal.
" 1000 registros (fichas) de capacidad.
" Cinco campos: Fecha, hora, Cdigo de alarma (entero),
Temperatura (coma flotante) y Presin (coma flotante).
" Los datos deben estar impresos de ms a menos reciente.
" Los datos deben estar identificados mediante textos al respecto
Definicin del fichero:
File 0, 400D, 450T, 500I, 600F, 601F, Len=1000, Type=L
El tamao del fichero as definido resulta ser de:
(3 + 3 + 2 + 4 + 4)bytes * 1000 registros = 16000bytes
El cdigo de programa es el que sigue:
;
File 0,400D,450T,500I,600F,601F,Len=1000,Type=L
;
;Definicin de etiquetas
scan equ 399 ;rel de 1 scan
relcon equ 500 ;rel de control de escritura
t_f1 equ 356 ;tecla <F1>
t_f4 equ 359 ;tecla <F4>
ancho equ 20 ;registro entero de ancho de pagina
punt_0 equ 50 ;puntero entero del fichero 0
;Definicin de literales
codal lite "CODIGO DE ALARMA"
tempe lite "TEMPERATURA = "
pres lite "PRESION ="
si lite "Hay avisos"
no lite "No hay avisos"
BASE DE DATOS DF-BD 11 99.01
LD scan ;Carga en pila lgica el estado del rel de
;"scan" (solo estar a 0 en el primer scan
;de programa).
JNZ inic ;Si el estado de la rel "scan" es 1', la
;ejecucin del programa salta a la lnea
;"inic", si es 0 pasa a la siguiente lnea.
MOVCI 80 ;Carga en pila aritmtica la constante 80
STOI ancho ;Almacena el contenido de la pila
;aritmtica en el registro "ancho." Para
;asignar un ancho de lnea de 80
;caracteres en el COM1.
inic MOVRI punt_0 ;Carga en pila aritmtica el contenido del
;registro "punt_0".
MOVCI -1 ;Carga en pila aritmtica la constante -1
CPEI no_dt ;Si el contenido del registro "punt_0" es
;igual a -1 (indica que no existe ningn
;registro en la base de datos), el programa
;salta a la lnea "no_dt", de lo contrario
;continua en la siguiente lnea
CLEAR ;Borra el buffer intermedio.
DISL si ;Copia en el buffer intermedio el texto
;"si" de la tabla de literales.
COM 0 ;Copia el contenido del buffer intermedio
;al display LCD.
JMP writs ;Salta a la lnea "writs"
no_dt CLEAR ;Borra el buffer intermedio.
DISL no ;Copia en el buffer intermedio el texto
;"no" de la tabla de literales,
COM 0 ;Copia el contenido del buffer intermedio
;al display LCD.
writs INK t_f4 ;Deteccin de la tecla <F4>.
JZ reads ;Si la tecla <F4> no es pulsada salta a la
;lnea "reads", de lo contrario continua en
;la siguiente linea.
MOVRI punt_0 ;Carga en pila aritmtica el contenido del
;registro "punt_0".
MOVCI -1 ;Carga en pila aritmtica la constante -1
CPGI writ1 ;Si el contenido del registro "punt_0" es
;mayor que -1, la ejecucin del programa
;salta a la lnea "writ1", de lo contrario
BASE DE DATOS DF-BD 12 99.01
;continua en la siguiente lnea.
INC punt_0 1 ;Incrementa el contenido del registro
;"punt_0" en uno (coloca en el puntero en
;el primer registro).
writ1 WRITE 0 1 ;Cada vez que se pulsa la tecla <F4>,
;escribe en el fichero 0 de la base de datos
;e incrementa en uno el puntero (registro
;"punt_0")
SET relcon ;Activa el rel "relcon" (indicando que ha
;habido escritura).
reads INK t_f1 ;Deteccin de la tecla <F1>.
JZ fin ;Si la tecla <F1> no es pulsada salta a la
;lnea "fin", de lo contrario continua en
;la siguiente linea.
MOVRI punt_0 ;Carga en pila aritmtica el contenido del
;registro "punt_0".
MOVCI -1 ;Carga en pila aritmtica la constante -1
CPLEI fin ;Si el contenido del registro "punt_0" es
;menor igual que -1, la ejecucin del
;programa salta a la lnea "fin" (no hay
;registros en la base de datos), de lo
;contrario continua en la siguiente.
LD relcon ;Carga el estado del rel "relcon".
JZ read1 ;Si el rel "relcon" es 0 la ejecucin pasa a
;la lnea "read1".
INC punt_0 -1 ;Decrementa el contenido del registro
;"punt_0" en uno (coloca el puntero en el
;ltimo registro escrito en la base de datos)
read1 MOVRI punt_0 ;Carga en pila aritmtica el contenido del
;registro "punt_0".
MOVCI -1 ;Carga en pila aritmtica la constante -1
CPGI read2 ;Si el contenido del registro "punt_0" es
;mayor que -1, la ejecucin del programa
;salta a la lnea "read2" (hay registros en
;la base de datos), de lo contrario continua
;en la siguiente lnea.
JMP fin ;Salta a la lnea "fin".
read2 READ 0 -1 ;Escribe en el fichero 0 de la base de datos
;y decrementa en uno el puntero (registro
;"punt_0").
BASE DE DATOS DF-BD 13 99.01
CLEAR ;Borra el buffer intermedio.
DISRI 400 2 ;Copia al buffer el contenido del reg. 400
;(da)
DISCH 47 ;Copia al buffer el carcter ASCII 47 (/).
DISRI 402 2 ;Copia al buffer el contenido del reg. 402
;(mes)
DISCH 47 ;Copia al buffer el carcter ASCII 47 (/).
DISRI 403 2 ;Copia al buffer el contenido del reg. 403
;(ao).
DISCH 32 ;Copia al buffer el carcter ASCII 32
;(espacio en blanco).
DISRI 452 2 ;Copia al buffer el contenido del reg. 452
;(hora).
DISCH 58 ;Copia al buffer el carcter ASCII 58 (:)
DISRI 451 2 ;Copia al buffer el contenido del reg. 451
;(minutos)
DISCH 32 ;Copia al buffer el carcter ASCII 32
;(espacio en blanco).
DISL codal ;Copia en el buffer intermedio el texto
;"codal" de la tabla de literales.
DISRI 500 3 ;Copia al buffer el contenido del reg. entero
;500
DISCH 13 ;Copia al buffer el carcter ASCII 13
;(salto de lnea).
DISL tempe ;Copia en el buffer intermedio el texto
;"tempe" de la tabla de literales.
DISRF 600 51 ;Copia al buffer el contenido del reg. en
;coma flotante 600
DISCH 32 ;Copia al buffer el carcter ASCII 32
;(espacio en blanco).
DISL pres ;Copia en el buffer intermedio el texto
;"pres" de la tabla de literales.
DISRF 601 40 ;Copia al buffer el contenido del reg. en
;coma flotante 601
COM 1 ;Transmite por COM1 (RS232) el
;contenido del buffer intermedio, que
;resulta ser una lnea de deteccin de
;alarma con las lecturas de temperatura y
;presin de un sistema.
RESET relcon ;Desactiva el rel "relcon".
BASE DE DATOS DF-BD 14 99.01
fin END ;Fin de programa.
El resultado de la impresin del anterior ejemplo es el que sigue:
DD/MM/AA HH:MM CODIGO DE ALARMA XXX
TEMPERATURA = XXX.X PRESION = XXXX
donde las posiciones con X son datos extrados del fichero de la base
de datos.
FM
TRATAMIENTO MDEM FM-TM 1 04.01
INTRODUCCIN
En las ultimas versiones de firmware de los equipos MIDA, se
han implementado nuevos parmetros en el setup, nuevos
rels/registros y una nueva instruccin para el tratamiento de mdem
fijo (RTB) y mdem GSM. Adems de la posibilidad de utilizar el
servicio de mensajera corta (SMS) en el caso de utilizar un mdem
GSM.
Un mdem es un perifrico que nos permite conectar y
comunicar con otros equipos a travs de las redes telefnicas
estndares. Por lo tanto combina la potencia de un equipo y la
apertura al exterior mediante la red telefnica. Para mas informacin
del funcionamiento de un mdem, existe en el mercado libros e
informacin mas especifica, aqu solo vamos a explicar la integracin
de estos perifricos a nuestra gama de equipos MIDA.
Funcionamiento bsico
Tanto un mdem fijo (RTB) como un mdem GSM, dispone de
dos modos de funcionamiento:
- Modo comandos: Interpreta y responde a los comandos de tipo
AT y a los registros S.
- Modo transparente: Tras establecer una conexin, el mdem
pasa a ser transparente (conexin directa
entre equipos).
Al arrancar el mdem siempre se encuentra en modo
comandos. Esto permite configurarlo y enviarle ordenes mediante los
comandos AT (ej. establecer una conexin telefnica).
Los comandos que se envan al mdem empiezan por AT y
acaban con el carcter <CR> (carcter ASCII 13).
Las respuestas pueden tener ms de una lnea y cada una de
ellas, segn el mdem puede empezar con <CR><LF>, pero siempre
acabar con <CR><LF> (carcter ASCII 13 seguido del carcter 10).
TRATAMIENTO MDEM FM-TM 2 04.01
Conexin Remota: Si un mdem remoto intenta conectarse a
otro, a cada llamada enviara un cdigo de resultado RING (si dicha
opcin esta activada en el mdem) al equipo, a lo que se puede enviar
un comando para responder la llamada o si se ha configurado, permitir
que el mdem conteste automticamente.
Conexin Local: Se puede hacer que el mdem se conecte
con otro mdem enviando el comando para que el mdem marque un
nmero telefnico y establezca la conexin.
Ya sea remota o local, al establecer la conexin el mdem
enva un cdigo de resultado CONNECT... al equipo, tras lo cual el
mdem pasar a modo transparente. A partir de este momento, los
equipos conectados en los respectivos mdems podrn recibir y
transmitir datos, como si estuviera conectados por un cable directo.
Desconexin Remota: Si el mdem remoto cuelga la lnea o si
esta se corta, el mdem local empezar a recibir ruido (por ello es
importante que los mensajes entre mdem tengan algn tipo de
verificacin). Al cabo de un rato el mdem enviar un cdigo de
resultado NO CARRIER (seal portadora perdida o no detectada) al
equipo, colgar y pasar a modo comandos. En lneas telefnicas con
mucho ruido la sentencia NO CARRIER puede demorarse mucho o
incluso no llegar nunca.
Desconexin Local: Para salir del modo transparente se debe
enviar la cadena +++ (tras haber estado 1 segundo sin enviar ningn
carcter antes y despus de la cadena). Tras esto el mdem
responder OK y pasar a modo comandos, lo que permite enviar el
comando para colgar la lnea.
NOTA: El mdem y el MIDA al arrancar siempre se encuentran en
modo comandos (ver apartado Inicio Arranque MIDA y Mdem). Al
recibir la cadena CONNECT pasar a modo transparente y al colgar
la lnea volver a modo comandos.
TRATAMIENTO MDEM FM-TM 3 04.01
Configuracin Mdem
Para que el mdem (RTB GSM) pueda ser controlado por el
equipo MIDA, debemos de tener una configuracin predeterminada en
algunos de sus comandos AT y registros-S:
! Ajustar a la velocidad (baudios, paridad, longitud, bit stop) del
puerto serie con la que se utilizara en el equipo MIDA.
En algunos mdems, la velocidad del puerto serie es
autodetectable.
En el caso de ajustar la velocidad, se recomienda utilizar la
longitud de byte a 8, ya que ha 7 suele dar problemas en algunos
mdems.
! Activar cdigos de resultado.
! Formato de cdigos de resultado como palabras.
! El mdem debe de ignorar la seal de DTR.
! Activar control de flujo de hardware CTS/RTS.
! Sin eco en la entrada de caracteres en modo comandos.
! El registro-S de establecer el nmero de llamadas (RINGS) hasta
que el mdem contesta, debe de estar al menos a uno si
deseamos que el mdem descuelgue automticamente.
Si el valor de este registro lo dejamos a 0, desactiva la respuesta
automtica, y ser el programa usuario del MIDA que decida que
hacer con dicha llamada entrante, mediante la funcin de la
instruccin AT correspondiente.
! El registro-S de establecer el cdigo ASCII para el carcter de
escape, debe ser 43 (+).
Adems de los puntos anteriores, en el caso de utilizar la
mensajera SMS en un mdem GSM, se debe de activar el acceso al
Centro de Mensajes (nmero facilitado por el proveedor de telefonia
mvil).
Para ms informacin, consultar el manual de comandos AT del
mdem que s este utilizando.
TRATAMIENTO MDEM FM-TM 4 04.01
CONFIGURACIN DEL SET-UP
A los diferentes equipos de la gama MIDA se les ha aadido
nuevos parmetros dentro del Setup.
Los nuevos parmetros son:
! CONEXIN COM-1
! DETECTAR NO CARRIER
! AUTODESCONEXIN (SEG.)
! CADENA DE MARCADO
! CODIGO PIN
A continuacin se describe cada uno de estos nuevos
parmetros:
! CONEXIN COM-1
Define el tipo de comunicacin que debe establecer en el puerto
de comunicaciones COM-1 (RS232). Existe tres opciones:
1. DIRECTA:
Conexin directa entre equipo y PC u otro equipo con RS232
(comunicacin standard).
2. MDEM:
Conexin a mdem fijo RTB.
En modo MDEM el equipo establece comunicacin con el
mdem nada ms arrancar, por lo que el mdem se
autoconfigura correctamente.
En este modo tras arrancar cuelga la lnea de telfono y
establece la comunicacin con el mdem en modo comandos
AT en espera de enviar nuevas ordenes.
3. MODEM GSM MODEM GSM-SMS:
Conexin a mdem GSM, con opcin a SMS (segn modelo
MIDA).
Igual que la descripcin de la opcin MDEM, pero para
conectar un mdem GSM.
TRATAMIENTO MDEM FM-TM 5 04.01
! DETECTAR NO CARRIER
Define como tratar la respuesta del mdem NO CARRIER.
Mientras el equipo este en modo transparente, al producirse una
desconexin remota recibiremos un cdigo de resultado NO
CARRIER.
Existe dos opciones:
1. SI:
Al recibir la respuesta NO CARRIER el equipo pasar
automticamente a modo comandos, dispuesto a enviar nuevos
comandos al mdem, y avisar al programa de autmata.
2. NO:
La cadena no se distinguir del resto de los mensajes en modo
transparente. Ser trabajo del programa de autmata decidir si
se ha cortado la lnea (por los mensajes recibidos, cosa que
solo se puede hacer en el protocolo libre, o por temporizacin).
! AUTODESCONEXIN (SEG.)
Como ya hemos indicado anteriormente si se produce una
desconexin remota puede no recibirse la cadena NO CARRIER
o haberse seleccionado NO en la opcin DETECTAR NO
CARRIER. En estos casos la lnea quedara permanentemente
abierta. Para evitar esto se puede definir el tiempo, en segundos,
de autodesconexin tras el cual si no se ha recibido ningn
mensaje valido o no se ha transmitido nada, el equipo colgar la
lnea, de forma automtica y pasar a modo comandos, listo para
establecer una nueva conexin.
El valor de este parmetro debe estar comprendido entre 0 y
32767 seg.. Si se selecciona 0 esta opcin queda invalidada.
! CADENA DE MARCADO
El comando de marcado empieza segn el tipo de mdem a
utilizar y su conexin a la red telefnica:
- ATDT: mdem RTB (red telefnica bsica) para marcacin por
tonos).
- ATDP: mdem RTB (red telefnica bsica) para marcacin por
pulsos).
- ATD: mdem GSM.
TRATAMIENTO MDEM FM-TM 6 04.01
y a continuacin del comando de marcacin se pone el telfono de
destino.
La mayora de veces entre el comando de marcacin y el nmero
telefnico hay comandos o prefijos, toda esta parte se puede
aadir a la cadena de marcado de forma que el programa de
autmata solo deba indicar el telfono de destino (o parte de l).
Por ejemplo si la marcacin telefnica es por tonos (comando
ATDT) y la hacemos a travs de una centralita (pulsar 3 para
obtener lnea) y siempre llamamos a Barcelona (prefijo 93)
podemos indicar como cadena de marcado ATDT3,93 (la coma
indica una pausa entre el 3 y el 9), de esta forma el programa
de autmata solo deber indicar las ltimas 7 cifras del nmero
telefnico (ver instruccin AT 0).
El valor de la cadena de marcado debe de tener un mximo de 20
caracteres.
! CODIGO PIN
Sirve para indicar al equipo el cdigo PIN del mdem GSM.
Al arrancar el equipo MIDA, pregunta al mdem si necesita
cdigo PIN y en caso afirmativo lo enva.
Al leer el setup del equipo este campo aparece relleno con *
para proteger la seguridad del mdem. Al escribir un nuevo
cdigo este ser visible siempre que se lea hasta que no quede
activado al reinicializar el equipo.
El valor del cdigo PIN es una cadena numrica de 8 dgitos
como mximo.
TRATAMIENTO MDEM FM-TM 7 04.01
RELS Y REGISTROS
En los equipos MIDA se ha incluido nuevos rels y registros
enteros en el mapa de memoria, para el uso con las nuevas funciones
de tratamiento de mdem:
! Rel Tratamiento Mdem.
Define si se debe tratar la respuesta del mdem (cdigo de
resultado) por parte del programa de usuario. Depende de su
estado:
- Manual (estado del rel a 0):
Tratamiento manual respuesta mdem.
Tras recibir una respuesta del mdem (cdigo de resultado) el
puerto queda bloqueado hasta que el programa de autmata no
trate la respuesta.
- Automtico (estado del rel a 1), estado por defecto:
Ignorar respuestas mdem.
Si el programa de autmata no tiene tratamiento de las
respuestas del mdem se debe activar el modo automtico para
que tras cada recepcin el puerto quede liberado
automticamente y no se indique nada al programa de
autmata.
! Rel Modo Comandos.
Se activa si el mdem esta en modo comandos.
Este rel es solo de lectura, modificar su valor no modificar el
estado del mdem.
! Rel Mdem Ocupado.
Al establecer una conexin o cortarla, al aceptar un cdigo PIN y
conectarse al proveedor GSM (caso de ser mdem GSM), el
mdem puede tardar varios segundos. Dichos procesos se
realizan de forma paralela, por interrupciones, para no dejar el
equipo MIDA inactivo. Mientras el mdem este ocupado se
activar este rel. Si se ejecuta un comando de autmata con
acceso al mdem el programa de autmata esperar de forma
TRATAMIENTO MDEM FM-TM 8 04.01
automtica a que el mdem haya acabado para ejecutar dicho
comando.
! Rel Nuevo SMS.
Se activa al recibir la notificacin de que el mdem GSM ha
recibido un mensaje SMS.
! Rel Colisin SMS.
Se activa si se recibe una segunda notificacin de nuevo mensaje
SMS sin haber tratado el primero.
! Rel Error Mdem.
Se activa si el mdem ha devuelto un mensaje de error.
! Registro Entero Respuesta Mdem.
Indica el nmero de respuesta recibida por el mdem (cdigo de
resultado) entre las posibles respuestas validas segn la tabla
indicada en el apartado Respuestas Validas de este capitulo.
! Registro Entero Num. SMS Recibido.
Tras activarse el rel Nuevo SMS, en este registro guarda un
numero que corresponde al ndice del mensaje SMS recibido.
Tenemos que utilizar este nmero para poder leer el mensaje
recibido, si lo perdemos (para ello disponemos el rel Colisin
SMS) no sabremos que mensaje hemos recibido.
! Registro Entero Verificacin PIN GSM.
Indica cada cuanto tiempo el MIDA debe preguntar al mdem
GSM, si tiene el mdem el PIN activado. (ver apartado
Reposicin Automtica Cdigo PIN en este capitulo).
El valor de este registro debe estar comprendido entre 0 y 1440
minutos (24 horas). Cualquier otro valor provocar que se
desactive la verificacin del PIN.
TRATAMIENTO MDEM FM-TM 9 04.01
Tambin los siguientes rels y registros enteros, son necesarios
para las funciones de tratamiento del mdem:
! Rel Mensaje Completo.
Se activa cuando el buffer de recepcin hay una respuesta valida
del mdem (el parmetro del setup Tratamiento Mdem debe
estar en modo manual) o cuando trabajemos con el protocolo libre
(depende del modo seleccionado).
! Registro Entero Ancho Tx COM1 (RS232).
Indica el nmero de caracteres que tiene el texto a enviar por el
puerto serie.
! Registro Entero Longitud Mensaje Rx.
Indica el nmero de caracteres almacenados en el buffer de
recepcin.
! Registro Entero Errores General.
Registro general de deteccin de errores, donde se marcan los
errores ocurridos en el equipo MIDA. Cada bit indica un error
distinto (ver capitulo Tratamiento de errores de este manual).
TRATAMIENTO MDEM FM-TM 10 04.01
RESPUESTAS VALIDAS
Se ha aadido una nueva instruccin de autmata AT con 7
funciones distintas para trabajar con el mdem. Todas ellas al enviar
un comando al mdem terminan, con lo que el programa de autmata
continua, y la respuesta es tratada por interrupciones. Tras recibir una
respuesta valida (cdigo de resultado) el equipo activa el rel
Mensaje Completo. En el registro Respuesta Mdem indicar el
mensaje recibido. La lista de mensajes validos es:
Mensaje recibido
del mdem
(cdigo resultado)
Registro
Respuesta
Mdem
Descripcin
-1 Error PIN incorrecto
(1)
OK 0 OK
CONNECT 1 Conexin establecida
(2)
RING 2 Deteccin llamada entrante
NO CARRIER 3 Conexin cortada
ERROR 4 Error
(3)
+CME ERROR 5 Error
(4)
NO DIALTONE 6 No hay tono en la lnea
BUSY 7 La lnea comunica
NO ANSWER 8 No contestan
+CMTI: 9 Nuevo mensaje SMS
(5,6)
+CPIN: READY 10 Ya tiene PIN
(6)
+CPIN: SIM PIN 11 Falta cdigo PIN
(6)
+CPIN: SIM PUK 12 Falta cdigo PUK
(6)
(1)
Es una respuesta ERROR igual que la 4 y 5 pero indica el caso
especial de PIN incorrecto.
(2)
Tras recibir esta respuesta el equipo pasar de forma automtica al
modo transparente.
(3)
Se activa tambin el rel Error Mdem
(4)
Igual que el mensaje 4 el algunos MDEMS GSM
(5)
En mdem GSM recepcin de mensaje corto. No se activa el rel
Mensaje Completo sino que se activa el rel Nuevo SMS y se
TRATAMIENTO MDEM FM-TM 11 04.01
guarda el nmero de mensaje en el registro Num. SMS Recibido.
(Ver apartado Tratamiento de mensajes cortos SMS).
(6)
Solo en MDEMS GSM.
Al recibir una respuesta del mdem (cdigo de resultado), el
rel Mensaje Completo se activar. Mientras no se trate el mensaje
la interrupcin de recepcin quedar bloqueada para evitar la colisin
de mensajes. Existen 3 formas de liberar la interrupcin de recepcin:
" Borrar directamente el rel Mensaje Completo.
" Enviar un mensaje por el puerto de comunicaciones
(ejecutando la instruccin COM o una instruccin AT).
" Ejecutando el comando COM 9 (para tratar el mensaje)
Se ha de procurar liberar la rutina de recepcin lo antes posible
para evitar la perdida de posibles respuestas del mdem.
! Respuestas Extensas
Las respuestas del mdem (cdigo de resultado) pueden
contener ms de una lnea. Por ejemplo si se enva el comando ATI0
(pedir cdigo de producto del fabricante) responde dos lneas, la
primera con el cdigo y la segunda con un OK (comando correcto),
segn el fabricante (dependiendo de si pone un <CR><LF> delante de
cada lnea o no) las respuestas pueden ser del tipo:
Tipo 1 Tipo 2
<CR><LF>
28800<CR><LF>
<CR><LF>
OK<CR><LF>
28800<CR><LF>
OK<CR><LF>
El equipo siempre esperar una respuesta valida de la tabla
anterior y mientras esto no suceda seguir acumulando lneas (buffer
mximo de recepcin es de 256 bytes). Cuando recibe una respuesta
valida por ejemplo OK activar el rel Mensaje Completo y pondr un
0 (respuesta OK) en el registro Respuesta Mdem. En el registro
Longitud Mensaje Rx tendr la longitud del mensaje a tratar. Si se
TRATAMIENTO MDEM FM-TM 12 04.01
ejecuta la instruccin COM 9 pasar al buffer general todas las
lneas recibidas separadas por un <CR> y eliminando los <CR><LF>
de las lneas vacas. En el ejemplo:
28800<CR>OK
En el registro Longitud Mensaje Rx en este caso indicara 8, y tras
ejecutar la instruccin COM 9 valdr 0 ya que el buffer de recepcin
ha sido vaciado.
TRATAMIENTO MDEM FM-TM 13 04.01
CODIGO PIN MDEM GSM
El mdem GSM disponen de un cdigo PIN para activar la seal
telefnica y comunicacin de estos. Este es un cdigo de 4 a 8 dgitos
que se pide al arrancar el mdem GSM. Sin dicho cdigo no se puede
activar ninguna funcin del mdem. Y si se enviase por 3 veces un
cdigo PIN incorrecto, se bloqueara el mdem hasta que no se le
enviase el cdigo de 8 dgitos denominado PUK.
Hay mdems que permiten desactivar el uso del cdigo PIN,
para ello ver el manual del mdem GSM que se este utilizando.
Si tenemos conectado un mdem GSM en el MIDA, y este tiene
configurado en el setup Mdem GSM en el parmetro Conexin
COM-1, al arrancar enva el cdigo PIN al mdem GSM para
activarlo. Dicho cdigo se debe grabar en el equipo, antes de utilizar
un mdem GSM. Por el contrario no se debe poder leer del equipo ya
que con dicho cdigo se podra extraer el mdulo SIM del mdem y
utilizarlo en cualquier otro telfono mdem GSM.
Por ello en los equipos MIDA se ha aadido un nuevo
parmetro en el setup del equipo para poder indicarle cual es el
cdigo PIN. Dicha entrada se rellena con * ya que no es posible leer
el cdigo PIN, por seguridad. Al escribir el cdigo PIN se hace de
forma visible para evitar errores y continuar visible hasta que no sea
activado (inicializando el equipo).
Si el campo CODIGO PIN se borra o se deja vaco, se
desactivar la transmisin del cdigo PIN al arrancar (el equipo no
intentar enviar ningn cdigo PIN al mdem).
! Reposicin Automtica Cdigo PIN
El MIDA dispone de una funcin para poder verificar y actualizar
el cdigo PIN en los mdem GSM de forma peridica.
TRATAMIENTO MDEM FM-TM 14 04.01
Si el mdem GSM se resetea deberemos reenviarle el cdigo
PIN para volver a tenerlo activo (si no el mdem no contesta llamadas,
ni acepta mensajes SMS). Como el MIDA no tiene constancia de que
el mdem se haya reseteado el mtodo para asegurarnos que el
mdem este siempre activo ser pedirle de forma peridica si necesita
volver a enviarle el cdigo PIN.
El MIDA siempre al arrancar enviar el cdigo PIN al mdem. El
problema surge cuando el mdem y el equipo estn alimentados por
lneas diferentes de forma que se pueda resetear el mdem y el
equipo no.
Se introduce un nuevo registro entero Verificacin PIN GSM
con el nmero de minutos cada cuanto se quiere que se pregunte por
el cdigo PIN.
El valor a poner depender del ruido de la instalacin donde se
ponga el mdem y el tiempo que nos podamos permitir estar sin
conexin. Por otro lado contra ms a menudo se pregunte por el
cdigo PIN ms lento funcionar el equipo y ms comunicaciones
tendr por el puerto serie.
El valor a poner en dicho registro solo puede ir de 0 a 1440
minutos (24 horas), cualquier otro valor provocar que se desactive
esta funcin. Desactivar la reposicin del cdigo PIN automtico nos
puede servir para asegurarnos que durante un proceso de
comunicacin con el mdem no nos interfiera la peticin del cdigo
PIN.
Poner el registro a 0 provoca una peticin del cdigo PIN
inmediata (al siguiente segundo de reloj) y se carga en el registro
entero un 1 (desactivando la funcin). Esto sirve para pedir de forma
inmediata el cdigo PIN una nica vez.
La peticin del PIN esta sincronizada con el reloj del sistema de
forma que siempre se realizar cuando el registro de los segundos
marque 0.
TRATAMIENTO MDEM FM-TM 15 04.01
! Tratamiento de errores PIN
El cdigo PIN se actualiza solo si el equipo se encuentra en
modo comandos. En el caso de que este en modo directo, o no tiene
un mdem conectado, o tiene la lnea abierta y se esta comunicando
remotamente con otro mdem, la peticin del PIN no respondera
provocando un error.
Normalmente el MIDA al ejecutar una instruccin AT (comando
AT al mdem) si no hay respuesta marca el error de no hay mdem
(registro entero de error) y pasa a modo directo (en suposicin de que
no hay mdem). El modo comando siempre se puede recuperar
ejecutando la funcin AT 2 (comando ATH) o enviando un mensaje
por el puerto de comunicaciones donde esta conectado el mdem
(ejecutando la instruccin COM) se activar el temporizador de
AUTODESCONEXIN que enviar un comando ATH.
La reposicin automtica puede realizarse desde una vez al da
hasta una vez por minuto (1440 veces en un da) esto nos implica de
que pueden haber fallos de comunicacin y si funcionar como lo
expuesto arriba siempre acabara pasando por error a modo directo.
Para evitar esto el mensaje de peticin del PIN no tiene tratamiento de
error y si falla ya funcionar en la siguiente llamada.
TRATAMIENTO MDEM FM-TM 16 04.01
INICIO ARRANQUE MIDA Y MODEM
Al tener conectado un MODEM debemos tener cuidado al
arrancar el MIDA. Si se arranca el equipo y el mdem a la vez, ambos
lo harn en modo comandos y pasaran de modo comandos a modo
transparente y viceversa a la vez. El problema viene si falla alguna
comunicacin o alguno de los dos equipos se resetea pasando a
modo comandos mientras el otro permanece en modo transparente.
Para asegurar que el MODEM y el equipo siempre estn en el mismo
modo, se han aadido las siguientes protecciones:
" Si se resetea el MDEM, el MIDA dejar de recibir mensajes o
respuesta a los mensajes que enve. El programa de autmata
podr detectar que no recibe respuestas y en tal caso ejecutar la
instruccin AT 2 (Colgar la lnea). Si el programa de autmata no
detecta el fallo, al cumplirse el tiempo establecido por el parmetro
del SETUP AUTODESCONEXIN se ejecutar de forma
automtica dicho comando. Con lo que siempre podemos
recuperar el funcionamiento del equipo.
" Si se resetea el MIDA, al arrancar se ejecuta de forma automtica
el comando AT 2 (Colgar lnea) para recuperar el control del
MODEM si se encontraba en modo transparente.
A parte de estas protecciones en los MDEMS GSM al arrancar
se enva el cdigo PIN, si lo tenemos activo (Ver apartado anterior
Cdigo PIN MODEM GSM). Para ello se pregunta de forma
automtica al MODEM si necesita dicho cdigo, a lo que el mdem
puede responder tres cdigos:
Mensaje Nmero Descripcin
+CPIN: READY 10 Ya tiene PIN o esta desactivado
+CPIN: SIM PIN 11 Falta cdigo PIN
+CPIN: SIM PUK 12 Falta cdigo PUK
TRATAMIENTO MDEM FM-TM 17 04.01
- Ya tiene PIN o esta desactivado:
Finaliza la inicializacin automtica. Habr quedado el rel
Mensaje Completo activado y en el registro Respuesta
MODEM un 10.
- Falta cdigo PIN:
En este caso enva el cdigo PIN almacenado en el setup del
MIDA. Si el cdigo PIN es incorrecto se activar el rel Error
Mdem y en Respuesta MODEM tendremos un 1. Si el cdigo
PIN es correcto al cabo de unos segundos (entre 10 y 15 para
establecer la conexin con el proveedor GSM) contestara OK
(rel Mensaje Completo activado y en Respuesta MODEM un
0).
- Falta cdigo PUK:
Se activar el rel Error Mdem y en Respuesta MODEM
tendremos un 12.
Todas estas funciones de comunicacin con el MODEM se
realizan por interrupciones. De esta forma aunque tarde varios
segundos en inicializar la comunicacin con el MODEM el programa
de autmata iniciar su scan. Si se realiza una instruccin AT o COM
1 antes de que la inicializacin haya acabado, el programa de
autmata se esperar.
TRATAMIENTO MDEM FM-TM 18 04.01
INSTRUCCIONES AT
En los equipos MIDA se ha implementado una nueva
instruccin denominada AT.
Dicha instruccin, dependiendo del valor del primer operando,
nos har una funcin especifica. La descripcin y funcionamiento de
estas la vamos a describir en las siguientes paginas.
Dependiendo del modelo de MIDA que estemos programando,
no dispondremos de las funciones AT referentes al tratamiento de
mensajes cortos SMS. Para ver que funciones disponemos, ver el
Manual Usuario que acompaa con cada equipo.
Recordar que en los mdems GSM para poder recibir y enviar
mensajes cortos SMS, debemos de tener activado el acceso al Centro
de Mensajes (contactar con el proveedor de telefona mvil).
Las funciones de la instruccin AT, que disponemos en todos
los equipos MIDA, son:
AT 0 MARCA un nmero telefnico y establece conexin.
AT 1 DESCUELGA el mdem automticamente.
AT 2 CUELGA la llamada en lnea y pasa a modo comandos el
mdem.
En los equipos con tratamiento para mensajera corta SMS,
adems de las anteriores, disponen de las siguientes funciones:
AT 6 ALMACENA numero de telfono destino para mensajes
cortos SMS.
AT 3 ENVIA mensaje corto SMS.
AT 4 LEE mensaje corto SMS del mdem GSM.
AT 5 BORRA mensaje corto SMS del mdem GSM.
TRATAMIENTO MDEM FM-TM 19 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 0
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
MARCA un nmero telefnico y establece conexin.
El operando XXXX es la constante 0, llamada a dicha funcin.
Aade al contenido del parmetro del setup CADENA DE
MARCADO el contenido del buffer intermedio para componer el
comando de marcacin que luego se enva al mdem.
El programa de usuario del MIDA no se detiene mientras se enva
dicho comando y se establece la comunicacin, ya que todo el
proceso se realiza por interrupciones.
No opera con las pilas (0)
Nota: Esta funcin solo funciona con el mdem en modo comandos.
# Ejemplo:
num_tel lite 0,93211211
...
CLEAR ;Borra buffer intermedio.
DISL num_tel ;Copia en el buffer intermedio el texto
;num_tel de la tabla de literales.
AT 0 ;Enva al mdem el contenido de la
;CADENA DE MARCADO ms el
;contenido del buffer intermedio.
... ;Continua el programa.
AT
TRATAMIENTO MDEM FM-TM 20 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 1
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
DESCUELGA el mdem automticamente.
El operando XXXX es la constante 1, llamada a dicha funcin.
Al ejecutar esta instruccin el mdem responde automticamente
ante una llamada entrante (al recibir el MIDA el cdigo de resultado
del mdem RING, numero 2 de la tabla de Respuestas Vlidas).
Esta instruccin es til para cuando tenemos programado en el
registro S0 del mdem el valor 0 (respuesta automtica inhabilitada),
de este modo el MIDA toma el control de responder ante una
llamada.
No opera con las pilas (0)
Nota: Esta funcin solo funciona con el mdem en modo comandos.
# Ejemplo:
...
MOVRI resp_mod ;Carga el contenido del registro entero
;Respuesta Mdem.
MOVCI 2 ;Carga la constante 2.
CPEI desc ;Si el contenido del registro resp_mod es
;igual a 2 (equivale al mensaje RING de
;la tabla de respuestas validas) salta a
;lnea con etiqueta desc. De lo contrario
;continua el programa.
JMP contin ;Salto incondicional a contin.
desc AT 1 ;Descuelga el mdem.
contin ... ;Continua el programa
AT
TRATAMIENTO MDEM FM-TM 21 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 2
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
CUELGA la llamada en lnea y pasa a modo comandos el mdem.
El operando XXXX es la constante 2, llamada a dicha funcin.
Esta funcin detecta si el mdem esta en modo transparente o
comandos. En el primer caso pasa el mdem a modo comandos
(enva +++) y cuelga la lnea (enva ATH). En el segundo caso se
comprueba que el mdem esta en modo comandos (se enva AT).
En ambos casos el mdem responder con un OK. De lo contrario
activar el error No se detecta mdem Instruccin AT incorrecta,
bit 11 del Registro Errores General (ver capitulo Tratamiento de
Errores).
No opera con las pilas (0)
Nota: Esta funcin se puede utilizar tanto en modo comandos, como
en transparente, y se puede utilizar para detectar la presencia de
mdem.
# Ejemplo:
...
LD modo ;Carga el estado del rel Modo
;Comandos.
JNZ contin ;Si el rel Modo Comandos esta a 1
;(modo comandos) salto a contin. De lo
;contrario si el rel esta a 0 (modo
;transparente) continua a la siguiente lnea.
AT 2 ;Pasa a modo comandos y cuelgo la lnea.
contin ... ;Continua el programa
AT
TRATAMIENTO MDEM FM-TM 22 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 6
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
ALMACENA numero de telfono destino para mensajes cortos SMS.
El operando XXXX es la constante 6, llama a dicha funcin.
Esta funcin almacena el contenido de los 20 primeros caracteres
(sin contar espacios en blanco) del buffer intermedio como numero
de telfono destino de los mensajes SMS (ver instruccin AT 3).
El numero de telfono queda almacenado en una zona de memoria
inaccesible por el usuario.
No opera con las pilas (0).
Nota: Esta funcin solo funciona en modo comandos para los
mdems GSM y debe tener activado el acceso al Centro de Mensajes.
# Ejemplo:
tel_sms lite +346305000
...
CLEAR ;Borra buffer intermedio.
DISL tel_sms ;Copia en el buffer intermedio el texto
;tel_sms de la tabla de literales.
AT 6 ;Almacena el contenido del buffer
;intermedio en una zona de memoria. El
;cual ser el numero de telfono a utilizar
;para el envo de mensajes SMS.
... ;Continua el programa
AT
TRATAMIENTO MDEM FM-TM 23 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 3
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
ENVIA mensaje corto SMS.
El operando XXXX es la constante 3, llama a dicha funcin.
Esta funcin enva el mensaje corto SMS, formado por los N
primeros caracteres, indicados por el registro entero Ancho Tx
COM1, del buffer intermedio. Al telfono indicado por la instruccin
AT 6.
No opera con las pilas (0)
Nota: Esta funcin solo funciona en modo comandos para los
mdems GSM y debe tener activado el acceso al Centro de Mensajes.
# Ejemplo:
sms_1 lite alarma en caldera
...
CLEAR ;Borra buffer intermedio.
DISL sms_1 ;Copia en el buffer intermedio el texto
;sms_1 de la tabla de literales.
AT 3 ;Enva el contenido del buffer intermedio al
;numero de telfono asignado previamente
;con la instruccin AT 6, como mensaje
;SMS. La longitud de este, ser segn el
;registro entero Ancho Tx
... ;Continua el programa
AT
TRATAMIENTO MDEM FM-TM 24 04.01
! Recepcin de mensajes cortos SMS
Los mdulos SIM de los mdems GSM pueden almacenar un
nmero limitado de mensajes y estos son almacenados con un
numero de ndice.
Los pasos que el MIDA ejecuta automticamente al recibir un
mensaje corto SMS, son los siguientes:
1. Se activar el rel Nuevo SMS.
2. Se guardar en el registro Num. SMS Recibido el
numero del ndice correspondiente al mensaje corto
recibido.
3. Si el rel de Nuevo SMS estaba activado previamente
se activar el rel Colisin SMS.
Debido a que se pueden recibir varios mensajes cortos con muy
poco tiempo de diferencia entre ellos, el rel Colisin SMS sirve para
detectar si nos hemos dejado algn mensaje sin tratar.
El tratamiento puede ser tan sencillo como apuntar en una tabla
el mensaje a tratar y borrar el rel Nuevo SMS, con lo que dejamos
el tratamiento real del mensaje SMS para ms tarde. O ejecutar el
comando AT 4 (borra automticamente el rel Nuevo Mensaje) y
tratar el mensaje en el momento mediante la instruccin COM 9.
Como anteriormente hemos indicado los mdulos SIM de los
mdems GSM pueden almacenar un nmero limitado de mensajes,
por ello es interesante utilizar la instruccin AT 5 para borrar los
mensajes ya tratados.
Si se pide un mensaje corto que no exista (instruccin AT 4),
cuando responda el mdem se activar el rel Error Mdem. Este es
un rel accesible que puede ser borrado antes de enviar un nuevo
comando al mdem. De esta forma se podran pedir todos los
mensajes del mdem y descubrir cuantos y cuales estn
almacenados.
TRATAMIENTO MDEM FM-TM 25 04.01
Una vez recibido un nuevo mensaje SMS, el cual nos lo indicara
el rel de Nuevo SMS, los pasos que debemos seguir para su
tratamiento, es el siguiente:
1. Comprobar que el rel Mensaje Completo este a 0.
2. Poner el rel Tratamiento Mdem a 0 (tratamiento
manual).
3. Cargar en la pila aritmtica el numero del ndice
correspondiente al mensaje a leer. (ver descripcin del
registro entero Num. SMS Recibido en el apartado Rels
y Registros en este capitulo).
4. Ejecutar la instruccin AT 4.
5. Al descargar el mensaje se activara el rel Mensaje
Completo, el registro entero Respuesta Mdem contendr
un 0 (respuesta OK) y en el registro Longitud Mensaje Rx
tendremos el numero de caracteres que contiene.
6. A continuacin debemos de utilizar la instruccin COM 9,
donde pasaremos al buffer intermedio el contenido del
mensaje para ser tratado.
7. Poner el rel Tratamiento Mdem a 1 (tratamiento
automtico), en el caso de desearlo, (ver descripcin del
rel Tratamiento Mdem en el apartado Rels y
Registros en este capitulo).
TRATAMIENTO MDEM FM-TM 26 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 4
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
LEE mensaje corto SMS del mdem GSM.
El operando XXXX es la constante 4, llama a dicha funcin.
Cada vez que el mdem GSM recibe un mensaje SMS, este lo
almacena con un numero de ndice.
Esta funcin lee un mensaje almacenado en el mdem GSM,
cargando previamente en la pila aritmtica el numero del ndice
correspondiente al mensaje a leer. (ver descripcin del registro
entero Num. SMS Recibido en el apartado Rels y Registros en
este capitulo).
Si el mensaje SMS pedido no se encuentra en el mdem se activara
el rel Error Mdem.
Decrementa un nivel la pila aritmtica (-1).
Nota: Esta funcin solo funciona en modo comandos para los
mdems GSM y debe tener activado el acceso al Centro de Mensajes.
# Ejemplo:
LD r_sms ;Cargar el estado del rel Nuevo
;SMS.
JZ fin ;Si la pila lgica esta a 1, continua
;el programa desde esta lnea.
RESET r_modo ;Resetear rel Tratamiento
;Mdem.
MOVRI n_sms ;Cargar en pila aritmtica, el
;contenido del registro entero Num.
;SMS Recibido.
AT 4 ;Ejecutar la funcin Leer SMS.
AT
TRATAMIENTO MDEM FM-TM 27 04.01
ver LD r_resp ;Verificar si el rel Mensaje
;Completo esta a 1.
JZ ver ;Si la pila lgica esta a 1, continua
;el programa desde esta lnea.
CLEAR ;Borrar buffer intermedio.
COM 9 ;Copiar el contenido actual del
;buffer de recepcin al buffer
;intermedio.
LOC 0 ;Posiciona el puntero en la posicin
;0 del buffer intermedio.
COM 0 ;Copia el contenido del buffer
;intermedio al COM 0.
TRATAMIENTO MDEM FM-TM 28 04.01
AT XXXX
NEMNICO: AT
OPERANDO XXXX: Constante 5
CDIGO INSTRUCCIN: 39
DESCRIPCIN:
BORRA mensaje corto SMS del mdem GSM.
El operando XXXX es la constante 5, llama a dicha funcin.
Esta funcin borra un mensaje almacenado en el mdem GSM,
cargando previamente en la pila aritmtica el numero del ndice
correspondiente al mensaje a borrar.
Cada vez que el mdem GSM recibe un mensaje SMS, este lo
almacena con un numero de ndice.
Decrementa un nivel la pila aritmtica (-1).
Nota: Esta funcin solo funciona en modo comandos para los
mdems GSM y debe tener activado el acceso al Centro de Mensajes.
# Ejemplo:
...
MOVRI 500 ;Carga en pila aritmtica el contenido del
;registro entero 500 (por ejemplo, 3).
AT 5 ;Borra el mensaje corto SMS almacenado
;en el mdem GSM con el numero de
;ndice 3
...
AT
TRATAMIENTO MDEM FM-TM 29 04.01
# EJEMPLOS:
Para efectuar estos ejemplos deberemos comprobar las instrucciones y el direccionamiento de los
rels/registros de la memoria, disponibles en el equipo MIDA que estamos programando.
;
;Programa prueba para MIDA compatible con GSM-SMS con MODEM GSM
;
;Comprobar los siguientes parmetros del SET_UP del equipo:
; CONEXION COM-1: MODEM GSM-SMS
; DETECTAR NO CARRIER: SI
; AUTODESCONEXION (SEG.): 30
; CADENA DE MARCADO: ATD
; CODIGO PIN: numero pin del mdem GSM
;
;Definicin de textos
llamar lite "LLAMADA"
enviar_m lite "ENVIA SMS
numero lite "6061110"
numero_m lite "6061111"
mensaje lite "ALARMA 1"
borrando lite "BORRAR SMS
colgar lite "COLGAR"
lineas lite "DESCOLGAR"
;Definicin de etiquetas
llamar equ 60 ;Rel de Tecla n, para llamar
cuelga equ 62 ;Rel de Tecla n, para colgar
enviar equ 61 ;Rel de Tecla n, para enviar mensaje
borrar equ 63 ;Rel de Tecla n, para borrar mensaje
scan equ 99 ;Rel 1 Scan
r_sms equ 132 ;Rel Nuevo Mensaje SMS
t_mod equ 134 ;Tratamiento Mdem
cmod equ 23 ;Respuesta Mdem
n_sms equ 24 ;Numero SMS Recibido
reg_int equ 250 ;Registro entero interno
TRATAMIENTO MDEM FM-TM 30 04.01
;
;Programa principal
;
LD scan ;Comprueba el rel de 1 scan.
JNZ gsm
SETRI 20 10 ;Almacena el numero de caracteres para
;transmitir, en el reg. entero Ancho Tx.
CLEAR ;Borra buffer intermedio.
DISL numero_m ;Carga en el buffer intermedio el numero
;de GSM donde enviar SMS.
AT 6 ;Almacena el numero de GSM.
fin END
;
;
;Llamar a un mdem remoto y establecer conexin
;
gsm INK llama ;Si se pulsa tecla, llama.
JZ gsm1 ;De lo contrario salta a gsm1.
CLEAR ;Borra buffer intermedio.
DISL numero ;Copia en el buffer intermedio el numero
;de telfono del mdem remoto a llamar,
;asignado en la tabla de literales.
AT 0 ;Inicia la llamada al mdem remoto.
CLEAR ;Borra buffer intermedio.
DISL llamar ;Copia en el buffer intermedio el texto de la
;tabla de literales llamar.
COM 0 ;Visualiza el texto por el display.
;
;Colgar una llamada y pasar a modos comandos
;
gsm1 INK cuelga ;Si se pulsa tecla, cuelga la llamada.
JZ gsm2 ;De lo contrario salta a gsm2.
AT 2 ;Cuelga la llamada en linea.
CLEAR ;Borra buffer intermedio
DISL colgar ;Copia en el buffer intermedio el texto de la
;tabla de literales colgar.
COM 0 ;Visualiza el texto por el display.
TRATAMIENTO MDEM FM-TM 31 04.01
;
;Responder llamada entrante
;
gsm2 MOVRI cmod ;Carga en pila aritmtica el contenido del
;reg. entero Respuesta Mdem.
MOVCI 2 ;Carga en pila aritmtica la constante 2.
CPEI desc ;Comprueba si el contenido del registro
;Respuesta Mdem es 2 (equivalente a
;llamada entrante RING de la tabla de
;Respuestas Validas).
JMP gsm3 ;De lo contrario salta a gsm3.
desc AT 1 ;Descuelga la llamada entrante.
CLEAR ;Borra buffer intermedio.
DISL lineas ;Copia en el buffer intermedio el texto de la
;tabla de literales lineas.
COM 0 ;Visualiza el texto por el display.
SETRI cmod -2 ;Almacena la constante 2 en el registro
;Respuesta Mdem, cdigo no existente
;en la tabla de Respuestas Validas.
;
;Leer mensaje SMS nuevo
;
gsm3 LD r_sms ;Comprueba si existe un SMS nuevo.
JZ gsm4 ;De lo contrario salta a gsm4.
RESET t_mod ;Pone el rel de Tratamiento Mdem a
;manual.
MOVRI n_sms ;Cargo en pila aritmtica el numero de
;SMS recibido.
AT 4 ;Lee el SMS del mdem GSM
verif LD 76 ;Compruebo el rel de mensaje completo.
JZ verif ;De lo contrario espero que este a 1.
CLEAR ;Borra buffer intermedio.
COM 9 ;Copia el contenido del buffer de recepcin
;al buffer intermedio.
LOC 0 ;Pone el puntero en la primera posicin
COM 0 ;Visualiza el mensaje SMS por el display.
SET t_mod ;Pone el rel de Tratamiento Mdem a
;automtico.
TRATAMIENTO MDEM FM-TM 32 04.01
;
;Borrar mensaje SMS del mdem GSM
;
gsm4 INK borrar ;Si se pulsa tecla, borra SMS del GSM.
JZ gsm5 ;De lo contrario salta a gsm5.
MOVRI reg_int ;Carga en pila aritmtica el contenido del
;registro entero reg_int, cuyo contenido
;ser el numero de SMS a borrar.
AT 5 ;Borra mensaje SMS n, indicado en el
;registro reg_int.
CLEAR ;Borra buffer intermedio.
DISL borrando ;Copia en el buffer intermedio el texto de la
;tabla de literales borrando.
COM 0 ;Visualiza el texto por el display.
;
;Enviar mensaje SMS
;
gsm5 INK enviar ;Si se pulsa tecla, envia SMS del GSM.
JZ gsm6 ;De lo contrario salta a gsm6.
CLEAR ;Borra buffer intermedio.
DISL mensaje ;Copia en el buffer intermedio el texto de la
;tabla de literales mensaje.
AT 3 ;Envia el contenido del buffer intermedio
;como mensaje SMS.
CLEAR ;Borra buffer intermedio.
DISL enviar_m ;Copia en el buffer intermedio el texto de la
;tabla de literales enviar_m.
COM 0 ;Visualiza el texto por el display.
;
gsm6 RET
PC
.
PROTOCOLO MIDABUS PC-MB 1 99.01
AFEISA dispone de un protocolo de comunicaciones propio
para los equipos MIDA.
Las caractersticas principales de este protocolo son:
! Es del tipo Maestro-Esclavo con confirmacin.
! Las comunicaciones se realizan carcter a carcter en
HEXADECIMAL-ASCII.
! Todos los mensajes al equipo obtienen confirmacin respuesta.
! En caso de que el mensaje sea ininteligible no pueda determinar
su nmero de perifrico (fallo de comunicaciones, mensaje
incorrecto, etc.), el equipo no responde.
! En caso de que el equipo detecte un mensaje con su nmero de
perifrico pero con un defecto de forma constructiva, responde
con un mensaje de error.
! Todos los mensajes de respuesta del equipo llevan un byte de
estado en el cual se reflejan los posibles errores de
comunicaciones de ejecucin de programa.
! Los mensajes del PC al perifrico 00, son recibidos por todos los
equipos de la red, pero ninguno responde. Los mensajes estn
delimitados por un carcter '/' al inicio y un carcter ';' al final.
Todos los equipos de la nueva familia MIDA disponen de este
protocolo y pueden conectarse en redes RS485 y RS422.
PROTOCOLO MIDABUS PC-MB 2 99.01
LISTA DE FUNCIONES DEL PROTOCOLO MIDAbus
El protocolo de comunicaciones MIDAbus soporta las siguientes
funciones:
MENSAJE FUNCION
Mensaje 10 Peticin de versin del equipo.
Mensaje 11 Orden de inicializacin del equipo.
Mensaje 13 Peticin del estado Paro / Marcha del equipo.
Mensaje 93 Modificacin del estado Paro / Marcha del equipo.
Mensaje 91 Orden de borrado de registros.
Mensaje 15
Peticin de estado de rels compactados de ocho en
ocho.
Mensaje 95
Modificacin del estado de rels compactados de
ocho en ocho.
Mensaje 16 Peticin de estado de rels.
Mensaje 96 Modificacin del estado de rels.
Mensaje 17 Peticin de contenido de registros enteros.
Mensaje 97 Modificacin de contenido de registros enteros.
Mensaje 1B
Peticin del contenido de registros de 32 bits en
coma flotante.
Mensaje 9B
Modificacin del contenido de registros de 32 bits en
coma flotante
Mensaje 18 Peticin del contenido de los visualizadores.
Mensaje 98 Modificacin del contenido de los visualizadores.
Mensaje 9C Simulacin de pulsaciones de teclas.
Mensaje 1D Peticin del contenido del reloj interno del equipo.
Mensaje 9D
Modificacin del contenido del reloj interno del
equipo (puesta en hora).
PROTOCOLO MIDABUS PC-MB 3 99.01
Mensaje 20 Peticin del formato de un fichero.
Mensaje 21 Peticin del formato de campos de un fichero.
Mensaje 22 Peticin de un bloque de la memoria de ficheros.
Mensaje A2 Grabacin de un bloque de la memoria de ficheros.
FORMATO GENERAL DE UN MENSAJE
En la descripcin del protocolo, cada dos caracteres separados no
por un espacio representan un byte, as por ejemplo:
NP CC IIII...
Representan 4 bytes.
El formato general de los mensajes es el siguiente:
Inicio Perif Cdigo Dir. Dato Estado Chek Fin
1
Byte
1
Byte
1
Byte
2
Byte
120
Byte
1
Byte
1
Byte
1
Byte
/ NP CC IIII DDD ST CK ;
/ NP CC IIII DDDD... ST CK ;
/ ..... Carcter de inicio de mensaje.
NP ..... Nmero de perifrico.
CC ..... Cdigo del mensaje ( tipo de operacin).
IIII ..... Direccin de peticiones o modificaciones.
DDDD ..... Datos del mensaje ( varios bytes).
ST ..... Estado del equipo (status).
CK ..... Checksum del mensaje.
; ..... Carcter de final de mensaje.
En funcin si el mensaje es de pregunta respuesta puede
haber variaciones en el mensaje descrito.
PROTOCOLO MIDABUS PC-MB 4 99.01
CALCULO DEL CHECKSUM
El checksum se obtiene sumando byte a byte en hexadecimal
todos los componentes del mensaje sin incluir los caracteres de inicio
y final.
El checksum se representa mediante dos dgitos (1 byte) en
hexadecimal. En caso de que el resultado sean dos bytes, se toma el
menos significativo.
# Ejemplo:
Mensaje /051700640ACK;
CK = 05 + 17 + 00 + 64 + 0A = 8A
RESULTADO..... /051700640A8A;
# Ejemplo:
Mensaje /150704830064CK;
CK = 15 + 07 + 04 + 83 + 00 + 64 = 107 = 07
RESULTADO.... /15070483006407;
DIMENSIONES MAXIMAS DE LOS MENSAJES
El buffer intermedio de los equipos MIDA, varia en cada uno de
los modelos (ver Manuales de Usuario).
Se tiene que tener en cuenta, que ningn mensaje puede superar la
longitud admitida en el buffer intermedio (incluidos caracteres de inicio
y fin de mensaje).
PROTOCOLO MIDABUS PC-MB 5 99.01
BYTE DE ESTADO
En cada respuesta del MIDA se transmite un byte que indica el
estado del equipo.
Si este byte es 00, no existen problemas ni errores en el equipo, por el
contrario, si tiene algn bit activado es que el equipo tiene algn
problema error de programa.
La codificacin del byte de estado es:
BIT ERROR
Bit 0 activado (1Hex)
Mensaje no tratable con el equipo en
marcha.
Bit 1 activado (2Hex)
Margen de variables demandadas no
correcto.
Bit 2 activado (4Hex)
Error por intento de lectura o escritura
en la Base de Datos fuera de sus
mrgenes.
Bit 3 activado (8Hex)
Error por intento de lectura o escritura
fuera de mrgenes del Mapa de
Memoria.
Bit 4 activado (10Hex)
Error por rebasamiento matemtico
de divisin por cero.
Bit 5 activado (20Hex)
Error en alguna pila (lgica, aritmtica o
de subrutinas).
Bit 6 activado (40Hex)
Error de Check-Sum de la FLASH-
EPROM.
Bit 7 activado (80Hex)
Error en lectura o escritura de
EEPROM.
Ver capitulo "Tratamiento de Errores" de este mismo manual.
PROTOCOLO MIDABUS PC-MB 6 99.01
MENSAJE 10:
PETICION DE VERSION DEL EQUIPO
Mensaje 10
Pregunta Respuesta
/NP 10 CK; Rta. OK /NP 90 HH SS ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
HH ..... Versin hardware.
SS ..... Versin software.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
# Ejemplo: Peticin de la versin a la unidad de nmero de
perifrico 15
MENSAJE PC A MIDA: /151025;
15 Nmero de perifrico (15).
10 Cdigo de mensaje.
25 Checksum del mensaje.
MENSAJE MIDA A PC: /1590202000E5;
15 Nmero de perifrico (15).
90 Respuesta a mensaje 10.
20 Versin hardware (20).
20 Versin software (20 ! v2.0).
00 Byte de estado ( no existen errores).
E5 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 7 99.01
MENSAJE 11:
ORDEN DE INICIALIZACION AL EQUIPO
Mensaje 11
Pregunta Respuesta
/NP 11 DD CK; Rta. OK No hay respuesta.
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
DD ..... Datos de la orden.
FF = RESET HARDWARE.
00 = RESET SOFTWARE.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El MIDA realiza el reset hardware mediante el watch-dog del
equipo.
# Ejemplo: Peticin de reset hardware a la unidad 15
MENSAJE PC A MIDA: /1511FF25;
15 Nmero de perifrico (15).
11 Cdigo de mensaje.
FF Peticin de reset hardware.
25 Checksum del mensaje.
MENSAJE MIDA A PC: NO HAY RESPUESTA
PROTOCOLO MIDABUS PC-MB 8 99.01
MENSAJE 13:
PETICION DEL ESTADO PARO / MARCHA DEL EQUIPO
Mensaje 13
Pregunta Respuesta
/NP 13 CK; Rta. OK /NP 93 DD ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
DD ..... Datos de la orden.
FF = equipo en MARCHA.
00 = equipo en PARO.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
# Ejemplo: Peticin del estado a la unidad 15.
MENSAJE PC A MIDA: /151328;
15 Nmero de perifrico (15).
13 Cdigo de mensaje.
28 Checksum del mensaje.
MENSAJE MIDA A PC: /1593FF00A7;
15 Nmero de perifrico (15).
93 Respuesta a mensaje 13.
FF Estado del equipo (marcha).
00 Byte de estado (no existen errores).
A7 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 9 99.01
MENSAJE 93:
MODIFICACIN DEL ESTADO PARO / MARCHA DEL EQUIPO
Mensaje 93
Pregunta Respuesta
/NP 93 DD CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
DD ..... Datos de la orden.
FF = Equipo en MARCHA.
00 = Equipo en PARO.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
# Ejemplo: Modificacin del estado de la unidad 15.
MENSAJE PC A MIDA: /159300A8;
15 Nmero de perifrico (15).
93 Cdigo de mensaje.
00 Modificacin del estado del equipo a PARO.
A8 Checksum del mensaje.
MENSAJE MIDA A PC: /15000015;
15 Nmero de perifrico (15).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
15 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 10 99.01
MENSAJE 91:
ORDEN DE BORRADO REGISTROS
Mensaje 91
Pregunta Respuesta
/NP 91 DD CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
DD ..... Datos de la orden.
00 = Borra contenido de los registros RAM, EEPROM
01 = Borra contenido de la Base de Datos
02 = Ejecuta las ordenes 00 y 01
03 = Ejecuta las ordenes 00, 01 y pone el SETUP del
equipo por defecto
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Para que surjan todos los cambios se ha de enviar un mensaje
de inicializacin(Mensaje 11) o apagar y encender el equipo.
# Ejemplo: Borrado RAM y EEPROM del equipo 1
MENSAJE PC A MIDA: /01910092;
01 Nmero de perifrico (1).
91 Cdigo de mensaje.
00 Borrado registros RAM y EEPROM.
92 Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 11 99.01
MENSAJE 15:
PETICION DE ESTADO DE RELES COMPACTADOS DE OCHO EN
OCHO
Mensaje 15
Pregunta Respuesta
/NP 15 II NN CK; Rta. OK /NP 95 II DD ... ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
II ..... Nmero de bloque de inicio de la peticin.
(Rels 0 - 7 = Bloque 0)
(Rels 8 - 15 = Bloque 1)
NN ..... Nmero de bloques pedidos.
DD ..... Bloques respuesta (8 rels por byte).
Codificacin:
x x x x | x x x x = Bits del bloque
1 2 3 4 5 6 7 8 = Rels de la peticin.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de bloques que se pueden pedir es de
60 bloques.
# Ejemplo: Peticin de los dos primeros bloques de rels de la
unidad 1 (entradas 015).
MENSAJE PC A MIDA: /0115000218;
01 Nmero de perifrico (1).
15 Cdigo de mensaje.
00 Bloque de inicio de la peticin (bloque 0).
02 Nmero de bloques que se piden (2 bloques, ent.0-15).
18 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 12 99.01
MENSAJE MIDA A PC: /019500C1AB0002;
01 Nmero de perifrico (1).
95 Respuesta a mensaje 15.
00 Bloque de inicio de la respuesta (bloque 0).
C1 Estado del primer bloque de la respuesta (bloque 0).
Rel 0 a rel 7 (1 1 0 0 0 0 0 1).
AB Estado del segundo bloque de la respuesta (bloque 1).
Rel 8 a rel 15 (1 0 1 0 1 0 1 1).
00 Byte de estado (no existen errores).
02 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 13 99.01
MENSAJE 95:
MODIFICACION DE ESTADO DE RELES COMPACTADOS DE
OCHO EN OCHO
Mensaje 95
Pregunta Respuesta
/NP 95 II DD CK; Rta. OK /NP 95 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
II ..... Nmero de bloque de inicio de la peticin.
(Rels 0 - 7 = Bloque 0)
(Rels 8 - 15 = Bloque 1)
DD ..... Bloques respuesta (8 rels por byte).
Codificacin:
x x x x | x x x x = Bits del bloque
1 2 3 4 5 6 7 8 = Rels de la peticin.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de bloques que se pueden modificar
es de 60 bloques.
# Ejemplo: Modificacin de los bloques de rels 12 y 13 de la
unidad 1:
Bloque 12 (96 - 103) 1 1 1 1 1 1 1 1 = FF
Bloque 13 (104 - 111) 0 0 1 1 1 1 1 1 = 3F
MENSAJE PC A MIDA: /01950CFF3FE0;
01 Nmero de perifrico (1).
95 Cdigo de mensaje.
0C Bloque de inicio de la modificacin (bloque 12).
PROTOCOLO MIDABUS PC-MB 14 99.01
FF Modificacin sobre el primer bloque (bloque 12).
3F Modificacin sobre el segundo bloque (bloque 13).
E0 Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 15 99.01
MENSAJE 16:
PETICION DE ESTADO DE RELES
Mensaje 16
Pregunta Respuesta
/NP 16 IIII NN CK; Rta. OK /NP 96 IIII DD ... ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin del rel inicio de la peticin.
NN ..... Nmero de rels pedidos.
DD ..... Datos de respuesta (1 rels por byte).
00 = Rel DESACTIVADO.
FF = Rel ACTIVADO.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de rels que se pueden pedir es de 60.
# Ejemplo: Peticin de 6 rels a partir del rel 255 de la unidad 1.
MENSAJE PC A MIDA: /011600FF061C;
01 Nmero de perifrico (1).
16 Cdigo de mensaje.
00FF Direccin del rel de inicio de la peticin (rel 255).
06 Nmero de rels que se demandan (6).
1C Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 16 99.01
MENSAJE MIDA A PC: /019600FFFFFF000000000094;
01 Nmero de perifrico (1).
96 Respuesta a mensaje 16.
00FF Direccin del rel de inicio de la peticin (rel 255).
FF Estado primer rel demandado (rel 255 en ON).
FF Estado segundo rel demandado (rel 256 en ON).
00 Estado tercer rel demandado (rel 257 en OFF)
00 Estado cuarto rel demandado (rel 258 en OFF)
00 Estado quinto rel demandado (rel 259 en OFF)
00 Estado sexto rel demandado (rel 260 en OFF)
00 Byte de estado (no existen errores).
94 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 17 99.01
MENSAJE 96:
MODIFICACION DEL ESTADO DE RELES
Mensaje 96
Pregunta Respuesta
/NP 96 IIII DD ... CK; Rta. OK /NP 96 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin del rel inicio de la modificacin.
DD ..... Datos de la modificacin (1 byte por rel).
00 = Rel DESACTIVADO.
FF = Rel ACTIVADO.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de rels que se pueden modificar es de 60.
# Ejemplo: Activar el rel 8 y desactivar el rel 9 de la unidad 7.
MENSAJE PC A MIDA: /07960008FF00A4;
07 Nmero de perifrico (7).
96 Cdigo de mensaje.
0008 Direccin del rel de inicio de la modificacin (rel 8).
FF Activacin del primer rel (rel 8 a ON).
00 Desactivacin del segundo rel (rel 9 a OFF).
A4 Checksum del mensaje.
MENSAJE MIDA A PC: /07000007;
07 Nmero de perifrico (7).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
07 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 18 99.01
MENSAJE 17:
PETICION DE CONTENIDO DE REGISTROS ENTEROS
Mensaje 17
Pregunta Respuesta
/NP 17 IIII NN CK; Rta. OK /NP 97 IIII DD... ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin del registro inicio de la peticin.
NN ..... Nmero de registros que se demandan.
DD ..... Datos de la respuesta (2 bytes por registro).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de registros enteros que se pueden pedir
es de 60.
# Ejemplo: Peticin de 3 registros enteros desde la direccin 4 de
la unidad 1.
MENSAJE PC A MIDA: /011700FA0315;
01 Nmero de perifrico (1).
17 Cdigo de mensaje.
00FA Direccin del registro de inicio de la peticin (reg.250)
03 Nmero de registros enteros que se demandan (3).
15 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 19 99.01
16 MENSAJE MIDA A PC: /019700FAD8F002D33A980001;
01 Nmero de perifrico (1).
97 Respuesta a mensaje 17.
00FA Direccin del registro de inicio de la peticin (250).
D8F0 Contenido del primer registro (reg. 250 con 22769).
02D3 Contenido del segundo registro (reg. 251 con 723).
3A98 Contenido del tercer registro (reg. 252 con 15000).
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 20 99.01
MENSAJE 97:
MODIFICACION DEL CONTENIDO DE REGISTROS ENTEROS
Mensaje 97
Pregunta Respuesta
/NP 97 IIII DD ... CK; Rta. OK /NP 97 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin del registro de inicio de la modificacin.
DD ..... Datos de la modificacin (2 bytes por registro).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de registros enteros que se pueden
modificar es de 30.
# Ejemplo: Modificacin de los registros 100 y 101 de la unidad 1.
MENSAJE PC A MIDA: /019701F406BB0065B3;
01 Nmero de perifrico (1).
97 Cdigo de mensaje.
01F4 Direccin del registro de inicio de la modificacin (reg. 500).
06BB Modificacin del primer registro (reg. 500 a 1723).
0065 Modificacin del segundo registro (reg. 501 a 101).
B3 Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 21 99.01
MENSAJE 1B:
PETICION DE CONTENIDO DE REGISTROS DE 32 BITS EN COMA
FLOTANTE
Mensaje 1B
Pregunta Respuesta
/NP 1B IIII NN CK; Rta. OK /NP 9B III DD... ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin de registro de inicio de peticin.
NN ..... Nmero de registros pedidos.
DD ..... Datos de respuesta (4 bytes por registro).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de registros en coma flotante que se
pueden pedir es de 15.
El formato de los datos es IEEE de 32 bits en hexadec.
# Ejemplo: Peticin del contenido 3 registros en coma flotante
desde la direccin 4 de la unidad 1.
MENSAJE PC A MIDA: /011B00040323;
01 Nmero de perifrico (1).
1B Cdigo de mensaje.
0004 Direccin del registro de inicio de la peticin (reg. 4).
03 Nmero de registros en coma flotante que se demandan (3).
23 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 22 99.01
MENSAJE MIDA A PC:
/019B0004C61C40004434E000466A6000002A;
01 Nmero de perifrico (1).
9B Respuesta a mensaje 1B.
0004 Direccin del registro de inicio de la peticin (reg. 4).
C61C4000 Contenido del primer registro (reg. 4: -10000).
4434E000 Contenido del segundo registro (reg. 5: 723.5).
466A6000 Contenido del tercer registro (reg. 6: 15000).
00 Byte de estado (no existen errores).
2A Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 23 99.01
MENSAJE 9B:
MODIFICACION DEL CONTENIDO DE REGISTROS DE 32 BITS EN
COMA FLOTANTE
Mensaje 9B
Pregunta Respuesta
/NP 9B IIII DD... CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
IIII ..... Direccin del registro inicio de la modificacin.
DD ..... Datos de respuesta (4 bytes por registro).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: El nmero mximo de registros en coma flotante que se
pueden modificar es de 15.
El formato de los datos es IEEE de 32 bits en hexadec.
# Ejemplo: Modificacin de los registros 100 y 101 de la unidad 1.
MENSAJE PC A MIDA: /019B006443E000000C7F1200016;
01 Nmero de perifrico (1).
9B Cdigo de mensaje.
0064 Direccin del registro de inicio de la modificacin (reg.
100).
3E000000 Modificacin del primer registro (reg. 100 a 0.125)
C7F12000 Modificacin del segundo registro (reg. 101a -123456)
17 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 24 99.01
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 25 99.01
MENSAJE 18:
PETICION DEL CONTENIDO DE LOS VISUALIZADORES
Mensaje 18
Pregunta Respuesta
/NP 18 LL CK; Rta. OK /NP 98 LL DD... ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
LL ..... Lnea de display LCD, donde:
00 - 1 Lnea de display LCD
01 - 2 Lnea de display LCD
02 - 3 Lnea de display LCD
03 - 4 Lnea de display LCD
04 - Visualizador rojo
DD ..... Datos de respuesta (20 bytes en ASCII -HEXA).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: La opcin LL es exclusivo para equipos con display LCD de 4
lneas, para los dems equipos no se usa dicha opcin.
Sin la opcin LL, los 32 primeros caracteres de la respuesta
corresponden al LCD, los 12 restantes al visualizador rojo.
Con la opcin LL, son 20 caracteres por lnea (12 para el display rojo)
# Ejemplo: Peticin del contenido de los visualizadores a la unidad 1
(sin opcin LL).
MENSAJE PC A MIDA: /011819;
01 Nmero de perifrico (1).
18 Cdigo de mensaje.
19 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 26 99.01
MENSAJE MIDA A PC:
/0198454A45435554414E444F20202020202050524F475241
4D412E2E2E2020202020 2D313135303020202020202000A2;
01 Nmero de perifrico (1).
98 Respuesta a mensaje 18.
454A45435554414E444F202020202020 Primera lnea del LCD
EJECUTANDO
50524F4752414D412E2E2E2020202020 Segunda lnea del LCD.
PROGRAMA...
2D3131353030202020202020 Contenido visualizador
rojo. '-11500'
00 Byte de estado (no existen errores).
A2 Checksum del mensaje.
# Ejemplo: Peticin del contenido de la 3 lneas del display LCD de
la unidad 2(con opcin LL).
MENSAJE PC A MIDA: /0218021D;
02 Nmero de perifrico (2).
18 Cdigo de mensaje.
02 Nmero de lnea del LCD que se demanda (3).
1D Checksum del mensaje.
MENSAJE MIDA A PC:
/0298022045737461646F20416C61726D613A204F46462000DF;
02 Nmero de perifrico (2).
98 Respuesta a mensaje 18.
02 Peticin de la 3 lnea del display LCD
2045737461646F20416C61726D613A204F464620
Contenido de la 3 lnea del display: " Estado Alarma:OFF "
00 Byte de estado (no existen errores).
DF Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 27 99.01
MENSAJE 98:
MODIFICACIN DEL CONTENIDO DE LOS VISUALIZADORES
Mensaje 98
Pregunta Respuesta
/NP 98 LL CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
LL ..... Lnea de display LCD, donde:
05 - 1 Lnea de display LCD
06 - 2 Lnea de display LCD
07 - 3 Lnea de display LCD
08 - 4 Lnea de display LCD
09 - Visualizador rojo
DD ..... Datos de respuesta (20 bytes en ASCII -HEXA).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: La opcin LL es exclusivo para equipos con display LCD de 4
lneas, para los dems equipos no se usa dicha opcin.
Sin la opcin LL, los 32 primeros caracteres de la respuesta
corresponden al LCD, los 12 restantes al visualizador rojo.
Con la opcin LL, son 20 caracteres por lnea (12 para el visualizador
rojo)
# Ejemplo: Modificacin del contenido de los visualizadores LCD:
'NUMERO FORMULA? +***' y visualizador rojo:'0.0'
a la unidad 1 (sin opcin LL).
MENSAJE MIDA A PC:
/01984E554D45524F20464F524D554C41203F202020202020
2B2A2A2A20202020202020202020302E302020202020DB;
PROTOCOLO MIDABUS PC-MB 28 99.01
01 Nmero de perifrico (1).
98 Respuesta a mensaje 18.
4E554D45524F20464F524D554C41203F Primera lnea del LCD:
NUMERO FORMULA ?'
2020202020202B2A2A2A202020202020 Segunda lnea del LCD:
'+***
2D3131353030202020202020 Contenido del
visualizador rojo: 0.0''
DB Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
# Ejemplo: Modificacin del contenido de la 1 lnea del display
LCD (PRIORIDAD 001)de la unidad 2(con opcin LL).
MENSAJE PC A MIDA:
/029800205052494F52494441442030303120202020202000C9;
02 Nmero de perifrico (2).
98 Cdigo de mensaje.
00 Nmero de lnea del LCD que se modifica (1).
205052494F524944414420303031202020202020
Modificacin del LCD: " PRIORIDAD 001 "
C9 Checksum del mensaje.
MENSAJE MIDA A PC: /02000002;
02 Nmero de perifrico (2).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
02 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 29 99.01
MENSAJE 9C:
SIMULACIN DE PULSACIONES DE TECLAS
Mensaje 9C
Pregunta Respuesta
/NP 9C TTTT CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
TTTT ..... Cdigo de la tecla (rel interno segn modelo).
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Los cdigos de las teclas corresponden a los rels internos de
cada uno de estas (ver mapa de memoria del Manual Usuario de cada
modelo de MIDA).
# Ejemplo: Simulacin de pulsacin de la tecla <ENTER> de la
unidad 1 (ej: MIDA20).
MENSAJE PC A MIDA: /019C003CD9;
01 Nmero de perifrico (1).
9C Cdigo de mensaje.
003C Cdigo de la tecla <ENTER>
D9 Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 30 99.01
MENSAJE 1D:
PETICION DEL CONTENIDO DEL RELOJ INTERNO DEL EQUIPO
Mensaje 1D
Pregunta Respuesta
/NP 1D CK; Rta. OK /NP 9D SS MM HH DD mm AA WW ST
CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
SS ..... Segundos.
MM ..... Minutos.
HH ..... Horas.
DD ..... Da.
mm ..... Mes.
AA ..... Ao.
WW ..... Da de la semana.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Los datos se transmiten en formato decimal (real).
# Ejemplo: Peticin del contenido del reloj interno a la unidad 1.
MENSAJE PC A MIDA: /011D1E;
01 Nmero de perifrico (1).
1D Cdigo de mensaje.
1E Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 31 99.01
MENSAJE MIDA A PC: /019D0030122804950400A5;
01 Nmero de perifrico (1).
9D Respuesta a mensaje 1D.
00 Segundos del minuto (0s.).
30 Minutos de la hora (30min.).
12 Hora del da (12h.).
28 Da del mes (28).
04 Mes del ao (abril).
95 Ao (1995).
04 Da de la semana (viernes).
00 Byte de estado (no existen errores).
A5 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 32 99.01
MENSAJE 9D:
MODIFICACION DEL CONTENIDO DEL RELOJ INTERNO DEL
EQUIPO (PUESTA EN HORA)
Mensaje 9D
Pregunta Respuesta
/NP 9D SS MM HH DD
mm AA WW CK;
Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
SS ..... Segundos.
MM ..... Minutos.
HH ..... Horas.
DD ..... Da.
mm ..... Mes.
AA ..... Ao.
WW ..... Da de la semana.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Los datos se transmiten en formato decimal (real).
# Ejemplo: Puesta en hora del reloj interno.
MENSAJE PC A MIDA: /019D00450029049505AA;
01 Nmero de perifrico (1).
9D Cdigo de mensaje.
00 Puesta en hora de segundos (0s.).
45 Puesta en hora de minutos (45min.).
00 Puesta en hora de hora (0h.).
29 Puesta en hora de da (29).
04 Puesta en hora de mes (abril).
PROTOCOLO MIDABUS PC-MB 33 99.01
95 Puesta en hora de ao (1995).
05 Puesta en hora de da de la semana (sbado).
AA Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 34 99.01
MENSAJE 20:
PETICION DEL FORMATO DE UN FICHERO
Mensaje 20
Pregunta Respuesta
/NP 20 nn CK; Rta. OK /NP A0 pppp rrrr nnnn tt cc dd xx ST
CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
nn ..... Nmero de fichero (0-9).
pppp ..... Offset fichero.
rrrr ..... Tamao del registro.
nnnn ..... Nmero mximo de registros.
tt ..... Tipo de fichero (1-Lineal, 2-Ciclico).
cc ..... Nmero de campos por registro.
dd ..... Offset en tabla de campos.
xx ..... No se utiliza.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Este comando nos devuelve los datos ms generales que nos
define un fichero. Si 'tt' vale 0xff significa que se ha pedido la
estructura de un fichero no definido en el programa de autmata.
# Ejemplo: Peticin del formato de fichero 0 de la unidad 1.
MENSAJE PC A MIDA: /01200021;
01 Nmero de perifrico (1).
20 Cdigo de mensaje.
00 Peticin del formato del fichero 0.
21 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 35 99.01
MENSAJE MIDA A PC: /01A000000015000101080AFF00BF;
01 Nmero de perifrico (1).
A0 Respuesta a mensaje 20.
0000 Offset fichero (0 bytes).
0015 Tamao del registro (21 bytes).
0001 Nmero mximo de registros (1).
01 Fichero Lineal.
08 Nmero de campos por registro (8 campos).
0A Offset en tabla de campos (10).
FF No se utiliza.
00 Byte de estado (no existen errores).
BF Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 36 99.01
MENSAJE 21:
PETICION DEL FORMATO DE CAMPOS DE UN FICHERO
Mensaje 21
Pregunta Respuesta
/NP 21 nn cc CK; Rta. OK /NP A1 rrrr tt xx ... rrrr tt xx ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
nn ..... Offset en tabla de campos
cc ..... Nmero de campos.
rrrr ..... Registro asociado o tamao si es de tipo Texto.
tt ..... Tipo de campo (0-Rele, 1-Entero, 2-Coma Flotante,
3-Texto, 4-Fecha, 5-Hora).
xx ..... No se utiliza.
CK ..... Checksum del mensaje.
NOTA: Los campos de todos los ficheros estn definidos en una tabla
de campos. El primer campo de un fichero concreto viene definido por
el dato 'Offset en tabla de campos' del Mensaje 20 (Peticin del
formato de un fichero). El nmero de campos que se pueden pedir
simultneamente son 15 como mximo.
# Ejemplo: Peticin del formato de campos del fichero 0 de la
unidad 1.
MENSAJE PC A MIDA: /012100082A;
01 Nmero de perifrico (1).
21 Cdigo de mensaje.
00 Offset en tabla de campos (00).
08 Nmero de campos (8).
2A Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 37 99.01
MENSAJE MIDA A PC:
/01A1019000FF019100FF000002FF012C01FF012D01FF002A05FF0
00503FF002C04FF0083;
01 Nmero de perifrico (1).
A1 Respuesta a mensaje 21.
0190 Registro asociado (400).
00 Tipo de campo (Rel).
FF No se utiliza.
0005 Registro asociado (texto de 5 caracteres)
03 Tipo de campo (Texto).
FF No se utiliza.
0191 Registro asociado (401).
00 Tipo de campo (Rel).
FF No se utiliza.
0000 Registro asociado (0).
02 Tipo de campo (Registro Coma Flotante).
FF No se utiliza.
012C Registro asociado (300).
01 Tipo de campo (Registro Entero).
FF No se utiliza.
012D Registro asociado (301).
01 Tipo de campo (Registro Entero).
FF No se utiliza.
002A Registro asociado (42).
05 Tipo de campo (Hora).
FF No se utiliza.
0028 Registro asociado (40).
04 Tipo de campo (Fecha).
FF No se utiliza.
00 Byte de estado (no existen errores).
83 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 38 99.01
MENSAJE 22:
PETICION DE UN BLOQUE DE LA MEMORIA DE FICHEROS
Mensaje 22
Pregunta Respuesta
/NP 22 pppp nn CK; Rta. OK /NP A2 NN ... NN ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
pppp ..... Offset fichero.
nn ..... Peticin de nmero de bytes.
NN ..... Byte ledo en hexascii.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Lee el contenido de la memoria de ficheros directamente. El
primer byte de un fichero concreto se encuentra en la posicin definida
por 'Offset fichero' del Mensaje 20 (Peticin del formato de un fichero).
De esta forma si empezamos a numerar los registros del fichero a
partir del cero, si deseamos leer un registro concreto debemos calcular
su offset y el nmero de bytes.
Offset = Registro * Tamao_del_registro + Offset_fichero
Nmero_de_bytes = Tamao_del_registro
Hay que tener en cuenta que los bloques a leer no pueden exceder los
60 bytes.
Para ver el formato en que se recibe el contenido de la memoria, ir a la
seccin "Formato de Datos en la Memoria de Ficheros", que se
encuentra al final de este capitulo.
PROTOCOLO MIDABUS PC-MB 39 99.01
# Ejemplo: Peticin de un bloque de la memoria de ficheros de la
unidad 1.
MENSAJE PC A MIDA: /01220000193C;
01 Nmero de perifrico (1).
22 Cdigo mensaje.
0000 Offset fichero (0).
19 Peticin de numero de bytes (25).
3C Checksum del mensaje.
MENSAJE MIDA A PC:
/01A200202020202000CDCCF6426F00DE00252E0E1D03630000000
00045;
01 Nmero de perifrico (1).
A2 Respuesta a mensaje 22.
00 Rel 400 (0).
20 20 20 20 20 Texto ( ).
00 Rel 401 (0).
CD CC F6 42 Registro Coma Flotante 0 (123.400).
6F 00 Registro Entero 300 (111).
DE 00 Registro Entero 301 (222).
25 2E 0E Registro Hora (37 seg., 46 min. 14 h).
1D 03 63 Registro Fecha (29, 03, 99)
00 Vaco.
00 Vaco.
00 Vaco.
00 Vaco.
00 Byte de estado (no existen errores).
45 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 40 99.01
MENSAJE A2:
GRABACION DE UN BLOQUE DE LA MEMORIA DE FICHEROS
Mensaje A2
Pregunta Respuesta
/NP A2 pppp dd ... dd CK; Rta. OK /NP 00 ST CK;
Rta. NOK /NP FF ST CK;
donde:
NP ..... Nmero de perifrico.
pppp ..... Offset fichero.
dd ..... Byte a grabar en la memoria.
ST ..... Estado del equipo.
CK ..... Checksum del mensaje.
NOTA: Grabar datos en la memoria de ficheros directamente. El
primer byte de un fichero concreto se encuentra en la posicin definida
por 'Offset fichero' del Mensaje 20 (Peticin del formato de un fichero).
De esta forma si empezamos a numerar los registros del fichero a
partir del cero, si deseamos modificar el contenido de un registro
concreto deberemos calcular su offset y el nmero de bytes.
Offset = Registro* Tamao_del_registro + Offset_fichero
Nmero_de_bytes = Tamao_del_registro
Hay que tener en cuenta que los bloques a leer no pueden exceder los
60 bytes.
Para ver el formato en que se enva el contenido de la memoria, ir a la
seccin "Formato de Datos en la Memoria de Ficheros", que se
encuentra al final de este capitulo.
PROTOCOLO MIDABUS PC-MB 41 99.01
# Ejemplo: Grabacin de un bloque de la memoria de ficheros de
la unidad 1.
MENSAJE PC A MIDA:
/01A20000005041524F20FFCDCCF642D2042E160000121D036374;
01 Nmero de perifrico (1).
A2 Cdigo de mensaje.
0000 Offset fichero.
00 Rel 400 (0).
50 41 52 4F 20 Texto (PARO).
FF Rel 401 (1).
CD CC F6 42 Registro Coma Flotante 0 (123.400).
D2 04 Registro Entero 300 (1234).
2E 16 Registro Entero 301 (5678).
00 00 12 Registro Hora (00 seg., 00 min. 18 h).
1D 03 63 Registro Fecha (29, 03, 99)
74 Checksum del mensaje.
MENSAJE MIDA A PC: /01000001;
01 Nmero de perifrico (1).
00 Confirmacin de la modificacin OK.
00 Byte de estado (no existen errores).
01 Checksum del mensaje.
PROTOCOLO MIDABUS PC-MB 42 99.01
FORMATO DE DATOS EN LA MEMORIA DE FICHEROS
TIPO RELE
Tamao: 1 Byte
Encapsulado: FF - rel en ON
00 - rel en OFF
TIPO REGISTRO ENTERO
Tamao: 2 Bytes
Encapsulado: Valor del registro entero directamente.
TIPO REGISTRO COMA FLOTANTE
Tamao: 4 Bytes
Encapsulado: Valor del registro coma flotante en formato IEEE.
TIPO TEXTO
Tamao: Variable segn se haya definido dicho campo.
Encapsulado: 1 byte por carcter del texto.
TIPO HORA
Tamao: 3 Bytes
Encapsulado:
Byte 0 Bits 0..4
Bits 5..7
Da
Da de la semana
Byte 1 Bits 0..7 Mes
Byte 2 Bits 0..7 Ao (00..99)
TIPO FECHA
Tamao: 3 Bytes
Encapsulado:
Byte 0 Bits 0..4 Segundos
Byte 1 Bits 0..5 Minutos
Byte 2 Bits 0..5 Hora
PROTOCOLO MODBUS PC-MD 1 99.01
! PROTOCOLO MODBUS EN MODO RTU
En modo RTU los mensajes empiezan con un silencio de al
menos el tiempo de enviar 3.5 caracteres. Este tiempo depende de los
baudios en que se realice la comunicacin.
A continuacin se enva el mensaje que se compone cuatro partes
nmero de perifrico, comando, datos y CRC.
El final de mensaje se indica con otro silencio de 3.5 caracteres.
Inicio N Perifrico Comando Datos CRC Final
Silencio 8 bits 8 bits n % 8 bits 16 bits Silencio
! NMERO DE PERIFRICO
El protocolo MODbus admite direcciones validas del 0 al 247
decimal. Reservndose la direccin 0 para broadcasting (transmitir
ordenes a todos los perifrico a la vez). La familia de equipos MIDA
solo admite direcciones validas del 0 al 99.
! COMANDO
Los comandos validos van del 1 al 255 decimal. En la familia
MIDA se han implementado los siguientes comandos:
Comando Descripcin
Comando 01 y 02 Lectura de rels en compactado
Comando 03 y 04 Lectura de registros enteros
Comando 05 Escritura de un rel
Comando 06 Escritura de un registro entero
Comando 0F Escritura de mltiples rels en compactado
Comando 10 Escritura de mltiples registros enteros
PROTOCOLO MODBUS PC-MD 2 99.01
COMANDO 01 y 02:
LECTURA DE RELS EN COMPACTADO
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 01
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de rels (Hi) 00
N de rels (Lo) 10
CRC (Lo) 15
CRC (Hi) B5
(*) Pedir 16 rels a partir del 250 al perifrico 99.
Respuesta Ejemplo (Hex)
N Perifrico 63
Comando 01
N Bytes de datos 02
Dato 0 (rels 257-250) 6B
Dato 1 (rels 265-258) 5C
CRC (Lo) 6F
CRC (Hi) 3D
PROTOCOLO MODBUS PC-MD 3 99.01
COMANDO 03 y 04:
LECTURA DE REGISTROS ENTEROS
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 03
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de registros (Hi) 00
N de registros (Lo) 02
CRC (Lo) EC
CRC (Hi) 78
(*) Pedir 2 registros enteros partir del 250 al perifrico 99
Respuesta Ejemplo (Hex)*
N Perifrico 63
Comando 03
N Bytes de datos 04
Dato (Hi) (Reg. 250) 6B
Dato (Lo) (Reg. 250) 5C
Dato (Hi) (Reg. 251) 00
Dato (Lo) (Reg. 251) 01
CRC (Lo) A4
CRC (Hi) 03
PROTOCOLO MODBUS PC-MD 4 99.01
COMANDO 05:
ESCRITURA DE UN REL:
FF00 Rel ON
0000 Rel OFF
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 05
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
Valor del rel (Hi) FF
Valor del rel (Lo) 00
CRC (Lo) A4
CRC (Hi) 49
(*) Activar el rel 250 a ON del perifrico 99.
Respuesta Ejemplo (Hex)
N Perifrico 63
Comando 05
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
Valor del rel (Hi) FF
Valor del rel (Lo) 00
CRC (Lo) A4
CRC (Hi) 49
PROTOCOLO MODBUS PC-MD 5 99.01
COMANDO 06:
ESCRITURA DE UN REGISTRO ENTERO
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 06
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
Valor del registro (Hi) 03
Valor del registro (Lo) E8
CRC (Lo) A1
CRC (Hi) 07
(*) Escribir el registro 250 a 1000 del perifrico 99.
Respuesta Ejemplo (Hex)
N Perifrico 63
Comando 06
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
Valor del registro (Hi) 03
Valor del registro (Lo) E8
CRC (Lo) A1
CRC (Hi) 07
PROTOCOLO MODBUS PC-MD 6 99.01
COMANDO 0F:
ESCRITURA DE MULTIPLES RELS EN COMPACTADO
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 0F
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de rels (Hi) 00
N de rels (Lo) 10
N Bytes de datos 02
Dato 0 (rels 257-250) 6B
Dato 1 (rels 265-258) 5C
CRC (Lo) 68
CRC (Hi) 11
(*) Forzar 16 rels a partir del 250 al perifrico 99.
Respuesta Ejemplo (Hex)
N Perifrico 63
Comando 0F
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de rels (Hi) 00
N de rels (Lo) 10
CRC (Lo) 7C
CRC (Hi) 74
PROTOCOLO MODBUS PC-MD 7 99.01
COMANDO 10:
ESCRITURA DE MLTIPLES REGISTROS ENTEROS
FORMATO:
Pregunta Ejemplo (Hex)*
N Perifrico 63
Comando 10
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de registros (Hi) 00
N de registros (Lo) 02
N Bytes de datos 04
Dato (Hi) (Reg. 250) 6B
Dato (Lo) (Reg. 250) 5C
Dato (Hi) (Reg. 251) 00
Dato (Lo) (Reg. 251) 01
CRC (Lo) 94
CRC (Hi) DB
(*) Forzar 2 registros enteros a partir del 250 del perifrico 99
Respuesta Ejemplo (Hex)
N Perifrico 63
Comando 10
Direccin de inicio (Hi) 00
Direccin de inicio (Lo) FA
N de registros (Hi) 00
N de registros (Lo) 02
CRC (Lo) 69
CRC (Hi) BB
PROTOCOLO MODBUS PC-MD 8 99.01
! CRC
El CRC (Cyclical Redundancy Check) sirve para verificar que el
mensaje haya llegado correcto y se ha de aadir a todos los mensajes
que se enven y verificar en todos los mensajes que se reciban.
Cuando un equipo recibe un mensaje con CRC incorrecto no contesta
(se deber repetir la pregunta al cabo de cierto tiempo) y si la
respuesta recibida no tiene el CRC correcto se deber repetir la
pregunta.
A continuacin se incluyen dos rutinas diferentes (lenguaje C)
para calcular el CRC. La primera es ms corta y lenta y la segunda es
muy rpida pero larga.
RUTINA 1
unsigned int crc(unsigned char *dat,int nudat)
{
int n;
unsigned int CRC=0xffff;
unsigned int CRCO;
while(nudat--)
{
CRC=CRC^*dat++;
for (n=0;n<8;n++)
{
CRCO=CRC;
CRC>>=1;
if (CRCO&1) CRC^=0xa001;
}
}
return(CRC);
}
PROTOCOLO MODBUS PC-MD 9 99.01
RUTINA 2
unsigned char thi[256]={
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40};
unsigned char tlo[256]={
0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2,0xc6,0x06,0x07,0xc7,0x05,0xc5,0xc4,0x04,
0xcc,0x0c,0x0d,0xcd,0x0f,0xcf,0xce,0x0e,0x0a,0xca,0xcb,0x0b,0xc9,0x09,0x08,0xc8,
0xd8,0x18,0x19,0xd9,0x1b,0xdb,0xda,0x1a,0x1e,0xde,0xdf,0x1f,0xdd,0x1d,0x1c,0xdc,
0x14,0xd4,0xd5,0x15,0xd7,0x17,0x16,0xd6,0xd2,0x12,0x13,0xd3,0x11,0xd1,0xd0,0x10,
0xf0,0x30,0x31,0xf1,0x33,0xf3,0xf2,0x32,0x36,0xf6,0xf7,0x37,0xf5,0x35,0x34,0xf4,
0x3c,0xfc,0xfd,0x3d,0xff,0x3f,0x3e,0xfe,0xfa,0x3a,0x3b,0xfb,0x39,0xf9,0xf8,0x38,
0x28,0xe8,0xe9,0x29,0xeb,0x2b,0x2a,0xea,0xee,0x2e,0x2f,0xef,0x2d,0xed,0xec,0x2c,
0xe4,0x24,0x25,0xe5,0x27,0xe7,0xe6,0x26,0x22,0xe2,0xe3,0x23,0xe1,0x21,0x20,0xe0,
0xa0,0x60,0x61,0xa1,0x63,0xa3,0xa2,0x62,0x66,0xa6,0xa7,0x67,0xa5,0x65,0x64,0xa4,
0x6c,0xac,0xad,0x6d,0xaf,0x6f,0x6e,0xae,0xaa,0x6a,0x6b,0xab,0x69,0xa9,0xa8,0x68,
0x78,0xb8,0xb9,0x79,0xbb,0x7b,0x7a,0xba,0xbe,0x7e,0x7f,0xbf,0x7d,0xbd,0xbc,0x7c,
0xb4,0x74,0x75,0xb5,0x77,0xb7,0xb6,0x76,0x72,0xb2,0xb3,0x73,0xb1,0x71,0x70,0xb0,
0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,
0x9c,0x5c,0x5d,0x9d,0x5f,0x9f,0x9e,0x5e,0x5a,0x9a,0x9b,0x5b,0x99,0x59,0x58,0x98,
0x88,0x48,0x49,0x89,0x4b,0x8b,0x8a,0x4a,0x4e,0x8e,0x8f,0x4f,0x8d,0x4d,0x4c,0x8c,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,0x43,0x83,0x41,0x81,0x80,0x40}
;
PROTOCOLO MODBUS PC-MD 10 99.01
unsigned int crc(unsigned char *dat,int nudat)
{
unsigned char CRClo=0xff;
unsigned char CRChi=0xff;
unsigned int ind;
while(nudat--)
{
ind=CRClo^*dat++;
CRClo=CRChi^thi[ind];
CRChi=tlo[ind];
}
return(((unsigned int)CRChi<<8)|CRClo);
}
PROTOCOLO LIBRE PC-PL 1 99.01
Los equipos MIDA (segn modelos) disponen de unas
instrucciones, registros y rels para la recepcin y transmisin de
cadenas ASCII. Dicho protocolo lo denominamos Protocolo Libre.
El Protocolo Libre solamente tiene funcionalidad en el puerto de
comunicaciones RS232 de los equipos MIDA. Por lo que es un
protocolo punto a punto, no funcionando en redes 485.
! Configuracin del Set-up.
En el set-up de los equipos que incorporan el protocolo libre
disponemos de cuatro parmetros para configurarlo, (los dos primeros
varan segn del modelo de MIDA):
" Protocolo COM: Donde indicaremos que protocolo tiene
por defecto el MIDA cada vez que s inicialice este (solo
para equipos que disponen de puerto de comunicaciones
RS232 y este no es configurable a RS485).
" Protocolo Libre: Donde indicaremos en que puerto de
comunicaciones tenemos configurado como RS232 y
queremos activar el Protocolo Libre (solo para equipos que
disponen de puertos de comunicaciones RS232 y estos son
configurables a RS485).
" Carcter Inicial: Donde indicaremos el carcter inicial de
mensaje.
" Carcter Final: Donde indicaremos el carcter final del
mensaje.
" Longitud Mensaje: Donde indicaremos la longitud del
mensaje de recepcin.
NOTA:
El parmetro 0 como carcter de inicio o final, indica la ausencia
del mismo.
El parmetro 0 como la longitud del mensaje de recepcin
indicar que no se verifique la misma. Si se pone una longitud mayor
de 132 (tamao mximo de buffer) se perdern los ltimos caracteres.
PROTOCOLO LIBRE PC-PL 2 99.01
! Rels y registros
Los equipos MIDA con Protocolo Libre disponen de un rel y de
un registro entero para la gestin para dicho protocolo (ver mapa de
memoria del Manual de Usuario del equipo):
" Mensaje Completo (rel): Dicho rel se activar cuando en
el buffer de recepcin hay un mensaje para ser tratado.
" Activa Protocolo Libre (rel): Con este rel se puede
activar y desactivar el Protocolo Libre.
" Longitud Mensaje Recepcin (registro entero): Indica los
caracteres que hay actualmente almacenados en el buffer
de recepcin.
! Funcionamiento
Si tenemos configurado el puerto de comunicaciones RS232 en
modo Protocolo Libre, (quedar desactivado el protocolo MIDAbus),
este funcionara de la siguiente forma:
" Si el carcter de inicio es diferente de cero al recibirlo se inicializa
el buffer de recepcin y se guarda dicho carcter. Se activara el
rel de RX y el registro entero de Longitud de Mensaje de
Recepcin se pondr a 1.
" Si el carcter de inicio es cero, el primer carcter que se reciba
tras tratar el mensaje inicializar el buffer de recepcin y se
guardar. Esto activar el rel de RX y el registro entero de
Longitud de Mensaje de Recepcin se pondr a 1.
" Si el carcter de final es diferente de cero, al recibir un carcter de
final se activar el rel de Mensaje Completo y desactivar la
recepcin hasta que el mensaje no sea tratado.
" Si se llega a la longitud de mensaje programada en el set-up, se
activar el rel de Mensaje Completo y desactivar la recepcin
hasta que el mensaje no sea tratado.
" En el caso de tener carcter de inicio y longitud programada,
puede ocurrir el caso de que se active el rel de Mensaje
completo y sin que el rel de RX este activado. Esto implica que
se ha recibido un mensaje de la longitud programada sin haber
PROTOCOLO LIBRE PC-PL 3 99.01
recibido previamente el carcter de inicio, es trabajo del programa
del usuario el actuar en consecuencia.
La rutina de transmisin con Protocolo Libre funciona igual que
sin dicho protocolo, salvo que aade al final del mensaje el carcter
CARRY RETURN (13 dec).
NOTA: Cada puerto de comunicaciones tiene un nico buffer para
transmitir y recibir, por lo que si durante la recepcin de un mensaje
transmitimos por dicho puerto, perderemos lo recibido hasta el
momento. Al iniciarse la recepcin se activa el rel de RX y, por tanto,
debera ser consultado antes de realizar una transmisin si no se
quiere perder mensajes.
! Activar y desactivar el Protocolo Libre
Existe un rel (Activa Protocolo Libre) para poder activar y
desactivar por programa el Protocolo Libre, de forma que se pueda
trabajar con dicho protocolo y en un cierto punto del programa cambie
al funcionamiento normal (MIDAbus).
En el caso de tener activado el Protocolo Libre (el rel estar
activado) si desactivamos el rel, desactivaremos dicho protocolo. Si
lo volvemos a activar, reactivaremos el Protocolo Libre.
Si reactivamos el Protocolo Libre hay que tener cuidado con la basura
que pueda haber quedado en el buffer de recepcin, un buen consejo
es ejecutar inmediatamente la instruccin "COM 9" para leer posible
basura y reinicializar el buffer de recepcin.
En los equipos MIDA en donde el puerto de comunicaciones
RS232 puede ser configurable a RS485, el rel Activa Protocolo Libre,
no funcionara al menos de que se halla activado dicho protocolo
mediante el set-up del equipo. Por lo contrario en los equipos que el
puerto de comunicaciones RS232 no puede ser configurados a
RS485, el rel Activa Protocolo Libre funciona independientemente del
set-up del equipo, por lo que podemos activarlo mediante el set-up o
por programa usuario.
PROTOCOLO LIBRE PC-PL 4 99.01
DISB XXXX YYYY
NEMNICO: DISB
OPERANDO XXXX: Define la base en que se escribe el nmero.
OPERANDO YYYY: Numero de caracteres a escribir.
CDIGO INSTRUCCIN: 82
DESCRIPCIN:
Escribe sobre el buffer general un nmero almacenado sobre la pila
aritmtica, a partir de la posicin apuntada por la instruccin LOC.
El operando XXXX indica el tipo de base que se escribe en el buffer:
0 En binario.
1 En Octal (0..177777).
2 En decimal. (0..65536).
3 En hexadecimal (0..FFFF).
4 En BCD.
El operando YYYY indica el nmero de caracteres a escribir, de 1 a
6.
Decrementa un nivel la pila aritmtica (-1).
# Ejemplos:
Pila Aritmtica Instruccin Buffer
65
65
65
65
65
16706
16706
16706
16706
16706
16706
DISB 0 1
DISB 1 4
DISB 2 4
DISB 3 4
DISB 4 1
DISB 0 1
DISB 0 2
DISB 1 6
DISB 1 5
DISB 1 4
DISB 2 6
A
0101
0065
0041
e Carcter 65
H
B Carcter 42
H
AB Caracteres 41
H
42
H
040502
40502
0502
016706
DISB
PROTOCOLO LIBRE PC-PL 5 99.01
16706
16706
16706
16706
16706
16706
16706
16706
16706
DISB 2 5
DISB 2 4
DISB 3 6
DISB 3 5
DISB 3 4
DISB 3 3
DISB 4 3
DISB 4 2
DISB 4 1
16706
6706
004142
04142
4142
142
Caracteres 01
H
67
H
06
H
Caracteres 67
H
06
H
Carcter 06
H
PROTOCOLO LIBRE PC-PL 6 99.01
LECB XXXX YYYY
NEMNICO: LECB
OPERANDO XXXX: Define la base en que se lee el nmero.
OPERANDO YYYY: Numero de caracteres a leer.
CDIGO INSTRUCCIN: 83
DESCRIPCIN:
Lee del buffer general, a partir de la posicin apuntada por la
instruccin LOC, un nmero y lo almacena sobre la pila aritmtica.
El operando XXXX indica el tipo de base que se lee del buffer:
0 En binario.
1 En Octal (0..177777).
2 En decimal. (0..65536).
3 En hexadecimal (0..FFFF).
4 En BCD.
El operando YYYY indica el nmero de caracteres a leer, de 1 a 6.
Incrementa un nivel la pila aritmtica (+1).
# Ejemplo:
Buffer Instruccin Pila Aritmtica
A
0101
0065
0041
e Carcter 65
H
AB Caracteres 41
H
42
H
AB Caracteres 41
H
42
H
040502
040502
040502
016706
016706
016706
LECB 0 1
LECB 1 4
LECB 2 4
LECB 3 4
LECB 4 1
LECB 0 1
LECB 0 2
LECB 1 6
LECB 1 5
LECB 1 4
LECB 2 6
LECB 2 5
LECB 2 4
65
65 = 101
OCT
65
65 = 41
H
65
65 = 41
H
16706 = 4142
H
16706 = 040502
OCT
2088 = 04050
OCT
261 = 0405
OCT
016706
01670
0167
LECB
PROTOCOLO LIBRE PC-PL 7 99.01
4142
4142
4142
Caracteres 01
H
67
H
06
H
Caracteres 01
H
67
H
06
H
Caracteres 01
H
67
H
06
H
LECB 3 4
LECB 3 3
LECB 3 2
LECB 4 3
LECB 4 2
LECB 4 1
16706 = 4142
H
1044 = 414
H
65 = 41
H
016706
0167
01
Es responsabilidad del programa de autmata que el nmero
ledo quepa en un registro entero (16 bits), en caso contrario el
resultado puede ser impredecible.
Al guardar el nmero ledo sobre la pila aritmtica ser tratado
como un entero con signo, lo cual significa que si el nmero escrito
sobre el buffer es mayor de 32767 al ser guardado sobre la pila
tendremos el nmero negativo correspondiente. Por ejemplo si en el
buffer tenemos un 65535 en decimal o un FFFF en hexadecimal, en la
pila se almacenar un 1.
PROTOCOLO LIBRE PC-PL 8 99.01
COM XXXX
NEMNICO: COM
OPERANDO XXXX: Constante 9.
CDIGO INSTRUCCIN: 80
DESCRIPCIN:
Copia el contenido actual de buffer de recepcin sobre el buffer
general, para poder ser ledo con LECB y escrito con DISB.
El operando XXXX es la constante 9,para indicar al puerto de
comunicaciones que es una comunicacin utilizando las rutinas de
Protocolo Libre.
No opera con las pilas (0)
Los pasos que efecta la instruccin COM 9 son:
" Copia sobre el buffer general el contenido del buffer de recepcin.
" Desactiva el rel de RX.
" Desactiva el rel de Mensaje Completo.
" Pone a cero el registro entero de Longitud de Mensaje.
" Se ejecuta un LOC 0.
El rel de RX ha permanecido activado hasta ahora, indicando
que todava estamos en el proceso de recepcin y que si
transmitiramos un mensaje perderamos el contenido del buffer de
recepcin.
El rel de Mensaje Completo nos indica que el mensaje esta
listo para ser pasado del buffer de recepcin al buffer general (ejecutar
la instruccin COM 9). Tambin inhabilita la recepcin de nuevos
mensajes para no perder el mensaje recibido. Al realizar la instruccin
COM 9 se desactiva dicho rel y esta forma se habilita el puerto de
comunicaciones para recibir nuevos mensajes. Tambin se podra
habilitar y deshabilitar dicho puerto mediante un SET o un RESET del
rel.
COM
PROTOCOLO LIBRE PC-PL 9 99.01
El registro entero de Longitud de Mensaje de RX se pone 0 al
ejecutar la instruccin COM 9, por lo que si fuera necesario utilizar
dicho valor para el tratamiento del mensaje se debera salvar en algn
registro antes de utilizar dicha instruccin.
PROTOCOLO LIBRE PC-PL 10 99.01
.
TE
.
TRATAMIENTO DE ERRORES TE-RE 1 02.04
! ERRORES EN TIEMPO DE EJECUCIN
Los errores en tiempo de ejecucin son aqullos que se
producen mientras el programa usuario del MIDA est ejecutndose.
Una vez compilado y transferido el programa al equipo sin errores
comienza la ejecucin del mismo. Este capitulo trata de la descripcin
de los errores que se detectan mientras se ejecuta el programa.
Se puede realizar un programa que sintcticamente est
correctamente escrito y que por lo tanto su compilacin no produzca
errores, pero que una vez enviado al MIDA no funcione correctamente
hasta incluso produzca errores y defectos en el funcionamiento del
equipo (autoreset, paradas, etc). Cuando esto ocurra habr que
proceder de la forma que se describe a continuacin testeando cada
una de las posibilidades que se van a describir en este apartado.
Existen varios tipos de errores:
TIPO DE ERROR ELEMENTO QUE LO DETECTA
De Software Rels de errores.
De Hardware Registros enteros de errores
De Comunicaciones Byte de status del Protocolo MIDAbus
De estado de los puertos
de comunicaciones
Rels de estado de los puertos de
comunicaciones
NOTA: Segn el modelo de MIDA con el que estemos trabajando,
tendremos unos reles/registros determinados de errores o estado.
Para ver de cuales disponemos, observaremos el Mapa de Memoria
contenido en el Manual de Usuario del equipo correspondiente.
TRATAMIENTO DE ERRORES TE-RE 2 02.04
! ERRORES DE SOFTWARE
Estos se producen cuando el responsable de los errores es el
programa usuario del MIDA, por estar mal escrito, mal planteado, etc.
El equipo cada vez que ejecuta la instruccin END inicializa los
niveles de las pilas lgica, aritmtica y de subrutinas, y actualiza los
rels de errores para impedir una detencin de la ejecucin del
programa.
Esto permite que el equipo no se detenga y que ejecute la parte de
programa en buenas condiciones, pero no garantiza en absoluto que
la instalacin funcione correctamente.
Existen una serie de rels internos que indican en todo
momento los errores que se han detectado al ejecutarse la instruccin
END.
El equipo activa los rels internos de errores cada vez que se
ejecuta la instruccin END, por lo tanto si no se ejecuta esta
instruccin los rels de errores no se activan nunca.
Una vez activado algn rel de error, ste no se desactiva ms que
por una desactivacin sobre el rel pertinente por parte del usuario,
por un reset puesta en tensin del equipo. Es decir que si un error
desapareciese, su rel pertinente no se desactivara hasta que
efectuaramos una de las acciones antes mencionadas.
Los rels de errores del equipo son:
TRATAMIENTO DE ERRORES TE-RE 3 02.04
Error Rel Batera
Es un rel que indica el fallo de la batera de Ni-Cd que
preserva los datos contenidos en la memoria RAM y del reloj interno
del equipo.
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
1 Batera en buen estado.
0 Fallo en batera (avera baja carga ).
El fallo detectado de la batera es debido a un defecto de
hardware: la carga de la batera ha rebasado un lmite mnimo bien
que se encuentra en mal estado.
Para comprobar el estado de la batera, ponemos el reloj en
hora y dejamos el equipo MIDA desconectado unos minutos.
Volvemos a conectar el equipo y comprobamos la hora, si esta no es
la correcta, la batera es defectuosa.
Error de Divisin por Cero
Se produce cuando el programa MIDA ha intentado realizar una
divisin por cero.
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
0 No existe error.
1 Existe algn intento de divisin por cero.
Debe revisarse el programa para detectar el punto donde se
ejecuta este intento de divisin por cero y subsanar este error.
La operacin de divisin puede dar un resultado inesperado.
TRATAMIENTO DE ERRORES TE-RE 4 02.04
Error de rebasamiento aritmtico (overflow)
Se produce cuando el programa MIDA ha intentado realizar una
operacin aritmtica cuyo resultado es superior a la capacidad de
clculo del equipo.
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
0 No existe error.
1
Existe alguna operacin aritmtica cuyo
resultado excede de la capacidad de
clculo del equipo.
Debe revisarse el programa para detectar el punto donde se
ejecuta este clculo aritmtico y subsanar el error.
La operacin aritmtica puede dar un resultado inesperado.
Error de pila lgica
Se produce cuando existe un desequilibrio entre cargas y
descargas sobre la pila lgica del equipo.
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
0 No existe error.
1
Existe algn desequilibrio entre cargas y
descargas sobre la pila lgica del
equipo).
Debe revisarse el programa para detectar el punto donde se
producen estos desequilibrios.
TRATAMIENTO DE ERRORES TE-RE 5 02.04
Error de pila aritmtica
Se produce cuando existe un desequilibrio entre cargas y
descargas sobre la pila aritmtica del equipo.
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
0 No existe error.
1
Existe algn desequilibrio entre cargas y
descargas sobre la pila aritmtica del
equipo).
Debe revisarse el programa para detectar el punto donde se producen
estos desequilibrios.
Error de pila de subrutinas
Se produce cuando existe un desequilibrio entre las llamadas a
subrutinas y los retornos de las mismas.
Este error se produce cuando se realiza una llamada a una subrutina y
esta no termina con la instruccin de retorno (RET).
Se puede operar con l como cualquier otro rel interno.
Estado del rel Estado detectado del error
0 No existe error.
1
Existe algn desequilibrio entre llamadas y
retornos a subrutinas).
Debe revisarse el programa para detectar el punto donde se
producen estos desequilibrios.
TRATAMIENTO DE ERRORES TE-RE 6 02.04
! ERRORES DE HARDWARE
En el mapa de memoria del equipo existen unos registros de
deteccin de errores que indican todas las posibles incidencias que
pueden ocurrir al poner en marcha el equipo y/ durante la ejecucin
de programas MIDA.
Los errores que se indican en estos registros son en principio
los que se pueden producir en el hardware del equipo base y los
mdulos o cartas de ampliaciones (mdulos mal insertados mal
parametrizados, memorias EPROM EEPROM en mal estado, etc.),
aunque tambin se indican algunos producidos por la ejecucin del
programa MIDA, lo cual es redundante con la informacin que dan los
rels de deteccin de errores descritos anteriormente.
Como decimos, el contenido de estos registros indica el ( los)
error/es detectado/s mediante una codificacin que se va a describir.
Estos registros son accesibles tanto para el programa MIDA como
para un PC conectado va serie. De esta manera pueden ejecutarse
rutinas de tratamiento de errores tanto en el mismo equipo como en un
PC central avisando al usuario de los problemas detectados.
El equipo sealiza los errores detectados activando bits de
estos registros. Cada bit indica un tipo de error diferente y cada
registro puede detectar ms de un error.
El contenido del registro indica los errores que se han detectado.
El equipo sealiza los errores detectados activando bits de
estos registros cada vez que se ejecuta la instruccin END, por lo
tanto si no se ejecuta esta instruccin los registros de errores no se
actualizan nunca.
Una vez activado algn bit de registro de error, ste no se
desactiva ms que por una accin por parte del usuario puesta en
tensin del equipo. Es decir que si un error desapareciese, el registro
pertinente no se actualizar hasta que efectuaramos una de las
acciones antes mencionadas.
Unicamente se actualizar automticamente el bit B1 de Errores
Generales y los bits de Errores de Cartas de los equipos que
dispongan dichos errores.
A continuacin se describe la decodificacin del contenido de
estos registros as como los errores que se detectan:
TRATAMIENTO DE ERRORES TE-RE 7 02.04
Registro Descripcin
Errores General
Registro general de deteccin de errores.
Pueden ser producidos por un fallo en la carta
microprocesadora, por algn fallo en los
mdulos o cartas de ampliacin el programa
usuario del MIDA.
En su codificacin puede determinarse la
naturaleza del error.
Errores Placa Base
Registro de errores detectados en la carta
bsica del equipo MIDA.
En este registro se detecta cualquier error que
se produzca en esta carta.
Errores Cartas
Registro de deteccin de errores en el mdulo
o carta de ampliacin.
NOTA: Segn el modelo de MIDA con el que estemos trabajando,
tendremos diferentes bits de errores determinados en los registros de
errores. Para ver de cuales disponemos, observaremos el Manual de
Usuario del equipo correspondiente.
Registro Errores General
Indica los errrores
Registro de 2 bytes (16 bits) (X = bit no usado):
7 6 X X 3 2 1 0 7 6 5 4 3 2 1 0
BYTE ALTO BYTE BAJO
TRATAMIENTO DE ERRORES TE-RE 8 02.04
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
b0 0001 1
Se ha pedido una accin al equipo que no
es posible ejecutarla por estar el programa
MIDA en marcha.
Este error se produce slo cuando se
realizan peticiones mediante los Protocolos
de Comunicaciones.
Se debe eliminar esta peticin bien
detener la ejecucin del programa MIDA.
b1 0002 2
Se ha producido un error en las variables
demandas mediante el protocolo de
comunicaciones.
Revisar variables demandas en el mensaje
de comunicaciones.
b2 0004 4
Se ha intentado leer escribir en la Base
de Datos fuera de los mrgenes.
Revisar las definiciones de los Ficheros de
la Base de Datos del equipo (Directiva de
Compilador "FILE").
b3 0008 8
Se ha intentado leer escribir fuera de los
mrgenes del mapa de memoria disponible
en el equipo mediante el programa usuario.
Revisar el programa MIDA.
En especial las instrucciones de
direccionamiento indirecto.
b4 0010 16
Se ha intentado realizar una divisin por
cero una operacin aritmtica que ha
rebasado la capacidad de clculo del
equipo.
Revisar el programa usuario MIDA
TRATAMIENTO DE ERRORES TE-RE 9 02.04
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
b5 0020 32
Se ha detectado algn error de
desequilibrio de pilas (lgica, aritmtica
de subrutinas).
Revisar el programa MIDA
b6 0040 64
Se ha producido un error de Checksum en
la EPROM FLASH.
Se debe reiniciar el equipo. Si el error
persiste, ponerse en contacto con el S.A.T.
b7 0080 128
Se ha producido un error de lectura
escritura en la EEPROM.
Se debe reiniciar el equipo. Si el error
persiste, ponerse en contacto con el S.A.T.
B0 0100 256
Se ha detectado un error en algn
microprocesador de control de algn
mdulo o carta de ampliacin.
Revisar que el equipo reconozca todos los
mdulos y cartas insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos. Tambin comprobar el registro
entero de Errores de Cartas para ver que
tipo de error nos indica.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
B1 0200 512
Se ha detectado un error de acceso al
display LCD.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
* S.A.T.: Servicio de Asistencia Tcnica.
TRATAMIENTO DE ERRORES TE-RE 10 02.04
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
B2 0400 1024
Se ha detectado un error de acceso al
reloj del equipo MIDA.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
B3 0800 2048
No se detecta Mdem o instruccin AT
incorrecta.
Comprobar cableado y configuracin del
mdem.
Revisar en el programa las llamadas a la
instruccin AT.
Ver apartado Tratamiento Errores Mdem
en el capitulo Tratamiento Mdem
B6 4000 16384
Se ha detectado un fallo de
comunicaciones entre los
microprocesadores de los mdulos o cartas
de ampliacin y el microprocesador de
control de dichos mdulos o cartas.
Revisar que el equipo reconozca todos los
mdulos y cartas insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
TRATAMIENTO DE ERRORES TE-RE 11 02.04
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
B7 8000 32768
Se ha detectado algn mdulo o carta de
ampliacin con nmero de perifrico
repetido.
Revisar que el equipo reconozca todos los
mdulos insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
* S.A.T.: Servicio de Asistencia Tcnica.
Los bits B4 y B5 no tienen utilizacin en este registro.
Si se detectan varios errores al mismo tiempo, el registro tomar
el valor correspondiente a la suma de los pesos descritos en la
columna PESO EN DECIMAL de la tabla.
TRATAMIENTO DE ERRORES TE-RE 12 02.04
Registro Errores Placa Base
Registro de 2 bytes (16 bits) (X = bit no usado):
X X X X X X X X X 6 X X 3 2 1 0
BYTE ALTO BYTE BAJO
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
b0 0001 1
El PIC-Master no admite o no reconoce
algn modulo o carta de ampliacin
conectado.
Revisar que el equipo reconozca todos los
mdulos insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
b1 0002 2
No hay suficiente RAM del PIC-Master
para gestionar mas mdulos o cartas de
ampliacin.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
b2 0004 4
Error de comunicacin del PIC-Master con
el conversor A/D de algn modulo o carta
de ampliacin.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
TRATAMIENTO DE ERRORES TE-RE 13 02.04
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
b3 0008 8
Error interno de software.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
b6 0040 64
Se ha detectado algn mdulo o carta de
ampliacin con nmero de perifrico
repetido.
Revisar que el equipo reconozca todos los
mdulos insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
TRATAMIENTO DE ERRORES TE-RE 14 02.04
Registro Errores Cartas
Registro de 2 bytes (16 bits) (X = bit no usado):
X X X X X X X X X X X X 3 2 1 0
BYTE ALTO BYTE BAJO
BIT
Valor
en
Hex.
Peso
en
Dec
Tipo de error y solucin
b0 0001 1
Modelo de carta no admitido o no reconoce
configuracin la configuracin de esta.
Revisar que el equipo reconozca todos los
mdulos insertados (mensaje de
inicializacin) para detectar posibles fallos
de instalacin parametrizacin de los
mismos.
Si tras esta revisin no se detecta
visualmente el error si este persiste,
ponerse en contacto con el S.A.T.
b1 0002 2
Error general del bus I2C de la carta.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
b2 0004 4
Error de parametrizacin de la carta.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
b3 0008 8
Error interno del conversor A/D.
Se debe reiniciar el equipo.
Si tras reiniciar el equipo persiste el error,
ponerse en contacto con el S.A.T.
TRATAMIENTO DE ERRORES TE-RE 15 02.04
! ERRORES DE COMUNICACIONES
Las respuestas de los mensajes del protocolo MIDAbus llevan
un byte de estado (byte de status) del equipo (ver capitulo Protocolo
MIDAbus de este mismo manual).
Si este byte es 00, no existen problemas ni errores en el equipo, por el
contrario, si tiene algn bit activado es que el equipo tiene algn
problema error de programa.
El byte de estado corresponden a los bits b0 a b7 de la tabla de
Errores Generales.
! RELES ESTADO DE LOS PUERTOS DE COMUNICACIONES
Los rels de estado de los puertos de comunicaciones: Rx
COM, Tx COM, CTS COM y TIME-OUT COM, reflejan en todo
momento el estado en que se encuentra cada uno de los puertos de
comunicaciones del equipo.
Estos rels no son intrnsecamente unos rels de errores, tan slo
reflejan sus estados.
Sin embargo, el rel TIME-OUT COM (para puertos de
comunicaciones RS232) s puede considerarse rel de error ya que se
activa cuando el equipo no puede lanzar una comunicacin.
El TIME-OUT se produce al cabo de 5s. que el equipo no puede
realizar una transmisin. Transcurrido ese tiempo el equipo activa el
rel pertinente de TIME-OUT COM y prosigue la ejecucin normal del
programa MIDA.
NOTAS NT-NT 1 99.01

Вам также может понравиться