4.Modbus y Registradores de Datos de Campbell Scientific
CRBasic es el lenguaje de programación que se usa con todos los registradores de datos CRBasic de Campbell Scientific. Normalmente, se utiliza software LoggerNet de Campbell Scientific cuando se programa en CRBasic.
El registrador CR6 de Campbell Scientific puede comunicarse directamente con la interfaz modelo 8960-01C, utilizando el protocolo RS-485. Sin embargo, los registradores CR1000 y CR800 no soportan el protocolo RS-485. Para adaptarse a esto, geokon dispone del convertidor RS-485 a TTL/USB modelo 8020-38.
4.2 Convertidor TTL Y/O USB A RS-485 Modelo 8020-38
geokon fabrica el Convertidor Bus Direccionable Modelo 8020-38 para conectar conjuntos de sensores direccionables a computadoras personales, dispositivos de lectura, registradores de datos y controladores lógicos programables. El convertidor actúa como puente usando los protocolos TTL o USB entre los lectores y los conjuntos de sensores habilitados para RS-485 de geokon.
Para obtener más información, consulte el Manual de instrucciones del modelo 8020-38.
Figura 11: Convertidor TTL/USB a RS-485 Modelo 8020-38
Nota: El registrador que utilice debe contar con el conector apropiado.
■Si su registrador de datos no cuenta conversión RS-485 incorporada, conecte el cableado usando el diagrama en Figura 12.
Figura 12: Cableado de dispositivo de lectura sin conversión RS-485
■Si su registrador de datos cuenta conversión RS-485 incorporada, conecte conecte el cableado usando el diagrama en Figura 13.
Figura 13: Cableado de registrador de datos con conversión RS-485 incorporada
El siguiente programa utiliza la interfaz Modelo 8960-01C para conectarse directamente a cualquier sensor sencillo de cuerda vibrante geokon. La interfaz 8960-01C utiliza los comandos MODBUS RTU y muestra una lectura de frecuencia (Hz) para la cuerda vibrante. Muestra una lectura de resistencia (ohmios) para el termistor.
Nota: Los números de la tabla de registro 8960-01C MODBUS RTU comienzan con 0. Los registradores de datos de Campbell Scientific reconocen los números de la tabla de registro MODBUS RTU que comienzan por 1. Todos los números de registro CRBasic son +1. Ejemplo: ModbusMaster no enviará 0x118 a menos que se ingrese "&H119" en la línea de comando.
'Define address of the 8960-01C
Const Address = 1 'Address of Interface, used in variable declaration
'Constants used in Steinhart-Hart equation to calculate sensor temperature
'for 3k thermistor
Const A = 1.4051E-3
Const B = 2.369E-4
Const C = 1.019E-7
Public ErrorCode 'Error Code sent back from ModBus command
Public Hz(Address) 'Frequency (Hz) from incoming data
Public Digits(Address) 'Calculated Digits
Public Res(Address) 'Resistance (Ohms) from incoming data
Public Celsius(Address) 'Calculated temperature (Celsius)
'Define Data Tables
DataTable (Test, 1,-1)
Sample (Address,Digits(),IEEE4)
Sample (Address,Celsius(),IEEE4)
EndTable
'Main Program
BeginProg
'Open COMport with RS-485 communications at 115200 baud rate
SerialOpen (ComC1,115200,16,0,50,3) 'CR6 program
SerialOpen (Com1,115200,16,0,50) 'CR1000 program
'Read the interface/sensor every 30 seconds
Scan (30,Sec,0,0)
'Reset temporary storage for both Resistance and Hz so not to retain
'previous reading
Res(Address) = 0
Hz(Address) = 0
'Flush Serial between readings
SerialFlush (ComC1)
'Write to register 0x118 to trigger interface
'NOTE: ModbusMaster won't send 0x118 unless "&H119" is entered
ModbusMaster (ErrorCode,ComC1,115200,Address,6,1,&H119,1,1,10,0)
'Delay after triggering the measurement
Delay (1,1,Sec)
'Use Modbus command to retrieve Hertz from string
ModbusMaster (ErrorCode,ComC1,115200,Count,3,Hz(Address),&H101,1,1,10,0)
'Calculate Digits from Hertz
Digits(Address) = (Hz(Address)^2)/1000
'Use Modbus command to retrieve thermistor resistance
ModbusMaster (ErrorCode,ComC1,115200,Address,3,Res(Address),&H103,1,1,10,0)
'Calculate thermistor temperature from Ohms to Celsius using Steinhart-Hart
'equation
Celsius(Address) = 1/(A+B*LN(Res(Address))+C*LN(Res(Address))^3)-273.15
Next
'Call table to store data
CallTable Test
NextScan
EndProg