<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<title>Calling external program from a new C++ Component</title>
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=FR link=blue vlink=purple>

<div class=WordSection1>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hi Amine, <o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>‘Call’ is not the name of a TRNSYS API function, but
just a comment to say that at this point in the example, the C routine is
called for the Nth time.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>To call an external program in C, you should use the Windows API.
There are many ways to do this, one is to use CreateProcess() function, as
described here: </span><a
href="http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx"><span
lang=EN-US>http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx</span></a><span
lang=EN-US><o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>One challenge is to make sure the exe has finished before you
try to recover any results it may have put somewhere.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>If you have the source code of the exe, another option would be
to recompile it as a DLL, adding the TRNSYS TYPE function which should then just
call the main() function of your application (you can then easily pass parameters
and recover results).<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hope this helps,<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Werner<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>De :</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Bezzarga, Amine
(SCR US EXT) [mailto:amine.bezzarga.ext@siemens.com] <br>
<b>Envoyé :</b> mardi 5 octobre 2010 23:56<br>
<b>À :</b> trnsys-users@cae.wisc.edu<br>
<b>Objet :</b> [TRNSYS-users] Calling external program from a new C++
Component<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p> </o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>Hi everybody,</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>I’m stuck
with TRNSYS  v 16.1</span><span lang=EN-US> </span><span lang=EN-US
style='font-family:"Calibri","sans-serif"'>, the part of the API that normally
allow to call an external program (an exe written in c++)</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>seems
to not be supported by the C++ plugin (I can just create my</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>
own component that will basically calculate the output from the input)</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>I mean the
linker can’t find the</span><span lang=EN-US> </span><span lang=EN-US
style='font-family:"Calibri","sans-serif"'>“call”</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>
subroutine just like described in the programmer’s guide of the manual (part
8):</span><o:p></o:p></p>

<p><b><i><span lang=EN-US style='font-size:13.5pt;font-family:"Arial","sans-serif"'>8.4.4.1.
Calling External Programs</span></i></b><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>I know</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>the
example shown is</span><span lang=EN-US> </span><span lang=EN-US
style='font-family:"Calibri","sans-serif"'>for fortran but, in the file 
..\Trnsys16_1\SourceCode\Templates\CppType.cpp we have this at the line 133:</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>  //***
Call N ('normal' call)</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>That seems to be
the function that allow me to call an external program, however there is no
reference of that function in the</span><span lang=EN-US> </span><span
lang=EN-US style='font-family:"Calibri","sans-serif"'>“TRNSYS.h”,
So I’m being stuck with a linker problem.</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>What I want to
do</span><span lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>is
to</span><span lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>start
a simulation in TRNSYS, then when it reach a certain component, TRNSYS will
call a external program with data (in</span><span lang=EN-US> </span><span
lang=EN-US style='font-family:"Calibri","sans-serif"'>argument if possible)</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>
and wait for it to finish,</span><span lang=EN-US> </span><span lang=EN-US
style='font-family:"Calibri","sans-serif"'>and then get back value from my
program?</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>Unfortunately,
TRNSYS doesn’t seem to support Socket connection to</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>exchange
data. I see that type66 do it  (This routine calls a program called
Engineering Equation Solver (EES)) with the data exchange</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>protocol
via the windows’ clipboard. </span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>To resume:</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>So do I have to
start over with the fortran plugin to be</span><span lang=EN-US> </span><span
lang=EN-US style='font-family:"Calibri","sans-serif"'>able to call external
program?</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>Or do you</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>know
a other way to do</span><span lang=EN-US> </span><span lang=EN-US
style='font-family:"Calibri","sans-serif"'>what I want ?</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>And</span><span
lang=EN-US> </span><span lang=EN-US style='font-family:"Calibri","sans-serif"'>do
you think I need to communicate through a file ?</span><o:p></o:p></p>

<p class=MsoNormal><o:p> </o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>Thanks a lot for
your help.</span><o:p></o:p></p>

<p><span lang=EN-US style='font-family:"Calibri","sans-serif"'>Amine</span><o:p></o:p></p>

</div>

</body>

</html>