Other protocols have their own pros and cons, depending on the end user, and depending on the end application.
- SCPI is plain text, trivially simple to use, but implies taking care of details, like dealing with possible errors, or learning the exact SCPI commands known by the instrument, or setting the instrument address and so on.
- VISA will abstract the physical layer, and present the same software interface no matter how you want to talk with your instrument, either through LAN, USB, serial port or GPIB. VISA has some extra features regarding the messages exchange, too, not only about abstracting the physical layer. All that might lower the level of details needed to be known by the end user. I only use LAN connectivity, with fixed IP addresses, don't need to discover my instruments in the LAN, and already know their capabilities.
- IVI will abstract the instrument model/manufacturer, and try to make all the oscilloscopes the same, all the generators the same, and so on. IVI will also unify the various SCPI dialects into a unique set of IVI commands. For that, it will need some sort of translator from IVI to SCPI instrument specific, so it will need an "IVI driver" (better name would have been "IVI translator"), which IVI driver is specific to a given model of instrument. So apart from the hardware drivers (if needed), now an IVI driver is needed, too. This IVI driver is specific to the IVI implementation, same as a hardware driver is specific to each OS. You will need IVI drivers written specifically for your instrument AND for python-ivi. For example, the COM-IVI drivers provided by the instrument's manufacturer are useless for python-ivi.
IVI and VISA might make sense in an industrial setup, where instruments can be configured by different operators, can be moved around from one lab to another, or can be replaced with newer models, and so on. In a personal lab, where the instrument never changes, there is not much advantage of adding the extra layers.
I've tried IVI, and almost any setting is obfuscated by 2-3 layers of abstraction. Had to dig through code sources way too often to learn how to change otherwise trivial settings. Then, found myself sending IVI commands while sniffing my own TCP packets to know what SCPI commands were sent by IVI, and if they correspond or not with what I was trying to do.
IVI and VISA are OK as industry standards, just not good for my personal use case.
Maybe I should write a step by step 101. LXI-ready instruments are trivial to control remotely. It all works out of the box with nothing but a LAN cable, no other software or drivers are needed. Telnet to the instrument and type SCPI commands, or open a TCP socket from a programming language, and send SCPI from there.