CRBasic es el lenguaje de programación que controla la funcionalidad de un registrador de datos científico Campbell . El programa controla todos los procesos en el registrador relacionados con la recopilación de datos, incluidos nombres de variables, diseños de tablas de datos, definiciones y rangos de transductores y operación del puerto de control.
Para comenzar un programa en CRBasic, se recomienda crear primero un programa abreviado, disponible a través de loggernet, que contiene un asistente y permite la creación de la estructura básica de un programa que incluye tablas y declaraciones de sensores. Una vez que el programa se ha creado en forma abreviada, se puede editar en CRBasic para agregar cualquier funcionalidad avanzada requerida. Esta guía cubre la funcionalidad básica de CRBasic, así como algunos detalles específicos de la programación en el sitio de pruebas de St.Lawrence College. Hay documentación más detallada para la codificación disponible en el manual CR1000 que se encuentra en el sitio web de Campbell Scientific.
En cualquier código CRBasic, hay tres secciones principales: i) declaración de variables ii) definición de tabla iii) colección
Contents
Declaración de variables
La primera parte del código define todas las variables que recopilará el registrador de datos mediante el comando Público . Las variables singulares se definen ingresando el nombre de la variable y las variables de matriz, que se pueden usar para almacenar múltiples valores bajo nombres de variables indexadas, se definen agregando la longitud de la matriz entre paréntesis después del nombre de la variable. Por ejemplo:
Declara una variable Temp_C_2 que tiene 25 valores indexables. Esto resulta útil cuando se utiliza un multiplexor, ya que cada índice puede representar un puerto del multiplexor. Sin embargo, estas variables indexadas pueden convertirse en un problema, ya que es difícil distinguir a qué sensor físico están conectadas. Debido a esto, es útil utilizar el comando Alias para cambiar el nombre de cada valor dentro de la matriz para representar el sensor que representa. Por ejemplo:
Cambia el nombre del quinto valor en Temp_C_2 para mostrar que está midiendo el termopar en la quinta posición de la primera fila de la matriz.
Declaración de tabla
Una vez definidas las variables, existe la opción de dividirlas en varias tablas de datos para facilitar la manipulación de los datos. En este caso, todas las variables se muestran en una única tabla, denominada Tabla1. Además, es posible promediar el tiempo de los datos dentro de las tablas. Esto permitiría la recopilación de datos, por ejemplo, a intervalos de 1 minuto, pero solo almacenaría los promedios de 5 minutos de estos datos en la tabla. La ventaja de esto es una alta resolución de recopilación, al tiempo que se reduce el tamaño del archivo de datos recopilado, lo que lo hace más manejable para el almacenamiento, la transmisión y el posprocesamiento.
En el caso de este programa, los datos se muestrean y recopilan a intervalos de 5 minutos. La razón de esto es la inclusión de multiplexores en este sistema, que tienen ciclos de vida limitados. Por lo tanto, se optó por reducir el número de ciclos experimentados por el multiplexor muestreando únicamente a intervalos de 5 minutos, lo que ofrece un buen compromiso entre los tiempos de ciclo y la resolución de los datos.
La tabla de datos se declara utilizando las dos líneas siguientes:
Que define el uso de la memoria y el intervalo de grabación para la tabla de datos. Un atributo importante de las tablas en un sistema Campbell Scientific es el uso de memoria de bucle. La memoria base de la unidad está relativamente limitada a 4 MB para almacenar el programa y todos los datos. En el caso de que los datos recopilados excedan el espacio de memoria disponible en el sistema, los datos pasarán a la parte superior de la tabla de datos y borrarán primero los datos más antiguos. El estado de la memoria de la estación se puede ver a través de la utilidad de configuración del dispositivo o la pantalla de conexión.
Recopilación de datos
La recopilación de datos se produce en un bucle repetitivo que se ejecuta hasta que el controlador detiene manualmente el programa a través de loggernet. El comienzo de este bucle está indicado por las dos líneas de código siguientes:
Lo que inicia el ciclo y configura una exploración cada 5 minutos, según el reloj del registrador de datos. Cada comando que sigue a este se ejecuta secuencialmente cuando se inicia el escaneo.
Cada medición es iniciada por su propia línea en el programa, que declara el tipo de medición a realizar, el canal de entrada desde el que se lee y cualquier posprocesamiento especial requerido para la medición. Por ejemplo:
Lee la medida de tensión diferencial del canal 1 y la almacena en la variable SlrW, con un rango de tensión de 25 mV. El resto de los argumentos de esta declaración se relacionan con detalles específicos de cómo se recopila el valor, y se puede encontrar una descripción completa de estos en la ayuda de CRBasic. Además, al hacer clic derecho en una declaración de medición, aparecerá una ventana que describe cada parámetro de entrada y detalla los estándares para cada valor.
Para medir un multiplexor, se requiere un código más complejo. Los pasos básicos para medir un multiplexor son:
i) Inicialice la unidad configurando el puerto de resolución en alto
ii) Ingrese a un bucle de escaneo y envíe un pulso al puerto CLK que configura el relé en la primera entrada
iii) Lea el valor medido en la ranura correcta de la matriz. Tenga en cuenta que debido a que se toman dos mediciones de un solo extremo por canal diferencial, cada declaración de VoltSe registra dos valores secuenciales en dos ranuras secuenciales en la matriz de medición. Esto se hace estableciendo el campo 'repeticiones' (segundo campo en esta declaración) en 2, lo que toma una medida del canal declarado (en este caso 13) y lo coloca en la primera ranura de la matriz, y luego toma una medida. del siguiente canal, en este caso el 14, y lo coloca en la siguiente ranura del conjunto.
iv) Regrese al principio y continúe repitiendo la exploración hasta que se hayan leído todos los puertos del multiplexor.
v) Configure el puerto RES en nivel bajo para desactivar el registrador de datos.
Al final del programa se deben llamar las tablas que almacenan todas las variables que se han recopilado permanentemente en las tablas predefinidas.
Código más reciente del SEARC OTF
El siguiente es el código más reciente que se utiliza en SEARC OTF. Tenga en cuenta que cualquier línea con el prefijo ' representa un comentario de código.
'Programa ejecutándose en el registrador de datos St.Lawrence CR1000 desde enero de 2011
'Creado por Atajo (2.8)
'Declarar variables
BattV pública
público slrw
Público SlrkJ_2
Público SlrW_2
público slrkj
Público SlrW_3
Público SlrkJ_3
Público SR50A(2)
TCDT pública
DBTCDT público
RTempC público
Temperatura pública_C(25)
Público RTempC_2
Temp. pública_C_2(25)
AirTC público
Salud pública pública
WS_ms público
Dirección de viento pública
SEvolt público(64)
Público SEvolt_2(64)
Sensor público_altura
Profundidad de nieve pública
Conteo público
'Variables de alias para facilitar la identificación de los datos. Estos son los nombres que se registrarán en la tabla de datos.
Alias SR50A(1)=DT
Alias SR50A(2)=Q
Alias SEvolt(1)=V1.1V
De lo contrario SEvolt(2)=V1.2V
Alias SEvolt(3)=V1.3V
Alias SEvolt(4)=V1.4V
Alias SEvolt(5)=V1.5V
Alias SEvolt(6)=V1.6V
Alias SEvolt(7)=V1.7V
Alias SEvolt(8)=V1.8V
Alias SEvolt(9)=V2.1V
Alias SEvolt(10)=V2.2V
Alias SEvolt(11)=V2.3V
Alias SEvolt(12)=V2.4V
Alias SEvolt(13)=V2.5V
Alias SEvolt(14)=V2.6V
Alias SEvolt(15)=V2.7V
Alias SEvolt(16)=V2.8V
Alias SEvolt(17)=V3.1V
Alias SEvolt(18)=V3.2V
Alias SEvolt(19)=V3.3V
Alias SEvolt(20)=V3.4V
Alias SEvolt(21)=V3.5V
Alias SEvolt(22)=V3.6V
Alias SEvolt(23)=V3.7V
Alias SEvolt(24)=V3.8V
Alias SEvolt(25)=V4.1V
Alias SEvolt(26)=V4.2V
Alias SEvolt(27)=V4.3V
Alias SEvolt(28)=V4.4V
Alias SEvolt(29)=V4.5V
Alias SEvolt(30)=V4.6V
Alias SEvolt(31)=V4.7V
Alias SEvolt(32)=V4.8V
Otro SEvoltio(33)=C1.1C
Alias SEvolt(34)=C1.2C
Otro SEvoltio(35)=C1.3C
Otro SEvolt(36)=C1.4C
Otro SEvolt(37)=C1.5C
Otro SEvolt(38)=C1.6C
Alias SEvolt(39)=C1.7C
Alias SEvolt(40)=C1.8C
Alias SEvolt(41)=C2.1C
Alias SEvolt(42)=C2.2C
Alias SEvolt(43)=C2.3C
Alias SEvolt(44)=C2.4C
Alias SEvolt(45)=C2.5C
Alias SEvolt(46)=C2.6C
Alias SEvolt(47)=C2.7C
Alias SEvolt(48)=C2.8C
Alias SEvolt(49)=C3.1C
Alias SEvolt(50)=C3.2C
Alias SEvolt(51)=C3.3C
Alias SEvolt(52)=C3.4C
Alias SEvolt(53)=C3.5C
Alias SEvolt(54)=C3.6C
Alias SEvolt(55)=C3.7C
Alias SEvolt(56)=C3.8C
Alias SEvolt(57)=C4.1C
Alias SEvolt(58)=C4.2C
Alias SEvolt(59)=C4.3C
Alias SEvolt(60)=C4.4C
Alias SEvolt(61)=C4.5C
Alias SEvolt(62)=C4.6C
Alias SEvolt(63)=C4.7C
Alias SEvolt(64)=C4.8C
Alias SEvolt_2(1)=V1.9V
Alias SEvolt_2(2)=V1.10V
Alias SEvolt_2(3)=V1.11V
Alias SEvolt_2(4)=V1.12V
Alias SEvolt_2(5)=V1.13V
Alias SEvolt_2(6)=V1.14V
Alias SEvolt_2(7)=V1.15V
Alias SEvolt_2(8)=V1.16V
Alias SEvolt_2(9)=V2.9V
Alias SEvolt_2(10)=V2.10V
Alias SEvolt_2(11)=V2.11V
Alias SEvolt_2(12)=V2.12V
Alias SEvolt_2(13)=V2.13V
Alias SEvolt_2(14)=V2.14V
Alias SEvolt_2(15)=V2.15V
Alias SEvolt_2(16)=V2.16V
Alias SEvolt_2(17)=V3.9V
Alias SEvolt_2(18)=V3.10V
Alias SEvolt_2(19)=V3.11V
Alias SEvolt_2(20)=V3.12V
Alias SEvolt_2(21)=V3.13V
Alias SEvolt_2(22)=V3.14V
Alias SEvolt_2(23)=V3.15V
Alias SEvolt_2(24)=V3.16V
Alias SEvolt_2(25)=V4.9V
Alias SEvolt_2(26)=V4.10V
Alias SEvolt_2(27)=V4.11V
Alias SEvolt_2(28)=V4.12V
Alias SEvolt_2(29)=V4.13V
Alias SEvolt_2(30)=V4.14V
Alias SEvolt_2(31)=V4.15V
Alias SEvolt_2(32)=V4.16V
Otros SEvolt_2(33)=C1.9C
Alias SEvolt_2(34)=C1.10C
Otros SEvolt_2(35)=C1.11C
Otros SEvolt_2(36)=C1.12C
Otro SEvolt_2(37)=C1.13C
Otros SEvolt_2(38)=C1.14C
Otros SEvolt_2(39)=C1.15C
Alias SEvolt_2(40)=C4.13C
Alias SEvolt_2(41)=C2.9C
Alias SEvolt_2(42)=C2.10C
Alias SEvolt_2(43)=C2.11C
Alias SEvolt_2(44)=C2.12C
Alias SEvolt_2(45)=C2.13C
Alias SEvolt_2(46)=C2.14C
Alias SEvolt_2(47)=C2.15C
Alias SEvolt_2(48)=C4.14C
Alias SEvolt_2(49)=C3.9C
Alias SEvolt_2(50)=C3.10C
Alias SEvolt_2(51)=C3.11C
Alias SEvolt_2(52)=C3.12C
Alias SEvolt_2(53)=C3.13C
Alias SEvolt_2(54)=C3.14C
Alias SEvolt_2(55)=C3.15C
Alias SEvolt_2(56)=C4.15C
Alias SEvolt_2(57)=C4.9C
Alias SEvolt_2(58)=C4.10C
Alias SEvolt_2(59)=C4.11C
Alias SEvolt_2(60)=C4.12C
Otros Temp_C(1)=T3.4
Otros Temp_C(2)=T3.5
Otros Temp_C(3)=T3.6
Otra temperatura_C(4)=T3.7
Alias Temp_C(5)=T4.1
Alias Temp_C(6)=T4.2
Alias Temp_C(7)=T4.3
Alias Temp_C(8)=T4.4
Alias Temp_C(9)=T4.5
Alias Temp_C(10)=T4.6
Alias Temp_C(11)=T4.7
Alias Temp_C(12)=T2.10
Alias Temp_C(13)=T2.11
Alias Temp_C(14)=T2.12
Alias Temp_C(15)=T2.13
Alias Temp_C(16)=T2.15
Otra temperatura_C(17)=T3.11
Otra temperatura_C(18)=T3.12
Otra temperatura_C(19)=T3.13
Otra temperatura_C(20)=T3.15
Alias Temp_C(21)=T4.15
De lo contrario Temp_C(22)=Tempty1
Alias Temp_C(23)=Tempty2
De lo contrario Temp_C(24)=Tempty3
De lo contrario Temp_C(25)=Tempty4
Otro Temp_C_2(1)=T1.1
Otro Temp_C_2(2)=T1.2
Otro Temp_C_2(3)=T1.3
Otro Temp_C_2(4)=T1.4
Otro Temp_C_2(5)=T1.5
Otro Temp_C_2(6)=T1.6
Otro Temp_C_2(7)=T1.7
Otro Temp_C_2(8)=T1.8
Otro Temp_C_2(9)=T1.9
Otro Temp_C_2(10)=T1.10
Otro Temp_C_2(11)=T1.11
Otro Temp_C_2(12)=T1.12
Otro Temp_C_2(13)=T1.13
Otro Temp_C_2(14)=T1.14
Otro Temp_C_2(15)=T1.15
Alias Temp_C_2(16)=T2.1
Alias Temp_C_2(17)=T2.2
Alias Temp_C_2(18)=T2.3
Alias Temp_C_2(19)=T2.4
Alias Temp_C_2(20)=T2.5
Alias Temp_C_2(21)=T2.6
Alias Temp_C_2(22)=T2.7
Otro Temp_C_2(23)=T3.1
Otro Temp_C_2(24)=T3.2
Otro Temp_C_2(25)=T3.3
'Declarar las unidades para cada medida
Unidades BattV=Voltios
Unidades SlrW=W/m^2
Unidades SlrkJ_2=kJ/m^2
Unidades SlrW_2=W/m^2
Unidades SlrkJ=kJ/m^2
Unidades SlrW_3=W/m^2
Unidades SlrkJ_3=kJ/m^2
Unidades RTempC=Grados C
Unidades Temp_C=Grados C
Unidades RTempC_2=Grados C
Unidades Temp_C_2=Grados C
Unidades AirTC=Grados C
Unidades HR=%
Unidades WS_ms=metros/segundo
Unidades WindDir=Grados
'Definir tablas de datos, la Tabla 1 es la única tabla utilizada en este programa.
'La tabla se promedia en intervalos de 5 minutos y la recopilación de 'datos se produce en el mismo intervalo, por lo tanto, los valores promedio son 'en realidad la medición puntual tomada en ese momento
Tabla de datos (Tabla1, Verdadero, -1)
Intervalo de datos(0,5,Min,10)
Promedio(1,SlrW,FP2,Falso)
Totalizar(1,SlrkJ_2,IEEE4,Falso)
Promedio(1,SlrW_2,FP2,Falso)
Totalizar(1,SlrkJ,IEEE4,Falso)
Promedio(1,SlrW_3,FP2,Falso)
Totalizar(1,SlrkJ_3,IEEE4,Falso)
Promedio(1,DT,FP2,Falso)
Promedio(1,Q,FP2,Falso)
Promedio(1,TCDT,FP2,Falso)
Promedio(1,DBTCDT,FP2,Falso)
Promedio(1,RTempC_2,FP2,Falso)
Promedio(1,Profundidad_nieve,FP2,Falso)
Promedio(1,Temp_C_2(1),FP2,Falso)
Promedio(1,Temp_C_2(2),FP2,Falso)
Promedio(1,Temp_C_2(3),FP2,Falso)
Promedio(1,Temp_C_2(4),FP2,Falso)
Promedio(1,Temp_C_2(5),FP2,Falso)
Promedio(1,Temp_C_2(6),FP2,Falso)
Promedio(1,Temp_C_2(7),FP2,Falso)
Promedio(1,Temp_C_2(8),FP2,Falso)
Promedio(1,Temp_C_2(9),FP2,Falso)
Promedio(1,Temp_C_2(10),FP2,Falso)
Promedio(1,Temp_C_2(11),FP2,Falso)
Promedio(1,Temp_C_2(12),FP2,Falso)
Promedio(1,Temp_C_2(13),FP2,Falso)
Promedio(1,Temp_C_2(14),FP2,Falso)
Promedio(1,Temp_C_2(15),FP2,Falso)
Promedio(1,Temp_C_2(16),FP2,Falso)
Promedio(1,Temp_C_2(17),FP2,Falso)
Promedio(1,Temp_C_2(18),FP2,Falso)
Promedio(1,Temp_C_2(19),FP2,Falso)
Promedio(1,Temp_C_2(20),FP2,Falso)
Promedio(1,Temp_C_2(21),FP2,Falso)
Promedio(1,Temp_C_2(22),FP2,Falso)
Promedio(1,Temp_C_2(23),FP2,Falso)
Promedio(1,Temp_C_2(24),FP2,Falso)
Promedio(1,Temp_C_2(25),FP2,Falso)
Promedio(1,RTempC,FP2,Falso)
Promedio(1,Temp_C(1),FP2,Falso)
Promedio(1,Temp_C(2),FP2,Falso)
Promedio(1,Temp_C(3),FP2,Falso)
Promedio(1,Temp_C(4),FP2,Falso)
Promedio(1,Temp_C(5),FP2,Falso)
Promedio(1,Temp_C(6),FP2,Falso)
Promedio(1,Temp_C(7),FP2,Falso)
Promedio(1,Temp_C(8),FP2,Falso)
Promedio(1,Temp_C(9),FP2,Falso)
Promedio(1,Temp_C(10),FP2,Falso)
Promedio(1,Temp_C(11),FP2,Falso)
Promedio(1,Temp_C(12),FP2,Falso)
Promedio(1,Temp_C(13),FP2,Falso)
Promedio(1,Temp_C(14),FP2,Falso)
Promedio(1,Temp_C(15),FP2,Falso)
Promedio(1,Temp_C(16),FP2,Falso)
Promedio(1,Temp_C(17),FP2,Falso)
Promedio(1,Temp_C(18),FP2,Falso)
Promedio(1,Temp_C(19),FP2,Falso)
Promedio(1,Temp_C(20),FP2,Falso)
Promedio(1,Temp_C(21),FP2,Falso)
Promedio(1,Temp_C(22),FP2,Falso)
Promedio(1,Temp_C(23),FP2,Falso)
Promedio(1,Temp_C(24),FP2,Falso)
Promedio(1,Temp_C(25),FP2,Falso)
Promedio(1,SEvolt(1),FP2,Falso)
Promedio(1,SEvolt(2),FP2,Falso)
Promedio(1,SEvolt(3),FP2,Falso)
Promedio(1,SEvolt(4),FP2,Falso)
Promedio(1,SEvolt(5),FP2,Falso)
Promedio(1,SEvolt(6),FP2,Falso)
Promedio(1,SEvolt(7),FP2,Falso)
Promedio(1,SEvolt(8),FP2,Falso)
Promedio(1,SEvolt(9),FP2,Falso)
Promedio(1,SEvolt(10),FP2,Falso)
Promedio(1,SEvolt(11),FP2,Falso)
Promedio(1,SEvolt(12),FP2,Falso)
Promedio(1,SEvolt(13),FP2,Falso)
Promedio(1,SEvolt(14),FP2,Falso)
Promedio(1,SEvolt(15),FP2,Falso)
Promedio(1,SEvolt(16),FP2,Falso)
Promedio(1,SEvolt(17),FP2,Falso)
Promedio(1,SEvolt(18),FP2,Falso)
Promedio(1,SEvolt(19),FP2,Falso)
Promedio(1,SEvolt(20),FP2,Falso)
Promedio(1,SEvolt(21),FP2,Falso)
Promedio(1,SEvolt(22),FP2,Falso)
Promedio(1,SEvolt(23),FP2,Falso)
Promedio(1,SEvolt(24),FP2,Falso)
Promedio(1,SEvolt(25),FP2,Falso)
Promedio(1,SEvolt(26),FP2,Falso)
Promedio(1,SEvolt(27),FP2,Falso)
Promedio(1,SEvolt(28),FP2,Falso)
Promedio(1,SEvolt(29),FP2,Falso)
Promedio(1,SEvolt(30),FP2,Falso)
Promedio(1,SEvolt(31),FP2,Falso)
Promedio(1,SEvolt(32),FP2,Falso)
Promedio(1,SEvolt(33),FP2,Falso)
Promedio(1,SEvolt(34),FP2,Falso)
Promedio(1,SEvolt(35),FP2,Falso)
Promedio(1,SEvolt(36),FP2,Falso)
Promedio(1,SEvolt(37),FP2,Falso)
Promedio(1,SEvolt(38),FP2,Falso)
Promedio(1,SEvolt(39),FP2,Falso)
Promedio(1,SEvolt(40),FP2,Falso)
Promedio(1,SEvolt(41),FP2,Falso)
Promedio(1,SEvolt(42),FP2,Falso)
Promedio(1,SEvolt(43),FP2,Falso)
Promedio(1,SEvolt(44),FP2,Falso)
Promedio(1,SEvolt(45),FP2,Falso)
Promedio(1,SEvolt(46),FP2,Falso)
Promedio(1,SEvolt(47),FP2,Falso)
Promedio(1,SEvolt(48),FP2,Falso)
Promedio(1,SEvolt(49),FP2,Falso)
Promedio(1,SEvolt(50),FP2,Falso)
Promedio(1,SEvolt(51),FP2,Falso)
Promedio(1,SEvolt(52),FP2,Falso)
Promedio(1,SEvolt(53),FP2,Falso)
Promedio(1,SEvolt(54),FP2,Falso)
Promedio(1,SEvolt(55),FP2,Falso)
Promedio(1,SEvolt(56),FP2,Falso)
Promedio(1,SEvolt(57),FP2,Falso)
Promedio(1,SEvolt(58),FP2,Falso)
Promedio(1,SEvolt(59),FP2,Falso)
Promedio(1,SEvolt(60),FP2,Falso)
Promedio(1,SEvolt(61),FP2,Falso)
Promedio(1,SEvolt(62),FP2,Falso)
Promedio(1,SEvolt(63),FP2,Falso)
Promedio(1,SEvolt(64),FP2,Falso)
Promedio(1,SEvolt_2(1),FP2,Falso)
Promedio(1,SEvolt_2(2),FP2,Falso)
Promedio(1,SEvolt_2(3),FP2,Falso)
Promedio(1,SEvolt_2(4),FP2,Falso)
Promedio(1,SEvolt_2(5),FP2,Falso)
Promedio(1,SEvolt_2(6),FP2,Falso)
Promedio(1,SEvolt_2(7),FP2,Falso)
Promedio(1,SEvolt_2(8),FP2,Falso)
Promedio(1,SEvolt_2(9),FP2,Falso)
Promedio(1,SEvolt_2(10),FP2,Falso)
Promedio(1,SEvolt_2(11),FP2,Falso)
Promedio(1,SEvolt_2(12),FP2,Falso)
Promedio(1,SEvolt_2(13),FP2,Falso)
Promedio(1,SEvolt_2(14),FP2,Falso)
Promedio(1,SEvolt_2(15),FP2,Falso)
Promedio(1,SEvolt_2(16),FP2,Falso)
Promedio(1,SEvolt_2(17),FP2,Falso)
Promedio(1,SEvolt_2(18),FP2,Falso)
Promedio(1,SEvolt_2(19),FP2,Falso)
Promedio(1,SEvolt_2(20),FP2,Falso)
Promedio(1,SEvolt_2(21),FP2,Falso)
Promedio(1,SEvolt_2(22),FP2,Falso)
Promedio(1,SEvolt_2(23),FP2,Falso)
Promedio(1,SEvolt_2(24),FP2,Falso)
Promedio(1,SEvolt_2(25),FP2,Falso)
Promedio(1,SEvolt_2(26),FP2,Falso)
Promedio(1,SEvolt_2(27),FP2,Falso)
Promedio(1,SEvolt_2(28),FP2,Falso)
Promedio(1,SEvolt_2(29),FP2,Falso)
Promedio(1,SEvolt_2(30),FP2,Falso)
Promedio(1,SEvolt_2(31),FP2,Falso)
Promedio(1,SEvolt_2(32),FP2,Falso)
Promedio(1,SEvolt_2(33),FP2,Falso)
Promedio(1,SEvolt_2(34),FP2,Falso)
Promedio(1,SEvolt_2(35),FP2,Falso)
Promedio(1,SEvolt_2(36),FP2,Falso)
Promedio(1,SEvolt_2(37),FP2,Falso)
Promedio(1,SEvolt_2(38),FP2,Falso)
Promedio(1,SEvolt_2(39),FP2,Falso)
Promedio(1,SEvolt_2(40),FP2,Falso)
Promedio(1,SEvolt_2(41),FP2,Falso)
Promedio(1,SEvolt_2(42),FP2,Falso)
Promedio(1,SEvolt_2(43),FP2,Falso)
Promedio(1,SEvolt_2(44),FP2,Falso)
Promedio(1,SEvolt_2(45),FP2,Falso)
Promedio(1,SEvolt_2(46),FP2,Falso)
Promedio(1,SEvolt_2(47),FP2,Falso)
Promedio(1,SEvolt_2(48),FP2,Falso)
Promedio(1,SEvolt_2(49),FP2,Falso)
Promedio(1,SEvolt_2(50),FP2,Falso)
Promedio(1,SEvolt_2(51),FP2,Falso)
Promedio(1,SEvolt_2(52),FP2,Falso)
Promedio(1,SEvolt_2(53),FP2,Falso)
Promedio(1,SEvolt_2(54),FP2,Falso)
Promedio(1,SEvolt_2(55),FP2,Falso)
Promedio(1,SEvolt_2(56),FP2,Falso)
Promedio(1,SEvolt_2(57),FP2,Falso)
Promedio(1,SEvolt_2(58),FP2,Falso)
Promedio(1,SEvolt_2(59),FP2,Falso)
Promedio(1,SEvolt_2(60),FP2,Falso)
Promedio(1,SEvolt_2(61),FP2,Falso)
Promedio(1,SEvolt_2(62),FP2,Falso)
Promedio(1,SEvolt_2(63),FP2,Falso)
Promedio(1,SEvolt_2(64),FP2,Falso)
Promedio(1,AirTC,FP2,Falso)
Muestra(1,RH,FP2)
Promedio(1,WS_ms,FP2,Falso)
Muestra(1,WindDir,FP2)
Mesa final
Tabla de datos (Tabla2, Verdadero, -1)
Intervalo de datos (0,1440, mín., 10)
Mínimo(1,BattV,FP2,Falso,Falso)
Mesa final
'Programa principal, aquí es donde se realizan todas las mediciones.
IniciarProg
'Configurar un análisis para que se realice cada 5 minutos
Escanear(5,min,1,0)
'Registrador de datos predeterminado Batería Medición de voltaje BattV
Batería (BattV)
'Medidas directas del piranómetro CMP22 SlrkJ y SlrW
VoltDiff(SlrW,1,mV25,1,Verdadero,0,_60Hz,1,0)
Si SlrW<0 entonces SlrW=0
SlrkJ=SlrW*33.25942
SlrW=SlrW*105.9322
'CMP11 Mediciones del piranómetro SlrkJ_2 y SlrW_2
'Este sensor ha sido reemplazado temporalmente por un 'piranómetro de prueba, con un factor de calibración diferente
VoltDiff(SlrW_2,1,mV25,2,Verdadero,0,_60Hz,1,0)
Si SlrW_2<0 Entonces SlrW_2=0
SlrkJ_2=SlrW_2*33.25942
'SlrW_2=SlrW_2*105.5966 *****Factor CMP 11****
SlrW_2=SlrW_2*142.857
'Medidas del piranómetro difuso CMP22 SlrkJ_3 y SlrW_3
VoltDiff(SlrW_3,1,mV25,3,Verdadero,0,_60Hz,1,0)
Si SlrW_3<0 Entonces SlrW_3=0
SlrkJ_3=SlrW_3*33.25942
SlrW_3=SlrW_3*110.8647
'Medidas del sensor de rango sónico SR50A (salida SDI-12)
'La altura del sensor se configuró en una medida arbitraria para el 'principio
Altura_sensor=2
Grabadora SDI12(SR50A(),7,"0","M1!",1,0)
TCDT=DT*SQR((AireTC+273.15)/273.15)
Profundidad_nieve=Altura_sensor-TCDT
'Medidas de termopar tipo T (cobre-constantan) 'Temp_C_2() en el multiplexor AM25T
AM25T(Temp_C_2(),25,mV2_5C,1,4,TipoT,RTempC_2,5,3,3,Verdadero,0,_60Hz,1,0)
'Medidas de termopar tipo T (cobre-constantan) 'Temp_C() en el multiplexor AM25T
AM25T(Temp_C(),25,mV2_5C,1,5,TipoT,RTempC,5,4,3,Verdadero,0,_60Hz,1,0)
'05103 Mediciones del sensor de dirección y velocidad del viento
'Mide la velocidad del viento
Conteo de pulsos(WS_ms,1,1,1,1,0.098,0)
'Mide la dirección del viento, esta medición utiliza el puerto 1 de excitación'
BrHalf(DirViento,1,mV2500,11,1,1,2500,Verdadero,0,_60Hz,355,0)
Si WindDir>=360 Entonces WindDir=0
'Encienda ambos multiplexores AM16/32
Conjunto de puertos(2,1)
Retraso (0,150, mseg)
'Inicializar contador de datos
Lcuenta=1
'Iniciar escaneo del primer multiplexor
Subexploración(0,useg,32)
'Cambiar al siguiente canal del multiplexor AM16/32
Puerto de pulso(1,10000)
Retraso (0,100,useg)
'Medidas genéricas de voltaje de extremo único SEVolt() en 'el multiplexor AM16/32: modifique este código para leer 'corriente como 0-2.5 y voltaje como 0-5V
VoltSe(SEvolt(LCount),2,mV5000,13,Verdadero,0,_60Hz,1,0)
LCuenta=LCuenta+2
SiguienteSubScan
'Escanear multiplexor AYA occidental
LCount=1
Subexploración(0,useg,32)
'Cambiar al siguiente canal del multiplexor AM16/32
Puerto de pulso(1,10000)
Retraso (0,100,useg)
'Los dos últimos canales diferenciales de este multiplexor 'también miden la temperatura y la humedad relativa, y estas declaraciones IF 'garantizan que se midan correctamente.
Si Lcount=61
'Medir la temperatura del aire
VoltDiff (AirTC,1,mV2500,8,Verdadero,0,_60Hz,0.1,-40)
De lo contrario, LCount = 63
'Medidas genéricas de tensión diferencial RH:
VoltDiff (RH,1,mV2500,8,Verdadero,0,_60Hz,0.1,0)
Demás
'Medidas genéricas de voltaje de extremo único SEVolt() en 'el multiplexor AM16/32: modifique este código para leer 'corriente como 0-2.5 y voltaje como 0-5V
VoltSe(SEvolt_2(LCount),2,mV5000,15,Verdadero,0,_60Hz,1,0)
Terminara si
LCuenta=LCuenta+2
SiguienteSubScan
'Apague el multiplexor AM16/32
Conjunto de puertos(2,0)
Retraso (0,150, mseg)
'Llamar tablas de datos y almacenar datos
LlamarTabla(Tabla1)
LlamarTabla(Tabla2)
Siguiente escaneo
FinProg