Curso CR1000 LoggerNet Castellano

114
Manual Curso CR1000 / LoggerNet Traducción (Febrero 2006): Campbell Scientific Spain Rev: 2/05

Transcript of Curso CR1000 LoggerNet Castellano

Manual Curso CR1000 / LoggerNet

Traducción (Febrero 2006): Campbell Scientific Spain

Rev: 2/05

I

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

II

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

III

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

1-1

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.

Sección 1. Hardware CR1000

1-2

G 12V

11109SE 15 1613 1412

SE 1 2 3 4 5 6 7 8

SW-12

5V 12V

12V

12VG

DC ONLYCAUTION

PERIPHERAL PORT

C5

HLDIFF

H EX2

H LH LL

C4

G G G G C1

C2

C3

G G

RS-232

SN:

LUG

CS I/O

EX3

G GROUND

C6

C7

C8

H1 2 3 4

5 6 7 8

LDIFF

H EX1

H HH HL

POWER IN

WIRING PANEL

P2P1 GG G

CR1000 MADE IN USA

SDM

TxCOM1

Rx Tx Rx Tx Rx Tx RxCOM2 COM3 COM4POWER OUT

Entrada Alimentació

RS-232

CS I/O DSP4 (Tablas de datos y salida)

Salida 12V conmutable SW-12 PortSet SW12

12 V Conexiones SDM CS7500 CSAT3 SDMINT8 SDMSpeed SDMTrigger

Control I/O PortGet PortSet ReadIO TimerIO WriteIO SDI-12

Tierra Alimentación (G) Puerto para

Periféricos CardOut (Tablas de datos y salida)

Salidas Excitación (Ex) Excite BrFull BrFull6w BrHalf BrHalf3W BrHalf4W

Entradas Analógicas Voltaje VoltDiff VoltSE Termopar TCDiff TCSE Puentes de medida (usa Ex) BrFull BrFull6W BrHalf BrHalf3W BrHalf4W Otras PanelTemp PeriodAvg AM25T

Toma de tierra

5 V

Entradas Pulsos PulseCount PulseCountReset

Tierra analógica

Sección 1. Hardware CR1000

1-3

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

Sección 1. Hardware CR1000

1-4

Sensor conectado a canal #2 Single-Ended

HL

HL

12

12

34

DIF

F

SE

+

-

Sensor

Sensor conectado a canal #1 Diferencial

HL

HL

12

12

34

DIF

F

SE

+

-Sensor

Sección 1. Hardware CR1000

1-5

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

HL

EX

14

78

DIF

F

SE

Sección 1. Hardware CR1000

1-6

Sensores salida analógica a 2, 3, y 4 hilos. Number of Wiresfrom Sensor Measurement Type

Single-Ended orDifferential

Single-Ended

Examples

2 ThermocouplesThermopiles4-20ma w/shunt

PotentiometersWind VanesThermisters

PressureStrain Gages orPRT's in full Bridge

Differential

3

4

+

-

Vin

Vout

A G

Vin

Vout +

Vout -

A G

Vin = canal de excitación

Vout = canal analógico

Termopares Termopilas 4-20 mA con res. shunt

Potenciómetros Veletas Termistores

Presión Galgas extensiométricas o PRTs en puente completo

Puente completo 3-hilos

Puente complete 4-hilos

Vin

Vout

Vin

Vout +

Vout -

Sección 1. Hardware CR1000

1-7

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 E

X1

P1

P2

Sensor

Tipos de entradas de pulsos 5V

0V

0V

SWITCH CLOSURE

HIGH FREQUENCY PULSE

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.

Sección 1. Hardware CR1000

1-8

Puertos digitales I/O usados para controlar/monitorizar bomba

110 VAC

Pump

ACL1Line

Monitor

C1

G

C2

G

CR10

1.9 Sensores RS-232 Los sensores RS-232 pueden conectarse tanto al conector RS-232 como en los puertos digitales I/O.

CR1000

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

2-1

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.

100 g100 g

Higher Resolution

106.2101 g

Sección 2. Especificaciones

2-2

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

100 g100 g

More AccurateMore Precise

99.822 times

99.918 times

100.012 times

100.119 times

100.221 times

105.330 times

105.270 times

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

100 g

Hysteresis

100.0

99.9

100.1

100.0

Reading Changes}

Sección 2. Especificaciones

2-3

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

Linearity

100 g50 g

50 g100 g

50 g50 g

0 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

Sección 2. Especificaciones

2-4

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

Sección 2. Especificaciones

2-5

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)

Sección 2. Especificaciones

2-6

3-1

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.

Sección 3. Memoria del CR1000

3-2

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.

4-1

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)

Sección 4. Generador de programas Short Cut

4-2

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.

5-1

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.

Sección 5. LoggerNet

5-2

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.

Utilice Opciones | Configurar Botones para añadir o quitar botones de aplicaciones.

Sección 5. LoggerNet

5-3

►► 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.

Sección 5. LoggerNet

5-4

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.

6-1

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.

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

6-2

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.

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.

Ventana de entrada de programa

Área de mensajes

Panel de instrucciones

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

6-3

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.

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

6-4

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.

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

6-5

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

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

6-6

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.

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

6-7

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).

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

6-8

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.

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

6-9

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.

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

6-10

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.

7-1

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

floating point 4 bytes De 1.8 *10^-38 a

1.7 *10^38 24 bits (sobre 7 dígitos)

variables, display

LONG 4 byte signed integer

4 bytes De -2,147,483,648 a +2,147,483,647

32 bits variables, display

BOOLEAN 4 byte signed integer

4 bytes -1, 0 Verdadero (-1) o Falso (0)

variables, display

STRING ASCII String Set by program

variables, display

IEEE4 IEEE four byte floating point

4 bytes De 1.8 *10^-38 a 1.7 *10^38

24 bits (sobre 7 dígitos)

Cálculos internos, salida

FP2 Campbell Scientific floating point

2 bytes De -7999 a +7999 13 bits (sobre 4 dígitos

Salida

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.

Sección 7. Tipos de datos y formatos

7-2

“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.

Sección 7. Tipos de datos y formatos

7-3

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

Sección 7. Tipos de datos y formatos

7-4

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.

Sección 7. Tipos de datos y formatos

7-5

"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:

TOA5 CR1000_on_desk CR1000 1022

CR1000.Std.01

CPU:EX2.CR1 27664 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

La aplicación View de LoggerNet puede mostrar la información de la cabecera abriendo el fichero y haciendo clic en File | Properties.

Sección 7. Tipos de datos y formatos

7-6

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 Number

1022 El número de serie del logger del que se han recogido los datos. Es el número de serie de la CPU del CR1000.

Operating System Version

CR1000.Std.01 La versión del sistema operativo del logger del que se han 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, AirTemp_C_Max, etc.

El nombre del campo en la data table. Este nombre es 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 Max = Maximum Min = Minimum Avg = Average

El procesado de salida (cálculo) que fue utilizado cuando se grabó el campo.

Field Data 24.01, 24.02, etc. Valor de cada campo del registro. Optional Field Data Type

ULONG = Unsigned 4 byte integer IEEE4 = 4 byte floating point

Esta línea de cabecera solo está en el formato binario TOB1 e identifica el tipo de dato para cada uno de los campos de la tabla de datos.

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.

Sección 7. Tipos de datos y formatos

7-7

"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.

Sección 7. Tipos de datos y formatos

7-8

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.

Sección 7. Tipos de datos y formatos

7-9

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.

Sección 7. Tipos de datos y formatos

7-10

8-1

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.

Sección 8. Detalles de instrucción

8-2

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.

Sección 8. Detalles de instrucción

8-3

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.

Sección 8. Detalles de instrucción

8-4

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.

Sección 8. Detalles de instrucción

8-5

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.

3000

mV

4000

mV

SE 1 2 Diff 1 H L

Sensor cableado en canal 1 Diff

Medida = 1000 mV

Sensor

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.

Sección 8. Detalles de instrucción

8-6

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.

Sección 8. Detalles de instrucción

8-7

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:

Sección 8. Detalles de instrucción

8-8

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.

Sección 8. Detalles de instrucción

8-9

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

XV

V

R

R Rx

s

s f= =

+1

Result units: mV/mV

( )

R R XX

RR X

X

s f

fs

=−

=−

11

BrHalf3W

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

XV V

V V

R

RX

s

f=

−=

2 2 1

1

Result units: mV/mV

R R X

R R Xs f

f s

=

= /

BrHalf4W

H

LH

L

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

XV

V

R

Rs

f= =2

1

Result units: mV/mV

R R X

R R Xs f

f s

=

= /

Sección 8. Detalles de instrucción

8-10

BrFull

HL

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

X 1000V1Vx

1000R3

R3 R4

R2R1 R2

= =+

−+

Result units: 1000*V/V OR mV/V

( )( )

X X R R R

RR X

X

RR X

X

1 3 3 4

12 1

1

21 1

1

1000

1

1

= − + +

=−

=−

/ /

BrFull6W

HL

HL

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

XV

V

R

R R

R

R R= =

+−

+

1000 10002

1

3

3 4

2

1 2

Result units: 1000*V/V OR mV/V

( )

( )

X X R R R

RR X

X

RR X

X

2 2 1 2

34 2

2

43 2

2

1000

11

= + +

=−

=−

/ /

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.

Sección 8. Detalles de instrucción

8-11

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.

Sección 8. Detalles de instrucción

8-12

9-1

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.

Sección 9. Programación para control

9-2

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

Sección 9. Programación para control

9-3

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.

Sección 9. Programación para control

9-4

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.

Sección 9. Programación para control

9-5

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.

Sección 9. Programación para control

9-6

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.

Sección 9. Programación para control

9-7

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.

Sección 9. Programación para control

9-8

This is a blank page.

10-1

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:

Sección 10. Recogida de datos automatizada

10-2

Sección 10. Recogida de datos automatizada

10-3

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.

Sección 10. Recogida de datos automatizada

10-4

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).

Sección 10. Recogida de datos automatizada

10-5

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.

Sección 10. Recogida de datos automatizada

10-6

This is a blank page.

11-1

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).

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

11-2

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.

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

11-3

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

11-4

La pantalla puede tener el siguiente aspecto:

12-1

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.

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

12-2

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.

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

12-3

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.

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

12-4

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.

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

12-5

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.

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

12-6

This is a blank page.

13-1

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.

Sección 13. Ejercicio Exhaustivo

13-2

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)

14-1

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.

Sección 14. Redes PakBus®

14-2

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.

Sección 14. Redes PakBus®

14-3

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).

Sección 14. Redes PakBus®

14-4

Configuración final del hardware de la red:

PCCR1000 CR1000

PCCR1000CR1000

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.

Sección 14. Redes PakBus®

14-5

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 Name

Setting Value

Description

PakBus Address 1 Is Router 0 0=No, 1=Yes PakBus Nodes Allocation

50 Máximo número de dispositivos en la 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

Sección 14. Redes PakBus®

14-6

►► 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.

Sección 14. Redes PakBus®

14-7

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 CR1000

No se puede recoger ni modificar

Tabla Status Las variables de escritura no se pueden modificar

Ajustar Reloj Sin restricción No se puede modificar/ajustar

Tabla Public Sin restricción Las variables de escritura no se pueden modificar

Recoger datos Sin restricción Sin restricción

Prohibidas todas las comunicaciones

Sección 14. Redes PakBus®

14-8

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.

Sección 14. Redes PakBus®

14-9

►► 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.

Sección 14. Redes PakBus®

14-10

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.

Sección 14. Redes PakBus®

14-11

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.

Sección 14. Redes PakBus®

14-12

►► 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

Sección 14. Redes PakBus®

14-13

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

Sección 14. Redes PakBus®

14-14

'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)

Sección 14. Redes PakBus®

14-15

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

Sección 14. Redes PakBus®

14-16

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.

Sección 14. Redes PakBus®

14-17

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.

Sección 14. Redes PakBus®

14-18

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

Sección 14. Redes PakBus®

14-19

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).

Sección 14. Redes PakBus®

14-20

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)

15-1

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.

Sección 15. Conceptos Programación Avanzada

15-2

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

Sección 15. Conceptos Programación Avanzada

15-3

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

Sección 15. Conceptos Programación Avanzada

15-4

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).

Sección 15. Conceptos Programación Avanzada

15-5

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.

Sección 15. Conceptos Programación Avanzada

15-6

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.

Sección 15. Conceptos Programación Avanzada

15-7

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.

Sección 15. Conceptos Programación Avanzada

15-8

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.