I'm working with numerous CH200 charge controllers and have encountered a comment in the SDI-12 programming example that says "Battery test command will be sent every 30 second. Must send it at least every 90 seconds or the PS/CH200 will automatically reset". I can't find anywhere in the manual what is reset automatically. I ask because I wonder why I can't execute my CH200 code at a scan rate slower than 90 seconds.
My SDI-12 code is doing the following:
Main program scan rate = 5 minutes
SlowSequence(60,sec,3,0)
Test battery 1st day of every month @ 1001 hours
Get CH200 Values
Get CH200 extended status values
Measure and record system current usage
Set battery capacity to user specified value
The battery test command will set to target charge voltage to 11.5 Volts for 90 seconds. If you send the test command again before then, the 90 second timer resets.
The battery test command is used for cases when a station is always connected to an AC power source and you want to do a drawdown test on the battery.
Take a look at section 6.2.3.4 (p 38) in the manual. This section notes that the battery test command sets the charging voltage low, which forces the CH200 to stop charging the battery. This only lasts for 90 seconds, after which the charging voltage goes back to its normal level. Testing a battery takes longer than 90 seconds, though, so you need to keep reissuing the command at a rate faster than 90 seconds in order to keep the charging voltage low during your test.
You can see in the example programs that the test goes on for a set length of time or until the voltage drops below 11.7 V. This test is to see how the battery performs over a number of hours while it is not being charged, which tells you if your battery is still doing well or not.
Looks like I should have refreshed the page before posting!
Thanks JDavis and Skipper,
That was very helpful information. I wonder what best practice you would recommend for conducting a drawdown test of a deep cycle battery that is charged by solar panel? It strikes me that I get a drawdown test each night when the system isn't being charged by the solar panel. Is a battery test even needed in my situation given this?
You are correct. You will be testing your battery every night. For solar-powered systems, I don't see a need for such a battery test. As long as you pay attention to your minimum daily battery voltage, you will have a good idea of the health of your battery.
Thanks Skipper,
So, if I'm not running a Discharge test can I execute the Amp_hr and Amp_day code every 5-minutes as part of my main program or does this code still need to be run on a SlowSequence < 90-seconds in order to calculate correct values?
I don't know what is included in your Amp_hr or Amp_day code, but if you are using the MC! command, then your scan rate must be 2 seconds or longer.
We recommend issuing SDI-12 requests in slow sequences. If the sensor or device for whatever reason takes longer than the time you have allocated in the scan, it will hold up the rest of your measurements and result in skipped scans and possibly skipped records. Moving it to a slow sequence moves it to a lower priority than your main scan, so your main measurements would not be affected in that case.
I included the Amp_hr, Amp_day, and Bat_Hour code below in case that helps. I'm using SDI-12 requests and wonder if my slow sequence scan rate can be 5-minutes, just like my main program scan rate? This would adhere to your recommendation of putting the battery code in a SlowSequence while also reducing the frequency the battery code is run.
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ START PS200 Battery Section /////////////////////////////////'
'Faster Scan rate to ensure that SDI-12 commands are sent at
'least every 90 seconds or the PS/CH200 will automatically reset!
SlowSequence
Scan (60,Sec,3,0)
'######## PS200 BATTERY CHARGER - GET PS200/CH200 VALUES ########
SDI12Recorder (CH200_M0(),3,0,"MC!",1.0,0)
'Array values start with one. Values for charge state start with -1.
'Have to shift the value by two to line it up with the correct words
'in the array.
ChargeState = ChargeStateArr(Chg_State + 2)
'Values for charge source start with zero. Have to shift the value
'by one to line it up with the correct words in the array.
ChargeSource = ChargeSourceArr(Chg_Source + 1)
'Values for check battery start with zero. Have to shift the value
'by one to line it up with the correct words in the array.
CheckBattery = CheckBatteryArr(Ck_Batt + 1)
'######## PS200 BATTERY CHARGER - GET EXTENDED STATUS VALUES ########
SDI12Recorder (CH200_MX(),3,0,"M6!",1.0,0)
'######## MEASURE AND RECORD CURRENT USAGE BY STATION IN AMP-HOURS ########
'Add up the current being consumed by the system. Include battery current in
'the calculation ONLY when it's positive - going into the battery.
'Current values coming from the PS/CH200 are in amps. Have to convert that to
'amp-hours based on the slow scan rate.
Sys_Amp_hr = Sys_Amp_hr + ILoad
If IBatt > 0 Then
Sys_Amp_hr = Sys_Amp_hr + IBatt
Batt_Amp_hr = IBatt
EndIf
Load_Amp_hr = ILoad
For n = 1 To 3
Amp_Hour(n) = Amp_Hour(n) * SlowScan/3600
Next n
'Must call these tables from the slow scan or the values will be wrong!
CallTable Amp_Hr
CallTable Amp_Day
'######## CLEAR QLOSS VALUE IF NOT ZERO ########
'If Clear_QLoss is set to true then set QLoss in the CH200 to zero.
If Clear_QLoss = On Then
Clear_QLoss = Off
SDI12Recorder (SDI12Result,3,0,"XRQ!",1.0,0)
EndIf
'######## SET BATTERY CAPACITY TO USER SPECIFIED VALUE ########
'If the present battery capacity isn't the same as the new battery capacity then send the new one to the charger.
If BattCap <> NewBattCap Then
SDI12command = "XC" & FormatFloat (NewBattCap,"%4.1f") & "!"
SDI12Recorder (SDI12Result,3,0,SDI12command,1.0,0)
EndIf
NextScan
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ END PS200 Battery Section /////////////////////////////////'
You can certainly run the slow sequence slower than 90 seconds. You can run it at any rate that you wish, as long as you leave enough response time (2 seconds) for each of the SDI-12 commands. 5 minutes is certainly adequate.
Thanks Skipper for your expert input. I figured I could run the Amp_hr, Amp_day, and Bat_Hour code at a much slower interval than 90-seconds, but it was great to hear you confirm it. Also, I always wondered what the ideal response time was for a given SDI-12 command so thanks for sharing that tidbit as well.
The ideal response time for SDI-12 commands depends on the sensor/device. The CH200/PS200 has a 2 second response time (Section 6.2.2 "...this M! command should only be used in a slow sequence with a scan rate of 2 seconds or longer"). The CS215, for example, has a 0.7 s response time. Ideally, the response time is listed in the specifications of the sensor or device, but sometimes it is hidden within the text of the manual.
Best wishes!