4.Modbus y Registradores de Datos Campbell Scientific
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 compatibles 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.
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 |