Hola,
estoy comunicando un inversor solar con un datalogger CR1000X usando el protocolo Modbus y su interfaz RS485 (C7 / C8).
La interfaz del inversor solar es RS485, 19200 baud, no paridad, 8 bits, un bit de parada.
el codigo que uso es el siguiente:
Public PTemp, BATT
Dim Modbus_temp As Long
Public Modbus_value(7)
Dim Modbus_address(7) = {15201,15205,15207,15213,25205,25206,25209}
Dim Modbus_slope(7) = {1,0.1,0.1,1,0.1,0.1,0.1}
Public Modbus_result(7)
Alias Modbus_value(1) = Charger_workstate '15201
Alias Modbus_value(2) = Panel_volt '15205
Alias Modbus_value(3) = Charger_current '15207
Alias Modbus_value(4) = Charger_error '15213
Alias Modbus_value(5) = Battery_volt '25205
Alias Modbus_value(6) = Inverter_volt '25206
Alias Modbus_value(7) = Discharge_current '25209
Dim j
DataTable (Soporte_05_min,1,-1)
DataInterval (0,5,Min,10)
Minimum (1,BATT,FP2,False,False)
Sample (1,PTemp,FP2)
Sample (1,Charger_workstate,FP2)
Sample (1,Panel_volt,FP2)
Sample (1,Charger_current,FP2)
Sample (1,Charger_error,FP2)
Sample (1,Battery_volt,FP2)
Sample (1,Inverter_volt,FP2)
Sample (1,Discharge_current,FP2)
EndTable
SequentialMode
BeginProg
SerialOpen (ComC7,19200,0,100,100,4)
Scan (5,Sec,0,0)
SerialFlush(ComC7)
For j=1 To 7
ModbusMaster (Modbus_result(j),ComC7,19200,4,3,Modbus_temp,Modbus_address(j)+1,1,1,100,1)
If Modbus_result(j) = 0 Then
Modbus_value(j) = Modbus_temp * Modbus_slope(j)
Else
Modbus_value(j) = NAN
EndIf
Next j
CallTable Soporte_05_min
NextScan
EndProg
No se si estoy cometiendo un error en la programacion pero no consigo obtener lecturas. Use un programa similar con un CR1000 y un adaptador RS232-RS485 y el puerto RS232 del datalogger con exito (los puertos Com1 al Com4 solo me leian la mitad de los registros).
A la espera de sus comentarios, saludos.