Está en la página 1de 114

Manual Curso

CR1000 / LoggerNet

Traducción (Febrero 2006): Campbell Scientific Spain

Rev: 2/05
Sección 1. Hardware CR1000.....................................................1-1
1.1 Cartucho del CR1000............................................................................ 1-1
1.2 Panel de conexiones.............................................................................. 1-1
1.3 Batería de respaldo................................................................................ 1-1
1.4 Fuente de alimentación ......................................................................... 1-1
1.5 Sensores Analógicos ............................................................................. 1-3
Sensor conectado a canal #2 Single-Ended........................................... 1-4
Sensor conectado a canal #1 Diferencial............................................... 1-4
1.6 Sensores tipo puente ............................................................................. 1-5
Potenciómetro de una veleta conectado al canal excitación #1............. 1-5
Sensores salida analógica a 2, 3, y 4 hilos. ........................................... 1-6
1.7 Sensores tipo pulsos.............................................................................. 1-7
Anemómetro conectado a canal #1 de pulsos ....................................... 1-7
Tipos de entradas de pulsos................................................................... 1-7
1.8 Puertos digitales I/O.............................................................................. 1-7
Puertos digitales I/O usados para controlar/monitorizar bomba ........... 1-8
1.9 Sensores RS-232 ................................................................................... 1-8

Sección 2. Especificaciones ......................................................2-1


2.1 Precisión ............................................................................................... 2-1
2.2 Resolución ............................................................................................ 2-1
2.3 Repetibilidad......................................................................................... 2-2
2.4 Histéresis............................................................................................... 2-2
2.5 Linealidad ............................................................................................. 2-3
2.6 Especificaciones ................................................................................... 2-3

Sección 3. Memoria del CR1000 ................................................3-1


3.1 Memoria del CR1000............................................................................ 3-1
3.2 Tablas de datos ..................................................................................... 3-1

Sección 4. Generador de programas Short Cut .......................4-1


4.1 Programación del CR1000.................................................................... 4-1
4.2 Short Cut............................................................................................... 4-1
4.3 Ejercicio 1............................................................................................. 4-1

Sección 5. LoggerNet .................................................................5-1


5.1 LoggerNet ............................................................................................. 5-1
5.2 Barra de aplicaciones LoggerNet.......................................................... 5-1
5.3 EZSetup ................................................................................................ 5-2
5.4 Pantalla Connect ................................................................................... 5-3
5.5 Gráficos evolución................................................................................ 5-3
5.6 View...................................................................................................... 5-4
5.7 Otras características .............................................................................. 5-4

Sección 6. Introducción a la programación con CRBasic.......6-1


6.1 CRBasic ................................................................................................ 6-1
6.2 Plantilla ................................................................................................. 6-1
6.3 Editor CRBasic ..................................................................................... 6-2
6.4 Ayuda On-line ...................................................................................... 6-3
6.5 Añadiendo comentarios ......................................................................... 6-3
6.6 Programa típico de CR1000.................................................................. 6-4
6.6.1 Declaraciones de variables .......................................................... 6-4
6.6.2 Tablas de datos (data tables) ....................................................... 6-6
6.6.3 Declarar subrutinas ..................................................................... 6-7

I
6.6.4 Programa principal ....................................................................... 6-8
6.7 Instrucciones de programa .................................................................... 6-9
6.8 Salvar y Compilar (save and compile) .................................................. 6-9
6.9 Multiplicadores y offsets (multipliers and offsets).............................. 6-10

Sección 7. Tipos de datos y formatos ...................................... 7-1


7.1 Descriptores de variables ...................................................................... 7-1
7.2 Almacenamiento de datos ..................................................................... 7-3
7.3 Recogida de datos ................................................................................. 7-4
7.4 Not-A-Number (NAN) e Infinity (INF) ................................................ 7-7
7.5 Recogida personalizada......................................................................... 7-7
7.6 Resetear tablas....................................................................................... 7-9

Sección 8. Detalle de las instrucciones.................................... 8-1


8.1 Categorías de las instrucciones.............................................................. 8-1
8.2 Personalizando CRBasic ....................................................................... 8-2
8.3 Parámetros de las instrucciones............................................................. 8-2
8.3.1 Ejemplo de instrucción de medida................................................ 8-3
8.3.2 Ejemplo de instrucción de proceso de salida (output processing) 8-8
8.4 Medidas con puente de resistencias....................................................... 8-9
Ejemplo de una veleta potenciométrica ................................................ 8-10
8.5 Cambio de los valores por defecto en los parámetros ......................... 8-11

Sección 9. Programación para control ...................................... 9-1


9.1 Representación de los números .............................................................. 9-1
9.2 Expresiones matemáticas ...................................................................... 9-1
9.3 True y False........................................................................................... 9-2
9.4 Puertos de control.................................................................................. 9-3
9.5 Tabla Status........................................................................................... 9-4

Sección 10. Recogida de datos automatizada. ...................... 10-1


10.1 Recogida programada (Scheduled Collection) .................................. 10-1
10.2 Status................................................................................................. 10-3
10.3 Status Log Tool ................................................................................. 10-4
10.4 Integridad de los datos....................................................................... 10-5

Sección 11. RTMC – Control y Monitorización en Tiempo


Real….......................................................................................... 11-1

Sección 12. Control Ficheros (File Control), Sistemas


Operativos y Transformer......................................................... 12-1
12.1 Control Ficheros (File Control)......................................................... 12-1
12.2 Sistemas Operativos .......................................................................... 12-2
12.2.1 Cargar SO mediante aplicación Connect de LoggerNet ........... 12-2
12.2.2 Cargar SO mediante Device Configuration Utility................... 12-3
12.3 Transformer....................................................................................... 12-4

Sección 13. Ejercicio Exhaustivo............................................ 13-1


13.1 Manuales de los sensores .................................................................. 13-1
13.2 Usando las especificaciones del sensor ............................................. 13-1

II
Sección 14. Redes PakBus® ................................................... 14-1
14.1 Introducción...................................................................................... 14-1
14.2 Terminología PakBus ....................................................................... 14-1
14.3 Herramientas PakBus........................................................................ 14-2
14.3.1 Device Configuration Utility................................................... 14-2
14.3.2 PakBus Graph ......................................................................... 14-2
14.4 Creación de una red .......................................................................... 14-3
14.5 Configurar la PakBus Address del CR1000...................................... 14-5
14.6 Seguridad en el CR1000 ................................................................... 14-6
14.7 LoggerNet Setup ............................................................................... 14-8
14.8 Ver la red con PakBus Graph............................................................ 14-9
14.9 Discovery y “Un-Discovery”.......................................................... 14-10
14.10 PakBus Ardes de LoggerNet......................................................... 14-11
14.11 Instrucciones ................................................................................. 14-13
14.11.1 Instrucción SendVariables .................................................. 14-13
14.11.2 Instrucción SendData .......................................................... 14-15
14.12 Neighbor List ................................................................................ 14-16
14.13 Beaconing ..................................................................................... 14-19

Sección 15. Conceptos Programación Avanzada ..................15-1


15.1 Tipo Parámetros en una Instrucción.................................................. 15-1
15.2 Modificadores de la DataTable ......................................................... 15-2
15.2.1 Instrucción OpenInterval......................................................... 15-2
15.2.2. Instrucción DataEvent............................................................ 15-2
15.2.3. Instrucción CardOut ............................................................... 15-3
15.3 Acceso a Datos y Propiedades .......................................................... 15-3
15.4 Notación Array ................................................................................. 15-4
15.5 Instrucción SubScan ......................................................................... 15-6
15.6 Instrucciones múltiples Scan…NextScan ......................................... 15-6
15.7 Subrutinas ......................................................................................... 15-7
15.8 Instrucciones datos Serie RS232....................................................... 15-7

III
Sección 1. Hardware CR1000
1.1 Cartucho del CR1000
El CR1000 está montado dentro de un cartucho hermético, pequeño y muy
robusto. Tiene un puerto RS-232 y un puerto CS I/O.

1.2 Panel de conexiones


El datalogger se conecta en un panel de conexiones provisto de terminales para
conexión de los sensores, la alimentación eléctrica y periféricos para
comunicaciones; así mismo, protecciones contra descargas eléctricas.

1.3 Batería de respaldo


Una batería de litio salvaguarda el reloj, programas y memoria de datos, en caso
que el datalogger pierda la alimentación eléctrica.

1.4 Fuente de alimentación


El datalogger se puede alimentar por cualquier fuente de 12Vdc. El rango
permitido es de 9.6 a 16 voltios.

1-1
Sección 1. Hardware CR1000

Entradas Analógicas
Voltaje
VoltDiff
VoltSE
Termopar
TCDiff Salidas Excitación
TCSE (Ex)
Puentes de medida Excite
(usa Ex) BrFull
BrFull BrFull6w
BrFull6W BrHalf Tierra analógica
BrHalf BrHalf3W
BrHalf3W Toma de tierra
BrHalf4W
BrHalf4W RS-232
Otras
PanelTemp
PeriodAvg CS I/O
Entradas Pulsos
AM25T DSP4 (Tablas de
PulseCount
datos y salida)
PulseCountReset
Entrada
Alimentació

SE 1 2 3 4 5 6 7 8
CR1000 G 12V MADE IN USA
DIFF 1 2 3 4 WIRING PANEL
EX1

P2
P1

H L H L H H H H CAUTION
G

DC ONLY

G 12V
POWER IN

SE 9 10 11 12 13 14 15 16
DIFF 5 6 7 8
EX2

EX3

H L H L H L H L GROUND
G

LUG
RS-232

POWER OUT
COM1 COM2 COM3 COM4
SW-12

Tx Rx Tx Rx Tx Rx Tx Rx CS I/O
12V
12V

C1
C2
C3
C4

C5
C6

C7
C8
5V
G

PERIPHERAL PORT
SN:
SDM

5V 12 V Conexiones SDM Tierra


CS7500 Control I/O Alimentación (G) Puerto para
CSAT3 PortGet Periféricos
Salida 12V SDMINT8 PortSet CardOut (Tablas de
conmutable SDMSpeed ReadIO datos y salida)
SW-12 TimerIO
SDMTrigger
PortSet WriteIO
SW12 SDI-12

1-2
Sección 1. Hardware CR1000

1.5 Sensores Analógicos


Los sensores analógicos se conectan en los terminales analógicos. Los terminales
analógicos se pueden configurar tanto en single-ended (medida respecto a tierra)
como en diferencial (medida respecto a otro canal de entrada).

Los canales analógicos se pueden configurar individualmente; hay 8 canales


diferenciales o 16 canales single ended.

Canal Canal
Diferencial Single-Ended

1H 1
1L 2

2H 3
2L 4

3H 5
3L 6

4H 7
4L 8

5H 9
5L 10

6H 11
6L 12

7H 13
7L 14

8H 15
8L 16

1-3
Sección 1. Hardware CR1000

Sensor conectado a canal #2 Single-Ended

L
2
H
3
+
2

L
1 Sensor
1

-
DIFF
SE

Sensor conectado a canal #1 Diferencial


4

L
2
H
3

-
2

Sensor
1
1

+
DIFF
SE

1-4
Sección 1. Hardware CR1000

1.6 Sensores tipo puente


Los sensores tipo puente cambian el valor de la resistencia respecto al cambio
medioambiental. El datalogger suministra un voltaje de excitación preciso a través
de los terminales de excitación y la salida de los sensores es medida en los
terminales analógicos.

Potenciómetro de una veleta conectado al canal excitación #1

EX1
8

L
4
7

H
DIFF
SE

1-5
Sección 1. Hardware CR1000

Sensores salida analógica a 2, 3, y 4 hilos.


Number of Wires
from Sensor Measurement Type Examples

2 Single-Ended or Termopares
Thermocouples
Differential Termopilas
Thermopiles
4-20 mA con
4-20ma res. shunt
w/shunt
+

3 Puente completo 3-hilos


Single-Ended Potenciómetros
Potentiometers
Veletas
Wind Vanes
Vin
Vi n Termistores
Thermisters

Vout
Vou t

AG

4 Puente complete 4-hilos


Differential Presión
Pressure
Galgas extensiométricas o
Strain Gages or
PRTs en puente completo
Vin PRT's in full Bridge
Vin

Vout
Vout+ +

Vout
Vout- -

AG

Vin = canal de excitación

Vout = canal analógico

1-6
Sección 1. Hardware CR1000

1.7 Sensores tipo pulsos


Los sensores tipo pulsos se conectan en los terminales tipo pulso. El datalogger
puede medir cierre de contactos, señales AC, o pulsos digitales (0 a 5Vdc).

Los sensores en que hay que hacer promediado de periodos (frecuencia) Period
Averaging se conectan en los canales analógicos single-ended.

Anemómetro conectado a canal #1 de pulsos


P2
P1

Sensor
EX1

Tipos de entradas de pulsos


5V
SWITCH CLOSURE

0V
HIGH FREQUENCY PULSE

0V
LOW LEVEL AC

1.8 Puertos digitales I/O


El CR1000 tiene 8 puertos I/O configurables bajo control de programa, tanto
entradas digitales como salidas de control. Estos puertos son multifuncionales e
incluyen: determinación tiempos entre flancos, interrupciones para activación de
dispositivos, conteo de cierre de contactos, conteo de pulsos de alta frecuencia,
comunicaciones asíncronas RS232, comunicaciones SDI-12 y comunicaciones
SDM.

1-7
Sección 1. Hardware CR1000

Puertos digitales I/O usados para controlar/monitorizar bomba

110 VAC
CR1000
CR10

C1
ACL1
Line Pump
Monitor
G

C2

C1 - Usado como entrada para


ver el estado del monitor
de bomba.

C2 - Usado como salida para


aplicar tensión a la bomba
mediante un relé de estado
sólido
1.9 Sensores RS-232
Los sensores RS-232 pueden conectarse tanto al conector RS-232 como en los
puertos digitales I/O.

1-8
Sección 2. Especificaciones
2.1 Precisión
La precisión es la capacidad de una medida de proporcionar un resultado tan
cercano al valor real como sea posible.

Accuracy = 0.1 g

100 g 100.1 g

2.2 Resolución
La resolución es el menor incremento detectable en una medida.

Higher Resolution
100 g 101 g 100 g 106.2

2-1
Sección 2. Especificaciones

2.3 Repetibilidad
La repetibilidad es la cantidad de coincidencias entre medidas repetidas para un
mismo valor.

More Precise More Accurate


99.8
22 times

99.9
18 times

100.0
12 times

105.2 100.1
70 times 19 times

100 g 105.3 100 g 100.2


30 times 21 times

2.4 Histéresis
La histéresis es la respuesta retardada de una medida.

Hysteresis

}
100.0

100.1
Reading
Changes
99.9

100 g 100.0

2-2
Sección 2. Especificaciones

2.5 Linealidad
La linealidad es la cualidad de ofrecer la misma sensibilidad a lo largo de la
medida.

Linearity
0g

50 g 50 g

50 g
100 g
50 g 100 g

2.6 Especificaciones
Es importante saber las especificaciones y limitaciones de los sensores y del
datalogger a la hora de tomar medidas.

Las especificaciones detalladas del CR1000 están en el manual del datalogger.


Consultar al fabricante de los sensores para sus especificaciones.

Rangos de temperatura funcionamiento

Standard: -25° a +50° C


Extendido: -55° a +85° C

Velocidad en las comunicaciones

300 bps a 115.2 kbps

Voltaje en modo común

Rango ± 5.0 Vdc

2-3
Sección 2. Especificaciones

Voltaje de entrada permanente soportado por el CR1000 sin que se


produzcan daños

± 16 Vdc máximo

Rangos de medida y resolución

Rango de entrada (mV) Resolución básica (uV) 250 uS Int 50/60 Hz Int
± 5000 1330 385 192
± 2500 667 192 95.9
± 250 66.7 19.2 9.6
± 25 6.7 2.3 1.9
± 7.5 2 0.62 0.58
± 2.5 0.67 0.34 0.19

Precisión

La precisión de una medida va desde aproximadamente ± 0.1% a ± 0.4% de la


lectura, dependiendo de la temperatura.

Salidas analógicas (Excitación)

Tres salidas excitación individuales, sólo activas durante la medida.


Rango - programable entre ±2.5 Vdc
Máxima corriente = 25 mA.

Contadores de pulsos

Cierre de contacto 11 ms mínimo


Alta frecuencia máx. 400 kHz
AC bajo nivel

2-4
Sección 2. Especificaciones

Puertos digitales I/O (Control)


Alta frecuencia máx. 400 kHz
Frecuencia máx. de cierre de contacto 150 Hz
Voltaje de entrada (para monitorizar estado de un dispositivo, Ej. on o off)
Alto 3.8 a 5.3 Vdc
Bajo -0.3 a 1.2 Vdc
Voltaje de salida (para activar o desactivar un dispositivo)
Alto 5.0 ± 0.1 Vdc
Bajo < 0.1 Vdc
Corriente máx. de salida
1 mA

Máxima corriente en salida SW12V

SW12V < 900 mA depende de la temperatura


12V + SW12V < 1.85 A depende de la temperatura

Requerimientos de la alimentación

Voltaje
9.6 a 16 Vdc

Consumo corriente
Reposo ............................................................................................. ~0.5 mA
Muestreo 1 Hz (una medida SE fast) .............................................. ~0.6 mA
Muestreo 100 Hz (una medida SE fast) ............................................ ~7.0 mA
Muestreo 100 Hz con comunicaciones RS-232 ................................ ~20 mA

Precisión del reloj

± 3 minutos por año (-30° a 85° C)


± 15 minutos por año (-55° a 85° C, rango de temperatura extendido)

2-5
Sección 2. Especificaciones

2-6
Sección 3. Memoria del CR1000
3.1 Memoria del CR1000
El CR1000 estándar dispone de 2 Mbytes de SRAM, con la opción de 4 Mbytes.

Para el almacenamiento de tablas de datos están disponibles aproximadamente


1400 Kbytes (1.4Mb) de memoria. El resto de la memoria se utiliza para los
programas de usuario y comunicaciones. Adicionalmente, se pueden guardar
tablas de datos opcionalmente en una tarjeta Compact Flash y su módulo.

La memoria SRAM está salvaguardada por una pila interna; por tanto, datos y
programas permanecen en la memoria aun cuando el CR1000 pierda la
alimentación eléctrica.

3.2 Tablas de datos


Los datos se almacenan en “formato tabla” en la memoria SRAM; las tablas se
borran cuando se carga y se ejecuta un programa.

3-1
Sección 3. Memoria del CR1000

El número y el tamaño de las tablas de datos se definen en el programa del


CR1000.

El número de registros (o filas) se define en cada tabla de datos. El número de


valores (o columnas) de la tabla de datos se determina mediante las instrucciones
de procesado de salida (output processing instructions).

Se pueden definir múltiples tablas de datos para almacenar datos en diferentes


intervalos de integración.

El CR1000 puede “auto dimensionar” sus tablas de datos; la memoria es tipo


anillo y por tanto los datos más nuevos sobrescriben los datos más antiguos.

Hay un campo en la tabla Status que indica cuanto tiempo se tardará en


sobrescribir el dato más antiguo con el dato más nuevo. Más tarde analizaremos la
tabla Status.

3-2
Sección 4. Generador de programas
Short Cut
4.1 Programación del CR1000
Para que el datalogger pueda tomar medidas o almacenar datos se debe generar un
programa para el CR1000.

Hay varias formas de escribir un programa para CR1000. La más simple es usar el
generador de programas Short Cut. Para una programación más avanzada
utilizaremos el editor CRBasic.

4.2 Short Cut


Short Cut es una aplicación simple para el PC que genera programas de
datalogger, pudiendo escoger los sensores, intervalos de integración de datos y
cálculos a realizar.

Short Cut está basado en menús conducidos, y permite crear el programa en cuatro
pasos. Proporciona también un diagrama de conexiones de los sensores al
datalogger y el fichero .CR1 que hay que cargar al CR1000.

Short Cut se puede ejecutar desde la barra principal de programas de LoggerNet o


instalarse de forma autónoma.

Shortcut.lnk

4.3 Ejercicio 1
Mediante Short Cut crear un programa que mida sensores y almacene datos.

►►Ejercicio 1 – Programando con Short Cut

Objetivo: Medir la temperatura del aire en grados ºC con un termopar tipo T, y


almacenar la media minutal de la temperatura del aire.

Paso 1 New/Open
• Program name
• Datalogger type (CR1000)
• Scan interval (1 second)

4-1
Sección 4. Generador de programas Short Cut

Paso 2 Sensors
• Default measurement (Battery Voltage)
• Add Wiring Panel Temperature
• Add one Differential Thermocouple (Degrees C)
• Cablear sensor según el wiring diagram
• Home

Paso 3 Output
• Seleccionar one minute output en Table 1
• Renombrar Table 1 – “OneMin”
• Almacenar Average Thermocouple Temperature
• Home

Paso 4 Finish
• De un nombre al programa y recuerde donde ha sido almacenado. Lea
detenidamente el Summary y los Results.

4-2
Sección 5. LoggerNet
5.1 LoggerNet
LoggerNet es un exhaustivo paquete informático de soporte para datalogger que
proporciona comunicaciones, edición de programas de datalogger (más complejos
que los que pueda generar ShortCut), procesamiento de datos y visualización.

LoggerNet permite programación, comunicaciones, y recogida de datos entre los


dataloggers Campbell Scientific y un PC. LoggerNet está formado por una
aplicación server (servidor) y varias aplicaciones cliente (client) integradas en un
solo producto. El LoggerNet server almacena los datos en una memoria caché y
graba datos en archivos ASCII. Cuando la barra de aplicaciones está activa, el
LoggerNet server está activo, y por tanto, se llevarán a cabo todas las
comunicaciones programadas con los dispositivos de la red.

Se puede acceder a la ayuda on-line con la tecla F1 o seleccionando Ayuda en el


menú de aplicaciones. También aparecen consejos en la parte inferior de la
mayoría de ventanas dependiendo de la posición del cursor del ratón.

5.2 Barra de aplicaciones LoggerNet


La barra de aplicaciones LoggerNet es configurable por el usuario.

5-1
Sección 5. LoggerNet

Utilice Opciones | Configurar Botones para añadir o


quitar botones de aplicaciones.

5.3 EZSetup
EZSetup permite con pocos clics configurar las comunicaciones entre un CR1000
y el PC.

El asistente EZSetup se ha diseñado para paso a paso ayudarle en la


configuración de su red de dataloggers. Los tipos de conexiones
soportadas son: directa, teléfono, IP, y RF400.

Conforme va avanzando por el asistente, verá que cada pantalla contiene campos
que debe completar con la información adecuada a su estación. Siga las
instrucciones y use los botones Next y Previous para navegar por el asistente.

En cada paso del asistente tiene disponible una ayuda. Para acceder a ella haga
clic en el botón Ayuda.

Una vez completados todos los pasos del asistente, presione el botón Finalizar
para guardar la configuración y volver a la ventana principal de EZSetup. Si desea
cambiar algo en la configuración del datalogger, seleccione ese datalogger de la
ventana principal de EZSetup, y presione el botón Edit. El asistente se abrirá, y
usted podrá avanzar por los pasos usando el botón Next, o ir directamente a una
página en particular del asistente.

5-2
Sección 5. LoggerNet

►► Utilice EZSetup de LoggerNet para configurar la conexión de su


datalogger.

Elija un CR1000 y asígnele un nombre. Utilizaremos una conexión directa en el


puerto COM1. Utilice los datos por defecto:
Velocidad: 115200
Dirección PakBus: 1
Security Code: 0
Extra Response Time: 0 s
Max Time Online: 0 d 0 h 0 m

Conecte el cable de serie desde el puerto COM1 hasta el puerto RS-232 del
CR1000. Compruebe comunicaciones.
Ponga en hora el reloj del datalogger.
Envíe el nuevo programa – C:\Campbellsci\SCWin\EX1.CR1 al CR1000

5.4 Pantalla Connect


La pantalla Connect contiene herramientas para inicializar o comprobar el
funcionamiento de un datalogger y para recogida manual de datos.

La pantalla Connect proporciona comunicaciones en tiempo real con el


datalogger. Dispone de utilidades para enviar o recuperar programas de un
datalogger, para comprobar o ajustar el reloj, y para obtener información
del estado del datalogger. Hay ventanas para mostrar datos gráfica o
numéricamente, al igual que la posibilidad de modificar valores de variables y
flags. Puede recoger datos manualmente en varios formatos, y comunicarse con el
datalogger en modo emulación terminal.

►► Utilice la pantalla Connect de LoggerNet para monitorizar medidas. Haga


clic en Conectar para conectar con el CR1000. Haga clic en Numérico 1,
después en el botón Añadir, y seleccione la tabla Public. Seleccione y
arrastre hasta la tabla de monitorización numérica. Haga lo mismo con la
tabla OneMin.

Haga clic en el botón Recoger Ahora, en la sección Recogida Datos de la pantalla


Connect, y fíjese en el nombre y la localización de los archivos de datos
recogidos. El nombre del archivo es, por defecto,
nombredeldatalogger_nombredelatabla.dat

5.5 Gráficos evolución


Utilizar la capacidad gráfica de LoggerNet dentro de la aplicación Connect.

Los valores recogidos del datalogger se pueden representar en un gráfico de líneas


en Gráficos, dentro de la pantalla Connect. Pueden estar activas hasta tres
pantallas de displays gráficos. Se pueden visualizar simultáneamente hasta doce
campos por gráfico.

5-3
Sección 5. LoggerNet

5.6 View
La aplicación View de LoggerNet permite visualizar archivos de datos
almacenados y proporciona además posibilidades gráficas limitadas.

View se usa para consultar archivos de datos. Los datos se muestran en


forma de registros, y sus campos tanto en formato separados por coma
como de forma tabulada. El gráfico sólo puede mostrar hasta dos
columnas (campos).

►► Visualice los datos recogidos del datalogger mediante View.

5.7 Otras características


LoggerNet tiene muchas otras características que demostraremos y usaremos más
adelante.

5-4
Sección 6. Introducción a la
programación con CRBasic
6.1 CRBasic
CRBasic es el editor de programas usado para escribir programas para el CR1000;
se puede ejecutar desde la barra de aplicaciones de LoggerNet.

Crbasic.lnk

CRBasic está diseñado para programadores que necesiten más flexibilidad y


control de lo que puede ofrecer SCWin en la funcionalidad del datalogger. Este
lenguaje de programación es similar en sintaxis, flujo de programa y lógica, al
lenguaje de programación BASIC.

►► Ejecute CRBasic

6.2 Plantilla
CRBasic ofrece una plantilla para crear programas de cada tipo de datalogger.

Cada datalogger tiene su propio conjunto de instrucciones que puede ser diferente
a los otros dataloggers. Cuando empiece un programa para CR1000 elija la
plantilla CR1000. Los archivos de plantillas están asociados a un tipo específico
de datalogger.

►► Abra la plantilla CR1000. Haga clic en File | New | CR1000 Program File.

6-1
Sección 6. Introducción a la programación con CRBasic

6.3 Editor CRBasic


La ventana principal del editor CRBasic está dividida en tres partes para facilitar
la creación y edición de programas.

Las tres partes de la ventana principal de CRBasic Editor son: la ventana de


entrada de programa, el panel de instrucciones y el área de mensajes. En el lado
derecho, el panel de instrucciones es una lista con las instrucciones para el
CR1000. Las instrucciones se pueden seleccionar de esta lista o se pueden entrar
directamente a la izquierda en la ventana de entrada de programa. El área de
mensajes normalmente no está visible hasta que se compila un programa. Aparece
en la parte inferior y muestra los resultados de la compilación junto con cualquier
error detectado. El área de mensajes también le dará avisos de posibles errores de
sintaxis en el programa. Haciendo doble clic en el error o aviso, se remarcará la
línea de programa que ha generado el error o aviso.

Ventana de entrada de
programa

Panel de
instrucciones

Área de mensajes

CRBasic tiene instrucciones especiales para tomar medidas y para crear tablas de
salida de datos. Los resultados de todas las medidas se almacenan en variables
(definidas previamente) o en variables tipo array. Las operaciones matemáticas se
escriben igual a como serían de forma algebraica.

6-2
Sección 6. Introducción a la programación con CRBasic

6.4 Ayuda On-line


Se puede acceder a la ayuda On-line usando diferentes métodos; haciendo clic con
el botón derecho, con el botón izquierdo, con F1 y F2.

Haciendo clic con el botón derecho aparecen las opciones relevantes de la


posición en que se encuentre el cursor. Haciendo clic con el botón derecho o
presionando F2 en un parámetro aparecerá una lista de valores que pueda tomar el
parámetro, variables disponibles, opciones o ayuda.

Haciendo clic con el botón izquierdo dentro de un parámetro de la instrucción


aparece un comentario indicando de qué trata el parámetro.

Pulsando F1 o seleccionando “Help” aparece ayuda adicional junto con una lista
de posibles opciones.

►► Según avancemos con el ejemplo 2, pruebe de hacer clic con el botón


derecho, con F1 y F2 en distintas posiciones del cursor.

6.5 Añadiendo comentarios


Es una buena práctica añadir comentarios en su programa para indicar el autor,
funcionalidad del programa, lógica del programa, fechas revisión, etc.

A menudo es útil poner comentarios en el programa de su datalogger porque


cuando usted vuelva a ver el programa en el futuro, sabrá que hace cada sección
del programa.

Los comentarios se pueden insertar en el programa precediendo el texto con una


comilla. Cuando el programa se compila, el compilador del datalogger ignorará
todo texto que esté precedido de una comilla. Un comentario se puede poner al
principio de la línea o a continuación de la instrucción. Se pueden convertir varias
líneas en comentarios (o lo contrario) seleccionándolas con el cursor, haciendo
clic con el botón de la derecha y escogiendo la opción “Comment” (o
Uncomment) del menú.

La plantilla por defecto para CR1000 contiene comentarios, e instrucciones


comentadas para mostrar ejemplos de sintaxis válida. Eliminando la comilla que
los precede haremos que la línea pase a ser activa.

El editor CRBasic, por defecto, remarca diferentes tipos de elementos en el


programa utilizando diferentes estilos de fuente y colores. Los comentarios,
nombres de instrucciones y otros elementos de texto tienen cada uno una
apariencia diferente, haciendo que el programa sea más fácil de leer y editar.
Usted puede personalizar o deshabilitar completamente la sintaxis cambiando las
preferencias de su editor (Options | Editor Preferences | Syntax Highlighting).

►► Elimine y cambie algunas de las comillas para ver como las líneas pasan de
comentarios a activas.

6-3
Sección 6. Introducción a la programación con CRBasic

6.6 Programa típico de CR1000


Un programa típico de CR1000 contiene:
a) Declaración de variables de programa
b) Definiciones de las tablas de datos
c) Definiciones de las subrutinas (El uso de subrutinas es opcional)
d) Programa(s) incluyendo el scan interval, medidas, procesado, control, y
llamadas a las tablas de datos

La estructura de un programa CR1000 requiere que las variables y subrutinas se


definan antes de ser usadas. La mejor manera de hacerlo es poniendo al principio
todas las declaraciones de variables y todas las definiciones de tablas de salida,
seguidas de las subrutinas y luego el programa principal. La mayoría de los
programas no necesitan subrutinas; de forma que generalmente no se usan las
“definiciones de subrutinas”. A continuación se muestra la distribución típica de
un programa. La ayuda on-line tiene un ejemplo para cada instrucción para
demostrar su uso dentro de un programa.

Aparece una ventana de diálogo cuando se añade una instrucción que tenga uno o
más parámetros o cuando se coloca el cursor encima de una instrucción y se hace
clic con el botón derecho. Esta ventana de diálogo contiene un campo para cada
parámetro de la instrucción. Rellene estos campos y haga clic en el botón Insert (o
Alt-I) para pegar la instrucción dentro del programa.

►► Ejercicio 2 — Programando con CRBasic

Objetivo: Utilice CRBasic para crear un programa similar al que hicimos con
SCWin. Mida la temperatura del panel de conexiones del CR1000, la temperatura
del aire en grados ºC con un termopar tipo T, el voltaje de la batería, y almacene la
media minutal, la temperatura máxima y mínima del aire y el voltaje mínimo de la
batería.

6.6.1 Declaraciones de variables


Declaraciones – Haga una lista de variables que se utilizaran para las medidas y
los cálculos del programa.

Las declaraciones de variables incluyen:


Public – hace la variable, o la variable tipo array, disponible en la tabla Public.
Dim – declara variables y variables tipo arrays.
Const – declara constantes para usar en lugar de entradas numéricas.
Alias – asigna un segundo nombre a una variable.
Units – asigna una etiqueta para identificar las unidades a una variable.

6-4
Sección 6. Introducción a la programación con CRBasic

Las variables deben ser declaradas antes de usarse en el programa. Las variables
declaradas como Public pueden ser monitorizadas por LoggerNet mediante la
pantalla de monitorización numérica o el display de gráficos. Las variables
declaradas en Dim no se pueden visualizar. Las variables asignadas a un valor fijo
se usan como Constantes. También se pueden crear Alias, que permitirán
referirse a un elemento de un array u otro resultado con un nombre diferente.

Las declaraciones Units se usan para asignar una etiqueta a una variable en el
programa para identificar las unidades en las que está almacenada la medida
asociada. Las unidades son únicamente a título de documentación. Las etiquetas
de Units aparecen en la cabecera de los archivos de salida.

Las variables pueden tener hasta 16 caracteres de longitud. Deben empezar con
una letra y pueden contener números y guión bajo (_); no pueden contener
espacios. CRBasic no distingue mayúsculas y minúsculas. Se pueden declarar
varias variables en una sola línea, separándolas por comas. Por ejemplo:

Public RefTemp, AirTemp, batt_volt

►► Ejercicio 2 continuación

Declare variables Public y asocie Units: RefTemp, AirTemp, batt_volt

Public Batt_Volt, PTemp, AirTemp


Units batt_volt = volts
Units PTemp = deg_C
Units AirTemp = deg_C

6-5
Sección 6. Introducción a la programación con CRBasic

6.6.2 Tablas de datos (data tables)


Tablas de datos – Definir que datos a almacenar y más tarde recoger al PC.

DataTable
DataInterval
Optional export data
Output Processing
EndTable

La instrucción DataTable se usa para definir: el nombre, las condiciones de


disparo, y tamaño de una tabla de salida. La sentencia EndTable designa el fin
de la tabla de salida. Todas las instrucciones de salida deben aparecer entre las
instrucciones DataTable/EndTable.

El nombre de la DataTable puede ser de hasta 8 caracteres de longitud. Debe


empezar con una letra y puede contener números y guiones bajos (_); no puede
contener espacios. El CRBasic no distingue entre mayúsculas y minúsculas. En
un programa para CR1000 se pueden declarar hasta 32 DataTables.

Una tabla de datos está formada por filas y columnas. El tamaño de la DataTable
determina el número de registros (o filas) a reservar para esa tabla en la memoria
del CR1000. El número de valores (o columnas) en la DataTable es determinado
por las instrucciones de procesado de salida contenidas en la declaración de la
DataTable.

Si se introduce un número negativo en el parámetro size de la DataTable, toda la


memoria que quede disponible después de crear tablas de tamaño fijo, se destinará
a esa tabla. Si se introduce un número negativo en varias DataTables en su
parámetro size, la memoria disponible se dividirá entre las tablas. El datalogger
intentará dimensionar la memoria de las tablas de forma que todas ellas se llenen
al mismo tiempo.

La instrucción DataInterval se usa para configurar el intervalo de tiempo de


almacenamiento de datos, basado en el reloj del datalogger. La instrucción
DataInterval es opcional.

Para usar la memoria del datalogger de la forma más eficiente, no se guarda la


fecha y hora en cada registro generado; se calcula en la recogida de datos al PC. Si
se pierde un registro, se genera un lapse, y entonces se guarda la fecha y hora
junto al registro. El parámetro lapses de la instrucción DataInterval configura el
máximo número de lapses a registrar.

Las instrucciones CardOut, DSP4, y GOESData son opcionales y se usan para


almacenar datos en otro hardware.

Las instrucciones de proceso de salida almacenan los resultados de las medidas o


valores calculados. Estas instrucciones incluyen: Average, Maximum,
Minimum, Sample, StdDev, Totalize, y Wind Vector entre otras.

6-6
Sección 6. Introducción a la programación con CRBasic

Todas las tablas de datos se deben definir en el área de declaraciones del programa
(antes de la sentencia BeginProg).

Nota: para que los datos se escriban a una DataTable, la tabla debe ser llamada
desde el programa mediante la instrucción CallTable.

La instrucción OpenInterval se puede utilizar para modificar que medidas se


incluyen en las instrucciones de proceso de las series temporales dentro del
intervalo de la DataTable. Cuando se introduce esta instrucción en una declaración
de DataTable, el procesado de las series temporales incluirá todas las medidas
desde la última vez que se almacenaron datos.

Típicamente, los datos de las series temporales (medias, totales, máximos, etc.)
que se graban en una tabla basada en un intervalo, únicamente incluyen medidas
del intervalo actual. Después de cada intervalo de salida (output interval), se borra
la memoria que contenía las medidas de los datos de la serie temporal. Si se pierde
un intervalo de salida (porque no se cumplen los criterios de validación), la
memoria se limpia en el inicio del siguiente intervalo. Si la declaración
DataTable contiene la instrucción OpenInterval, la memoria no se limpia. Esto
resulta en que se incluyen todas las medidas en los datos de la serie temporal
desde la última vez que se grabaron datos (aunque los datos puedan abarcar
múltiples output intervals).

►► Ejercicio 2 continuación

Declare una tabla de datos minutal: temperatura del aire media, máxima y mínima,
voltaje mínimo de batería.

Utilice un table size de -1 para almacenar el máximo número de registros.

6.6.3 Declarar subrutinas


Declarar subrutinas – El uso de subrutinas es opcional. Las subrutinas son útiles
para hacer la misma cosa múltiples veces.

Sub
otras instrucciones
opcional ExitSub
otras instrucciones
EndSub

Una subrutina es un procedimiento a parte que es llamado por el programa


principal usando la declaración Call. Una subrutina puede definir variables, llevar
a cavo una serie de instrucciones, y cambiar el valor de sus variables.
Discutiremos el uso de subrutinas más adelante. En el ejercicio 2 no se utilizan
subrutinas.

Todas las subrutinas deben estar definidas en el área de declaraciones del


programa (antes de la sentencia BeginProg).

6-7
Sección 6. Introducción a la programación con CRBasic

6.6.4 Programa principal


Programa principal – Incluir las instrucciones de medida, de proceso y control
dentro del cuerpo principal del programa.

BeginProg
Scan
Medidas
Proceso
Control
CallTable
NextScan
EndProg

Todas las instrucciones del programa principal están entre las sentencias
BeginProg y EndProg. Las variables del programa, tablas de datos y subrutinas
deben definirse antes del programa principal.

Las medidas, procesado, y llamadas a tablas de datos dentro de las instrucciones


Scan…NextScan determinan la secuencia y temporización del programa del
datalogger.

La instrucción Scan determina con que frecuencia se hacen las medidas que están
dentro de la estructura Scan…NextScan, controla la capacidad del buffer, y
determina el número de veces a hacer el bucle de scan. El scan interval mínimo es
de 10 milisegundos; y el máximo es de 30 minutos. La resolución es de 10
milisegundos.

Las instrucciones de medida indican al hardware de medición realizar una medida


y colocar los resultados en una variable o array.

►► Ejercicio 2 continuación

Configure el scan interval a 1 segundo.

6-8
Sección 6. Introducción a la programación con CRBasic

6.7 Instrucciones de programa


Cada instrucción de programa tiene un “nombre clave” y “parámetros” que
personalizan cómo será ejecutada la instrucción.

Cada instrucción tiene un nombre clave y una serie de parámetros que contienen la
información necesaria para completar la medida. Por ejemplo, la instrucción para
medir la temperatura del panel de conexiones del CR1000 es: PanelTemp (Dest,
Integ)

PanelTemp es la palabra clave de la instrucción. Los dos parámetros asociados


con PanelTemp son: Destination, el nombre de la variable donde colocar la
temperatura; e Integration, el tiempo de integración de la medida. Para poner esta
temperatura en la variable RefTemp (usando un tiempo de integración de medida
de 250 microsegundos) el código es:

PanelTemp(RefTemp, 250)

El uso de estas instrucciones quedará más claro conforme vayamos avanzando en


los próximos ejercicios.

Nota: Las “palabras clave” son todas las palabras usadas en instrucciones, y
mostradas en el panel de instrucciones. Las palabras clave no se pueden declarar
como variables.

►► Ejercicio 2 continuación

Medidas:
Battery
PanelTemp
TCDiff
CallTable

6.8 Salvar y Compilar (save and compile)


Cuando finalice, guarde y compile para comprobar si hay errores de programa.

El CRBasic dispone de un precompilador para el CR1000. Puede no detectar todos


los errores. Los que no detecte pueden ser identificados cuando el programa sea
enviado al datalogger.

6-9
Sección 6. Introducción a la programación con CRBasic

6.9 Multiplicadores y offsets (multipliers and offsets)


Cada instrucción de medida tiene una salida específica. Utilice multiplicadores y
offsets para cambiar los resultados a unidades de ingeniería u otras unidades.

La instrucción TCDiff realiza la medida de un termopar en un canal diferencial y


convierte la medida a grados Celsius. Los dos últimos parámetros de la instrucción
son el multiplicador y el offset. En el siguiente ejemplo los resultados son en
grados Celsius:

TCDiff(AirTemp_C,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1,0)

Para convertir grados Celsius a grados Fahrenheit hay que multiplicar por 1.8 y
sumar 32. En el siguiente ejemplo el resultado es en grados Fahrenheit:

TCDiff(AirTemp_F,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1.8,32)

►► Ejercicio 2 continuación

Añada una medida adicional de termopar (en el mismo canal) pero saque los
resultados en grados Fahrenheit. Declare una nueva variable, AirTemp_F.
Modifique la Data Table para incluir la temperatura del aire media en grados F.
Guarde y compile. Use la pantalla Connect para enviar el programa revisado al
datalogger y vea las variables.

6-10
Sección 7. Tipos de datos y formatos
Es importante entender los diferentes formatos de datos, rangos, y donde se usan.
Hablaremos sobre como se crean y manipulan los datos en el CR1000, sobre como
se muestran en LoggerNet y sobre como se graban en un archivo del PC.

Tipo de dato Descripción Tamaño Rango Resolución Donde se usa


FLOAT IEEE four byte 4 bytes De 1.8 *10^-38 a 24 bits (sobre 7 variables,
floating point 1.7 *10^38 dígitos) display
LONG 4 byte signed 4 bytes De -2,147,483,648 a 32 bits variables,
integer +2,147,483,647 display
BOOLEAN 4 byte signed 4 bytes -1, 0 Verdadero (-1) o variables,
integer Falso (0) display
STRING ASCII String Set by variables,
program display
IEEE4 IEEE four byte 4 bytes De 1.8 *10^-38 a 24 bits (sobre 7 Cálculos
floating point 1.7 *10^38 dígitos) internos,
salida
FP2 Campbell 2 bytes De -7999 a +7999 13 bits (sobre 4 Salida
Scientific dígitos
floating point
Binary Binary Internal,
output

7.1 Descriptores de variables


La declaración de variables (usando las declaraciones DIM o PUBLIC) permite
un descriptor de tipo opcional, AS, que especifica el tipo de datos. Los tipos de
datos son FLOAT, LONG, BOOLEAN, y STRING. El tipo de datos por defecto
es FLOAT.

“AS FLOAT” es el tipo de datos por defecto. Si no se especifica explícitamente el


tipo de datos con la sentencia AS, entonces se utiliza FLOAT por defecto. Tanto
las variables de las medidas como los cálculos, se realizan internamente en IEEE 4
byte floating point con algunas operaciones calculadas en doble precisión. Una
buena regla es que la resolución será mejor de 1 en el séptimo dígito.

“AS LONG” define la variable como 32 bit integer. Hay dos posibles razones
para que uno quiera hacer esto: (1) velocidad, dado que el sistema operativo del
CR1000 pueden realizar operaciones matemáticas con enteros más rápido que con
FLOATs, y (2) resolución, dado que el LONG tiene 31 bits comparado a los 24
bits del FLOAT. Una buena aplicación para la sentencia AS LONG es un
contador que se espere vaya a ser muy grande.

7-1
Sección 7. Tipos de datos y formatos

“AS BOOLEAN” define la variable como 4 byte Boolean. Las variables Boolean
se usan normalmente para flags y para representar condiciones o hardware que
solo puede tener dos estados (Ej. On/Off, High/Low). Una variable Boolean utiliza
el mismo formato de 32 bit long integer que el LONG pero solo puede tomar dos
valores: true, que se representa con –1, y false, que se representa con 0. Cuando un
FLOAT o LONG integer se convierte a BOOLEAN, cero es false (0), cualquier
valor que no sea cero pondrá el Boolean a True (-1). Los datos Boolean se pueden
mostrar como On/Off, True/False, Red/Blue, etc.

“AS STRING * size” especifica la variable como una cadena de caracteres


(string) ASCII, terminada con un NULL, con un size opcional especificando el
máximo número de caracteres en la cadena. La cadena es utilizada al trabajar con
sensores RS232, cadenas de marcación, mensajes de texto, etc. Cuando no se
especifica el size, se usan 16 caracteres por defecto. La cadena más pequeña es
también de 16 caracteres.

►► Ejercicio 3 — declaraciones con AS

Modifique el ejemplo 2 para usar las declaraciones tipo AS:

Public Batt_Volt AS FLOAT, PTemp_C, AirTemp_C, AirTemp_F


Public counter AS LONG
Public SiteName AS STRING * 16

Incluya las siguientes sentencias en el programa principal:


SiteName = "CR1000_username"
Counter = counter +1

Guarde el programa como Ejemplo 3.

7-2
Sección 7. Tipos de datos y formatos

7.2 Almacenamiento de datos


Los datos se pueden almacenar (grabar) tanto en IEEE4 como en FP2. El formato
lo determina la instrucción de programa (output instruction) que graba el dato, por
Ej. mínimo, máximo, etc.

Mientras que FLOAT (IEEE 4 byte floating point) se utiliza en variables y


cálculos internos, FP2 es adecuado para la mayoría de datos almacenados. El
formato Campbell Scientific 2 byte floating point FP2 proporciona 3 o 4 dígitos
significativos de resolución, y requiere la mitad de espacio en memoria que el
IEEE4 (2 bytes por valor contra 4 bytes).

Resolución y límites de rango de datos FP2

Cero Magnitud mínima Magnitud máxima


0.000 ±0.001 ±7999.

La resolución del FP2 se reduce a 3 dígitos significativos cuando el primer dígito


(el de más a la izquierda) es 8 o mayor. Por tanto, puede ser necesario utilizar
IEEE4 o un añadir un offset para mantener la resolución deseada en la medida.
Por ejemplo, si hay que medir un nivel de agua con diferencias de 0.01, el nivel
debe ser inferior a 80 para poder utilizar FP2 y obtener incrementos de 0.01. Si el
nivel de agua se espera que pueda variar entre 50 y 90 podemos grabar el dato en
IEEE4 o añadirle un offset de 20 (transformando el rango de 30 a 70).

Posición punto decimal en el FP2


Valor absoluto Posición del punto decimal
0 - 7.999 X.XXX
8 - 79.99 XX.XX
80 - 799.9 XXX.X
800 - 7999. XXXX.

Nota: Las variables STRING y BOOLEAN pueden utilizarse con la instrucción


Sample.

►► Modifique el ejemplo 3 para grabar datos en formato FP2 y IEEE4.


Incluya también un Sample del contador y el SiteName.

DataTable(OneMin,True,-1)
DataInterval(0,1,Min,0)
Average(1,AirTemp_C,IEEE4,0)
Maximum (1,AirTemp_C,IEEE4,0,False)
Minimum (1,AirTemp_C,FP2,0,False)
Minimum (1,Batt_Volt,FP2,0,False)
Sample (1,counter,Long)
Sample (1,SiteName,String)
EndTable

7-3
Sección 7. Tipos de datos y formatos

7.3 Recogida de datos


La recogida de datos consiste en copiar datos desde el datalogger a un archivo en
el PC. Los datos tanto almacenados internamente en el CR1000 como los
recogidos, están en formato binario. Cuando LoggerNet graba los datos en el
archivo del PC puede convertir el formato binario, por ejemplo a ASCII.

Cada DataTable recogida utilizando LoggerNet tiene su propio fichero en el PC.


LoggerNet puede convertir el formato binario del CR1000 en algo legible (ASCII)
cuando almacena los datos en el fichero. Existen cuatro tipos de Formato de
salida disponibles con LoggerNet | Setup | Ficheros.

Cada fichero en el PC puede tener al principio una cabecera ASCII. La cabecera


da información del formato, datalogger, y programa utilizado para generar y
almacenar los datos.

a) ASCII Table Data, Long header (TOA5) – Este es el formato por defecto y el
más común para importar en bases de datos y hojas de cálculo. Los datos se
almacenan separados por coma. La información de cabecera para cada
columna está incluida, junto con los nombres de los campos y unidades de
medida si estas están disponibles.

7-4
Sección 7. Tipos de datos y formatos

"TOA5","CR1000_on_desk","CR1000","-1","0.0.15","CPU:EX2.CR1","29702","OneMin"
"TIMESTAMP","RECORD","AirTemp_C_Avg","AirTemp_C_Max","AirTemp_C_Min","Batt_Volt_Min"
"TS","RN","deg C","deg C","deg C","volts"
"","","Avg","Max","Min","Min"
"2004-05-04 07:28:00",0,24.01,24.02,24.01,13.19
"2004-05-04 07:29:00",1,23.99,24.01,23.97,13.19
"2004-05-04 07:30:00",2,23.96,23.97,23.95,13.19

El siguiente es un ejemplo de cómo los datos de arriba podrían aparecer al ser


importados a un a hoja de cálculo:

CR1000_on CR1000.Std CPU:EX2.CR


TOA5 _desk CR1000 1022 .01 1 27664 OneMin
AirTemp_C_ AirTemp_C_ AirTemp_C_ Batt_Volt_
TIMESTAMP RECORD Avg Max Min Min
TS RN deg C Deg C deg C volts
Avg Max Min Min
2004-05-04
07:28:00 0 24.01 24.02 24.01 13.19
2004-05-04
07:29:00 1 23.99 24.01 23.97 13.19
2004-05-04
07:30:00 2 23.96 23.97 23.95 13.19

La aplicación View de LoggerNet puede mostrar la información de la cabecera


abriendo el fichero y haciendo clic en File | Properties.

7-5
Sección 7. Tipos de datos y formatos

La información contenida en la cabecera se describe aquí debajo.

Nombre genérico Ejemplo Descripción

File Format TOA5 El formato del fichero en disco. TOA5 es un formato


ASCII.
Station Name CR1000_on_desk Nombre de estación entrado en el Setup de LoggerNet de
donde se han recogido los datos. Nota: Esta no es la
información generada por la sentencia opcional
StationName.
Logger Model CR1000 Modelo de datalogger del que se han recogido los datos.
Logger Serial 1022 El número de serie del logger del que se han recogido los
Number datos. Es el número de serie de la CPU del CR1000.
Operating System CR1000.Std.01 La versión del sistema operativo del logger del que se han
Version recogido los datos.
Program file CPU:EX2.CR1 El nombre del programa que estaba ejecutándose en el
CR1000 cuando se recogieron los datos.
Program Signature 27664 La firma del programa.
Table Name OneMin El nombre de la data table.
Timestamp TS Fecha y hora del registro. Indica la hora, de acuerdo con el
reloj del logger.
Record Number RN El número de registro. El número aumentará hasta 2E32 y
entonces volverá a empezar desde cero. El número de
registro también empezará desde cero si se resetea la tabla.
Field Names AirTemp_C_Avg, El nombre del campo en la data table. Este nombre es
AirTemp_C_Max, etc. creado por el CR1000 añadiendo un guión bajo (_) y un
mnemónico de tres caracteres con el cálculo realizado. Los
nombres de campo se asignan según la instrucción
DataTable.
Field Units deg C, volts Las unidades del campo en la data table. Las unidades se
asignan en el programa con la declaración Units.
Field Processing Smp = Sample El procesado de salida (cálculo) que fue utilizado cuando se
Max = Maximum grabó el campo.
Min = Minimum
Avg = Average
Field Data 24.01, 24.02, etc. Valor de cada campo del registro.
Optional ULONG = Unsigned 4 byte Esta línea de cabecera solo está en el formato binario TOB1
Field Data Type integer e identifica el tipo de dato para cada uno de los campos de
IEEE4 = 4 byte floating la tabla de datos.
point

b) ASCII Table Data, No Header – Los datos se almacenan separados por


coma. No se incluye información de la cabecera en el archivo. Por ejemplo:

"2004-05-04 08:26:00",7,24.46,24.48,24.44,13.17
"2004-05-04 08:27:00",8,24.46,24.48,24.43,13.17
"2004-05-04 08:28:00",9,24.46,24.47,24.44,13.17

c) ASCII Table Data, Short Header, (TOACI1) – Los datos se almacenan


separados por coma. Incluye una versión reducida de la cabecera para cada
columna.

7-6
Sección 7. Tipos de datos y formatos

"TOACI1","CR1000_on_desk","OneMin"
"TMSTAMP","RECNBR","AirTemp_C_Avg","AirTemp_C_Max","AirTemp_C_Min","Batt_Volt_Min"
"2004-05-04 08:29:00",10,24.48,24.5,24.46,13.17
"2004-05-04 08:30:00",11,24.47,24.48,24.46,13.17
"2004-05-04 08:31:00",12,24.48,24.5,24.46,13.16
"2004-05-04 08:32:00",13,24.46,24.48,24.45,13.17
"2004-05-04 08:33:00",14,24.48,24.49,24.45,13.17
"2004-05-04 08:34:00",15,24.42,24.45,24.41,13.17
"2004-05-04 08:35:00",16,24.42,24.44,24.41,13.16
"2004-05-04 08:36:00",17,24.42,24.44,24.4,13.17

d) Binary Table Data (TOB1) – Los datos se almacenan en formato binario.


Aunque este formato ahorra espacio de almacenamiento del disco, se debe
convertir antes de poderse usar en otros programas.

"TOB1","CR1000_on_desk","CR1000","-1","0.0.15","CPU:EX2.CR1","23213","OneMin"
"SECONDS","NANOSECONDS","RECORD","AirTemp_C_Avg","AirTemp_C_Max","AirTemp_C_Min","Batt_Volt_Min"
"SECONDS","NANOSECONDS","RN","deg C","deg C","deg C","volts"
"","","","Avg","Max","Min","Min"
"ULONG","ULONG","ULONG","FP2","FP2","FP2","FP2"
(No se muestran las líneas de datos en binario dado que son ilegibles.)

7.4 Not-A-Number (NAN) e Infinity (INF)


NAN, not-a-number es mostrado y utilizado en valores de medidas que exceden el
rango de voltaje del canal.

Para valores IEEE4 que excedan el rango numérico permitido se mostrará o


grabará INF o –INF.

Si uno o más valores medidos están fuera del rango de voltaje permitido (NAN),
se almacenará también NAN en cálculos que incluyan Average y Total. Las
instrucciones Maximum y Minimum hacen caso omiso de valores NAN y
devuelven el valor máximo o mínimo de medidas válidas.

7.5 Recogida personalizada


LoggerNet permite la recogida de datos personalizada utilizando el botón
“Personalizada” de la pantalla Connect.

Haciendo clic en el botón “Personalizada” y conectado al CR1000, le permite


recoger datos específicos. Cada tabla se guarda en un archivo independiente en el
PC, por lo que habrá un archivo por cada tabla que seleccione.

7-7
Sección 7. Tipos de datos y formatos

Los datos recogidos con Recogida Personalizada se almacenan en diferentes sitios,


y tienen diferentes punteros de recogida a los que se recogen mediante Recogida
Manual en Connect o con Recogida Programada Activada. Por ejemplo: Datos
desde la última recogida será desde la última recogida dentro de esta ventana, y
no lo que se pueda hacer desde la pantalla Connect.

Opciones de Modo Recogida:

a) Número registros más nuevos.


b) Registros específicos.
c) Datos desde la última recogida.
d) Todos los datos.
e) Datos de fecha y hora seleccionada.

7-8
Sección 7. Tipos de datos y formatos

Opciones Modo fichero:

a) Añadir al final del fichero.


b) Sobrescribir fichero actual.
c) Crear fichero nuevo.

Opciones Formato fichero:

a) ASCII Table Data, cabecera corta (TOACI1).


b) ASCII Table Data, cabecera larga (TOA5).
c) Binary Table Data, (TOB1).

7.6 Resetear tablas


Las tablas del datalogger CR1000 se pueden resetear (borrar) a través de una
opción en la pantalla Recogida personalizada.

La función Resetear tablas elimina los datos de la tabla seleccionada tanto de la


memoria del CR1000 como de la memoria caché de LoggerNet. Asegúrese por
tanto de que no necesita esos datos o guárdelos previamente.

7-9
Sección 7. Tipos de datos y formatos

7-10
Sección 8. Detalle de las instrucciones
8.1 Categorías de las instrucciones
Las instrucciones del datalogger se pueden agrupar en ocho categorías: data tables,
declaración de variables, medidas/control, operadores, salida, procesado
matemático, control, y serie RS232.

El panel de instrucciones del CRBasic tiene una lista desplegable con todas las
categorías de instrucciones.

Haga clic en el desplegable para ver la lista de categorías de instrucciones. Esta


lista contiene todas las categorías definidas en el editor CRBasic, y las categorías
creadas por el usuario. Cuando se selecciona una categoría, solo se muestran las
instrucciones de esa categoría.

Para crear Categorías personalizadas, haga clic en Options | Edit Instruction


Categories | Add New Category | Edit (new) Category.

8-1
Sección 8. Detalles de instrucción

8.2 Personalizando CRBasic


El editor CRBasic Editor se puede personalizar en su aspecto y remarcado de la
sintaxis.

Las opciones del menú CRBasic Editor Options son:


Editor Preferences que incluye espaciado y remarcado
Instruction Panel Preferences
Edit Instruction Categories
Font
Background Color
Wrap Text When Printing
Display Last Window Used

8.3 Parámetros de las instrucciones


Cada instrucción tiene parámetros que personalizan como se ejecutará la
instrucción.

Aparecerá en pantalla una ventana diálogo de parámetros cuando se inserte una


instrucción en el programa que tenga uno o más parámetros o cuando el cursor se
ponga encima de la instrucción y se presione el botón derecho del ratón. Esta
ventana de diálogo contiene un campo para cada parámetro de la instrucción. Es
necesario editar estos campos según convenga y después hacer clic en “Insert”
para pegar la instrucción al programa.

8-2
Sección 8. Detalles de instrucción

8.3.1 Ejemplo de instrucción de medida


Debajo tenemos un ejemplo de una ventana de diálogo de parámetros para la
instrucción de voltaje diferencial (VoltDiff). La instrucción VoltDiff se usa para
hacer una medida de voltaje diferencial en uno o más canales analógicos.

Cuando se inserta en el programa esta instrucción se ve así:

VoltDiff( Dest, Reps, Range, DiffChan, RevDiff, SettlingTime, Integ, Mult,


Offset )

La mayoría de las instrucciones de medida incluyen los siguientes parámetros:

Destination – variable en donde almacenar el resultado de la medida.

Repetitions – el número de veces que debe realizarse la medida. Las medidas se


hacen en canales consecutivos. Si el parámetro Repetitions es mayor que 1, el
parámetro Destination debe ser un array.

Channel (DiffChan) – el número del canal diferencial donde hacer la primera


medida. Si el parámetro “Repetitions” es mayor que 1, las medidas adicionales se
harán en canales consecutivos. Si el valor entrado en DiffChan es negativo, todas
las Reps se harán en el mismo canal.

Multiplier, Offset – Los parámetros Multiplier y Offset son cada uno una
constante, variable, array, o expresión que escala los resultados de la medida. Con
un multiplier de 1 y un offset de 0, la salida es en la unidad de medida.

8-3
Sección 8. Detalles de instrucción

Determinación de la pendiente (multiplier) y Offset

Ecuación de la recta: y=mx + b


Donde: x = punto en el eje x
y = punto en el eje y
m = multiplier (pendiente)
b = offset (punto de corte en el eje y)

Suponiendo que:
rango del sensor (valores de y) -> 200 a 700 psi
rango de salida (valores de x) -> 400 a 2000mV

Cálculo del multiplier (pendiente)


m = (y2-y1)/(x2-x1)
m = (700-200)psi/(2000-400)mV
m = 0.3125 psi/mV

Sustituir los valores conocidos para calcular “b”, el offset (punto de corte con el
eje y)
y=mx+b; despejando “b”
b = y-mx
b = 200-(0.3125*400) = 75 psi

Voltaje Range – el rango de voltaje del sensor de entrada al CR1000.

Entrada Rango Fondo Escala


mV5000 ± 5000 mV
mV2500 ± 2500 mV
mV250 ± 250 mV
mV25 ± 25 mV
mV7_5 ± 7.5 mV
mV2_5 ± 2.5 mV
Autorange mV2_5 to mV5000; el datalogger determina el rango más
conveniente
mV250C ± 250 mV, chequea circuito abierto
mV25C ± 25 mV, chequea circuito abierto
mV7_5C ± 7.5 mV, chequea circuito abierto
mV2_5C ± 2.5 mV, chequea circuito abierto
autorangeC mV2_5 to mV250; el datalogger chequea posible circuito
abierto, y determina el rango más conveniente. Entradas >250
mV estarán fuera de rango.

8-4
Sección 8. Detalles de instrucción

La resolución de una medida es una parte en 7500 sobre rango fondo escala
(FSR). Cuanto más pequeño sea el voltage range seleccionado, mejor será la
resolución absoluta. En general, una medida debe usar un voltage range fijo lo
más pequeño posible y que admita el fondo de escala del sensor a medir.

El AutoRange permite al CR1000 elegir automáticamente el rango de voltaje a


utilizar. El AutorRange del CR1000 hace dos medidas. La primera medida
determina el rango a usar. Lo hace con una integración de 250µS y en el rango de
± 2500mV. La segunda medida se hace en un rango ajustado utilizando la
integración especificada en la instrucción. AutoRange optimiza la resolución pero
tarda más tiempo, y más consumo, que una medida en un rango fijo debido a la
necesidad de realizar dos medidas.

Los rangos seleccionados que terminan en C (por Ej. mV2_5C) chequean posible
circuito abierto y al mismo tiempo llevan la señal dentro del rango en modo
común.

El circuito abierto detecta trabajos conectando brevemente (50 µS) el voltaje de


entrada a 300 mV dentro del CR1000. Después de desconectar, se deja estabilizar
la señal, y se hace la medida del voltaje. Si el sensor está en circuito abierto
(entradas no conectadas y flotantes) las entradas permanecerán flotantes cerca del
voltaje al que estaban conectadas, y la medida devolverá Not-A-Number (NAN).
Si el sensor está bien, la señal del sensor conectará las entradas al valor correcto.

Conectar brevemente las entradas a los voltajes internos del CR1000 también sirve
para llevar una señal diferencial flotante dentro del rango en modo común. Estas
opciones de voltaje range deberían usarse en la medida diferencial de termopares
(instrucción TCDiff) y para otros sensores con salidas diferenciales flotantes (por
Ej. sensores de radiación solar).

El rango en modo común (common mode range) es el rango de voltaje, relativo a


la tierra del CR1000, dentro del cual deben estar los voltajes de cada entrada en
una medida diferencial, para que la medida diferencial se pueda llevar a cabo.

SE 1 2
Diff 1
H L
4000 mV

3000 mV

Medida = 1000 mV

Sensor

Sensor cableado en canal 1 Diff

Sin embargo, si la entrada del canal H está a 5.8V y la entrada del canal L está en
4.8V, la medida no se puede realizar dado que el voltaje en H está fuera del rango
en modo común de ±5V.

8-5
Sección 8. Detalles de instrucción

Adicionalmente, las medidas single ended tienen:

MeasOff – Determina si el voltaje de offset de tierra hay que medirlo antes de


realizar la medida en el canal analógico. Si se mide, se resta a la medida del sensor
y el resultado almacenado en Dest. Entrando 0, el offset de tierra es corregido, a
partir de la calibración en background. Entrando 1, se mide el offset de tierra en
cada scan, lo cual incrementa la duración de la medida; y utilizado cuando el
offset cambia rápidamente.

SettlingTime – la cantidad de tiempo a retardar desde la orden de medir hasta que


la medida se realiza. Consultar la siguiente tabla para ver los SettlingTimes por
defecto.

Entrada Rango Integración Settling Time


0 All 250 us 450 us (default)
0 All _50Hz 3 ms (default)
0 All _60Hz 3 ms (default)
>100 All All ms entered

Integ – la cantidad de tiempo, en microsegundos, para integrar una señal en el


canal que está siendo medido.

Opciones Descripción
250 Integración de 250 microsegundos.
_60Hz Integración de 16.667 milisegundos; filtro ruido 60 Hz.
_50Hz Integración de 20 milisegundos; filtro ruido 50 Hz.

8-6
Sección 8. Detalles de instrucción

Las Medidas Diferenciales también incluyen:

RevDiff – Una entrada ‘true’ o ‘false’ para determinar si las entradas se invierten
y se hace una segunda medida. Esta función elimina cualquier error de offset de
voltaje debido a la propia circuitería de medida del datalogger, incluyendo errores
de modo común. Habilitando este parámetro se dobla el tiempo de la medida.
False (0) = no hacer la segunda medida; True (1) = invertir entradas y hacer la
segunda medida.

Los Puentes de Medida incluyen:

RevEx – Determina si el voltaje de excitación se debe invertir y aplicar al sensor


después de que se haya hecho la primera medida. Se usa cuando un sensor puede
polarizarse, o dañarse con una excitación DC constante. False (0) = no invertir el
voltaje de excitación; True (1) = invertir el voltaje de excitación y hacer una
segunda medida (requiere más tiempo en completarse). El uso de RevEx elimina
offsets debidos al sensor, cableado, circuitería de excitación, pero no compensa
errores de modo común.

Cuando el CR1000 invierte la entrada diferencial o la polaridad de la excitación,


retarda el mismo settling time después de la inversión, igual que hace antes de la
primera medida. Así, hay dos retardos por canal tanto cuando se utiliza RevDiff o
RevEx. Si se utilizan las dos, hay cuatro segmentos en la medida, excitaciones
positiva y negativa con las entradas colocadas de una forma y excitación positiva
y negativa con las entras invertidas. El CR1000 se coloca en el canal:

8-7
Sección 8. Detalles de instrucción

Excita, retarda, mide


Invierte excitación, retarda, mide
Invierte excitación, invierte entradas, retarda, mide
Invierte excitación, retarda, mide

8.3.2 Ejemplo de instrucción de proceso de salida (output


processing)
A continuación hay un ejemplo de ventana de parámetros para la instrucción
Average. La instrucción Average guarda en la Data Table el valor medio de la
variable analizada sobre el intervalo de salida (output interval).

Cuando se inserta esta instrucción en el programa se ve así:

Average (Reps, Source, DataType, DisableVar)

La instrucción Average se pone dentro de una sentencia DataTable. La medida o


medidas con las que se calcula una media se especifican utilizando los parámetros
Repetitions y Source.

Repetitions – el número de medias a calcular. Si el parámetro Repetitions es


mayor que 1, se debe especificar un array para Source. Si no, cuando se compile el
programa este dará un error Variable Out of Bounds.

Source – el nombre de la variable donde guardar la media.

DataType – se utiliza para seleccionar el formato con el que guardar los datos. Las
opciones para esta instrucción de salida son IEEE4 y FP2. También está
disponible, escribiéndolo directamente, un tercer tipo de datos, LONG.

El tipo de datos LONG configura la salida a 32-bit long integer. Hay dos posibles
razones para que un usuario quiera utilizar este formato: (1) velocidad, dado que el
SO realiza más rápido operaciones con enteros que con coma flotante, y (2)
resolución, Long tiene 31 bits comparado a los 24-bits en IEEE4. Sin embargo, no
es adecuado en muchos casos dado que la parte fraccionaria se pierde.

8-8
Sección 8. Detalles de instrucción

DisableVar - una constante, variable, o expresión utilizada para determinar si la


medida actual debe incluirse en la media.
False (0) = Procesar la medida actual
True (no-cero) = No procesar la medida actual. Normalmente es el
resultado de la evaluación de una expresión, por Ej. HR>100.

8.4 Medidas con puente de resistencias


Los puentes de medida combinan una excitación con medidas de voltaje, y se
utilizan para medir sensores en que su resistencia varía en función del fenómeno
que se está midiendo.

Los sensores que cambian su resistencia se miden insertándolos en un puente de


resistencias. Puede que el sensor incluya el mismo las resistencias del puente, y si
no, habrá que implementarlo.

Los sensores tipo puente requieren un voltaje de excitación preciso para dar una
medida precisa. La excitación está activa sólo durante la medida.

La configuración del sensor y las salidas determinan que instrucción tipo puente
utilizar. El CR1000 dispone de cinco instrucciones de medida de puente. Cada
instrucción tiene una salida particular. Esta puede ser un voltaje simple
(normalmente expresado en mV) o un ratio. Los manuales de sensores de
Campbell Scientific indican que instrucción utilizar. Alternativamente, las
especificaciones del sensor y las fórmulas de cálculo pueden sugerir que
instrucción utilizar.

BrHalf X = result w/mult = 1, offset = 0 X


Rs = Rf
1− X
X=
V1
=
Rs Rs (1 − X )
Rf =
Vx Rs + Rf X

Result units: mV/mV

BrHalf3W X = result w/mult = 1, offset = 0 Rs = Rf X


Rf = Rs / X
2 V2 − V1 Rs
X= =
VX − V1 Rf

Result units: mV/mV

BrHalf4W X = result w/mult = 1, offset = 0 Rs = Rf X


V2 Rs Rf = Rs / X
H X= =
V1 Rf
L
H
Result units: mV/mV
L

8-9
Sección 8. Detalles de instrucción

BrFull X = result w/mult = 1, offset = 0 X1 = − X / 1000 + R 3 / ( R 3 + R 4 )


V1  R3 R2  R 2 (1 − X 1 )
X = 1000 = 1000 −  R1 =
Vx  R3 + R4 R1 + R2  X1
H
R 1 X1
L R2 =
1 − X1
Result units: 1000*V/V OR mV/V

BrFull6W X = result w/mult = 1, offset = 0 X 2 = X / 1000 + R 2 / ( R 1 + R 2 )


V  R R2  R 4 X2
H X = 1000 2 = 1000 3
−  R3 =
V1  R3 + R4 R1 + R2  1 − X2
L
R 3 (1 − X 2 )
H R4 =
L X2
Result units: 1000*V/V OR mV/V

Ejemplo de una veleta potenciométrica


La instrucción BrHalf se utiliza para medir la dirección de viento del sensor
03001 RMYoung Wind Sentry. Con un multiplier de 1 y un offset de 0 el
resultado es el ratio del voltaje medido dividido entre el voltaje de excitación.

Especificaciones: potenciómetro de 10K Ohm con banda muerta 5 grados entre


355 y 360 grados.

8-10
Sección 8. Detalles de instrucción

BrHalf( Dest, Reps, Range, SEChan, ExChan, MeasPEx, ExmV,


RevEx, SettlingTime, Integ, Mult, Offset )

Dest: WindDir
Reps: 1
Range: mV2500
SEChan: 1
ExChan: 1
MeasPEx: 1
ExmV: 2500
RevEx: True
Settling Time: 0
Integ: 60Hz
Mult: 355
Offset: 0

BrHalf(WindDir,1,mV2500,1,1,1,2500,True,0,_60Hz,355,0)

8.5 Cambio de los valores por defecto en los


parámetros
Cada instrucción tiene valores por defecto para cada uno de sus parámetros. Por
ejemplo, en la casilla de parámetros de la instrucción VoltDiff, el valor por
defecto de VoltageRange es mV5000. Si quiere cambiar esto para que cada vez
que inserte la instrucción VoltDiff el valor por defecto de VoltageRange sea
mV1000, tiene que seleccionar la instrucción en el Panel de Instrucciones y hacer
clic en Instruction | Edit Instruction Defaults del menú, y hacer los cambios en el
cuadro de diálogo.

8-11
Sección 8. Detalles de instrucción

8-12
Sección 9. Programación para control
9.1 Representación de los números
Hay 4 maneras de representar números en un programa: base 10, notación
científica, binario, y hexadecimal.

Formatos de entrada de números en CRBasic


Formato Ejemplo Valor
Standard, base 10 6.832 6.832
Notación científica 5.67E-8 5.67X10-8
Binario &B1101 13
Hexadecimal &HFF 255

El formato binario hace fácil visualizar operaciones donde los unos y los ceros se
traducen en comandos específicos. Por ejemplo, utilizando la instrucción
WriteIO, se puede prefijar con un número el estado de un conjunto de puertos de
control, la forma binaria con la cual representar el estado de los puertos (1=high,
0=low). Para configurar high los puertos 1, 3, 4, y 6 y low los puertos 2, 5, 7, y 8
como bajo; el número entrado en CRBasic es &B00101101. El bit menos
significativo está a la derecha y representa el puerto 1. Este es mucho más fácil de
visualizar que entrando 72, que es el decimal equivalente.

9.2 Expresiones matemáticas


Dentro del código de un programa, se pueden entrar expresiones matemáticas de
forma algebraica, y así realizar cálculos sobre las propias medidas o variables.

Las expresiones algebraicas se pueden utilizar en el programa CRBasic para


realizar fácilmente cálculos en variables. Las expresiones deben seguir las reglas
de álgebra estándar, tal como operar primero las funciones dentro de paréntesis.

►► Añada una expresión matemática al ejemplo 3 para convertir la


temperatura del aire de grados Celsius a grados Fahrenheit.

AirTemp2_F = AirTemp_C*1.8 + 32

Y calcule la diferencia entre la temperatura del aire y la temperatura del panel.

DeltaT_C = AirTemp_C – PTemp_C

Guarde el programa como Ejemplo 4.

9-1
Sección 9. Programación para control

9.3 True y False


En la evaluación de instrucciones condicionales, donde el resultado puede ser True
(verdadero) o False (falso). Las palabras “true” y “false” son constantes
predefinidas en CRBasic.

La expresión, X>5, puede ser true o false. El CR1000 evalúa la condición,


parámetro o expresión y devuelve un número; 0 si es false, -1 es true. Las palabras
“true” y “false” son constantes predefinidas en CRBasic, y pueden ser usadas
como tales en su programa. Sin embargo, al describir el estado de un puerto o flan,
on u off , o high o low es más representativo. Cuando utilice una de esas otras
palabras es útil declararlas como Constants.

Una sentencia condicional puede incluir múltiples enlaces and y or.

►► Añada una sentencia condicional para poner un Flag high basado en la


diferencia entre las temperaturas del aire y la de referencia.

Public Flag(4) AS Boolean


Const high = true
Const low = false

Si DeltaT_C es mayor o igual que 3 entonces poner Flag1 high, sino ponerlo low.

'poner Flag1 high cuando DeltaT_C es >= 3


If DeltaT_C>=3 then
Flag(1)=high
Else
Flag(1)=low
EndIf

El formato de la estructura de control If...Then que acabamos de ver, es el


recomendado porque es más estructurado y flexible que el formato de una sola
línea (mostrado debajo), y es normalmente más fácil de leer, mantener, y corregir.
Para cerrar el bloque de una estructura de control If…Then se debe utilizar una
declaración EndIf.

El formato de una sola línea de la estructura de control If…Then:

If condición Then declaraciones [Else declaraciones]

Este formato a menudo es útil en condicionales cortas y simples. En este caso, la


declaración EndIf no es necesaria.

If DeltaT_C>=3 Then Flag(1)=high Else Flag(1)=low

9-2
Sección 9. Programación para control

9.4 Puertos de control


Los ocho puertos de control se pueden utilizar para controlar dispositivos.

Cada uno de los ocho puertos digitales I/O (puertos de control) se pueden
configurar como un puerto de salida y ponerlo low o high (0 V low, 5 V high)
utilizando la instrucción PortSet. Normalmente se utiliza un puerto de salida
digital para actuar sobre un circuito de un relé externo, dado que el puerto por sí
mismo tiene una capacidad limitada de carga (2.0 mA mínimo a 3.5 V).

La instrucción PortSet pondrá el puerto específico en high o low. El primer


parámetro indica el puerto de control (1-8) y el segundo el estado (distinto a cero
= high, 0 = low)

►► Utilice la instrucción PortSet para activar el Puerto1 cuando Flag 1 sea


high. Conecte un LED a C1 (cable rojo en C1, cable negro en G).

'Encender el LED conectado al Puerto1 cuando Flag 1 sea high


If Flag(1)=true then
PortSet (1,1) ' alternativamente: PortSet (1,high)
Else
PortSet (1,0) ' alternativamente: PortSet (1,low)
EndIf

►► Ejercicio 3 continuación

Declare otra Data Table: cada 5 minutos, máxima y mínima temperatura del aire,
mínimo voltaje de batería.

Utilice un table size de -1 para maximizar el número de registros a almacenar.

9-3
Sección 9. Programación para control

9.5 Tabla Status


El CR1000 tiene la tabla Status con un único registro que contiene información
actual del datalogger. Se puede también, ver y cambiar sus valores a través de
Connect Screen Numeric Monitor y | Tools | Status Table.

9-4
Sección 9. Programación para control

La tabla Status contiene un único registro. Debajo se incluye alguna información.


En el Apéndice A del manual del CR1000 puede encontrar la lista completa y
detalles.

OSVersion – Versión actual del sistema operativo.

OSDate – Fecha en la cual el sistema operativo fue compilado.

OSSignature – Firma del sistema operativo.

SerialNumber – Número de serie del CR1000.

RevBoard – Número de revisión de hardware.

StationName – Cadena almacenada en Station Name (utilizando la sentencia


StationName) del CR1000.

ProgName – Nombre del programa actualmente en ejecución.

StartTime – Hora en que el programa empezó a funcionar.

RunSignature – Firma del programa que se está ejecutando.

ProgSignature – Firma de la estructura de datos binaria compilada del programa


que se está ejecutando.

Battery – Valor actual del voltaje de la batería. Esta medida se hace en la


calibración en background.

9-5
Sección 9. Programación para control

PanelTemp – Temperatura actual del panel de conexiones. Esta medida se hace


en background.

WatchdogErrors – Número de errores Watchdog que han sucedido mientras se


ejecutaba este programa. Este valor se puede resetear entrando un cero. También
se resetea al compilar un nuevo programa.

LithiumBattery – Voltaje de la pila de litio.

Low12VCount – Número de veces que la alimentación de 12V ha caído. Este


valor se puede resetear entrando un cero.

Low5VCount – Número de veces que la alimentación de 5V ha caído. Este valor


se puede resetear entrando un cero.

CompileResults – Contiene mensajes de error que se hayan generado en la


compilación o durante la ejecución.

ProgErrors – Número de errores de compilación (o de ejecución) en el programa


actual.

VarOutOfBound – El número de veces que un array ha sido accedido out of


bounds.

SkippedScan – Número de scans saltados mientras se ejecutaba el scan actual.

SkippedSlowScan – Número de scans saltados en esta slow sequence.

SkippedRecord - Variable que representa cuantos registros se han saltado en una


tabla. Cada tabla tiene su propia entrada en este array.

ErrorCalib – Contador que se incrementa cada vez que se produce un valor de


calibración malo. El valor se descarta (no incluido en el filter update) y ErrorCalib
es incrementado.

Security – Un array con los parámetros de la Security (no se mostrará si la


Security está activada).

MemorySize – Cantidad total de SRAM en el CR1000.

MemoryFree – Cantidad (en bytes) de memoria SRAM no utilizada. El usuario


puede que no sea capaz de destinar toda la memoria libre para tablas de datos dado
que el área de almacenamiento final debe ser contiguo. Conforme la memoria se
ocupa y libera, se generan agujeros que no están disponibles para almacenamiento
final, pero que se mostrarán como bytes libres.

ProgMemFree – Cantidad de espacio libre en la SRAM que es utilizado para


almacenar programas.

FullMemReset – Introduciendo el valor 98765 se hará un reset completo de la


memoria.

9-6
Sección 9. Programación para control

DataRecordSize – Número de registros en una tabla. Cada tabla tiene su propia


entrada en este array.

SecsPerRecord – Intervalo de salida (output interval) para una tabla. Cada tabla
tiene su propia entrada en este array.

DataFillDays – Tiempo en días para llenar una tabla. Cada tabla tiene su propia
entrada en este array.

PortsStatus – Array de valores Boolean que indican el estado de los puertos de


control.

PortsConfig - Array de strings detallando el uso de los puertos de control.


Entradas válidas : Input, Output, SDM, SDI-12, Tx, y Rx.

9-7
Sección 9. Programación para control

This is a blank page.

9-8
Sección 10. Recogida de datos
automatizada.
10.1 Recogida programada (Scheduled Collection)
La recogida de datos consiste en copiar datos del datalogger a un archivo en el PC.
Este proceso se puede hacer manualmente a través de la pantalla Connect de
LoggerNet o se puede hacer de forma automática mediante una recogida
programada. LoggerNet debe estar ejecutándose para que la recogida de datos
programada se lleve a cabo, pero se puede ejecutar en segundo plano
(background).

Utilice EZSetup o la pestaña Programación (Schedule) para configurar LoggerNet


para una recogida de datos programada.

EZSetup tiene dos pantallas:

10-1
Sección 10. Recogida de datos automatizada

10-2
Sección 10. Recogida de datos automatizada

En la pantalla Setup se puede introducir la misma información:

LoggerNet puede hacer reintentos si fallan las llamadas programadas (por Ej. En
casos que la línea de teléfono está ocupada, o la radio tenga interferencias).

10.2 Status

Una vez configurada la recogida programada de datos, utilice la


aplicación Status de LoggerNet para monitorizar el progreso de la recogida de
datos. Están disponibles estadísticas sobre tasa de errores, cantidad de datos
recogidos, y hora de las llamadas.

10-3
Sección 10. Recogida de datos automatizada

También se pueden recoger los datos manualmente desde la pantalla Status


utilizando el botón Recoger Ahora.

10.3 Status Log Tool


Log tool permite monitorizar las transacciones, comunicaciones, y estado de
objetos, igual que el tráfico I/O a bajo nivel. Todos los mensajes y tráfico I/O de
bajo nivel se pueden guardar en archivos log. Los alrchivos log están limitados en
tamaño y normalmente se sobrescribirán (vea la ayuda de LoggerNet para más
detalles).

10-4
Sección 10. Recogida de datos automatizada

10.4 Integridad de los datos


Los punteros de recogida de datos se guardan en el PC; por tanto, múltiples
usuarios pueden comunicar con un datalogger y tener sus propios punteros sin
interferirse.

Conserve los archivos originales de datos recogidos (*.dat) mediante LoggerNet.


Si abre y guarda con una hoja de cálculo o editor de textos los archivos .dat, puede
hacerlos inutilizables a LoggerNet.

10-5
Sección 10. Recogida de datos automatizada

This is a blank page.

10-6
Sección 11. RTMC – Control y
Monitorización en Tiempo Real
RTMC se utiliza para crear pantallas de presentación de datos en tiempo real con
los datos recogidos de los dataloggers mediante LoggerNet.

Las pantallas gráficas personalizadas pueden incluir gráficos de


evolución, tablas, diales, alarmas, valores digitales y otros elementos gráficos.
Estas pantallas se actualizan automáticamente cuando LoggerNet recoge nuevos
datos.

1. Combina datos de múltiples dataloggers en una única pantalla.

2. Los datos mostrados son datos recogidos mediante la opción de Recogida Programada
de LoggerNet.

3. Permite cambiar el estado de los ports y flags del datalogger, y cambiar variables.

4. Puede mostrar variables de la tabla Public y datos almacenados en data tables.

5. Los components gráficos se colocan en el workspace, tal y como aparecerán en la


pantalla final.

6. Una vez se han colocado en el workspace los components gráficos, se muestran en la


component list del panel izquierdo. Esto proporciona un acceso rápido a los
components del workspace.

7. Los componentes se muestran en el panel derecho. Seleccionando un componente y


hacienda clic en el workspace, coloca el componente y aparece la ventana de
Properties para ese componente.

8. Para cambiar la apariencia de un componente gráfico, haga doble clic en el


componente para que aparezca la ventana Properties.

9. Se pueden combinar diferentes tipos de components gráficos y así obtener atractivas


pantallas de presentación de datos en tiempo real.

10. En la pantalla se pueden colocar imágenes con formato de fichero gráfico estándar
que estén almacenadas en el PC.

11. La pantalla se actualiza automáticamente a la hora programada en la opción Recogida


Programada (Scheduled Collection) o después de una recogida de datos
personalizada.

12. RTMC incluye un intérprete de expresiones que permite al usuario definir


condiciones en los datos o crear displays en función de un determinado cálculo.

13. Las pantallas no se pueden exportar de forma automática a ficheros que puedan
incorporarse en páginas Web. Nuestro paquete opcional RTDM (Real Time Data
Monitor), no incluido en LoggerNet, si dispone de esta posibilidad.

14. El Run-time puede ejecutarse en otros ordenadores de la red (con licencias adicionales
de RTMC Runtime).

11-1
Sección 11. RTMC –Control y Monitorización en Tiempo Real

Para poder mostrar datos de las tablas Public o Status, debe incluir esas tablas en
la Recogida Programada (scheduled collection). En la aplicación Setup, escoja el
CR1000 en el mapa de red y seleccione la pestaña Ficheros (Data Files). Haga clic
en Incluido para Recogida Programada (Included for Scheduled Collection). Dado
que las tablas Public y Status solo contienen un registro, es decir, que solo
contienen la información actual, tiene sentido seleccionar Sobrescribir Fichero
Existente (Overwrite Existing File) en Opción Fichero Salida (File Output
Option). También No Output File.

►► Con los datos generados en el Ejercicio 4 – Program Control, cree una


pantalla RTMC que muestre:
Temperatura termopar en ºC.
Estado del LED (on o off).
Los últimos 15 minutos de las medias minutales de temperatura.
Hora de la última recogida de datos.
Otro gráfico.

1) Escoja un componente gráfico.

2) Haga clic en el workspace.

3) Browse para seleccionar dato.

4) Edite las properties del componente.

11-2
Sección 11. RTMC – Control y Monitorización en Tiempo Real

11-3
Sección 11. RTMC –Control y Monitorización en Tiempo Real

La pantalla puede tener el siguiente aspecto:

11-4
Sección 12. Control Ficheros (File
Control), Sistemas Operativos y
Transformer
12.1 Control Ficheros (File Control)
El CR1000 tiene aproximadamente 95 kbytes de memoria disponible para
almacenamiento de programas. Cada nuevo programa enviado al CR1000 queda
almacenado hasta que la memoria se llena o los programas se borrar manualmente.

Estando conectado al CR1000, seleccione Herramientas | File Control en la


pantalla principal de Connect.

Esta herramienta se utiliza para manipular los ficheros almacenados en el CR1000


y otros dispositivos que tenga conectados, como una tarjeta Compact Flash. En la
parte izquierda de la ventana se muestran los dispositivos a los que está conectado.
Cuando selecciona un dispositivo, en la parte derecha se listan los ficheros de ese
dispositivo.

El campo File Name indica el nombre del fichero almacenado en el dispositivo.


Run Options indica si el fichero está en modo Run on Power up, Run Now, o
ambos (Run Always).

Enviar (Send) – Muestra una ventana de diálogo desde la cual se puede enviar un
fichero al dispositivo seleccionado.

Format – Formatea el dispositivo seleccionado. Esta opción debe usarse con


cuidado, dado que todos los ficheros almacenados en ese dispositivo serán
borrados.

12-1
Sección 12. Control Ficheros (File Control), Sistemas Operativos y Transformer

Refrescar (Refresh) – Pulse este botón para refrescar los dispositivos y la lista de
ficheros del datalogger. Si se ha realizado algun cambio desde un dispositivo
externo como el teclado-display, o por control de programa, no quedará reflejado
en esta ventana hasta que se haya refrescado..
Descargar (Retrieve) – Seleccione un fichero en Nombre Fichero (File Name) y
pulse este botón para mostrar una ventana de diálogo donde podrá entrar la ruta y
nombre del fichero descargado.
Run Options – Permite determinar la forma de ejecución de un programa. Run
Now empieza a ejecutar el programa de forma inmediata; tiene la opción de
borrar o mantener los ficheros de datos. Run on Power-up hará que el programa se
ejecute cuando el datalogger sea apagado y encendido de nuevo.
Borrar (Delete) – Borra el fichero del dispositivo seleccionado.
Parar Programa (Stop Program) – Pulse este botón para parar la ejecución del
programa actual ejecutándose en el datalogger. Use esta opción con cuidado.
Para arrancar de Nuevo el programa, vaya a Run Options y Run Now. El
programa se compilará y todos los datos del CR1000 se perderán.

12.2 Sistemas Operativos


El sistema operativo del datalogger (SO) es el conjunto de instrucciones y
procesos necesarios para que el datalogger haga su trabajo.

El sistema operativo del CR1000 está continuamente siendo mejorado, y tal como
aparecen nuevas prestaciones, puede necesitar actualizar el SO. Generalmente, los
nuevos SO están disponibles en nuestra Web, en Downloads. Existen dos formas
de cargar el SO al CR1000; a) vía la aplicación Connect de LoggerNet, y b) vía la
aplicación Device Configuration Utility.

12.2.1 Cargar SO mediante aplicación Connect de LoggerNet


Dentro del área de pantalla Programa y Enviar (Send):

Haga clic en Enviar (Send) y localice la carpeta del ordenador donde tiene
guardado el Nuevo SO. El SO debería tener el formato: CR1000.Std.XX.obj
donde XX es la versión. Recibirá un aviso de que se perderán todos los datos, y
tendrá la opción de seguir con el proceso o no.

12-2
Sección 12. Control Ficheros (File Control), Sistemas Operativos y Transformer

Cargando el SO de esta forma, el programa y otros parámetros de configuración


internos del CR1000, se mantienen. El programa que se ejecutaba continuará una
vez completada la carga.

Otro beneficio de hacerlo por Connect y Enviar es que se puede hacer de forma
remota. Sin embargo, no es recomendable, dado que el SO es un fichero grande
comparado con ficheros de datos o programas.

►► Cargue un SO al CR1000.

12.2.2 Cargar SO mediante Device Configuration Utility


La aplicación Device Configuration Utility (DevConfig) permite configurar los
dispositivos Campbell Scientific. DevConfig permite cargar un Nuevo SO a
dispositivos con memoria FLASH, configurar diversos parámetros PakBus® en
los dataloggers, y configurar periféricos de comunicaciones como el MD485 y
RF416.

DevConfig solo puede funcionar cuando LoggerNet está apagado, y viceversa.


Ejecute DevConfig desde Windows Inicio | Todos los Programas | LoggerNet |
Device Configuration Utility.

12-3
Sección 12. Control Ficheros (File Control), Sistemas Operativos y Transformer

DevConfig proporciona instrucciones para cargar el Nuevo SO. Cargando el


nuevo SO mediante DevConfig, el CR1000 reseteará y borrará toda su
memoria incluyendo programas, configuración y datos almacenados.

►► Use DevConfig, para cargar un SO al CR1000.

12.3 Transformer
El Transformer es una utilidad de LoggerNet que convierte programas de
datalogger CR10X tipo array, a programas de CR1000. Un programa simple
debería transformarse razonablemente bien. Cuantos más loops, lógica, medidas
especiales, subrutinas, salidas condicionales, y medidas condicionales, mayor será
la posibilidad de que algo no se transforme.

En la mayoría de los casos, el Transformer generará un programa con una


estructura básica, sintaxis, y código ejemplo equivalente al programa CRBasic. En
la medida de lo posible, el Transformer añadirá mensajes al log indicando los
principales problemas encontrados. El usuario debe tener en cuenta que todo y que
el programa CRBasic se compile bien, puede que no haga exactamente lo que el
programa CR10X hacía.

12-4
Sección 12. Control Ficheros (File Control), Sistemas Operativos y Transformer

Ejecute el Transformer en Windows Inicio | Todos los Programas | LoggerNet 3.0


| Utilities | Transformer. Se abrirá una ventana de diálogo donde podrá escoger el
programa CR10X con extensión .dld o .csi que quiera transformar.

El programa CR1000 transformado se creará automáticamente en la misma


carpeta que el programa original del CR10X. Haciendo doble clic en una
instrucción de la Source área (del programa CR10X) se remarcará la instrucción
correspondiente en el nuevo programa para CR1000. Vea el Action Log con los
posibles errores de conversión que hayan ocurrido. El Action Log puede salvarse
o imprimirse y usar como referencia cuando se edite con CRBasic el programa del
CR1000. El Transformer no dispone de capacidad de edición; todos los cambios
en el programa se deben hacer mediante CRBasic.

Los programas para CR1000 creados por Transformer deben ser revisados y
probados antes de poner en funcionamiento en campo.

12-5
Sección 12. Control Ficheros (File Control), Sistemas Operativos y Transformer

This is a blank page.

12-6
Sección 13. Ejercicio Exhaustivo
13.1 Manuales de los sensores
Los sensores adquiridos a Campbell Scientific se entregan con manuales que
incluyen ejemplos de programas para el datalogger, con sus multipliers y offsets
para diferentes unidades de ingeniería.

Los sensores tienen especificaciones que indican los límites de la medida, la


precisión de la medida, requerimientos de alimentación, etc.

El datalogger desconoce la precisión del sensor, y por tanto podría mostrar una
resolución de la medida irreal – genere sólo informes de datos con resoluciones
que puedan ser soportadas por el datalogger y el sensor. Por ejemplo, la medida de
temperatura del sensor de T/HR CS500 no debería ser mostrada a la centésima de
grado – aun cuando el datalogger puede proporcionar ese número.

Los manuales de los sensores también dan consejos de programación en caso de


tener distancias largas de cable, mantenimiento del sensor, etc.

►► Ejercicio Exhaustivo Parte 1 - Use el manual del sensor de T/HR CS500


para que le ayude a generar un programa para medir T aire en ºC y HR en
intervalos de 1 segundo. Almacene datos cada minuto, incluyendo T aire
media y la última muestra de HR.

Medidas
Voltaje batería
CS500 T aire en ºC
CS500 HR en %

Guardar datos cada 1 minuto:


T aire media
HR última muestra

Scan Interval (1 segundo)

13.2 Usando las especificaciones del sensor


Los sensores adquiridos a Campbell Scientific deberían entregarse con su manual,
que incluye especificaciones eléctricas y guía de conexionado al datalogger.

1. Las veletas son a menudo simples potenciómetros – el valor total de la


resistencia no es relevante, pero la linealidad es crítica. La dirección de
viento, como ratio de toda la orientación posible (0-360 grados) sugiere un
puente de medida con una salida tipo ratio y un multiplier apropiado. Puede
existir una banda muerta en el sensor.

13-1
Sección 13. Ejercicio Exhaustivo

2. Los anemómetros a menudo generan una señal tipo pulsos, pero esta puede
ser tipo cierre de contactos (switch closure), voltaje AC, o onda cuadrada de
5Vdc. Las especificaciones del sensor determinarán que opción de
configuración seleccionar, y que multipliers y offsets son necesarios para la
adecuada conversión a unidades de ingeniería. Para la determinación de
offset, el sensor debería haber sido calibrado en un túnel de viento. (Usuarios
avanzados añadirán código al programa para poner a cero la VV si la medida
es igual al offset.)

3. El procesado de salida (output processing) para datos de viento es más


complicado que una simple media. El CR1000 incluye una instrucción de
proceso de salida exclusive para viento.

►► Ejercicio Exhaustivo Parte 2 - Use las especificaciones del manual del


sensor CSI 03001 Wind Sentry para añadir medidas de viento al programa
de la Parte 1. Guarde datos cada 1 minuto que incluya T aire media, VV y
DV; y cada 5 minutos, T aire media, última muestra de HR, y media de la
VV y DV.

Medidas
Voltaje batería
CS500 T aire en ºC
CS500 HR en %
03001 dirección viento
03001 velocidad viento

Guardar datos cada 1 minuto:


T aire media
VV media y DV media

Guardar datos cada 5 minutos:


Voltaje batería mínimo
T aire media
HR última muestra
VV media y DV media

Scan Rate (1 segundo)

13-2
Sección 14. Redes PakBus®
14.1 Introducción
PakBus® es el término de Campbell Scientific usado para describir nuestro propio
protocolo de comunicaciones por paquetes. Los paquetes de información
transmitidos entre dispositivos PakBus contienen datos de usuario e información
administrativa (una cabecera) que los dispositivos con capacidad de enlutar
(routers) utilizan para mover los paquetes hasta su último destino. Los mensajes se
pueden romper en mensajes más pequeños, o paquetes, para su transmisión. Los
paquetes, cada uno con su cabecera, se transmiten individualmente por la red
(network). Los dispositivos PakBus examinan la cabecera y luego tanto quitan la
cabecera (en el destino final del paquete) como re-envían el paquete a otro
dispositivo PakBus. El dispositivo destino PakBus recompone los paquetes en el
orden apropiado.

En redes PakBus (PakBus networking), dado que los paquetes son pequeños, los
enlaces de comunicación entre dispositivos PakBus están únicamente activos por
un corto período de tiempo durante la transmisión de cada paquete. Mensajes más
largos requiere que se envíen una serie de paquetes, pero no que el enlace esté
dedicado entre la transmisión de cada paquete. Por tanto, otros paquetes
(relacionados o no) pueden utilizar virtualmente al mismo tiempo, el mismo
enlace de comunicaciones. Los paquetes son enrutados a su destino final por la
ruta más eficiente. Hasta el momento, “más eficiente” significa la ruta con menor
número de dispositivos manejando el paquete.

En una red PakBus cada dispositivo que envía, recibe o enruta paquetes, tiene que
tener su propia dirección PakBus (PakBus address), única dentro de su red. Las
cabeceras de los paquetes PakBus incluyen no sólo el origen y destino, sino
también la dirección del siguiente dispositivo intermedio que está enrutando el
paquete.

14.2 Terminología PakBus


Neighbors son dispositivos que se pueden comunicar entre ellos directamente (no
vía router). Cada dispositivo PakBus mantiene su propia Neighbor List.

Leaf nodes solo tienen un único neighbor. No pueden enrutar paquetes; solo
pueden enviarlos y recibirlos. El datalogger serie CR200 es siempre un leaf node.

Router nodes (también llamados ‘routers’) pueden tener muchos neighbors. Los
routers pasan su neighbor lists a otros routers de la red para construir el routing
system.

14-1
Sección 14. Redes PakBus®

Los routers son dispositivos PakBus configurados para aceptar paquetes


destinados a otros dispositivos y reenviarlos a ese dispositivo. Un router solo
acepta paquetes destinados a direcciones PakBus de las cuales tenga una ruta. Un
CR1000, CR10X, CR510, NL100, RF416 o incluso LoggerNet pueden ser routers.

Hello-Exchange es como dos dispositivos PakBus se establecen entre ellos como


neighbors. Un dispositivo PakBus (A) envía un hello command packet a otro
dispositivo (B). El dispositivo (B) envía entonces una hello response a (A); la
recepción de este paquete los determina como neighbors. Sólo un hello exchange
puede establecer dos dispositivos como neighbors.

Beacon es un paquete de aviso con el propósito de descubrir dispositivos neighbor


PakBus. Los dispositivos que responden al beacon lo hacen iniciando un hello-
exchange con el dispositivo que emite el beacon, en caso de que todavía no sean
neighbors. Un dispositivo con un neighbor filter ignorará los beacons de las
direcciones que no estén en su neighbor list, a menos que la beacon address sea >=
4000 (típicamente un server).

Static Routes, entre LoggerNet y un dispositivo, existen en virtud del device map
en el Setup de LoggerNet. Las Static Routes aparecen como líneas rojas en el
PakBus Graph.

Dynamic Routes, entre LoggerNet y un dispositivo, son aprendidas a través de un


hello-exchange. Una dynamic route se puede establecer mediante beaconing o
mediante conexión de LoggerNet vía una static route. Las Dynamic Routes
aparecen como líneas negras en el PakBus Graph.

Communications Verification Interval es un intervalo de tiempo que un


dispositivo PakBus usa para determinar cuando es hora de enviar un hello message
a otro dispositivo para ver si ellos todavía pueden comunicar.

14.3 Herramientas PakBus


14.3.1 Device Configuration Utility
La aplicación Device Configuration Utility (DevConfig) ayuda a configurar el
hardware de Campbell Scientific. DevConfig permite cargar nuevos sistemas
operativos a dispositivos con memoria FLASH, configurar varios parámetros
PakBus en dataloggers, y editar parámetros de periféricos de comunicaciones
como el MD485 y RF416.

Para evitar conflictos en el puerto COM, DevConfig se utiliza cuando LoggerNet


está apagado, y viceversa. Ejecute DevConfig desde Windows Inicio | Todos los
Programas | LoggerNet | Device Configuration Utility.

14.3.2 PakBus Graph


PakBus Graph es una utilidad de LoggerNet que muestra gráficamente los
dispositivos y conexiones en red PakBus. En el PakBus graph, LoggerNet server
se representa habitualmente con la PakBus address 4094, y cada uno de los
dataloggers se mostrarán por su nombre y dirección. Algunos parámetros PakBus
son visibles y modificables mediante el PakBus Graph.

14-2
Sección 14. Redes PakBus®

El botón PakBus Graph se puede añadir a la barra de LoggerNet, Options |


Configure Buttons. Puede también ser ejecutado desde la barra de LoggerNet,
Tools | PakBus Graph, o vía el botón Troubleshooter.

PakBus Graph muestra dos tipos de enlaces con los dispositivos PakBus desde
LoggerNet: los static links y los dynamic links. Los static links son los enlaces con
dataloggers que han sido configurados en el device map, pero no confirmados para
comunicar con el datalogger(s). Verá esos dataloggers listados en la pantalla Setup
de LoggerNet. Los dynamic links son enlaces de comunicaciones con dataloggers
que han sido confirmados. PakBus Graph podría también mostrar con dataloggers
leaf node que no han sido configurados en LoggerNet, pero que LoggerNet server
ha "learned about" interrogando la PakBus network.

14.4 Creación de una red


Los dataloggers PakBus pueden conectarse a periféricos de comunicaciones
mediante los siguientes protocolos: modem enable (ME), concurrent synchronous
device communications (CSDC), synchronous device communications (SDC), y
RS-232. Adicionalmente, los dispositivos SDC tienen direcciones SDC específicas
(0-9). El tipo preferido en comunicaciones PakBus es el CSDC, puesto que utiliza
menos recursos de CPU del datalogger que ME. Los dataloggers PakBus no
pueden comunicar con dispositivos SDC9.

El protocolo de comunicación (Active Interface) se configura generalmente en el


dispositivo (MD485, RF400, NL100 etc.) basado en el dispositivo PakBus a que
está conectado (CR1000, etc.) tomando en consideración cualquier otro
dispositivo de comunicación también conectado el dispositivo PakBus. El CR1000
puede tener múltiples dispositivos conectados a el (y comunicar con ellos al
mismo tiempo) siempre y cuando usen diferentes Active Interfaces. Puede ser útil
pensar en un Active Interface como en un puerto de periférico. El MD485 tiene 3
Ports, 2 de los cuales pueden designarse como Active Interfaces (Active Ports).

14-3
Sección 14. Redes PakBus®

Configuración final del hardware de la red:

PC

PC
CR1000 CR1000

CR1000 CR1000
PC

PC

En la red descrita, los PCs están conectados a los CR1000 mediante sus puertos
RS-232. Todas las demás conexiones son mediante MD485s por protocolo RS-
485. El funcionamiento de los MD485 es transparente al usuario. Otros
dispositivos como los RF416 actuarían de la misma forma.

14-4
Sección 14. Redes PakBus®

La aplicación Device Configuration Utility fue utilizada para configurar cada


MD485, con los mismos parámetros.

Parámetros MD485
Setting Name Setting Value
Active Ports CS I/O and RS-485
Protocol Configuration PakBus Networking
CS I/O Mode SDC Address 7
RS-485 Baud Rate 115.2 k bytes

Los ajustes PakBus por defecto en el CR1000 son:

Default CR1000 PakBus Settings


Setting
Setting Name Value Description
PakBus Address 1
Is Router 0 0=No, 1=Yes
PakBus Nodes 50 Máximo número de dispositivos en la
Allocation routing table del CR1000.
Baud Rate * 115200 Con un número negativo, la detección
de velocidad es automática.
Beacon Interval * 0
Verify Interval * 0
Neighbors * <blank>
* Nota: existen campos independientes para los distintos Active Interfaces
(RS232, ME, COM310, SDC7, SDC8, COM1, COM2, COM3, y COM4).

14.5 Configurar la PakBus Address del CR1000


Cada dispositivo PakBus en una red debe tener una única PakBus Address.

Cada dispositivo PakBus necesita una PakBus Address para que pueda recibir,
enviar, o enlutar paquetes PakBus. La PakBus Address por defecto de Loggernet
es 4094 y el rango permitido de 1 a 4094. Otros dispositivos PakBus tienen
PakBus Addresses por defecto que pueden modificarse. El rango de direcciones es
de 1 a 3999.

Direcciones PakBus por defecto en Software Campbell Scientific


Software (Server) Dirección por defecto
LoggerNet 4094
PC400 4093
PC200 4092
PConnect 4091

14-5
Sección 14. Redes PakBus®

►► Use Device Configuration Utility para configurar la PakBus Address en el


CR1000 y configurarlo como Router.

• Si LoggerNet está ejecutándose; apáguelo. Ejecute Device Configuration


Utility.

• Conecte un cable serie entre el puerto serie del PC al puerto RS232 del
CR1000.

• Use la PakBus address asignada a su puesto particular de la clase.

Asignación PakBus Address CR1000

Parte frontal de la clase


2 3 Instructor 4 1 Not Used
5 6 7 8
9 10 11 12

• En la pestaña Advanced, cambie el parámetro Is Router Setting a Yes


indicando que debe actuar como un Router.

• Haga Apply para guardar cambios y cierre Device Configuration Utility.

14.6 Seguridad en el CR1000


El CR1000 dispone de varias formas para activar la seguridad y limitar el acceso a
partes específicas del datalogger. Hay disponibles tres niveles de seguridad. Los
códigos válidos son del 1 a 65535 (0 es sin seguridad). Cada nivel debe tener un
código distinto.

14-6
Sección 14. Redes PakBus®

Level 1 debe configurarse antes que el Level 2 pueda configurarse, y Level 2 debe
configurarse antes que Level 3. Si un level se configura con 0, cualquier level
mayor que ese, se pondrá también a 0 (Ej. si Level 2 es 0, Level 3 es 0). Los
levels se desbloquean en orden inverso, Level 3 antes que Level 2 antes que Level
1. Cuando un level es desbloqueado, cualquier level mayor que ese, también se
desbloqueará. Desbloqueando el Level 1 (entrando el security code del Level 1)
también desbloquea Level 2 y Level 3.

Las funciones afectadas por cada nivel de seguridad son:

Security1 – cuando este nivel es activo, se permite recoger datos, ajustar reloj,
modificar variables de la tabla Public, sin necesidad de entrar el security code. Si
el usuario entra el Security1 code, los valores non-read-only de la Status Table
pueden modificarse y el programa del datalogger puede ser descargado y
modificado.

Security2 – cuando este nivel es activo, se permite recoger datos, sin necesidad de
entrar el security code. Si el usuario entra el Security2 code, el reloj del datalogger
se puede ajustar y también modificar las variables de la tabla Public. Si el usuario
entra el Security1 code, los valores non-read-only de la tabla Status pueden
modificarse y el programa del datalogger puede ser descargado y modificado.

Security3 – cuando este nivel es activo, están prohibidas todas las comunicaciones
con el datalogger, excepto que se haya entrado el security code. Si el usuario entra
el Security3 code, los datos pueden ser recogidos del datalogger. Si el usuario
entra el Security2 code, los datos pueden ser recogidos, las variables de la tabla
Public modificadas, y ajustar el reloj. Si el usuario entra el Security 1 code, todas
las funciones son permitidas.

Function Level 1 activo Level 2 activo Level 3 activo

Programa No se puede recoger ni modificar


CR1000

Tabla Status Las variables de escritura no se pueden


modificar Prohibidas todas
las
Ajustar Reloj Sin restricción No se puede comunicaciones
modificar/ajustar

Tabla Public Sin restricción Las variables de


escritura no se
pueden modificar

Recoger datos Sin restricción Sin restricción

14-7
Sección 14. Redes PakBus®

Los parámetros PakBus, como la PakBus address, forman parte de la tabla Status.
Activando la Level 1 Security queda restringido que otros puedan modificar estos
ajustes vitales de la red.

14.7 LoggerNet Setup


En Setup de LoggerNet cambie los ajustes en PakBus Port para permitir
comunicaciones en red.

• Parámetros PakBus Port – active casilla “PakBus Port Always Open”.

• Maximum baud rate a 115200.

• Renombre el CR1000 a CR1000_sunombre; por Ej. CR1000_Instructor

• En la pestaña hardware cambie la PakBus Address para que coincida con la


que ha configurado en el CR1000.

• Guarde los cambios con Guardar o Apply.

14-8
Sección 14. Redes PakBus®

►► En CRBasic, abra y modifique el programa blink.cr1. Entre su nombre en


la cadena EnterNameHere. Guarde el programa como
“blinkyourname.cr1”. Conecte con el datalogger CR1000 y cargue el
programa.

14.8 Ver la red con PakBus Graph


Ejecute PakBus Graph desde la barra de LoggerNet; Herramientas | PakBus
Graph.

Haciendo clic con botón derecho del ratón encima de un dispositivo de la red
puede visualizar y cambiar los parámetros de los dispositivos PakBus de la red.

14-9
Sección 14. Redes PakBus®

14.9 Discovery y “Un-Discovery”


Para un enrutado con éxito, los dispositivos de la red deben mantener una lista
precisa de los enlaces viables disponibles (neighbors). Cuando un neighbor se
añade o quita, la red comparte esta información con otros routers. Este
comportamiento controla el proceso de enrutamiento de la red.

►► Conecte el puerto CS I/O de su CR1000 al puerto CS I/O del MD485. Su


vecino (neighbor) se conectará de la misma forma.

Los dispositivos PakBus de la red todavía no se han “descubierto” entre ellos,


porque no están buscando. Discovery se realiza con hello-exchanges. Existen tres
dispositivos PakBus que pueden iniciar un hello-exchange, y así generar
neighbors; si el dispositivo es un router, los neighbors descubiertos serán también
añadidos a la routing table.

1) Instrucciones – Un datalogger PakBus puede tener instrucciones en su


programa, que envíe mensajes a otros dispositivos PakBus. Con ello, esos
dispositivos se convierten en neighbors.

14-10
Sección 14. Redes PakBus®

2) Neighbor List – Se puede generar una lista de “acceptable neighbors,” donde


el dispositivo PakBus espera oír de ellos a intervalos predefinidos (el Verify
Interval). Si no los oye en ese intervalo, intentará contactar con ellos por sí
mismo. Ignorará los dispositivos que oye pero que no están en esa lista,
excepto si la PakBus address es >= 4000. Los hellos de dispositivos con
PakBus addresses >=4000 se aceptan automáticamente como neighbors.

3) Beaconing – Un dispositivo PakBus puede transmitir un beacon, y si


cualquier dispositivo responde, incluye sus direcciones como un neighbor y
lo añade a la routing table.

Los dispositivos PakBus tienen también la capacidad de “un-discover” entre ellos.


Cuando un neighbor no responde nunca más, los dispositivos de la red pueden
determinar eliminarlo de la red. El “Communications Verification Interval” (CVI)
o “Verify Interval” es el intervalo de tiempo que un dispositivo PakBus usa para
determinar cuando es hora de enviar un mensaje hello a un neighbor para ver si
todavía responde y mantiene como neighbor. Bajo condiciones de comunicación
normales, los dispositivos PakBus no necesitan enviar mensajes hello en el CVI.
Los CR1000 comparten CVIs durante los hello-exchanges.

Cuando un CVI expira, el CR1000 iniciará hasta 4 Hello messages que intentarán
re-establecer contacto con el neighbor. Esos mensajes en el CR1000 son enviados
a intervalos aleatorios de 2 a 12 segundos. Si la comunicación fuera inválida
después de los 4 intentos, se quita el neighbor.

14.10 PakBus Ardes de LoggerNet


La PakBus address por defecto de LoggerNet server es 4094; el rango permitido
es de 1 a 4094. Se recomienda dejarla en 4094 a menos que haya múltiples servers
en su red. Si hay varios servers en la misma red, deben tener PakBus addresses
diferentes. El mismo server, en otro puesto de trabajo; por Ej. un portátil en la
oficina y en el campo, deben tener diferentes PakBus address temporalmente.

En la mayoría de redes también es recomendable mantener la PakBus address del


server >= 4000. Poniendo las server addresses a valores inferiores a 4000
limitamos los neighbors potenciales a esos específicamente identificados en los
Neighbor Filters. Nosotros utilizamos en la clase server PakBus addresses <4000
para de alguna forma tener control de la red.

14-11
Sección 14. Redes PakBus®

►► En la pantalla Setup de LoggerNet, haga clic en Options | LoggerNet


PakBus Settings. Cambie la PakBus Address de su PC en función de su
localización en la clase.

Asignación de las PakBus Address de LoggerNet server

Parte frontal de la clase


101 102 Instructor 103 104 Not Used
105 106 107 108
109 110 111 112

• Guarde los cambios con Guardar o Apply

14-12
Sección 14. Redes PakBus®

14.11 Instrucciones
Un datalogger PakBus puede contener instrucciones en su programa que envíe
mensajes a otros dispositivos PakBus. Esos dispositivos pasan a ser neighbors.

Las comunicaciones datalogger a datalogger son directas con los dataloggers


PakBus. Algunas de las instrucciones para transferir información entre dataloggers
son GetVariable, SendData, SendGetVariables, SendVariables, y SendTableDef.

14.11.1 Instrucción SendVariables


La instrucción SendVariables se usa en un datalogger para enviar variable(s) a un
datalogger remoto. Las variables sólo se pueden mandar a las tablas Public o
Status del datalogger remoto. El datalogger remoto no necesita declarar ninguna
instrucción, tan sólo declarar correctamente la variable o array donde recibir los
datos.

La sintaxis es: SendVariables ( ResultCode, ComPort, RouterAddr,


RemotePakBusAddr, Security, TimeOut, “RemoteTableName”,
“RemoteFieldName”, VariableToSend, Swath)

►► En el PakBus Graph, selecciones su CR1000, haga clic derecho del ratón


para modificar los parámetros. Ajuste el CVI (Verify SDC7) a 25 segundos.

►► Modifique su programa blinkyourname.cr1 para enviar y recibir


variables a/de su tabla de neighbor:

1) Envíe una variable Toggle y el real time,


2) Reciba una variable Toggle y el real time, y
3) Encienda un LED basado en el estado de la variable Toggle recibida.

La instrucción RealTime llena un array con los valores de la hora actual del reloj
del datalogger, en el siguiente orden: (1) año, (2) mes, (3) día del mes, (4) hora del
día, (5) minutos, (6) segundos, (7) microsegundos, (8) día de la semana (1-7;
domingo = 1), y (9) día del año. El array destino se debe dimensionar a 9. La hora
devuelta es la hora del reloj del datalogger al inicio del scan en que se ejecuta la
instrucción RealTime.

Añada las siguientes instrucciones:

Public Result(2)
Public SendToggle as Boolean
Public SendTime(9)
Public RxToggle as Boolean
Public RxTime(6)

'Cargar hora en array SendTime


RealTime SendTime

14-13
Sección 14. Redes PakBus®

'Control remoto del LED en Port2, RxToggle es recibido del datalogger remoto
If RxToggle=true Then
PortSet (2,1)
Else
PortSet (2,0)
EndIf

'enviar variable al datalogger PakBus remoto

SendVariables (Result(1),-ComSDC7,0,2,0000,0,"Public","RxToggle",SendToggle,1)
SendVariables (Result(2),-ComSDC7,0,2,0000,0,"Public","RxTime",SendTime,6)
↑ Esta es la address del neighbor con el
que intercambia variables.

►► El PakBus Graph debería ser algo parecido a:

►► Desconecte la alimentación a un CR1000. Que ocurre?

En aproximadamente 73 segundos (25 segundos + 4*12 segundos) la red


PakBus descubrirá que se ha perdido ese datalogger y lo quitará. Esto
puede observarse en el PakBus Graph.

Los 4 * 12 segundos es el máximo tiempo en un intento para re-establecer


comunicaciones de los Hello messages espaciados aleatoriamente. En el
CR1000, estos mensajes se envían a intervalos aleatorios de 2 a 12
segundos.

►► Conecte la alimentación a los CR1000. Que ocurre?

In aproximadamente 5 segundos (el scan interval de su programa) la red


PakBus descubrirá ese datalogger y lo añadirá.

►► Mire la Routing Table. En el PakBus Graph seleccione su CR1000, haga


clic en botón derecho del ratón y Show Settings. Vaya hacia abajo de la
lista de “Routes”. Debería parecerse a:

(4, 2, 2, 1000) (4, 102, 2, 6000)

14-14
Sección 14. Redes PakBus®

Esta es una información de sólo lectura que muestra las routes que eran conocidas
por el CR1000 en el momento que ello fue leído. La sintaxis es: (Port Number,
PakBus Address, Via Neighbor Address, Response Time).

Port Number es el código numérico utilizado por el router.

Code Description
1 RS232 port of the datalogger
2 Datalogger's CS I/O port; modem enabled
3 Datalogger's CS I/O port; COM 310 modem
4 Datalogger's CS I/O port; SDC7
5 Datalogger's CS I/O port; SDC8
6 Datalogger's COM1 - control ports 1 & 2
7 Datalogger's COM2 - control ports 3 & 4
8 Datalogger's COM3 - control ports 5 & 6
9 Datalogger's COM4 - control ports 7 & 8

PakBus Address especifica la address que la ruta va a alcanzar.


Via Neighbor Address especifica la address del neighbor/router que se usará para
enviar mensajes en esta route. Si la route es para un neighbor, este valor será el
mismo que la address.
Response Time es la cantidad de tiempo en mseg permitido para la route.
Pasando a palabras las CR1000 routing tables de arriba:
(4, 2, 2, 1000) - El CR1000 puede comunicar vía SDC7 con Address 2, y el
CR1000 y Address 2 son neighbors. La comunicación con este dispositivo tardará
aproximadamente 1000 ms.
(4, 102, 2, 6000) – El CR1000 puede comunicar vía SDC7 con Address 102 a
través de Address 2 el cual es un router. La comunicación con este dispositivo
tardará aproximadamente 6000 ms.

14.11.2 Instrucción SendData


La instrucción SendData se utiliza para enviar el registro más reciente de una tabla
a un dispositivo PakBus remoto. Esta instrucción se puede usar para enviar datos a
un PC con LoggerNet server funcionando. Cuando es recibido, LoggerNet
almacenará los datos en un fichero bajo el nombre que se haya definido en Setup.

La sintaxis es: SendData (ComPort, RouterAddr, PakBusAddr, DataTable)

El siguiente ejemplo usa la instrucción SendData para enviar el registro más


reciente de la Table1 al dispositivo con PakBus ID 4094 una vez por minuto. Si el
dispositivo con PakBus ID 4094 es el LoggerNet server, los datos se almacenarán
en un fichero del PC.

Public Temp
DataTable (Table1,True,-1)
DataInterval (0,1,Sec,10)
Sample (1,Temp,FP2)
EndTable

14-15
Sección 14. Redes PakBus®

BeginProg
Scan (1,Sec,3,0)
PanelTemp (Temp,250)
IF TimeIntoInterval (0,1,Min) Then
SendData (ComRS232,0,4094,Table1)
EndIf
CallTable (Table1)
NextScan
EndProg

14.12 Neighbor List


►► Construya la red de cuatro CR1000s. Conecte un cable RS-485 entre dos
MD485s.
►► Añada comentarios a las instrucciones SendVariables de sus programas.
Cargue el programa revisado al CR1000.
►► Que una persona de la red cambie los parámetros de su CR1000
designando dos neighbors concretos. La forma más fácil de hacerlo es en
Port Settings de Device Configuration Utility.

14-16
Sección 14. Redes PakBus®

Este parámetro también está disponible en el Show Settings del PakBus Graph.
La sintaxis para este parámetro es: (rango inicio, rango final). Por tanto, para
entrar neighbors potenciales con direcciones 2 y 5 la sintaxis es (2,2) (5,5).

En el siguiente PakBus Graph, el CR1000 con Address 2 designó 3 y 5 como


neighbors. Parece como si [2] esté actuando como un router, pero haciendo clic en
varios nodos nos mostrará que no lo es. El camino muestra que es desde 105 a
través de 5 a 2, o desde 103 a través de 3 a 2.

14-17
Sección 14. Redes PakBus®

Ahora que la red sabe de esos sitios, deben ser añadidos al mapa de red de
LoggerNet mediante las pantallas EZSetup o Setup. La pantalla Setup dispone de
una herramienta para añadir dispositivos al mapa de red. La pestaña PakBus
Nodes de PakBus Port muestra todos los dispositivos PakBus encontrados en la
red que no están mostrados todavía en el mapa de red.

►► En Setup seleccione PakBus port, seleccione la pestaña PakBus Nodes.


Seleccione un Node y haga clic en el botón “Get Device Type”. Una vez
es mostrado el tipo de dispositivo, haga clic en el botón “Add Device”.

Note que tal como los dispositivos se añaden al mapa de red, el mapa permanece
“plano” al contrario de “árbol”. Si construye el mapa con dispositivos remotos
reconocidos como hijo del dispositivo previo, es una configuración tipo “árbol”.

Mapa plano Mapa árbol

14-18
Sección 14. Redes PakBus®

La configuración que escoja (plano o árbol) establece la diferencia en términos de


cómo son producidas las static routes de LoggerNet. Cuando la configuración es
de árbol, y se está usando una static route, LoggerNet enrutará vía un dispositivo
padre hacia el dispositivo hijo. Las static routes solo gobiernan el primer hop en
redes PakBus, por tanto es pequeña la diferencia entre el mapa plano y árbol.

Una vez que una dynamic route ha sido establecida, LoggerNet utiliza esta
preferentemente en lugar de la static route.

14.13 Beaconing
►► Mediante el PakBus Graph, borre los Neighbors. Ponga los Beacon
Intervals del RS-232 y SDC7 de su CR1000 a 10 (segundos).

14-19
Sección 14. Redes PakBus®

Si un dispositivo PakBus está beaconing el CVI es, por defecto, 2.5 veces el
beacon interval. Poniendo el CVI a un valor mayor que 2.5 veces el beacon
interval, hará de este el valor del CVI. Para un CR1000 con beacon interval de 10
segundos, su CVI será de 25 segundos.

Ahora el PakBus Graph debería ser algo similar a:

Ahora la routing list será:

(4, 2, 2, 1000) (4, 102, 2, 6000) (4, 5, 5, 1000) (4, 4, 4, 1000) (1, 103, 103, 5000)
(4, 105, 5, 5000) (4, 104, 4, 6000)

14-20
Sección 15. Conceptos Programación
Avanzada
15.1 Tipo Parámetros en una Instrucción
Los parámetros de una instrucción admiten diferentes tipos de entradas. Pulsando
F1 para ayuda en los parámetros de la instrucción, muestra el tipo de entrada
requerida; por Ej. Constante, Variable, Array, o Expresión.

Un ejemplo de esto es la salida condicional; en la instrucción DataTable la


condición de trigger se puede entrar como una expresión.

►► Modifique el Ejemplo 4 para que incluya una output table condicional.


Haga el trigger de la DataTable solo cuando la diferencia de temperatura
(DeltaT_C) sea mayor o igual a 3.

Antes de la instrucción BeginProg, declare una nueva DataTable:


' Data Table condicional que almacena datos solo cuando Delta T >=3
DataTable (Cond,DeltaT_C>=3,1000)
DataInterval (0,1,Min,10) ‘ opcional
Sample (1,DeltaT_C,FP2)
Average (1,AirTemp_C,FP2,0)
EndTable

La instrucción DataInterval es opcional. Sin ella, los datos se almacenarán en el


Scan interval (cuando se cumpla la condición). Con la instrucción DataInterval
crea una condición and (si DeltaT>=3 and es el minutes exacto, grabar datos). El
tamaño de la DataTable en condicionales, no debería ser auto-dimensionado;
debe especificarse el número de registros. Si se usa auto-dimensionado en una
data table condicional se asume que la condición de trigger se cumplirá en cada
scan, y por tanto reservando una gran parte de la memoria del CR1000 para esa
tabla en particular.

Nota: la instrucción CallTable Cond no estaría en una sentencia condicional.


Estaría en el cuerpo del programa principal junto con otras instrucciones
CallTable.

NO DEBE en este caso, poner la instrucción CallTable dentro de una condición


como la siguiente:
If DeltaT_C >=3 then
CallTable Cond
Endif

Esto resultaría en un procesamiento de salida incorrecto. La instrucción CallTable,


debe ser ejecutada en cada scan de programa.

15-1
Sección 15. Conceptos Programación Avanzada

15.2 Modificadores de la DataTable


Dentro de una DataTable se pueden usar opcionalmente modificadores del trigger
de salida.

Hemos usado hasta ahora un output trigger modifier. La instrucción DataInterval


se utiliza para grabar los resultados en función del tiempo y especifica cada cuanto
tiempo la data table es guardada.

15.2.1 Instrucción OpenInterval


La instrucción OpenInterval se usa para modificar que medidas se incluyen en las
instrucciones de las series temporales de una DataTable. Cuando esta instrucción
se inserta en una declaración DataTable, el procesado de las series temporales
incluirá todas las medidas desde la última vez que se almacenaron datos.

Típicamente, los datos de las series temporales (medias, totales, máximos, etc.)
que son grabados en una tabla basada en un intervalo de tiempo, sólo incluyen
medidas del intervalo actual. Después de cada output interval, la memoria que
contiene las medidas de las series temporales, es borrada. Si se pierde un output
interval (por que no se han cumplido todos los criterios), la memoria se borra al
inicio del siguiente intervalo. Si la instrucción OpenInterval se incluye en la
declaración DataTable, la memoria no se borra. Ello resulta en que todas las
medidas se incluyen en las series temporales desde la última grabación de datos
(aunque los datos hayan saltado múltiples output intervals).
Ejemplo:
DataTable(Table1,true,-1)
OpenInterval
DataInterval(0,1,Min,10)
…. Instrucciones de salida adicionales

15.2.2. Instrucción DataEvent


Otro modificador output trigger es la instrucción DataEvent. Se usa para iniciar y
parar de forma condicional la grabación de datos en una DataTable. Los eventos
trigger permiten especificar cuando el datalogger empieza o termina de grabar
datos. Adicionalmente, puede especificarse grabar un número de registros antes
y/o después del evento.

Nota: Para reducir el tiempo del procesado, la instrucción DataInterval, con al


menos 1 lapse, debe siempre preceder la instrucción DataEvent.

En el siguiente ejemplo, los datos solo se almacenan cuando la diferencia de


temperature (DeltaT_C) es mayor o igual a 3.

'Event Driven Data Table


DataTable(Event,True,-1)
DataInterval (0,5,Sec,10)
DataEvent (0,DeltaT_C>=3,DeltaT_C<3,0)
Maximum (1,AirTemp_C,FP2,0,False)
Minimum (1,AirTemp_C,FP2,0,False)
Sample (1,DeltaT_C, FP2)
EndTable

15-2
Sección 15. Conceptos Programación Avanzada

Nótese que la instrucción CallTable (Event) debe estar en el programa principal.

15.2.3. Instrucción CardOut


El CFM100, Compact Flash Module, es un periférico opcional que permite
expandir la memoria del CR1000. La instrucción CardOut se utiliza para
redireccionar los datos a grabar de la tabla a la tarjeta compact flash. La
instrucción CardOut debe ser entrada dentro de cada declaración DataTable que
se quieran guardar los datos en la tarjeta CF.

'Event Driven Data Table


DataTable(Table1,True,-1)
DataInterval (0,1,Min,10)
CardOut (0,-1)
…. Instrucciones de salida adicional

15.3 Acceso a Datos y Propiedades


Los datos almacenados en una tabla, y las propiedades de una tabla, pueden ser
accedidos desde programa.

El CR1000 dispone de varias formas de acceder a los datos de una DataTable, o


de acceder a información relacionada con las propiedades de la DataTable.
Debido al formato de este código de programa, no están incluidas en la lista de
instrucciones (excepto GetRecord). Para mas detalles ver CRBasic Help | Index
and search on “DataTable access”.

La instrucción GetRecord se usa para almacenar el contenido de un registro de


una DataTable en una array. El array destino debe ser dimensionado
suficientemente grande como para albergar todos los campos (columnas) del
registro. El parámetro Records Back indica el número de registros que hay que ir
hacia atrás, a partir del almacenado más reciente, para coger el registro (1 record
back es el más reciente).

Las propiedades de la DataTable se listan debajo. El formato usado es:

Tablename.PropertyName(fieldname index, records back)

Donde Tablename es el nombre de la DataTable donde está almacenado el valor


deseado. PropertyName es el nombre de la propiedad (listada debajo), con la
excepción de la propiedad FieldName. El fieldname index especifica la variable
array de la cual recoger datos. Habitualmente el fieldname index es un 1, otra vez
con la excepción de FieldName. Records back es el número (n) de registros hacia
atrás que hay que ir en la data table a partir del momento actual (1 es el registro
almacenado mas reciente, 2 es el registro almacenado antes del más reciente).

Nota: las DataTable properties pueden usarse en la parte derecha de expresiones.


Para incluir una property particular en una output table, debe ponerla igual a una
variable declarada previamente. Así es, no puede usar el código de nombre de
propiedad dentro de una output instruction. Por ejemplo, esto NO ES válido:
Sample (1,Event.EventCount(1,1), FP2).

TableName.FieldName accede a los datos de un campo concreto del registro de


una DataTable. El formato es: Tablename.FieldName(fieldname index, records
back). Donde, fieldname es el nombre del campo (columna) de la tabla. El
formato de fieldname es el nombre de la variable, seguido de (_) y tres caracteres
sufijos que indican el tipo de output processing, por Ej. AirTemp_C_Max (un
Sample no tiene este sufijo de 3 caracteres). El fieldname index especifica la

15-3
Sección 15. Conceptos Programación Avanzada

variable array de la cual recoger datos. Será diferente a 1 cuando el registro haya
sido generado por output instructions que incluyeran repetitions.

Esto se puede usar para copiar el valor de la tabla Status a una variable definida
por el usuario. Por Ej. SrlNum = Status.SerialNumber(1,1) donde SrlNum es una
variable Public declarada previamente. Vea el programa EX-Status.CR1 en el
Apéndice A.

TableName.EventCount accede al número de veces que se han almacenado datos


en una DataTable. Para que EventCount funcione, la instrucción DataEvent
debe aparecer en la declaración DataTable. El evento se registra en el datalogger
después que DataEvent ha finalizado, y el valor especificado por el parámetro
RecAfter se ha cumplido.

Ejemplo: HowMany = Event.EventCount(1,1) donde HowMany es una


variable public.

TableName.EventEnd se usa para determinar cuando se ha enviado el último


registro de un evento a la DataTable.

TableName.Output se usa para determinar si se escribieron datos en la


DataTable la última vez que la DataTable fue llamada.

TableName.Record devuelve el número de registro del n records back.

TableName.Tablefull devuelve 1 o 0 para indicar si una tabla fill and stop está
llena o si una tabla ring-mode ha empezado a sobrescribir los datos más antiguos.

TableName.TableSize devuelve el tamaño dimensionado, en número de registros,


de la DataTable seleccionada.

TableName.TimeStamp(m,n) devuelve el tiempo, en microsegundos, dentro del


intervalo especificado por m, del time stamp del registro, n records ago.

15.4 Notación Array


El uso de la notación array en la declaración de variables permite compactar el
código de programa para efectuar operaciones en todas las variables del array.

En el CR1000 podría haber 2 o 20 medidas de temperatura (u otras). En lugar de


tener 20 nombres diferentes, se puede usar una variable array con un nombre y 20
elementos. La temperatura de un termopar la podríamos llamar TCTemp. Con un
array de 20 elementos (por Ej. TCTemp(20)) los nombres de las temperaturas
individuales son TCTemp(1), TCTemp(2), TCTemp(3), ... TCTemp(20).

15-4
Sección 15. Conceptos Programación Avanzada

Para convertir diez temperaturas de una variable array de C a F, use un bucle


For… Next. En la declaración de variables tendríamos: Public TCTemp (10)

For I=1 to 10
TCTemp(I)=TCTemp(I)*1.8+32
Next I

Hay muchas instrucciones que permiten el uso de repetitions. Para usar


repetitions con un valor superior a 1, las variables afectadas deben ser declaradas
como arrays.

Los arrays se pueden usar como factores de calibración de los sensores. Cuando
variables tipo array se usan como el multiplier y offset en medidas que utilizan
repetitions, la instrucción automáticamente incrementará los arrays del multiplier
y offset conforme incrementa los canales. Nota: para usar esta capacidad debe
empezar con elemento número 1. Esto permite a una única instrucción de medida
medir una serie de sensores con calibraciones individuales, aplicando los factores
de calibración correctos a cada sensor. Si el multiplier y offset no son arrays, se
usará el mismo en cada repetition.

‘Declarar variables tipo arrays:


Public Pressure (3)
Dim Mult (3), Offset (3)

'Factores de calibración:
Mult(1)=0.123 : Offset(1)= 0.23
Mult(2)=0.115 : Offset(2)= 0.234
Mult(3)=0.114 : Offset(3)= 0.224

Nota: en la misma línea se pueden declarar múltiples sentencias; separadas por


(:), como se muestra arriba.

‘Aplicar multipliers y offsets:


VoltSE(Pressure(),3,mV2500,1,False,0,100,Mult(),Offset())

Nota: cuando el elemento de un array no está específicamente identificado, con (),


se asume como (1). “Pressure()” es lo mismo que “Pressure(1)” y lo mismo que
“Pressure”. Cuando se usan repetitions en una instrucción, puede especificar un
elemento distinto a (1) como punto de inicio, pero sólo para destination. Para
escribir Pressure(5) a (7):

VoltSE(Pressure(5),3,mV2500,1,False,0,100,Mult,Offset) ‘ se aplicará el
mismo multiplier y offset a las 3 medidas.

15-5
Sección 15. Conceptos Programación Avanzada

15.5 Instrucción SubScan


La instrucción SubScan se utiliza para controlar multiplexores.

La instrucción SubScan se utiliza para controlar multiplexores o medir algunas


entradas analógicas a una velocidad superior que el scan de programa. Las
instrucciones SubScan/NextSubScan se ponen dentro de las instrucciones
Scan/NextScan de un programa.

Sintaxis: SubScan (SubInterval, Units, Count)


NextSubScan

La instrucción SubScan tiene los siguientes parámetros:

El parámetro SubInterval es una constante que designa el intervalo de tiempo


entre SubScans. Entre 0 para que no haya retardo entre SubScans.

El parámetro Units es la unidad de tiempo a usar en el parámetro SubInterva. Las


opciones son: microseconds, milliseconds, y seconds.

El parámetro Count es una constante entera que es el número de veces que


SubScan se ejecutará en cada scan. El número máximo es 65,535.

Notas: SubScans no puede ser nested o colocada dentro de SlowSequence.


Medidas PulseCount o SDM no pueden usarse dentro de SubScan.

►► Cree un programa que use la temperature del panel del CR1000 como
referencia, medir 5 termopares tipo T en el mismo CR1000, y 5 termopares
tipo T en un AM16/32. Use la notación array para aplicar los multipliers y
offsets.

Vea el programa EX-Mux.CR1 del Apéndice A.

15.6 Instrucciones múltiples Scan…NextScan


Están permitidas las instrucciones múltiple Scan…NextScan.

Use una instrucción SlowSequence antes de Scan…NextScan que haga


(múltiple) scan intervals como en la Table 2. Nota: las DataTables que son
llamadas desde SlowSequence se pueden declarar después de la instrucción
SlowSequence. Es posible tener hasta cuatro diferentes SlowSequence scans para
medidas en que no es necesaria la velocidad del scan interval principal.

Vea el programa EX-Table2.CR1 en el Apéndice A.

Use múltiple Scan…NextScans con un número en el parámetro Count. El


parámetro Count ajusta el número de veces que el bucle Scan…NextScan será
ejecutado. Poniendo 0 hará el bucle indefinidamente, o hasta que se encuentre la
condición ExitScan. Esto puede usarse en muestreos logarítmicos como pump
test.

Vea el programa EX-log.CR1 y EX-log_subroutine.CR1 en el Apéndice A.

15-6
Sección 15. Conceptos Programación Avanzada

Hay casos en que un Scan que nunca se ejecute sea útil. Por ejemplo para
desactivar la background calibration (para velocidad) el usuario puede crear un
scan que incluya la instrucción Calibrate. El CR1000 asume que esto significa
que el usuario quiere controlar cuando llevar a cabo la calibration. Es
responsabilidad del usuario si a ese scan realmente se hace o no.

15.7 Subrutinas
Se pueden usar subrutinas en medidas, procesos, o series de cálculos que requieran
ser repetidos varias veces dentro del programa. La subrutina se puede llamar
cuando se necesite evitando tener que repetir conjuntos de instrucciones.

Sub
otras instrucciones
optional ExitSub
otras instrucciones
EndSub

Una subrutina es un procedimiento independiente que es llamado por el programa


principal con la sentencia Call. Una subrutina puede tomar variables, ejecutar un
conjunto de instrucciones, y cambiar el valor de sus variables.

Todas las subrutinas deben ser definidas en el área de declaraciones del programa
(antes de la sentencia BeginProg).

Nota: las líneas de programa en una subrutina no pueden estar dentro del código
de otra subrutina; sin embargo, una subrutina puede ser llamada por otra subrutina.
Si una subrutina llama a otra, la segunda subrutina debe estar colocada antes de la
que le llama. Las subrutinas no pueden ser usadas en expresiones.

►► Cree una subrutina para convertir de ºC a ºF las lecturas de termopares.


Guarde los datos en ºC en una tabla y los datos en ºF en otra tabla. Vea el
programa EX-Subroutine.CR1 en el Apéndice A.

15.8 Instrucciones datos Serie RS232


Los puertos COM y RS-232 del CR1000 se pueden utilizar para comunicaciones
serie RS232.

La instrucción SerialOut se utiliza para transmitir una cadena a través de uno de


los puertos de comunicaciones del datalogger.

15-7
Sección 15. Conceptos Programación Avanzada

La instrucción SerialIn configura el puerto de comunicaciones para la recepción


de de datos serie RS232. El parámetro destination especifica la variable donde los
datos entrantes serán almacenados. La variable debe ser declarada como string.

La instrucción SplitStr devuelve un array de cadenas o números a partir de un


search string (cadena de búsqueda). Los parámetros FilterString y SplitOption
ayudan a definir el array devuelto por la instrucción SplitStr.

El programa EX-Serial.CR1 del Apéndice A, envía varias cadenas de un puerto


COM a otro y luego los separa en varias variables.

15-8

También podría gustarte