I'm the Lab Manager for a small company in the RF industry and I've recently been asked by our engineer to find a more "up-to-date" programming option for automating my bench testing/calibration procedures (sub-assembly testing and top level calibration). I DID NOT write any of the current code that we have for testing and the person/people that did write it have not worked here for about two years. We currently use Visual Basic express 2008 and Visual Studio 6.0. I understand that these are extremely old and I am to the point where I can not even use my new computer because the old style software is not compatible with Windows 7. I've tried upgrading to the newest version of Visual Studio and my old code is not even compatible with the newer versions. I have little knowledge of programming but am very familiar with the equipment that I am using (I can basically troubleshoot and modify what I currently have). I'm looking for a good language to learn that will work best with using my equipment (DMM's, Power supplies, power meters, spectrum analyzer, etc..) If you need more information to help me out I will try my best to answer any questions that you might have. I'm extremely open to anything and am willing to take online training or whatever is necessary.

Thanks in advance for any input.


closed as primarily opinion-based by Ricardo, Leon Heller, Ignacio Vazquez-Abrams, nidhin, helloworld922 Mar 11 '15 at 19:15

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

  • \$\begingroup\$ Do you at least have C libraries to communicate with the devices? \$\endgroup\$ – Ignacio Vazquez-Abrams Mar 11 '15 at 16:40
  • 2
    \$\begingroup\$ This is all going to depend on what kind of options each individual piece of hardware offers. \$\endgroup\$ – whatsisname Mar 11 '15 at 16:52
  • \$\begingroup\$ I'd recommend C#, it's what we use at my company, and it seems to work really well. Just my opinion, as any answer here might be. \$\endgroup\$ – Samuel Mar 11 '15 at 16:58

When I was asked to set this sort of environment up for the company I last worked for, I ending up choosing Python. I was in the same sort of situation; the previous person who had done this several years previous had used VB 6.0, and I didn't want to have to run it out of a virtual XP box.

Although I had not used Python before, I chose to use it because it was scriptable. You don't have to go through edit/compile/link & package steps. All you have to do is edit the source file (its plain text) and restart the program.

Python is completely free, but if you want to edit and run your Python program in an IDE (Integrated Development Environment, like Visual Studio), then there are several available; I use PyCharm.

A Python program looks more like VB than C -- for example, there are no squiggly braces { }. Nesting is done by indentation, which seems a little strange at first, but then becomes second nature.

It runs on just about anything; PCs running Windows or Linux, or single board computers like the Raspberry Pi. Python is a mainstream language, just below C# and PHP in popularity, and rising. It's used extensively by major companies like Google and Disney.

Obviously, none of this measn anything unless you can communicate with your devices. You didn't meniton what kind of interfaces they have, whether sereial, or USB, whatever. There's libraries for just about everything: PyUSB for USB access; pySerial for RS232, etc. etc. I use it in conjunction with a little board called the Bus Pirate, which lets me control I²C and SPI busses. Yep, there's libraries for those too.

Note: As you look around, you'll find there are two main versions of Python around, Python 2 and Python 3. "Python 2.x is legacy, Python 3.x is the present and future of the language". Unfortunately though, Python 3 is not backwards compatible with Python 2. Its better to go with Python 3, but make sure all of the libraries you need support it (some still don't, but that's becoming less and less of a problem). As of this writing, the two actual versions are Python 2.7.9 and Python 3.4.3.

  • 1
    \$\begingroup\$ I would recommend Python as well, even if you had to use ctypes or Cython to access libraries for the devices/interfaces. \$\endgroup\$ – Ignacio Vazquez-Abrams Mar 11 '15 at 18:22
  • \$\begingroup\$ There are a number of instrument abstraction libraries for Python as well. I'm actually part of github.com/LabPy where we are working on a new instrument control framework to supersede several existing frameworks under a unified banner. It will support instrument control through PyVISA, which can access instruments over USB, serial, ethernet, and GPIB. \$\endgroup\$ – alex.forencich Mar 11 '15 at 21:33

More important than the language question is to understand how does the current system works. How does it communicates with the hardware modules? When this is OK, search for options to implement your brand new system.

For me, Python and C# seems reasonable choices but it all depends on what kind of communications you have. I personally like Delphi/Freepascal but this is me only.

  • 1
    \$\begingroup\$ Please add some more details like does it uses RS232, USB, Bluetooth, Ethernet, RS485 as the lower level of communications with your devices? Having that information at hand, does your hardware uses a specific communication protocol/commands in order to perform tasks while being remotely controlled by a, e.g., host PC? If so, do you have the documentation of this? \$\endgroup\$ – daniel.franzini Mar 11 '15 at 17:33
  • \$\begingroup\$ I communicate with my test devices via USB and RS-232. My test bench equipment is all connected and communicate via GPIB. In terms of documentation, I'm not sure what you are wanting. \$\endgroup\$ – Tucker Bayler Mar 12 '15 at 17:17
  • \$\begingroup\$ Documentation means basically protocol description and message semantics. When you comunicate you send/receive bytes though whatever channel (USB, RS232, etc). The question was about how to give semantics to these bytes. This, in general, is written in some manual, tech doc, protocol description or whatever name you give. \$\endgroup\$ – daniel.franzini Mar 12 '15 at 18:01

Not the answer you're looking for? Browse other questions tagged or ask your own question.