In short: Commands are used to initiate action (input controls), DataRefs mostly are used for outpur information (to read their values and display them).
A DataRef can be considered as internal named variable that stores information. This variable can be writable or not. Writable DataRef can be changed either by an internal flightmodel function or by a plugin via API.
But even if some DataRef is writable it doesn't mean that it is suited for input controls, and often you can't simply change it's value via SimVim plugin to get a needed effect.
Generally, "cockpit-related" datarefs should be used for reading and output some information onto the screen - to display numbers, instrument needles and various other animation (or to send data from the simulator out - via such plugin as SimVimCockpit).
- this dataref (read-only) keeps the aircraft current Airspeed and it's value can be used to display speed on the virtual panel or 7-segment indicator or gauge.
- this dataref (writable, as 0 or 1) keeps the aircraft current Wings anti-ice system status ( bleed Air valve open/close). It is writable and can be used for toggle switch - but it should be considered for use only as annunciator. For the anti-ice switch a couple of commands are used.
- this dataref (writable, variable from 0.00 to 1.00) keeps the aircraft current Flap Handle position. It is writable, and it can be used for direct change as using the up/dn commands is not so convenient for such "axis" controls.
Simply put, a command is a link to a single program function. When a command is called via X-Plane, it runs a particular function in the program that created this command (that could be X-Plane itself, a plugin, or a custom aircraft's script).
This function can do whatever the programmer wants. It also accepts a single argument - the command's state (begins, continues, ends). Some commands can use all of these states, particularly the commands for "Press-and-hold" buttons - that means the function can do different things when the button is pressed, held, or released.
- these two commands are used to switch Wings anti-ice system ( bleed Air valve open/close) and besides all, sets the dataref mentioned above
Commands are useful for virtual cockpit controls, hotkey assignments, and for external controls such as SimVimCockpit interface, and they are easy to understand - you call the command's name, something gets done. That's why many developers use them to do something when you interact with cockpit controls - in X-Plane, commands are synonymous with actions.
When people start studying X-Plane custom aircrafts, they usually find out about "custom" DataRefs only. These DataRefs are created and registered in X-Plane when you start your custom plane and they have their naming rules (usually they start with specific prefix - "aerobask/.../.../" in opposite to standard "sim/../../" ).
Many of such datarefs used the same way as standard, just having a different name. Some of custom daraefs are included to bring more realizm in the virtual cockpit and plane systems - see some notes about this here
You may wrongly think that all you need to control your specific custom aircraft is to find it's "custom" datarefs and simply change their value when needed. But often it's not.
What is sometimes overlooked is the existence of custom commands, and that utilizing these commands for interaction with the aircraft model is often better then using custom datarefs.
The reason for that is that, commands are often programmed to do more then just change a single dataref value. While a dataref's value is important as it is used by other parts of the program to check what needs to be done, just changing the dataref value may not result in all the necessary actions being done, that are supposed to happen when a switch in the cockpit is flipped, for example.
The main thing you will need for custom aircraft data conversion for SimVim is the list of all custom commands and datarefs needed for cockpit control. Sometimes it's easily accessible (included in the aircraft), sometimes you need to spend some time and effort to find it.
Search only for those commands (and datarefs) that correspond to the parameter that doesn't work. The list of all custom datarefs for your aircraft can be very large, but you probably would really need only a small part of it for your cockpit controls.
While working with custom data for your aircraft model, you should remember the following rules:
In this case the only option is using these 4 commands for rotary switch positions.
In this case you need to use 2 commands and the dataref which is needed to monitor its current value to set switch position by the up/dn commands correctly.
(SimVim plugin will process this switch correctly, when you assign both commands and the reference dataref in the data conversion tool)
In this case you can use dataref with 4 different values instead of commands.
But some of these commands (#1 here) can not only set the dataref value, but also initiate other functions, for example turn some annunciators, launch another system, etc. So, you will not get what you need, some function will work, some will not, so using the commands is preferable here.
It's the best option, always use it even if there is a writable dataref.
In this case you need to use both the command and the dataref which is needed to monitor its current value to set switch position by the toggle command correctly.
(SimVim plugin will process this switch correctly, when you assign both the command and the dataref in the data conversion tool)
In this case you can use it as in the previous case, or use the dataref only, but only if the toggle command does not initiate some other function.