I worked on and off on contract at Xantrex Technology since September of 2002. Xantrex made a wide variety of power conversion products, especially for solar and wind power. It was therefore easy to feel good about working for Xantrex and the projects were interesting. The company was also close to home so I was able cycle to work.
All of my work at Xantrex was on the networking side, basically getting their inverters, chargers and generator starters to work cooperatively together and with a variety of user interfaces.
My first project at Xantrex was to help with the development of a CAN (Controller Area Network) based protocol called XanBus. This is a peer-to-peer protocol where all of the devices broadcast their status to all of the other devices. This allows the generator starter to know when to start or stop the generator based on what is happening on the inverter/charger without needing intervention by the user interface. Meanwhile, the user interface can display live info on any device using the flow of broadcast status messages.
The clever part that I worked on was putting all of the messages onto a database and then using Python scripts to generate C header and program files that would be used on the embedded devices to generate and interpret the XanBus messages.
The use of a database and scripts to generate code allowed us to make changes and additions to the messages with a minimum amount of maintenance and rework. After updating the message database, all we had to do was re-run the generation scripts and rebuild the firmware for the devices.
Universal Power Module
Starting in fall of 2004 and through the next year and a half I worked in the Programmable division working on a "Universal Power Module". It was designed according to the needs of a specific customer. It was able to produce AC or DC power with programmable frequency for the AC. It was also able to load share with other modules for higher power applications. This was a chance to work with the following technologies:
- Coldfire microcontrollers
- MQX real time operating system
- A variety of networking protocols in an embedded framework
- Embedded web interface
On this project I developed a boot loader and firmware bundling process that enabled us to upgrade both the Coldfire microcontroller and the TI DSP over TFTP. I also developed an application in Python for testing the network communications.
System Control Panel
After the UPM project wrapped up, I was hired on again to work on the System Control Panel (SCP) for Xantrex's new XW system. This platform was almost identical to the SCP for the Nova system. The challenge on the XW system was that there was a wider variety of devices with a potential of more than one of each device type. The menu options also exploded, breaking most of the assumptions made in the original SCP design. Fortunately the underlying Xanbus protocol was designed for this kind of variety and this was an opportunity to put my Xanbus and code auto-generation background to work.
My solution was to generalize the screen code as much as possible and define the menus and screens for each supported device in XML files. A Python script would then write specific code for each screen based on the XML file and the Xanbus database. This approach helped to reduce the pain of frequent and radical changes to the menus that were happening at the time.
In 2006 I was hired by the software test team to develop an automated test tool for Xanbus. It started with a Python wrapper for Xanbus called PyXanBus. Then a GUI was added to it. Compared to embedded development in C, developing a user interface to Xanbus in Python was easy and it quickly became more useful for monitoring and configuring XW systems than the SCP. That's when the real trouble started. Somehow the program snuck out the door and customers started using it. I was asked to spruce up the look and add more and more XW-centric features. I migrated the GUI from Tkinter to wxPython, added Xantrex branding and added a configuration wizard. The program grew organically with datalogging and firmware upgrade features added along the way. It was eventually given the name XWConfig. Needless to say the project took on a life of its own and dominated much of the rest of my project time at Xantrex.
Since making XWConfig I have gone on to make other testing, monitoring and configuration tools, including a calibration tool for XW, a tester for Modbus protocol and Conext View.
Xantrex was bought by Schneider Electric in 2008. The Programmable division was sold off, wind was discontinued but they kept the solar inverter and mobile technology. My relationship with Schneider was the same as it was with Xantrex, working on working on specific contracts with the odd gap in between. In January of 2012 I transitioned from contractor to employee. I'm working on firmware more than networking now but am working on leveraging my experience in automated testing and rapid prototyping to maximum effect.