I moved my AX-150 to a location that would not allow me to install the UPS as it has redundant power/UPS and you should not connect a UPS to the output of another UPS.
Without the UPS the AX-150 forces the Write Cache to be Disabled. Performance drops, form what I have tested, to around
25x slower. This is due to not just turning off the controllers write cache, but as with ALL RAID controllers, the onboard drive 8/16M write cache is disabled as well so the drives are even slower then they would be if they where not used on a RAID controller.
The write cache disable is your real killer! Actually the write cache is disabled one a week while the REQUIRED battery test is performed.
My solution was to write an APC SmartUPS Serial Emulator that talks to the AX-150 telling it that the UPS is working fine so the write cache never gets turned off, including during the weekly battery test!
Here is the needed RJ45 to DB9F. Colors are base on someone cutting off the end of a cat5 patch cable.
You can find the APC SmartUPS commands off the web.
Communications capture:
Normal Comms from/to AX-150
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
!!! Weekly Batt Test Time !!!!!
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
W >> !! Tests battery, like pushing the test button on the front panel
OK<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
X >> !! Self-test results
OK<0D><0A>
l >> !! Low transfer voltage
097<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
n >> !! Get Serial number
AS0632112344<00><0D><0A>
R >>
BYE<0D><0A>
!!! End of Test !!!
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
Y >>
SM<0D><0A>
Q >>
08<0D><0A>
f >>
100.0<0D><0A>
R >>
BYE<0D><0A>
I would be happy to share the Delphi source and EXE with anyone that would like to use it. Do not see a place to attach files here.
Can give you snapshot of main command-response logic:
if Result = pmerGood then
begin
tRx := Engine.RxString;
if cbHex.Checked then
Msg(Engine.SeeBytes(tRx)+ ' >> ' + #$0D + #$0A)
else
Msg(Engine.SeeChars(tRx)+ ' >> ' + #$0D + #$0A);
PendingCmd := '';
Engine.CharDelay := 0;
CmdData := 'NA' + #$0D + #$0A;
if length(tRx) > 0 then
case ord(tRx[1]) of
$01 : CmdData := 'Smart-UPS 750 RM' + #$0D + #$0A;
$1A : CmdData := '#uD43127130133136uA43108110112114uI43253257261265uM432252292' + '33237lD43106103100097lA43092090088086lI43208204200196lM43182178174170e47200153045607590oD13120oA13100oI33230240220oM13208s431HMLq4820205081114172023p483090180270360450540630000k4310TNr483000060120180240300360420E443336168ON OFF' + #$0D + #$0A;
ord('A') : CmdData := 'OK' + #$0D + #$0A;
ord('B') : CmdData := '27.40' + #$0D + #$0A;
ord('C') : CmdData := '016.2' + #$0D + #$0A;
ord('D') : begin CmdData := '!!!$'; Engine.CharDelay := 600; end;
ord('E') : CmdData := '336' + #$0D + #$0A;
ord('F') : CmdData := '60.00' + #$0D + #$0A;
ord('G') : CmdData := 'S' + #$0D + #$0A;
ord('I') : CmdData := 'FF' + #$0D + #$0A;
ord('J') : CmdData := '0F,00' + #$0D + #$0A;
ord('K') : CmdData := 'OK' + #$0D + #$0A;
ord('L') : CmdData := '126.7' + #$0D + #$0A;
ord('M') : CmdData := '128.1' + #$0D + #$0A;
ord('N') : CmdData := '125.2' + #$0D + #$0A;
ord('O') : CmdData := '113.0' + #$0D + #$0A;
ord('P') : CmdData := '000.0' + #$0D + #$0A;
ord('Q') : CmdData := '08' + #$0D + #$0A;
ord('R') : CmdData := 'BYE' + #$0D + #$0A;
ord('S') : CmdData := 'OK' + #$0D + #$0A;
ord('U') : begin CmdData := '!!!$'; Engine.CharDelay := 600; end;
ord('V') : CmdData := 'FWD' + #$0D + #$0A;
ord('W') : CmdData := 'OK' + #$0D + #$0A;
ord('X') : CmdData := 'OK' + #$0D + #$0A;
ord('Y') : CmdData := 'SM' + #$0D + #$0A;
ord('a') : CmdData := '3.!$%+?=#|.' + #$01 + #$0E + #$1A + ''')+-89>@ABCDEFGKLMNOPQRSUVWXYZabcefgjklmnopqrsuxyz~' + #$0D + #$0A;
ord('b') : CmdData := '615.3.D' + #$0D + #$0A;
ord('c') : CmdData := 'UPS_IDEN' + #$0D + #$0A;
ord('e') : CmdData := '00' + #$0D + #$0A;
ord('g') : CmdData := '024' + #$0D + #$0A;
ord('f') : CmdData := '100.0' + #$0D + #$0A;
ord('i') : CmdData := 'FWD' + #$0D + #$0A;
ord('j') : CmdData := '0375:' + #$0D + #$0A;
ord('k') : CmdData := '0' + #$0D + #$0A;
ord('l') : CmdData := '097' + #$0D + #$0A;
ord('m') : CmdData := '08/03/06' + #$0D + #$0A;
ord('n') : CmdData := 'AS0632112344' + #$00 + #$0D + #$0A;
ord('o') : CmdData := '120' + #$0D + #$0A;
ord('p') : CmdData := '090' + #$0D + #$0A;
ord('q') : CmdData := '02' + #$0D + #$0A;
ord('r') : CmdData := '000' + #$0D + #$0A;
ord('s') : CmdData := 'H' + #$0D + #$0A;
ord('u') : CmdData := '127' + #$0D + #$0A;
ord('x') : CmdData := '01/01/10' + #$0D + #$0A;
ord('y') : CmdData := '(C) APCC' + #$0D + #$0A;
ord('z') : CmdData := 'CLEAR' + #$0D + #$0A;
ord('9') : CmdData := 'FF' + #$0D + #$0A;
end;
if CmdData <> '' then
begin
if cbHex.Checked then
Msg(Engine.SeeBytes(CmdData)+ #$0D + #$0A)
else
Msg(Engine.SeeChars(CmdData)+ #$0D + #$0A);
Engine.SendMsg := CmdData;
end;
Bob A. Hay
×