Appendix B Generator Controller Information (Registers, Protocol, etc.) - jgyates/genmon GitHub Wiki

General Information

Some of the information displayed by genmon.py and genserv.py can be read from the Generac Generator Evolution or Nexus Control Panel. Additional information can be obtained from the Dealer Menu. WARNING: Changing settings without knowing the effect on your generator can be dangerous to the health of your equipment, proceed with caution.

To access Dealer Menu on the controller, from the top menu selection (SYSTEM, DATE/TIME, BATTERY, SUB-MENUS) enter UP UP ESC DOWN UP ESC UP, then navigate to the dealer menu and press enter. For liquid cooled models a level 2 dealer code can be entered, ESC UP UP DOWN DOWN ESC ESC, then navigate to the dealer menu and press enter.

Modbus Protocol

The genmon.py program uses the modbus protocol to communicate with the Generac Evolution or Nexus Controller over and RS-232 serial link. The protocol is simple, the application only uses two modbus commands (Read Registers and Write Registers). All of the protocol processing is performed in genmon.py except the CRC calculations. The CRC calculations are performed with the help of the external python module crcmod.

Modbus Registers

All of the registers are documented in the code. Will try to put here at some point... See the following elements in the code in genmon.py (in the GeneratorDevice class):

  • BaseRegisters - List of the register numbers and their length. BaseRegisters contain general information about the generator. Some of these are read / write registers. Most are read only.
  • PrimeRegisters - List of register numbers and their lengths. PrimeRegisters are monitored more frequently since these registers contain the base state of the generator, alarm state, switch state, transfer switch state, etc. These are read only registers.
  • WriteRegisters - List of register numbers and their lengths. WriteRegisters are write only. These registers are used to set the generator exercise time and day.
  • Log Registers - The Evolution Controller supports three logs (Alarm Log, Maintenance Log and Start / Stop Log). Each log is holds 50 entries. Nexus Controllers support two logs (Alarm and Start Stop). The logs are implemented via modbus registers. If and event is detected (by polling PrimeRegisters) then the event logs are read into the cached registers in genmon.py.

Useful links

Modbus Spec - Contains the Modbus specification. This is useful if you are not familiar with Modbus.

Online Modbus Parser - This site was useful when debugging the CRC calculation.

Air Cooled Diagnostic Repair Manual - Contains a lot of great info regarding the generator.

Liquid Cooled Diagnostic Repair Manual - - Contains a lot of great info regarding the generator. This doc is a little dated as it supports the Nexus controller instead of the Evolution controller, however a fair amount of the info is still relevant.