Descripción

Editor/Compilador

Descripción del editor

Funcionamiento del PLC

Descripción del lenguaje

Listado de instrucciones

Especificaciones

Glosario


Especificaciones

Especificaciones modelo CP121, ROM 1.00

· Variables para uso general: 1024 words (v0 a v1023)

· Variables retentivas (no pierden el valor al apagar el equipo): 63 words (m0 a m62)

· Entradas digitales: 8 (i0.0 a i0.7)

· Salidas digitales: 8 (q0.0 a q0.7)

· Entradas analógicas: 4

1. Especial 16 bit para celda de carga : 1 (ai0)

2. Genérica 12 bit: 3 (ain1 a ain3)

· Salidas analógicas: 0

· Estados de máquina: 8 (sm0 a sm7)

· Temporizadores: 96 (tp0 a tp95)

· Contadores: 64 (ct0 a ct63)

· Bits en un word: 16 (0.0 a 0.15)

· Decimales en temporizadores: 1

· Rango para las variables analógicas (en aritmética) -32768 a 32767

· Anidación máxima en llamadas a subrutinas:32

· Máxima cantidad de líneas de código: aprox. 2000

· Velocidad 2º puerto (baudios COM2) programable

Especificaciones modelo CP121, ROM 1.01

· Salida analógica

· Identificación de versión en área SM

Especificaciones modelo CP121, ROM 1.02

· Operaciones artiméticas en 32bit y punto flotante (real)

Areas de memoria y monitoreo

Entrada de celda con amortiguación digital

Tipos de datos

Ver señalizaciones


Funcionamiento del PLC

El PLC ejecutará siempre el programa como si fuese un círculo cerrado, es decir, que cuando llegue al final (en una instrucción END ), inmediatamente comenzará a ejecutar desde el principio. A esto se lo llama vuelta de programa. A causa de esto muchas instrucciones son ejecutadas siempre. No es posible hacer saltos hacia atrás, pues entorpecería el funcionamiento.

Entre 'vuelta' y 'vuelta' es actualizado el estado de entradas, salidas y comunicación. Por lo tanto si se ejecutara un S T q0.0 (copiar el valor del bit 0 del acumulado a la 1º salida digital) no se manifestará inmediatamente en la salida sino hasta que concluya la vuelta de programa.

Internamente el estado de la salida cambia, pero la salida física del PLC adoptará el último estado definido por el programa cuando termine la vuelta de programa.

La ejecución del programa es supervisada por el WatchDog y los estados por las indicaciones luminosas .


Areas de memoria

Areas de memoria y monitoreo

Direcciones para comunicación MODBUS RTU para ROM 1.00

Area | Rango | Tipo
v (variables) | 1 a 1024 | v0 a v1023
m (variables permanentes o retentivas) | 1025 a 1087 | m0 a m63
i (entradas digitales) | 1088 | i0
q (salidas digitales) | 1089 | q0
ai (entradas analógicas) | 1090 a 1095 | ai0 a ai5
aq (salidas analogicas) | - | -
sm (estados internos) | 1096 a 1103 | sm0 a sm7
tp (temporizadores) | 1104 a 1199 | tp0 a tp95
ct (contadores) | 1200 a 1263 | ct0 a ct63

Direcciones para comunicación MODBUS RTU para ROM 1.01

Area | Rango | Tipo
v (variables) | 1 a 1024 | v0 a v1023
m (variables permanentes o retentivas) | 1025 a 1087 | m0 a m63
i (entradas digitales) | 1088 | i0
q (salidas digitales) | 1089 | q0
ai (entradas analógicas) | 1090 a 1095 | ai0 a ai5
aq (salidas analogicas) | 1096 a 1097 | aq0 a aq1
sm (estados internos) | 1098 a 1105 | sm0 a sm7
tp (temporizadores) | 1106 a 1201 | tp0 a tp95
ct (contadores) | 1202 a 1265 | ct0 a ct63

Como cada área empieza por la dirección 0 es necesario consultar la tabla para saber cual es la dirección que le corresponde para poder accederla mediante comunicación. Para poder acceder a un solo bit determinado se requiere el protocolo MODBUS RTU Extend donde se especifica la dirección y el bit.

Entradas analógicas

Variable | Función
ai0 | Entrada de celda filtrada
ai1 | Entrada 12bit Ain1
ai2 | Entrada 12bit Ain2
ai3 | Entrada 12bit Ain3
ai4 | Estado fuente interna
ai5 | Proporcional a la temperatura ambiente (sin escala)

Salidas analógicas (ROM 1.01)

Variable | Función
aq0 | Salida analógica 0 a 10v en 12 bit (4000 escalones)
aq1 | Reservado

Area SM

Variable | Función
sm0.0 | siempre en 1. Puede forzarse a 0, pero volverá a 1 después de un END .
sm0.1 | permanece en 1 durante la 1ª vuelta de programa. después en 0.
sm0.2 | en 1 indica la aucencia o error de programa
sm0.3 | alterna estado entre 0 y 1 en una frecuencia de 1Hz
sm0.4 | alterna estado entre 0 y 1 en una frecuencia de 0.5Hz
sm0.5 | alterna estado entre 0 y 1 en una frecuencia de 1/3Hz
sm0.6 | alterna estado entre 0 y 1 en una frecuencia de 1/60Hz
sm0.7 | reservado
sm0.8 | en 1 durante una vuelta de programa. Se repite cada segundo
sm0.9 | en 1 durante una vuelta de programa. Se repite cada minuto
sm1 | reservado
sm2 | tiempo de RUN (word bajo)
sm3 | tiempo de RUN (word alto)
sm4 | selector de filtro digital para entrada analógica de 16 bit (0 a 8)
sm5 | versión de ROM (byte alto = mayor; byte bajo = menor) (nuevo desde ROM 1.01)
sm6 | reservado
sm7 | reservado

Direcciones para comunicación MODBUS RTU para ROM 1.02

Area | Rango | Tipo
v (variables) | 1 a 1024 | v0 a v1023
m (variables permanentes o retentivas) | 1025 a 1087 | m0 a m63
i (entradas digitales) | 1088 | i0
q (salidas digitales) | 1089 | q0
ai (entradas analógicas) * | 1090 a 1095 | ai0 a ai5
aq (salidas analogicas) | 1096 a 1097 | aq0 a aq1
sm (estados internos) | 1098 a 1113 | sm0 a sm15
tp (temporizadores) | 1114 a 1209 | tp0 a tp95
ct (contadores) | 1210 a 1273 | ct0 a ct63

* ai0 está en 15 bit para que siempre sea positivo

Area SM

Variable | Función
sm6 | Tiempo de demora de la respuesta de la comunicación. Este se define en el programa, pero puede modificarse durante la ejecución. El byte bajo corresponde al puerto 1 y el alto al 2. Está expresado en Tics de la interrupción interna de la CPU (unos 500us)
sm7 | reservado
sm8 | ai0 sin filtrar en 16 bit
sm9 | siempre en 0
sm10 | ai0 filtrado (según sm4) en 16 bit
sm11 | siempre en 0
sm12 | ai0 tarado .
sm13 | siempre en 0
sm14 | reservado
sm15 | reservado


Descripción del lenguaje

Cada una de las instrucciones cumple una simple y rudimentaria función. La mayoría consta de 1 o 2 argumentos y la operación se hace contra el acumulador . Por ejemplo suma: ADD arg. La instrucción ADD sumará el valor del argumento arg al acumulador. El resultado queda en el acumulador.

La dependencia del acumulador es vital para traducir o interpretar el programa en un diagrama de contactos.

Ejemplo:

Supongamos que en una máquina cuando la puerta está abierta y el motor está en marcha debe encenderse la luz del tablero que indique que la puerta debe cerrarse. Tenemos un sensor NA para la puerta y otro de movimiento para el motor.

Puerta MotorM Luz

¦–––––¦/¦––––––––¦ ¦––––––––( )–––¦

LDN Puerta ;leemos (invertido -NOT) el

;estado del sensor de puerta

AND MotorM ;"Y si está el motor en marcha".

;Si la puerta está abierta(Puerta =

;0) y el motor está en marcha

S T Luz ;enciende la luz.

Al leer en forma invertida resulta como si el sensor de puerta cerrada fuese NC. Cuando esta está cerrada el acumulador ACC tendrá valor 0 (puerta cerrada = 1, NOT(Puerta) = 0).

Al hace AND con 0 (0 AND cualquier_cosa = 0) la salida Luz permanecerá desactivada, y por lo tanto la luz del tablero apagada. Ahora si la puerta está abierta (LDN Puerta = 1) y el motor parado (MotorM = 0) sucede lo mismo que el caso anterior (0 AND cualquier_cosa = 0).

Solo cuando la puerta está abierta (LDN Puerta = 1, si está abierta) y el motor está en marcha (MotorM = 1) la salida que enciende la luz se activará.

A partir de la ROM 1.02 se ha incorporado aritmética de 32bit y punto flotante (real) . Por esto es necesario observar el tipo de dato que se está manipulando para no mezclarlos. El tipo de dato depende de como se halla declarado la variable. Para el caso de las constantes se asumirán como 32bit cuando superen los límites de -32768 y 32767. Para real (punto flotante) son -2147483648 y 2147483647. También se puede escribir como en C: por ejemplo, 1 en real se escribiría 1.0


Listado instrucciones

Instrucciones del controlador CP121 ROM 1.00

Descripción

ABS

ADD

AND

ANDN

ANDP

BLKMOVE

CAL

CALC

CALNC

CTD

CTU

DEC

DI_TO_R

DIV

END

EQ

FIFO

FILL

F_TRIG

GE

GT

INC

JMP

JMPC

JMPNC

LD

LDN

LE

LIMIT

LT

MAX

MIN

MOD

MOVE

MUL

NAND

NE

NOR

OR

ORN

R

RET

RETC

RETNC

R_TO_DI

R_TRIG

S

SCALE

SQRT

ST

STN

SUB

TARAR

TOF

TON

TP

TP_C

XOR

XORN


Glosario

· ACC : acumulador

· Real : formato numérico

· WatchDog : perro guardián

· Word: unidad de almacenamiento en memoria que consta de 16 bits (lo mismo que 2 bytes)


ADD

ADD alias: SUMA

Suma una variable o constante al acumulador. No opera con digitales

ADD ai2 ;suma el valor de la entrada analógica 2 al acumulador

SUMA ai2 ;Lo mismo que la línea anterior


AND

Realiza un AND bit a bit entre el acumulador y una variable (digital o analógica) o constante. El resultado queda en el acumulador

AND i0.2 ;Hace un AND entre el bit 0 del acumulador y el bit 2 de la entrada digital 0

AND i0 ;Hace un AND entre todos los bits de la entrada 0 y los del acumulador.


ANDN

Realiza un AND bit a bit entre el acumulador y una variable negada (digital o analógica) o constante. El resultado queda en el acumulador

ANDN i0.2 ;Hace un AND entre el bit 0 del acumulador y el bit 2 negado de la entrada digital 0

ANDN i0 ;Hace un AND entre todos los bits negados de la entrada 0 y los del acumulador.


CTD

Contador descendente

LD entrada de cuenta ;Quedará en e acumulador anterior

LD entrada de carga ;Quedará en el acumulador actual

CTD contador, punto de partida

ST salida contador ;La salida del contador se refleja en el acumulador

La operación Decrementar contador (CTD) empieza a contar hacia atrás a partir del valor actual cuando se produce un flanco negativo en la entrada de contaje. Si el valor actual de cuenta es igual a 0, se activa el bit de salida. El contador desactiva el bit de salida y carga el valor actual con el valor de preselección (PV) cuando se activa la entrada de carga. El contador se detiene al alcanzar el valor cero y el bit de salida se activa. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.


CTU

Contador ascendente

LD entrada de cuenta ;Quedará en e acumulador anterior

LD entrada de desactivación ;Quedará en el acumulador actual

CTU contador, preselección

ST salida contador ;La salida del contador se refleja en el acumulador

La operación Incrementar contador (CTU) empieza a contar hacia adelante a partir del valor actual cuando se produce un flanco positivo en la entrada de contaje. Si el valor actual de cuenta es mayor o igual al valor de preselección PV, se activa el bit de salida. El contador e inicializa cuando se activa la entrada de desactivación. El contador se detiene al alcanzar el valor de 32767. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.


DEC

Decrementa el valor de una variable en 1. Solo se aplica a analógicas.

DEC v0 ;Es lo mismo que hacer v0 = v0 - 1


DIV

Divide el valor del acumulador por el del argumento

DIV arg ;Es lo mismo que Acumulador = Acumulador / arg

El argumento puede ser una variable analógica o una constante.


EQ

EQ alias: ISEQ

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si son iguales

EQ arg

El argumento puede ser una variable analógica o digital, o una constante.


FIFO

El valor del acumulador es puesto en un registro de desplazamiento al mismo tiempo que el acumulador recibe el dato más antiguo del mismo:

FIFO org, end

org: dirección de la 1º variable del registro

end: dirección de la última variable (más antigua) o constante con la cantidad de variables del registro


FILL

LLena la memoria con el dato del acumulador

FIll org, end

org: dirección de la 1º variable del registro

end: dirección de la última variable (más antigua) o constante con la cantidad de variables del registro


GE

GE alias: ISGE

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si son iguales o si el acumulador es mayor que el argumento

GE arg ;Mayor o igual que

El argumento puede ser una variable o una constante.


GT

GT alias: ISGT

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si el acumulador es mayor que el argumento

GT arg ;Mayor que

El argumento puede ser una variable o una constante.


INC

Incrementa el valor de una variable en 1. Solo se aplica a analógicas.

INC v0 ;Es lo mismo que hacer v0 = v0 + 1


JMP

JMP alias:GOTO

Realiza un salto a otra parte del programa. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

JMP Sub1 ;Salta a la línea llamada "Sub1"

otro ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

JMPC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 1

otro2 LD sm0.5

JMPNC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

AND i0.1

ST q0.2

END ;Termina el programa y vuelve a ejecutar desde el principio


JMPC

JMPC alias:IF1

Realiza un salto a otra parte del programa si el bit 0 del acumulador está en 1. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

JMP Sub1 ;Salta a la línea llamada "Sub1"

otro ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

JMPC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 1

otro2 LD sm0.5

JMPNC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

AND i0.1

ST q0.2

END ;Termina el programa y vuelve a ejecutar desde el principio


JMPNC

JMPNC alias:IF0

Realiza un salto a otra parte del programa si el bit 0 del acumulador está en 0. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

JMP Sub1 ;Salta a la línea llamada "Sub1"

otro ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

JMPC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 1

otro2 LD sm0.5

JMPNC Sub1 ;Salta a la línea llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

AND i0.1

ST q0.2

END ;Termina el programa y vuelve a ejecutar desde el principio


LD

Carga el acumulador con un dato. Este puede ser una variable digital, una analógica o una constante.

También produce una rotación de acumuladores .

LD i0.0 ;Carga el acumulador con la entrada digital 0

LD ai0 ;Carga el acumulador con la entrada analógica 0

LD 5 ;Carga el acumulador con el valor 5


LDN

Carga el acumulador con un dato negado. Este puede ser una variable digital, una analógica o una constante.

También produce una rotación de acumuladores .

LDN i0.0 ;Carga el acumulador con la entrada digital 0 negada

LDN ai0 ;Carga el acumulador con la entrada analógica 0 negada

LDN 5 ;Carga el acumulador con el valor -6 (-6 = NOT 5)


LE

LE alias: ISLE

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si el acumulador es menor o igual que el argumento

LE arg ;Menor o igual que

El argumento puede ser una variable, una constante o una digital.


LIMIT

Limita el contenido del acumulador a los topes max y min

LIMIT max, min

max y min pueden ser variables o constantes.


LT

LT alias: ISLT

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si el acumulador es menor que el argumento

LT arg ;Menor que

El argumento puede ser una variable, una constante o una digital.


MAX

MAX alias: GETMAX

Devuelve en el acumulador el valor más alto de un grupo de variables

MAX org, end

org: dirección de la 1º variable del registro

end: dirección de la última variable (a analizar) o constante con la cantidad de variables del registro


MIN

MIN alias: GETMIN

Devuelve en el acumulador el valor más bajo de un grupo de variables

MIN org, end

org: dirección de la 1º variable del registro

end: dirección de la última variable (a analizar) o constante con la cantidad de variables del registro


MOD

Devuelve el resto de una división acumulador / argumento)

MOD arg

El argumento puede ser una variable analógica o una constante.


MOVE

MOVE alias: MOV

Mueve datos sin la intervención del acumulador

MOVE org, dst

org: dato de origen (digital, analógica o constante)

dst: dato de destino (digital o analógica)

También se puede hacer con largos y reales , siempre que ambos argumentos sean del mismo tipo.


MUL

Realiza la multiplicación entre el acumulador y el argumento. El resultado queda en el acumulador.

MUL arg ;acumulador = acumulador * argumento

El argumento puede ser una variable analógica o una constante.


NAND

Realiza un AND bit a bit entre el acumulador y una variable (digital o analógica) o constante. El resultado es negado y queda en el acumulador

NAND i0.2 ;Hace un AND entre el bit 0 del acumulador y el bit 2 de la entrada digital 0, y lo niega

NAND i0 ;Hace un AND entre todos los bits de la entrada 0 y los del acumulador, y lo niega.


NE

NE alias: ISNE

Realiza una comparación entre el valor del acumulador y el argumento. el resultado queda en el acumulador, y es 1 si son distintos

NE arg

El argumento puede ser una variable, una constante o una digital.


NOR

Realiza un OR bit a bit entre el acumulador y una variable (digital o analógica) o constante. El resultado es negado y queda en el acumulador

NOR i0.2 ;Hace un OR entre el bit 0 del acumulador y el bit 2 de la entrada digital 0, y lo niega

NOR i0 ;Hace un OR entre todos los bits de la entrada 0 y los del acumulador, y lo niega.


OR

Realiza un OR bit a bit entre el acumulador y una variable (digital o analógica) o constante. El resultado queda en el acumulador

OR i0.2 ;Hace un OR entre el bit 0 del acumulador y el bit 2 de la entrada digital 0.

OR i0 ;Hace un OR entre todos los bits de la entrada 0 y los del acumulador.


ORN

Realiza un OR bit a bit entre el acumulador y una variable negada (digital o analógica) o constante. El resultado queda en el acumulador

ORN i0.2 ;Hace un OR entre el bit 0 del acumulador y el bit 2 de la entrada digital 0.

ORN i0 ;Hace un OR entre todos los bits de la entrada 0 y los del acumulador.


R

R alias: RESET

Si el bit 0 del acumulador está en 1, entonces pone en 0 el argumento

R arg

arg: variable digital o analógica


S

Si el bit 0 del acumulador está en 1, entonces pone en 1 el argumento

S arg

arg: variable digital o analógica


ST

ST alias: OUT

Copia el valor del acumulador a una variable digital o analógica.

LD 5 ;00000101 en binario

ST q0 ;activará las salidas 0 y 2, y apagará el resto (copia los 8 bit)

ST q0.1 ;activará la salida 1 (copia solo el bit 0)

Para el caso de largos o reales solo será posible con variables declaradas .


SCALE

Realiza una conversión de escala del valor del acumulador

SCALE mul, div

mul: constante multiplicativa

div: constante divisiva

Ambos argumentos pueden ser variables analógicas o constantes


STN

STN alias: OUTN

Copia el valor negado del acumulador a una variable digital o analógica.

LD 250 ;11111010 en binario

STN q0 ;activará las salidas 0 y 2, y apagará el resto (copia los 8 bit)

STN q0.1 ;activará la salida 1 (copia solo el bit 0)


SUB

Realiza la resta del argumento al acumulador. El argumento puede ser una variable analógica o una constante.

SUB arg ;acumulador = acumulador - argumento


TOF

TOF alias: TOFF

Temporizador como retardo a la desconexión

El Temporizador como retardo a la desconexión (TOF) se utiliza para retardar la puesta a “0” (OFF) de una salida durante un período determinado tras haberse desactivado (OFF) una entrada. El número del temporizador (temporizador) determina la resolución del mismo. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.

LD entrada

TOF temporizador, tiempo

entrada: entrada a través del acumulador

temporizador: nombre del temporizador a utilizar

tiempo: cantidad de tiempo, normalmente en segundos


TON

Temporizador como retardo a la conexión

Las operaciones Temporizador como retardo a la conexión (TON) cuentan el tiempo al estar activada (ON) la entrada de habilitación. El número de temporizador (temporizador) determina la resolución del mismo. Ésta se visualiza entonces en el cuadro de la operación. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.

LD entrada

TON temporizador, tiempo

entrada: entrada de habilitación a través del acumulador

temporizador: nombre del temporizador a utilizar

tiempo: cantidad de tiempo, normalmente en segundos


TP

Temporizador por impulsos

El Temporizador por impulsos (TP) genera impulsos de una duración determinada. Cuando el estado de señal de la entrada de habilitación (IN) es “1”, se activa el bit de salida (Q). Éste último permanece activado durante el impulso indicado en el tiempo prefijado (PT). Cuando el tiempo transcurrido (ET) alcanza el valor prefijado (PT), se desactiva el bit de salida (Q). El tiempo transcurrido se conserva hasta que se desactiva la entrada de habilitación. Cuando se active el bit de salida, permanecerá en ese estado hasta que haya transcurrido el tiempo prefijado. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.

LD entrada

TP temporizador, tiempo

entrada: entrada a través del acumulador

temporizador: nombre del temporizador a utilizar

tiempo: cantidad de tiempo, normalmente en segundos


XOR

Realiza un XOR bit a bit entre el acumulador y una variable (digital o analógica) o constante. El resultado queda en el acumulador

XOR i0.2 ;Hace un XOR entre el bit 0 del acumulador y el bit 2 de la entrada digital 0.

XOR i0 ;Hace un XOR entre todos los bits de la entrada 0 y los del acumulador.

XOR 255 ;Hace un XOR entre acumulador y el valor 255.


XORN

Realiza un XOR bit a bit entre el acumulador y una variable (digital o analógica) o constante negada. El resultado queda en el acumulador

XORN i0.2 ;Hace un XOR entre el bit 0 del acumulador y el bit 2 negado de la entrada digital 0.

XORN i0 ;Hace un XOR entre todos los bits de la entrada 0 negados y los del acumulador.

XORN 255 ;Hace un XOR entre acumulador y el valor 255 negado (65280).


ANDP

Heredada del CAIPE SCD80. Realiza un AND entre el estado actual de acumulador y su estado anterior

También produce una rotación inversa de acumuladores .


CAL

CAL alias:GOSUB

Realiza un salto a una subrutina. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

CAL Sub1 ;Salta a la subrutina llamada "Sub1"

ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

CALC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 1

LD sm0.5

CALNC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

RETC ;Retorno condicional (si el bit 0 del acumulador es 1)

AND i0.1

RETNC ;Retorno condicional (si el bit 0 del acumulador es 0)

XOR i0.2

RET ;Retorno incondicional de la subrutina


CALC

CALC alias:GOSUBIF1

Realiza un salto a una subrutina si el bit 0 del acumulador es 1. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

CAL Sub1 ;Salta a la subrutina llamada "Sub1"

ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

CALC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 1

LD sm0.5

CALNC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

RETC ;Retorno condicional (si el bit 0 del acumulador es 1)

AND i0.1

RETNC ;Retorno condicional (si el bit 0 del acumulador es 0)

XOR i0.2

RET ;Retorno incondicional de la subrutina


CALNC

CALNC alias:GOSUBIF0

Realiza un salto a una subrutina si el bit 0 del acumulador es 0. Esta se identifica por una etiqueta (label), y es siempre hacia adelante (no se permiten saltos hacia atrás)

CAL Sub1 ;Salta a la subrutina llamada "Sub1"

ST q0.0 ;Instrucción siguiente o punto de retorno de la subrutina

LD sm0.4

CALC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 1

LD sm0.5

CALNC Sub1 ;Salta a la subrutina llamada "Sub1" si el bit 0 del acumulador es 0

END ;Termina el programa y vuelve a ejecutar desde el principio

Sub1 LD i0.0 ;Primera instrucción de la subrutina

RETC ;Retorno condicional (si el bit 0 del acumulador es 1)

AND i0.1

RETNC ;Retorno condicional (si el bit 0 del acumulador es 0)

XOR i0.2

RET ;Retorno incondicional de la subrutina


ORP

Heredada del CAIPE SCD80. Realiza un OR entre el estado actual de acumulador y su estado anterior

También produce una rotación inversa de acumuladores .


END

Finaliza el programa y vuelve a ejecutarlo desde el principio. El acumulador y la anidación de llamadas a subrutinas es reestablecido (o borrado). También se actualiza el estado de las entradas, salidas y comunicación.


WatchDog

Perro Guardián

Mecanismo de supervisión que previene conducta errática en caso de fallas de funcionamiento. Las causas comunes son alteración por ruidos eléctricos o errores del programa. La detección se hace por tiempo ("perdido") o cantidad de instrucciones ejecutadas (lazo infinito).

Apaga las salidas e interrumpe la ejecución del programa. El LED rojo (error) destellará rápidamente cuando ocurra esta situación. En este caso se deberá colocar el jumper de programación con el equipo apagado para que pueda reprogramarse al encenderlo.


Acumulador

Acumulador (ACC)

Variable interna que lleva el resultado de las operaciones. Aparte del acumulador principal ACC existen acumuladores secundarios (ACC(-1), ACC(-2), etc). Algunas operaciones producen un desplazamiento de acumuladores para que los estados anteriores no se pierdan (quedan en los secundarios). Algunas operaciones requieren de los datos memorizados en los acumuladores secundarios, como por ejemplo el contador.

Rotación | Nuevo valor -> Acc -> Acc(-1) -> Acc(-2) ....
Rotación inversa | Acc <- Acc(-1) <- Acc(-2) <- Acc(-3)....

Normalmente en una rotación inversa en ACC queda el resultado de la operación (instrucción) y no el acumulador anterior.


Editor

Entorno de desarrollo integrado (IDE)

· Corrección y ayuda mientras se escribe

· Múltiples ventanas de programas en simultáneo

· Asignación de nombres a las variables organizados por áreas

· Elección de modelo y versión de ROM

· Ajustes de aspecto a gusto del usuario

Consta de 2 partes:

1. El editor propiamente dicho (arriba).

2. Declaración de variables (abajo).

Al hacer clic en Nuevo:


RETC

RETC alias:RJPIF1

Retorno desde una subrutina al punto siguiente de donde fue llamada si el bit 0 del acumulador es 1


RETNC

RETNC alias:RJPIF0

Retorno desde una subrutina al punto siguiente de donde fue llamada si el bit 0 del acumulador es 0


RET

RET alias:RJP

Retorno incondicional desde una subrutina al punto siguiente de donde fue llamada


SET

Heredado del CAIPE SCD80

Si el acumulador está en "0" no se modifica el estado de la variable.

El contenido del acumulador es afectado según la siguiente tabla:

¦ Acc ¦b0 v (antes) ¦ ¦b0 v (desp.)¦ Acc ¦

¦----------¦-------------¦ ¦------------¦---------¦

¦ 0 ¦ 0 ¦ ¦ 0 ¦ 0 ¦

¦ 0 ¦ 1 ¦SET v--->¦ 1 ¦ 0 ¦

¦ 1 ¦ 0 ¦ ¦ 1 ¦ 1 ¦

¦ 1 ¦ 1 ¦ ¦ 1 ¦ 0 ¦

Cuando la variable analógica es seteada los bits van a 1.

NOTA: Las operaciones lógicas afectan a los bits de las variables y del acumulador.

SET arg

arg: variable digital o analógica


R_TRIG

R_TRIG alias: EU

Detecta un cambio entre el estado anterior del acumulador y el reciente de la instrucción anterior. Cuando hay transición el acumulador sale en 1, caso contrario en 0.

Detecta transición 0 a 1

LD 0 ;Estado anterior Acc = desconectado

LD i0.0 ;Nuevo estado Acc = i0.0

EU ;Detecto el cambio 0 -> 1

SET q0.6 ;Dejo salida activada su hubo transición

LD 0 ;Estado anterior Acc = desconectado

LD i0.1 ;Nuevo estado Acc = i0.1

EU ;Detecto el cambio 1 -> 0

RESET q0.6 ;Dejo salida desactivada su hubo transición


F_TRIG

F_TRIG alias: ED

Detecta un cambio entre el estado anterior del acumulador y el reciente de la instrucción anterior. Cuando hay transición el acumulador sale en 1, caso contrario en 0.

Detecta transición 1 a 0

LD 0 ;Estado anterior Acc = desconectado

LD i0.0 ;Nuevo estado Acc = i0.0

EU ;Detecto el cambio 0 -> 1

SET q0.6 ;Dejo salida activada su hubo transición

LD 0 ;Estado anterior Acc = desconectado

LD i0.1 ;Nuevo estado Acc = i0.1

EU ;Detecto el cambio 1 -> 0

RESET q0.6 ;Dejo salida desactivada su hubo transición


TP_C

Temporizador equivalente al del SCD80

El Temporizador TP_C genera impulsos como retardo a la conexión (TON) cuentan el tiempo al estar activada (ON) la entrada de habilitación. El número de temporizador (temporizador) determina la resolución del mismo. Ésta se visualiza entonces en el cuadro de la operación. El estado de la salida (Q) se refleja en el acumulador después de haber ejecutado la instrucción.

LD entrada

LD reset

TP temporizador, tiempo

entrada: entrada a través del acumulador

reset: entrada para reestablecer a su estado inicial

temporizador: nombre del temporizador a utilizar

tiempo: cantidad de tiempo, normalmente en segundos


Entrada de celda

Es una entrada analógica exclusiva para celdas de carga. También provee alimentación de 10v hasta 3 celdas de 4 o 6 hilos. A su vez provee amortiguamiento digital o que permite usar celdas comunes en muchos lugares donde se requiere amortiguadas.

En el caso de la figura la celda de 4 hilos se conecta puenteando las realimentaciones de fuente para simular una celda de 6 hilos. El amortiguado se selecciona con la variable sm4.

Elección del filtro digital (valor en sm4): se muestran las atenuaciones, los tiempos que se tarda en completar un filtrado y la frecuencia de mejor atenuación.

SM4 | Amortiguación | Respuesta | Mejor at.
0 | -30bB @ 15Hz | ~120ms | 15Hz
1 | -25dB @ 10Hz | ~170ms | 14Hz
2 | -35dB @ 15Hz | ~190ms | 12Hz
3 | -40dB @ 15Hz | ~210ms | 11Hz
4 | -40dB @ 15Hz | ~220ms | 10Hz
5 | -30dB @ 15Hz | ~320ms | 5Hz
6 | -65dB @ 10Hz | ~320ms | 7Hz
7 | -47dB @ 6.5Hz | ~370ms | 5.6Hz
8 | -85dB @ 10Hz | ~420ms | 8Hz

Estos filtros están calculados para atenuar la interferencia de las vibraciones mecánicas de frecuencias cercanas a la del proceso. cuando más alto es el filtro mejor, pero el tiempo que se requiere para tener el valor final también crece.

¿15 o 16 bit?

El valor máximo obtenido de ai0 es de 15 bit (32767) para que no provoque desbordamientos. El valor en 16bit puede obtenerse de sm10 (o sin filtrar en sm8), listo para ser convertido a real .


Señalizaciones

Las indicaciones luminosas (LEDs) están repartidas por la placa, y cada una tiene su correspondiente descripción en la serigrafía de la placa.

LED Rojo (error)

· Destellará rápidamente cuando se dispare el WatchDog . En este caso se deberá colocar el jumper de programación con el equipo apagado para que pueda reprogramarse al encenderlo.

· Se enciende si se produce alguna falla en el programa.

· Se enciende si los datos almacenados en la memoria retentiva están corrompidos.

· Se enciende si la tensión de alimentación ha caído por debajo del límite (lo hace en conjunto con el Amarillo).

LED Amarillo (estado)

· Se enciende cuando se está en modo programación.

· Se enciende si la tensión de alimentación ha caído por debajo del límite (lo hace en conjunto con el Rojo).

LED Verde (funcionamiento)

· Se enciende cuando está corriendo el programa o está listo para correrlo (modo programación)

Alimentación

Las indicaciones de alimentación son 4 LEDs verdes (2 de comunicación y 2 de CPU). Deben estar siempre encendidas.

Comunicación

Un LED amarillo indica la entrada de un paquete de comunicación. Un LED verde indica la respuesta (salida).

Entradas y salidas

Cada una tiene su indicación de "activado" con un LED rojo.


Real

Dato numérico en punto flotante de simple precisión. Cada uno de éstos ocupa 32 bit, formato IEEE754. Los límites son de -3.402823E+38 a 3.402823E+38. Usar instrucciones para convertir de entero de 32bit a real y viceversa ( DI_TO_R y R_TO_DI )

Ver tipos de datos .


R_TO_DI

Convierte real un en un entero de 32bit

R_TO_DI org, dst

org = variable con el real

dst = variable que recibirá el resultado de la conversión


Tipo de datos

Tipos de datos

· Bit

· Entero (16bit)

· Entero largo (32bit)

· Real (punto flotante)

| entero 32bit |

| entero 16bit | entero 16bit |

|_______________________________|_______________________________|

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

¯¯¯\¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

\___ bit

El tipo común es el entero de 16bit, y es posible hacer referencia a cada uno de sus bits. Ejemplo:

· i0 hace referencia a los 16bits de las entradas digitales

· i0.0 hace referencia a la 1º entrada digital (bit 0)

El entero largo y el real no son comunes y están reservados para las funciones aritméticas y comparaciones, por lo que no se puede hacer algo como i0.25. Las 4 operaciones, las comparaciones, INC, DEC, LD y ST pueden usar estos tipos. Para esto es necesario usar variables declaradas. Esto significa que si se hace un LD v0 lo hará en 16bit, pero si se declara una variable como entero largo o real en la posición de v0 (ocupará v0 y v1) la operación se hará correctamente.


DI_TO_R

Convierte un entero de 32bit en un real .

DI_TO_R org, dst

org = variable con el entero de 32bit

dst = variable que recibirá el resultado de la conversión


TARAR

Copia el valor filtrado de la entrada de celda a una variable interna no accesible llamada Tara. Este valor es restado al valor filtrado de la entrada de celda y el resultado queda en SM12. Esta función es exclusiva del CP121.


BLKMOVE

Copia un bloque de variables

BLKMOVE org, dst, cnt

org = 1º variable de origen

dst = 1º variable de destino

cnt = cantidad de variables a copiar


SQRT

Raiz cuadrada (solo datos en real )

SQRT org, dst

org = variable con el valor de original

dst = variable que tendrá el resultado de la operación


ABS

Obtiene el valor absoluto de una variable ( int32 o real )

ABS org, dst

org = variable de origen

dst = variable que tendrá el resultado