1 /*******************************************************************************
6 Purpose: Manage output of sim parameters to file or stdout
9 ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
11 This program is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free Software
13 Foundation; either version 2 of the License, or (at your option) any later
16 This program is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21 You should have received a copy of the GNU General Public License along with
22 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
23 Place - Suite 330, Boston, MA 02111-1307, USA.
25 Further information about the GNU General Public License can also be found on
26 the world wide web at http://www.gnu.org.
28 FUNCTIONAL DESCRIPTION
29 --------------------------------------------------------------------------------
30 This is the place where you create output routines to dump data for perusal
31 later. Some machines may not support the ncurses console output. Borland is one
32 of those environments which does not, so the ncurses stuff is commented out.
35 --------------------------------------------------------------------------------
38 ********************************************************************************
40 *******************************************************************************/
44 #include "FGFDMExec.h"
45 #include "FGAtmosphere.h"
47 #include "FGAircraft.h"
48 #include "FGTranslation.h"
49 #include "FGRotation.h"
50 #include "FGPosition.h"
51 #include "FGAuxiliary.h"
53 /*******************************************************************************
54 ************************************ CODE **************************************
55 *******************************************************************************/
57 FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex)
60 sFirstPass = dFirstPass = true;
62 #ifdef FG_WITH_JSBSIM_SOCKET
63 socket = new FGfdmSocket("localhost",1138);
68 FGOutput::~FGOutput(void)
70 if (socket) delete socket;
74 bool FGOutput::Run(void)
76 if (!FGModel::Run()) {
78 // DelimitedOutput("JSBSimData.csv");
85 void FGOutput::DelimitedOutput(void)
114 cout << "Longitude,";
124 cout << State->Getsim_time() << ",";
125 cout << State->Geth() << ",";
126 cout << Rotation->Getphi() << ",";
127 cout << Rotation->Gettht() << ",";
128 cout << Rotation->Getpsi() << ",";
129 cout << Atmosphere->GetDensity() << ",";
130 cout << State->GetVt() << ",";
131 cout << Translation->GetU() << ",";
132 cout << Translation->GetV() << ",";
133 cout << Translation->GetW() << ",";
134 cout << Position->GetVn() << ",";
135 cout << Position->GetVe() << ",";
136 cout << Position->GetVd() << ",";
137 cout << Translation->GetUdot() << ",";
138 cout << Translation->GetVdot() << ",";
139 cout << Translation->GetWdot() << ",";
140 cout << Rotation->GetP() << ",";
141 cout << Rotation->GetQ() << ",";
142 cout << Rotation->GetR() << ",";
143 cout << Rotation->GetPdot() << ",";
144 cout << Rotation->GetQdot() << ",";
145 cout << Rotation->GetRdot() << ",";
146 cout << Aircraft->GetFx() << ",";
147 cout << Aircraft->GetFy() << ",";
148 cout << Aircraft->GetFz() << ",";
149 cout << State->Getlatitude() << ",";
150 cout << State->Getlongitude() << ",";
151 cout << State->Getqbar() << ",";
152 cout << Translation->Getalpha() << ",";
153 cout << Aircraft->GetL() << ",";
154 cout << Aircraft->GetM() << ",";
155 cout << Aircraft->GetN() << "";
161 void FGOutput::DelimitedOutput(string fname)
164 datafile.open(fname.c_str());
166 datafile << "Altitude,";
171 datafile << "Vtotal,";
190 datafile << "Latitude,";
191 datafile << "Longitude,";
193 datafile << "Alpha,";
201 datafile << State->Getsim_time() << ",";
202 datafile << State->Geth() << ",";
203 datafile << Rotation->Getphi() << ",";
204 datafile << Rotation->Gettht() << ",";
205 datafile << Rotation->Getpsi() << ",";
206 datafile << Atmosphere->GetDensity() << ",";
207 datafile << State->GetVt() << ",";
208 datafile << Translation->GetU() << ",";
209 datafile << Translation->GetV() << ",";
210 datafile << Translation->GetW() << ",";
211 datafile << Position->GetVn() << ",";
212 datafile << Position->GetVe() << ",";
213 datafile << Position->GetVd() << ",";
214 datafile << Translation->GetUdot() << ",";
215 datafile << Translation->GetVdot() << ",";
216 datafile << Translation->GetWdot() << ",";
217 datafile << Rotation->GetP() << ",";
218 datafile << Rotation->GetQ() << ",";
219 datafile << Rotation->GetR() << ",";
220 datafile << Rotation->GetPdot() << ",";
221 datafile << Rotation->GetQdot() << ",";
222 datafile << Rotation->GetRdot() << ",";
223 datafile << Aircraft->GetFx() << ",";
224 datafile << Aircraft->GetFy() << ",";
225 datafile << Aircraft->GetFz() << ",";
226 datafile << State->Getlatitude() << ",";
227 datafile << State->Getlongitude() << ",";
228 datafile << State->Getqbar() << ",";
229 datafile << Translation->Getalpha() << ",";
230 datafile << Aircraft->GetL() << ",";
231 datafile << Aircraft->GetM() << ",";
232 datafile << Aircraft->GetN() << "";
237 void FGOutput::SocketOutput(void)
241 if (socket <= 0) return;
245 socket->Append("<LABELS>");
246 socket->Append("Time");
247 socket->Append("Altitude");
248 socket->Append("Phi");
249 socket->Append("Tht");
250 socket->Append("Psi");
251 socket->Append("Rho");
252 socket->Append("Vtotal");
256 socket->Append("Vn");
257 socket->Append("Ve");
258 socket->Append("Vd");
259 socket->Append("Udot");
260 socket->Append("Vdot");
261 socket->Append("Wdot");
265 socket->Append("PDot");
266 socket->Append("QDot");
267 socket->Append("RDot");
268 socket->Append("Fx");
269 socket->Append("Fy");
270 socket->Append("Fz");
271 socket->Append("Latitude");
272 socket->Append("Longitude");
273 socket->Append("QBar");
274 socket->Append("Alpha");
283 socket->Append(State->Getsim_time());
284 socket->Append(State->Geth());
285 socket->Append(Rotation->Getphi());
286 socket->Append(Rotation->Gettht());
287 socket->Append(Rotation->Getpsi());
288 socket->Append(Atmosphere->GetDensity());
289 socket->Append(State->GetVt());
290 socket->Append(Translation->GetU());
291 socket->Append(Translation->GetV());
292 socket->Append(Translation->GetW());
293 socket->Append(Position->GetVn());
294 socket->Append(Position->GetVe());
295 socket->Append(Position->GetVd());
296 socket->Append(Translation->GetUdot());
297 socket->Append(Translation->GetVdot());
298 socket->Append(Translation->GetWdot());
299 socket->Append(Rotation->GetP());
300 socket->Append(Rotation->GetQ());
301 socket->Append(Rotation->GetR());
302 socket->Append(Rotation->GetPdot());
303 socket->Append(Rotation->GetQdot());
304 socket->Append(Rotation->GetRdot());
305 socket->Append(Aircraft->GetFx());
306 socket->Append(Aircraft->GetFy());
307 socket->Append(Aircraft->GetFz());
308 socket->Append(State->Getlatitude());
309 socket->Append(State->Getlongitude());
310 socket->Append(State->Getqbar());
311 socket->Append(Translation->Getalpha());
312 socket->Append(Aircraft->GetL());
313 socket->Append(Aircraft->GetM());
314 socket->Append(Aircraft->GetN());
319 void FGOutput::SocketStatusOutput(string out_str)
323 if (socket <= 0) return;
326 asciiData = string("<STATUS>") + out_str;
327 socket->Append(asciiData.c_str());