]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/flight_control/FGDeadBand.cpp
sync. with JSBSim v. 2.0
[flightgear.git] / src / FDM / JSBSim / models / flight_control / FGDeadBand.cpp
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Module:       FGDeadBand.cpp
4  Author:       Jon S. Berndt
5  Date started: 11/1999
6
7  ------------- Copyright (C) 2000 -------------
8
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
17  details.
18
19  You should have received a copy of the GNU General Public License along with
20  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21  Place - Suite 330, Boston, MA  02111-1307, USA.
22
23  Further information about the GNU General Public License can also be found on
24  the world wide web at http://www.gnu.org.
25
26 FUNCTIONAL DESCRIPTION
27 --------------------------------------------------------------------------------
28
29 HISTORY
30 --------------------------------------------------------------------------------
31
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33 COMMENTS, REFERENCES,  and NOTES
34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
37 INCLUDES
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
39
40 #include "FGDeadBand.h"
41
42 namespace JSBSim {
43
44 static const char *IdSrc = "$Id$";
45 static const char *IdHdr = ID_DEADBAND;
46
47 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
48 CLASS IMPLEMENTATION
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
50
51 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52
53 FGDeadBand::FGDeadBand(FGFCS* fcs, Element* element) : FGFCSComponent(fcs, element)
54 {
55   gain = 1.0;
56   width = 0.0;
57
58   if (element->FindElement("width")) {
59     width = element->FindElementValueAsNumber("width");
60   }
61
62   if (element->FindElement("gain")) {
63     gain = element->FindElementValueAsNumber("gain");
64   }
65
66   FGFCSComponent::bind();
67   Debug(0);
68 }
69
70 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
71
72 FGDeadBand::~FGDeadBand()
73 {
74   Debug(1);
75 }
76
77 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
78
79 bool FGDeadBand::Run(void )
80 {
81   Input = InputNodes[0]->getDoubleValue() * InputSigns[0];
82
83   if (Input < -width/2.0) {
84     Output = (Input + width/2.0)*gain;
85   } else if (Input > width/2.0) {
86     Output = (Input - width/2.0)*gain;
87   } else {
88     Output = 0.0;
89   }
90
91   Clip();
92
93   if (IsOutput) SetOutput();
94
95   return true;
96 }
97
98 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
99 //    The bitmasked value choices are as follows:
100 //    unset: In this case (the default) JSBSim would only print
101 //       out the normally expected messages, essentially echoing
102 //       the config files as they are read. If the environment
103 //       variable is not set, debug_lvl is set to 1 internally
104 //    0: This requests JSBSim not to output any messages
105 //       whatsoever.
106 //    1: This value explicity requests the normal JSBSim
107 //       startup messages
108 //    2: This value asks for a message to be printed out when
109 //       a class is instantiated
110 //    4: When this value is set, a message is displayed when a
111 //       FGModel object executes its Run() method
112 //    8: When this value is set, various runtime state variables
113 //       are printed out periodically
114 //    16: When set various parameters are sanity checked and
115 //       a message is printed out when they go out of bounds
116
117 void FGDeadBand::Debug(int from)
118 {
119   if (debug_lvl <= 0) return;
120
121   if (debug_lvl & 1) { // Standard console startup message output
122     if (from == 0) { // Constructor
123       cout << "      INPUT: " << InputNodes[0]->getName() << endl;
124       cout << "      DEADBAND WIDTH: " << width << endl;
125       cout << "      GAIN: " << gain << endl;
126       if (clip) cout << "      CLIPTO: " << clipmin
127                                   << ", " << clipmax << endl;
128       if (IsOutput) cout << "      OUTPUT: " << OutputNode->getName() << endl;
129     }
130   }
131   if (debug_lvl & 2 ) { // Instantiation/Destruction notification
132     if (from == 0) cout << "Instantiated: FGDeadBand" << endl;
133     if (from == 1) cout << "Destroyed:    FGDeadBand" << endl;
134   }
135   if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
136   }
137   if (debug_lvl & 8 ) { // Runtime state variables
138   }
139   if (debug_lvl & 16) { // Sanity checking
140   }
141   if (debug_lvl & 64) {
142     if (from == 0) { // Constructor
143       cout << IdSrc << endl;
144       cout << IdHdr << endl;
145     }
146   }
147 }
148 }