Projects From PSC


PSC Surescan
PSC Surescan barcode scanner

While at Photographic Sciences Corporation I worked on a variety of industrial scanners. The largest, the Surescan system pictured to the right, used up to 5 Intel  i960 32 bit high performance embedded processors.

Surescan Serial/Parallel Port Module
Surescan Serial/Parallel Port Module

Upgrading the software of the system was done through the serial port. I did this little project to make the download go faster. The main board of the scanner used two Zilog  Z85230 DUARTs. I could remove one of the DUARTs, and plug in this module in its place. This allowed me to have normal access to all the serial ports (the module uses a Z85230 ), and at the flick of the switch, a faster parallel port for downloading new software. The pictures at the bottom shows how it was assembled.



PSC Scan Tunnel
PSC Scan Tunnel

Though the PSC industrial scanners could be used on their own, they were more often used in what we called "tunnel systems". These were arrays of up to 16 scanners, arranged on every side of a conveyor system. The goal was to be able to scan any barcode on a package going along the conveyor - whether the label was on the top, bottom, front, back, or side of the package. Though final testing of a new software release had to be done on a fully set up system, for development purposes, it was easier to use a general purpose microcontroller board to simulate the other components in the system. See how I built a microcontroller board using the Atmel  AT89S8252 to do that - HERE.

After starting in the industrial scanner group at PSC, I learned that one of the most monotonous tasks in setting up these large scanner tunnels was the configuration of each individual scanner. The original configuration routines would be accessed via a terminal program and involved a series of about 16 menus, each taking up one screen. There was no facility for saving the configuration to a PC or downloading a configuration to the scanner. Every single configuration item had to be individually set.

The configuration routines actually used individual print statements for every single configuration item of every single menu. Not only that, but every configuration value entered was validated by a separate section of code. To make things even worse, there was a online help facility, where a user could press the F1 key, and get up to 6 lines of help information for the currently highlighted menu item. This was done by reprinting the entire menu, shifted up six lines, then adding the help text at the bottom. The routines that printed the menu in this manner were implemented separately. Again, a separate print statement for every single configuration item of every single menu.

Needless to say, a change to the software that involved adding a new item to the configuration was a lot of work. I looked into it, and thought that redefining the configuration menu system would allow me to create a variety of new functionality, and reduce the size of the executable program. I changed the configuration system to use a new data structure, an array of CFG_MENUs, each CFG_MENU included an array of CFG_ITEMs. Every CFG_ITEM was made up of a description (such as "Host port baud rate"), a pointer to the configuration value itself, a data type for that value, a minimum and maximum value, etc. I created a single routine to display every menu, and a single section of code to display every configuration item.

My changes meant that adding a new item to the configuration could be done without changing the configuration menu routines. It also paved the way for

When setting up many scan tunnels, with many scanners, that all shared a common configuration, this greatly reduced the work of field service technicians, and reduced the chances of input error.

I also found that the help text was setup as a multidimensional array of 80 character strings. I changed it to be a multidimensional array of pointers to variable length character strings. This, combined with all the configuration menu changes, reduced the executable program size by just over 20%. At one point, prior to my starting in the industrial scanner group, the software had grown so large that when a customer requested a new feature, they had to create a new special version of software. Instead of being able to maintain a single version of software, with many configurable options, they were working with multiple versions of software used by different customers. My work clearly showed that was all unnecessary.


Surescan Serial/Parallel Port
Surescan Serial/Parallel Port 1
Surescan Serial/Parallel Port
Surescan Serial/Parallel Port 2
Surescan Serial/Parallel Port
Surescan Serial/Parallel Port 3
Serial/Parallel port in use
Serial/Parallel port in use
Serial/Parallel port in use
Serial/Parallel port in use
Serial/Parallel port in use
Serial/Parallel port in use
PSC Scan Tunnel
PSC Scan Tunnel
PSC Scan Tunnel
PSC Scan Tunnel


Back to main projects page