Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question

Revision history [back]

So I ended up figuring it out.

Bottom line

  1. Go to C:\EnergyPlusV8-2-0\PostProcess(or wherever you have installed E+). You should see ReadVarsESO.exe and RunReadESO.bat.

  2. Paste here your eplusout.eso file generated by OpenStudio (located in My_Model\run\5-EnergyPlus-0). Do not rename it! It has to be named eplusout.eso.

  3. Copy the RunReadoESO.bat and rename to RunReadESO-NoLimit.bat.

Open it up and modify like the following (only the fourth line changes)

set rvpath=
if EXIST eplusout.inp goto :inp
rem produces all variables in .eso file to .csv
%rvpath%readvarseso.exe "" N
goto :done
:inp
rem reads variable specifications from input file
%rvpath%ReadVarsESO.exe eplusout.inp
:done
set rvpath=

4.Save and close the bat file. Double click on it, done.

Explanation

I took a look at the source code, and especially ReadVarsEso.f90.

Turns out there a limit of 255 indeed, with this integer, parameter :: numallowed=255

Now, it's only used if another parameter, limited is set to true, which is its default state.

if (ntrack > numallowed) then
   if (limited) then
       ntrack=numallowed
       write(*,*) 'too many variables requested, will go with first ',numallowed

Now the interesting section is here:

cmdargs=Command_Argument_Count()
  if (cmdargs == 0) then
    getvarsfromeso=.true.
  else  ! there are command args, at least one...
    arg=1
    Call Get_Command_Argument(arg,varfilename)
    varfilename=ADJUSTL(varfilename)
    if (varfilename == blank) then
      getvarsfromeso=.true.
    endif
    argnum=arg+1
    Freqs=0
    do arg=argnum,cmdargs
      Call Get_Command_Argument(arg,LineArg)
      ! timestep
      if (LineArg(1:1) == 't' .or. LineArg(1:1) == 'T') Freqs=1
      **[... 'Truncated for clarity' ...]**
      ! unlimited
      if (LineArg(1:1) == 'u' .or. LineArg(1:1) == 'U') Limited=.false.
      ! nolimit
      if (LineArg(1:1) == 'n' .or. LineArg(1:1) == 'N') Limited=.false.
    enddo
  endif

One thing is that we want getvarsfromeso = .true., otherwise the program will be expecting a .rvi file which we don't have. We just want all variables to get converted to csv.

So if we pass it 0 arguments, it works nicely because getvarsfromeso = .true., but we end up limited to 255 columns.

If we pass it at least one argument, the first one is the filename. In our case, we want the getvarsfromeso = .true.so we have to pass it a blank first argument ""

Then, we want to end up with limited=.false., so passing N as a second argument achieves that.

And that's why %rvpath%readvarseso.exe "" N works. But it will be expecting a file named "eplusout.eso" so that's why I said in 2. above that you couldn't rename it.

So I ended up figuring it out.

Bottom line

  1. Go to C:\EnergyPlusV8-2-0\PostProcess(or wherever you have installed E+). You should see ReadVarsESO.exe and RunReadESO.bat.

  2. Paste here your eplusout.eso file generated by OpenStudio (located in My_Model\run\5-EnergyPlus-0). Do not rename it! It has to be named eplusout.eso.

  3. Copy the RunReadoESO.bat and rename to RunReadESO-NoLimit.bat.

Open it up and modify like the following (only the fourth line changes)

set rvpath=
if EXIST eplusout.inp goto :inp
rem produces all variables in .eso file to .csv
%rvpath%readvarseso.exe "" N
goto :done
:inp
rem reads variable specifications from input file
%rvpath%ReadVarsESO.exe eplusout.inp
:done
set rvpath=

4.Save and close the bat file. Double click on it, done.

Explanation

I took a look at the source code, and especially ReadVarsEso.f90.

Turns out there a limit of 255 indeed, with this integer, parameter :: numallowed=255

Now, it's only used if another parameter, limited is set to true, which is its default state.

if (ntrack > numallowed) then
   if (limited) then
       ntrack=numallowed
       write(*,*) 'too many variables requested, will go with first ',numallowed

Now the The interesting section is here:really this one:

cmdargs=Command_Argument_Count()
  if (cmdargs == 0) then
    getvarsfromeso=.true.
  else  ! there are command args, at least one...
    arg=1
    Call Get_Command_Argument(arg,varfilename)
    varfilename=ADJUSTL(varfilename)
    if (varfilename == blank) then
      getvarsfromeso=.true.
    endif
    argnum=arg+1
    Freqs=0
    do arg=argnum,cmdargs
      Call Get_Command_Argument(arg,LineArg)
      ! timestep
      if (LineArg(1:1) == 't' .or. LineArg(1:1) == 'T') Freqs=1
      **[... 'Truncated for clarity' ...]**
      ! unlimited
      if (LineArg(1:1) == 'u' .or. LineArg(1:1) == 'U') Limited=.false.
      ! nolimit
      if (LineArg(1:1) == 'n' .or. LineArg(1:1) == 'N') Limited=.false.
    enddo
  endif

One thing is that we want getvarsfromeso = .true., otherwise the program will be expecting a .rvi file which we don't have. We just want all variables to get converted to csv.

So if we pass it 0 arguments, it works nicely because getvarsfromeso = .true., but we end up limited to 255 columns.columns, because by default limited=.true..

If we pass it at least one argument, the first one is the filename. In our case, we want the getvarsfromeso = .true.so we have to pass it a blank first argument ""

Then, we want to end up with limited=.false., so passing N as a second argument achieves that.

And that's why %rvpath%readvarseso.exe "" N works. works. But it will be expecting a file named "eplusout.eso" eplusout.eso - that's the default anyway - so that's why I said in 2. above that you couldn't rename it.