4.Modbus y Registradores de Datos Campbell Scientific

4.1Descripción

Los conjuntos de sensores modelo 3810A se pueden leer fácilmente usando registradores de daros Campbell compatibles con comandos del protocolo RTU de ModBus. Los registradores de datos Campbell, sales como el CR6 y el CR1000X pueden leer RS-485 semiduplex en pares I/O digitales RS-485 seleccionados. Esto permite que el conjunto 3810A se conecte directamente al registrador de datos.

El Convertidor Bus Direccionable 8020-38 permite que los conjuntos de sensores modelo 3810A trabajen con registradores de datos Campbell que no son compati­bles con comunicaciones RS-485, tales como el CR800 y el CR1000. El modelo 8020-38 es un convertidor RS-485 a TTL que se utiliza con pares I/O digitales TTL seleccionados.

CRBasic es el lenguaje de programación que se usa con los registradores de datos CRBasic de Campbell Scientific. Normalmente, se utiliza software LoggerNet de Campbell Scientific cuando se programa en CRBasic.

4.2Muestra de Programa CR6

El siguiente programa de muestra lee un conjunto 3810A con cinco termistores direccionables. El conjunto en este ejemplo se comunica con el CR6 a través de los puertos de control C1 (verde) y C2 (blanco), los cuales están configurados como ComC1:

 

'Constants used in Steinhart-Hart equation to calculate sensor temperature for

'10k thermistor

Const A = 1.128706256E-3

 

Const B = 2.342327483E-4

 

Const C = 0.8707279757E-7

 

                                                                 

 

Public ErrorCode

'Result of ModBusMaster communications attempt

Public Res As Float

'Resistance of thermistor must be stored as Type Float

Public Celsius(5)

'Calculated Celsius for 5 sensors in string

Public Count

'Counter to increment through temperature sensors

'Define Data Tables

DataTable (Test, 1,-1)

 Sample (5,Celsius(),IEEE4)   'Sample Celsius for 5 sensors in string

EndTable

'Main Program

BeginProg

'Open COM port with RS-485 communications at 115200 baud rate

SerialOpen (ComC1,115200,16,0,50,3)

'Read all 5 sensors in string every 4 seconds

Scan (4,Sec,0,0)

  'Loop to read each thermistor

 For Count = 1 To 5

    'Reset temporary storage for next reading

   Res = 0

    'Flush Serial between readings

   SerialFlush (ComC1)

    'Write to register 0x118 to trigger thermistor string

    'NOTE: ModbusMaster won't send 0x118 unless "&H119" is entered

   ModbusMaster (ErrorCode,ComC1,115200,Count,6,1,&H119,1,1,50,0)

    'Delay after triggering the measurement

   Delay (1,1,Sec)

    'Use Modbus command to retrieve resistance from thermistor string

   ModbusMaster (ErrorCode,ComC1,115200,Count,3,Res,&H103,1,1,50,0)

      'Calculate thermistor temperature from ohms to Celsius using Steinhart-hart equation

   Celsius(Count) = 1/(A+B* LN(Res) + C * LN(Res)^3)-273.15

 Next

  'Call Table to store Data

 CallTable Test

NextScan

EndProg

4.3Muestra De Programa CR1000 con el Convertidor de Bus Direccionable Modelo 8020-38 Requerido

El siguiente programa de muestra lee un conjunto 3810A con cinco sensores termistores direccionables. El conjunto en este ejemplo está conectado a un convertidor RS-485 a TTL y se comunica con el CR1000 a través de los puertos de control C1 y C2, los cuales están configurados como COM1.

'Constants used in Steinhart-Hart equation to calculate sensor temperature for
'10k thermistor

Const A = 1.128706256E-3

 

Const B = 2.342327483E-4

 

Const C = 0.8707279757E-7

 

                                                                 

 

Public ErrorCode

'Result of ModBusMaster communications attempt

Public Resistance As Float

'Resistance of thermistor must be stored as Type Float

Public Celsius(5)

'Calculated Celsius for 5 sensors in string

Public Count

'Counter to increment through temperature sensors

'Define Data Tables

DataTable(Test,1,-1)

 

 

Sample (5,Celsius(),IEEE4)

'Sample Celsius for 5 sensors in string

EndTable

 

'Main Program

BeginProg

 

'Open COM port with TTL communications at 115200 baud rate

 

SerialOpen (Com1,115200,16,0,50)

 

 

'Read all 5 sensors in string every 4 seconds

 

 

Scan (4,Sec,0,0)

 

 

 

'Loop to read each thermistor

 

 

 

For Count = 1 To 5

 

 

 

'Reset temporary storage for next reading

 

 

 

Resistance = 0

 

 

 

'Flush Serial between readings

 

 

 

SerialFlush (Com1)

 

 

 

'Write to register 0x118 to trigger thermistor string

'NOTE: ModbusMaster won't send 0x118 unless "&H119" is entered

 

 

 

ModbusMaster (ErrorCode,Com1,115200,Count,6,1,&H119,1,1,50,0)

 

 

 

'Delay after triggering the measurement

 

 

 

Delay (1,1,Sec)

 

 

 

'Use Modbus command to retrieve resistance from thermistor string

 

 

 

ModbusMaster (ErrorCode,Com1,115200,Count,3,Resistance,&H103,1,1,50,0)

 

 

 

'Calculate thermistor temperature from ohms to Celsius using Steinhart-hart equation

 

 

 

Celsius(Count) = 1/(A+B* LN(Resistance) + C * LN(Resistance)^3)-273.15

 

 

 

Next

 

 

 

'Call Table to store data

 

 

 

CallTable Test

 

NextScan

EndProg