(method - read/write)

For PCElements only, gets/sets the value of a state variable by index. If Code > 0 Then no variable by this name or the active circuit element is not a PCelement. 


% Create DSS object

DSSObject = actxserver('OpenDSSEngine.DSS')

if ~DSSObject.Start(0),

                    disp('Unable to start openDSS');



DSSText = DSSObject.Text;

DSSCircuit = DSSObject.ActiveCircuit;

DSSLines = DSSCircuit.Lines;

% Compile a model        

DSSText.Command = 'Compile C:\myPath\myModel.dss';

DSSActiveElement = DSSCircuit.ActiveCktElement;

% Activates the generator located in this model


% gets the names of all the state variables of the active element

mySVNames = DSSActiveElement.AllVariableNames;

% requests for state variable Vd (3)

myStVIdx = 3;

myCode = 0;

myVd = DSSActiveElement.VariableByIndex(myStVIdx, myCode);

if myCode == 0

    disp([mySVNames{myStVIdx},' value: ', num2str(myVd)]);


    disp('The variable does not exist');


For writing operations, this method cannot be implemented using the basic late binding interpretation provided by some non-Windows native applications. Programs such MATLAB tend to have issues with it. If you are using MATLAB we recommend to use VariableName and VariableValue properties instead. The following example in VBA shows the method usage for writing operations:

Public Sub TestVariables()

Dim V As Variant, V2 As Variant

Dim N As Long

Dim Code As Long, AValue As Double, i As Long

DSSText.Command = "select generator.windgen1"

V = DSSCktElement.AllVariableNames  ' returns a variant array of strings

V2 = DSSCktElement.AllVariableValues

Debug.Print "All Variables"

For i = LBound(V) To UBound(V)

       Debug.Print i; " - "; V(i); " = "; V2(i)

Next i

AValue = DSSCktElement.VariableByIndex(2, Code)  'Returns a single variable at Index 3

Debug.Print "Avalue="; AValue; " number of Variables="; UBound(V) + 1

DSSCktElement.VariableByName("Slip", Code) = 0.01  ' Sets the Variable Torque to 100

AValue = DSSCktElement.VariableByName("Slip", Code)

Debug.Print "Slip="; AValue; " Code="; Code

DSSCktElement.VariableByIndex(4, Code) = 120#   ' sets the 4th variable to 100

AValue = DSSCktElement.VariableByIndex(4, Code)

Debug.Print "4th var="; AValue; " Code="; Code

End Sub