Branch data Line data Source code
1 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 : :
3 : : Module: FGElectric.cpp
4 : : Author: David Culp
5 : : Date started: 04/07/2004
6 : : Purpose: This module models an electric motor
7 : :
8 : : --------- Copyright (C) 2004 David Culp (davidculp2@comcast.net) -------------
9 : :
10 : : This program is free software; you can redistribute it and/or modify it under
11 : : the terms of the GNU Lesser General Public License as published by the Free Software
12 : : Foundation; either version 2 of the License, or (at your option) any later
13 : : version.
14 : :
15 : : This program is distributed in the hope that it will be useful, but WITHOUT
16 : : ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17 : : FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18 : : details.
19 : :
20 : : You should have received a copy of the GNU Lesser General Public License along with
21 : : this program; if not, write to the Free Software Foundation, Inc., 59 Temple
22 : : Place - Suite 330, Boston, MA 02111-1307, USA.
23 : :
24 : : Further information about the GNU Lesser General Public License can also be found on
25 : : the world wide web at http://www.gnu.org.
26 : :
27 : : FUNCTIONAL DESCRIPTION
28 : : --------------------------------------------------------------------------------
29 : :
30 : : This class descends from the FGEngine class and models an electric motor based on
31 : : parameters given in the engine config file for this class
32 : :
33 : : HISTORY
34 : : --------------------------------------------------------------------------------
35 : : 04/07/2004 DPC Created
36 : : 01/06/2005 DPC Converted to new XML format
37 : :
38 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
39 : : INCLUDES
40 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 : :
42 : : #include "FGElectric.h"
43 : : #include "models/FGPropulsion.h"
44 : : #include "models/propulsion/FGThruster.h"
45 : :
46 : : #include <iostream>
47 : : #include <sstream>
48 : :
49 : : using namespace std;
50 : :
51 : : namespace JSBSim {
52 : :
53 : : static const char *IdSrc = "$Id: FGElectric.cpp,v 1.9 2010/08/21 17:13:48 jberndt Exp $";
54 : : static const char *IdHdr = ID_ELECTRIC;
55 : :
56 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57 : : CLASS IMPLEMENTATION
58 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
59 : :
60 : 0 : FGElectric::FGElectric(FGFDMExec* exec, Element *el, int engine_number)
61 : 0 : : FGEngine(exec, el, engine_number)
62 : : {
63 : 0 : string token;
64 : :
65 : 0 : Type = etElectric;
66 : 0 : PowerWatts = 745.7;
67 : 0 : hptowatts = 745.7;
68 : :
69 : 0 : dt = FDMExec->GetDeltaT();
70 : :
71 [ # # ][ # # ]: 0 : if (el->FindElement("power"))
72 : 0 : PowerWatts = el->FindElementValueAsNumberConvertTo("power","WATTS");
73 : :
74 : 0 : Debug(0); // Call Debug() routine from constructor if needed
75 : 0 : }
76 : :
77 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
78 : :
79 : 0 : FGElectric::~FGElectric()
80 : : {
81 : 0 : Debug(1); // Call Debug() routine from constructor if needed
82 [ # # ][ # # ]: 0 : }
[ # # ]
83 : :
84 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
85 : :
86 : 0 : void FGElectric::Calculate(void)
87 : : {
88 : 0 : RunPreFunctions();
89 : :
90 : 0 : Throttle = FCS->GetThrottlePos(EngineNumber);
91 : :
92 : 0 : RPM = Thruster->GetRPM() * Thruster->GetGearRatio();
93 : :
94 : 0 : HP = PowerWatts * Throttle / hptowatts;
95 : :
96 : 0 : PowerAvailable = (HP * hptoftlbssec) - Thruster->GetPowerRequired();
97 : :
98 : 0 : Thruster->Calculate(PowerAvailable);
99 : :
100 : 0 : RunPostFunctions();
101 : 0 : }
102 : :
103 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104 : :
105 : 0 : string FGElectric::GetEngineLabels(const string& delimiter)
106 : : {
107 : 0 : std::ostringstream buf;
108 : :
109 : : buf << Name << " HP (engine " << EngineNumber << ")" << delimiter
110 : 0 : << Thruster->GetThrusterLabels(EngineNumber, delimiter);
111 : :
112 : 0 : return buf.str();
113 : : }
114 : :
115 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
116 : :
117 : 0 : string FGElectric::GetEngineValues(const string& delimiter)
118 : : {
119 : 0 : std::ostringstream buf;
120 : :
121 : : buf << HP << delimiter
122 : 0 : << Thruster->GetThrusterValues(EngineNumber, delimiter);
123 : :
124 : 0 : return buf.str();
125 : : }
126 : :
127 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
128 : : //
129 : : // The bitmasked value choices are as follows:
130 : : // unset: In this case (the default) JSBSim would only print
131 : : // out the normally expected messages, essentially echoing
132 : : // the config files as they are read. If the environment
133 : : // variable is not set, debug_lvl is set to 1 internally
134 : : // 0: This requests JSBSim not to output any messages
135 : : // whatsoever.
136 : : // 1: This value explicity requests the normal JSBSim
137 : : // startup messages
138 : : // 2: This value asks for a message to be printed out when
139 : : // a class is instantiated
140 : : // 4: When this value is set, a message is displayed when a
141 : : // FGModel object executes its Run() method
142 : : // 8: When this value is set, various runtime state variables
143 : : // are printed out periodically
144 : : // 16: When set various parameters are sanity checked and
145 : : // a message is printed out when they go out of bounds
146 : :
147 : 0 : void FGElectric::Debug(int from)
148 : : {
149 [ # # ]: 0 : if (debug_lvl <= 0) return;
150 : :
151 [ # # ]: 0 : if (debug_lvl & 1) { // Standard console startup message output
152 [ # # ]: 0 : if (from == 0) { // Constructor
153 : :
154 : 0 : cout << "\n Engine Name: " << Name << endl;
155 : 0 : cout << " Power Watts: " << PowerWatts << endl;
156 : :
157 : : }
158 : : }
159 [ # # ]: 0 : if (debug_lvl & 2 ) { // Instantiation/Destruction notification
160 [ # # ]: 0 : if (from == 0) cout << "Instantiated: FGElectric" << endl;
161 [ # # ]: 0 : if (from == 1) cout << "Destroyed: FGElectric" << endl;
162 : : }
163 : 0 : if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
164 : : }
165 : 0 : if (debug_lvl & 8 ) { // Runtime state variables
166 : : }
167 : 0 : if (debug_lvl & 16) { // Sanity checking
168 : : }
169 [ # # ]: 0 : if (debug_lvl & 64) {
170 [ # # ]: 0 : if (from == 0) { // Constructor
171 : 0 : cout << IdSrc << endl;
172 : 0 : cout << IdHdr << endl;
173 : : }
174 : : }
175 : : }
176 : :
177 : : double
178 : 0 : FGElectric::CalcFuelNeed(void)
179 : : {
180 : 0 : return 0;
181 : : }
182 : :
183 [ + + ][ + - ]: 12 : } // namespace JSBSim
|