Пример #1
0
            /// <summary>
            /// Retrieves the Hardware Version from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The hardware version as reported by the charge controller</returns>
            public static string GetHardwareVersion(ModbusMessenger messenger)
            {
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xf00a, 0x0001);

                messenger.TransportEndoing = te;
                return(registers.DataPoints[0] + "." + registers.DataPoints[1]);
            }
Пример #2
0
            /// <summary>
            /// Retrieves the Serial Number from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The serial number of the charge controller</returns>
            public static string GetSerialNumber(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xf000, 0x0004);//was 0x0008

                messenger.TransportEndoing = te;
                return(System.Text.Encoding.ASCII.GetString(registers.DataPoints.ToArray()));//needed substring 0, 8
            }
Пример #3
0
            /// <summary>
            /// Retrieves the amount of days since the last battery service from a Morning Star Change Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The amount of days since the last day the batteries were serviced as reported by the charge controller</returns>
            public static int GetDaysSinceLastBatteryService(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xe023, 0x0001);
                short         v         = BitConverter.ToInt16(registers.DataPoints.ToArray(), 0);

                messenger.TransportEndoing = te;
                return(v);
            }
Пример #4
0
            /// <summary>
            /// Retrieves the Faults from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The Fault Readings reported by the charge controller</returns>
            public static FaultReading GetFaults(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                ModbusMessage registers = messenger.ReadHoldingRegisters(0x001a, 0x0001);
                //get registers.DataPoints into a short v
                short v = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(registers.DataPoints.ToArray(), 0));

                messenger.TransportEndoing = te;
                return(new FaultReading(v));
            }
Пример #5
0
            /// <summary>
            /// Retirves the maximium battery voltage from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The maximum battery voltage as reported by the charge controller</returns>
            public static double GetMaximumBatteryVoltage(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                //obtain minBatteryVoltage - scale via stdScalar3
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xe02c, 0x0001);
                //get registers.DataPoints into a short v
                short v = BitConverter.ToInt16(registers.DataPoints.ToArray(), 0);

                //return v * stdScalar3
                messenger.TransportEndoing = te;
                return((double)v * stdScalar3);
            }
Пример #6
0
            /// <summary>
            /// Retrieves the Load Current from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The Load Current reported by the charge controller</returns>
            public static double GetLoadCurrent(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                //obtain loadCurrent - scale via stdScalar4
                ModbusMessage registers = messenger.ReadHoldingRegisters(0x000c, 0x001);
                //get registers.DataPoints into a short v
                short v = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(registers.DataPoints.ToArray(), 0));

                //return v * stdScalar4
                messenger.TransportEndoing = te;
                return((double)v * stdScalar4);
            }
Пример #7
0
            /// <summary>
            /// Retrieves the Killowatt Hours Counter From a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The Killowatt Hours Counter reported by the Charge Controller</returns>
            public static int GetKilowattHours(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                //obtain totalAmpHours - scale via stdScalar6
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xe02a, 0x0001);
                //get registers.DataPoints into a short v
                short v = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(registers.DataPoints.ToArray(), 0));

                //return v * stdScalar6
                messenger.TransportEndoing = te;
                return(v);
            }
Пример #8
0
            /// <summary>
            /// Retrieves the Control State from a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The ControlState the Charge controller is operating under</returns>
            public static ControlState GetControlState(ModbusMessenger messenger, ControlMode controlMode)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                ModbusMessage registers = messenger.ReadHoldingRegisters(0x001a, 0x0001);
                //get registers.DataPoints into a short v
                short v = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(registers.DataPoints.ToArray(), 0));

                messenger.TransportEndoing = te;
                if (controlMode == ControlMode.Charge || controlMode == ControlMode.Diversion)
                {
                    return((ControlState)v);
                }
                else
                {
                    return((ControlState)(8 + v));
                }
            }
Пример #9
0
            /// <summary>
            /// Retrieves the Resetable Amp Hours Counter From a Morning Star Charge Controller
            /// </summary>
            /// <param name="messenger">The ModbusMessenger to perform the transaction on</param>
            /// <returns>The Resetable Amp Hours Counter reported by the Charge Controller</returns>
            public static double GetResetableAmpHours(ModbusMessenger messenger)
            {
                //remember the old transport encoding
                ModbusMessenger.TransportEncoding te = messenger.TransportEndoing;
                //set the new transport encoding
                messenger.TransportEndoing = ModbusMessenger.TransportEncoding.Binary;
                //obtain totalAmpHours - scale via stdScalar6
                ModbusMessage registers = messenger.ReadHoldingRegisters(0xe026, 0x0002);

                //get registers.DataPoints into a short v
                byte[] data = registers.DataPoints.ToArray();
                short  v    = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 0));

                if (data.Length > 2)
                {
                    v += System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(data, 2));
                }
                //return v * stdScalar6
                messenger.TransportEndoing = te;
                return((double)v * stdScalar6);
            }