Specialisation
Benefits
Previous software projects
We have been building instrumentation and writing software for PCs since 1987.
Example 1 - Novel distributed array of intelligent sensors reporting to a PC
We were the lead partner in a collaborative European research project that ended in 2006. As well as transferring technology to a leading manufacturer of NDT equipment for them to develop a novel inspection system, we developed software to run on a PC that communicated using CAN-bus to a distributed array of intelligent sensors. Each sensor had a DSP inside and we wrote the DSP software and also the VHDL software for two programmable logic devices. Our system was used successfully by partners in Sweden, Northern Ireland and Spain in a range of evaluation tests (see Cambridge Monitoring System).
Example 2 - Component management database
For our own internal quality control of building prototypes and as part of the deliverable item to clients we developed an Access database to handle components. We hold components in carousels with many drawers: each for one component. When populating prototype boards by hand or for debugging purposes it is a substantial problem to manage a wide range of components. The Access database makes this task much simpler and quicker. There are tables for: manufacturers and their contact details, suppliers with addresses, components, assemblies, products. The database is used through several forms; as well as forms to enter and edit details of manufacturers, suppliers and components there are also forms to allow components to be added to an assembly and assemblies to be added to products. The stock level of each component can be editted and monitored and so can its location in a carousel. When building a prototype there is an option to check stock levels and automatically generate orders for suppliers to meet requirements for a certain number of prototypes. Since component prices for low and high volumes are stored, the database can also calculate the unit cost of a product or assembly.
Example 3
- Novel Lock-in amplifier in C++ with a DSP
An example of how we manage our projects we were the lead partner in another, earlier collaborative European research project, our technical tasks were to develop a new lock-in amplifier circuit on a PC plug-in board and to write controlling Windows software. Both tasks were completed on time and within budget and as a result the projet achieved a high degree of success. The software had two tasks: to control the lock-in amplifier for collection of ultrasonic resonance spectra and to perform signal processing of the spectra. An interface to an embedded artificial neural network was also included.
Example 4 - rapid Visual Basic program for production line
An example of rapid development is a program to test industrial components on a manufacturing line. Again the program had to control plug-in boards in the host PC, process the signals collected and control the test operation. In this case the customer first approached us and requested only 2 weeks to complete the project! It was a tall order we didn't feel we could agree to 2 weeks but the client asked us to give it our best shot. It took 4 weeks from the day we started to when the customer took over the Visual Basic software, this included one week at the client's premises debugging the hardware and software and another week sorting out a Windows driver problem with the third party plug-in boards. The original programming task was completed in two weeks although with the additional work meant the project took 4 weeks. However, the client shipped the product to its client in good time.
Example 5
- Concrete inspection system
An example of a prestigious project was one promoted and sponsored by the German Institute of Standards and the German Concrete Association. We were asked to design and build a novel inspection system based on a PC to probe concrete to a depth of 1 m with a resolution of about 3 cm. We designed and built the hardware, including making custom plug-in boards and selecting third-party boards. We wrote all the drivers for the boards and the client elected to write the main program. The design was based upon several years of experience we have in this area, we are known internationally for our expertise in this field. Th eproject was completed successfully. Our client has been using the new inspection system to set new performance levels for the inspection of concrete: detection of reinforcement bars (20 mm diameter) out to 0.5 mm, back-wall echoes to 1.8 m, detecting tendons to 1 m, detcting deterioration in concrete. At an exhibition in Berlin the system was used competitively against a well-known commercial impact-echo system for testing concrete: the task was to detect a circular hole in a concrete block at about 0.5 m depth. Our system detected easily but the commercial system failed entirely.
Example 6 - OLE communications and unusual windows
An example of our experience on Windows and MFC applications in C++ (see Newsletter 7). The idea was to collect sets of data from the existing progam and display them in several child windows in the new application. We wrote a specification for the client and jointly wrote the specification for the communications protocol to run under OLE communications (part of 32-bit Windows), sometimes called COM. The program was written in Visual C++ 5. The internal management of the MDI child windows was far from straightforward and we had to devise some imaginative methods for saving an arbitrary arrangement of child windows and the data ordering to file. C++ is an object-oriented programming language and as well as using the standard MFC classes we created several new classes, primarily for data encapsulation so that we could use the MFC array-making templates but the encapsulation also allowed us to include the serialisation functionality needed for filing activities with MFC. This approach allows the progam to handle an arbitrary number of child windows and sets of data. In this case we ran into unexpected delays, there were delays waiting for the client's existing program to be modified and the client asked for several enhancements to the program during development so it took us longer to complete the work than we expected. The result is an interesting program collecting data that gets sent to a second program, which displays several sets of data in child windows over which the user has complete control.
Example 7
- multi-threaded C++ from Matlab prototype with data acquisition
An example of using Matlab to assist in rapid code development was to develop a data collection and signal processing system for a UK government agency. As well as designing and building a novel ultrasonic transducer array, with low-noise amplifiers, analogue signal processing we also supplied a PC with a data acquisition board made by a third party. We developed signal processing using Matlab and tested it first with synthesised data. Matlab is excellent for rapid prototyping of signal processing. We then added a Matlab driver supplied by the manufacturer to get data from the acquisition card into the Matlab program and to test the system using real data. We created a second "thread" in the program, a worker-thread, dedicated to collecting the data and processing it. The advantage of the second thread is that it leaves the main program thread to respond to mouse clicks and user-interface activity. With the Matlab program to guide us the development of the C++ program was very rapid. Much of the signal processing we were able to write by hand-coding but we used the Matlab C/C++ compiler to convert some Matlab funtions into C++ for inserting into our C++ code.