Engines: minor updates to engines and starter
This commit is contained in:
parent
37935e073a
commit
a6dfee8fdd
Before Width: | Height: | Size: 239 B After Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 239 B After Width: | Height: | Size: 239 B |
|
@ -12,7 +12,7 @@
|
|||
<repeatable>false</repeatable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>engine.startEngine()</script>
|
||||
<script>engine.toggleEngine(engine.engine_1)</script>
|
||||
</binding>
|
||||
</action>
|
||||
</animation>
|
|
@ -283,15 +283,15 @@
|
|||
|
||||
<!-- Engine Starter -->
|
||||
|
||||
<model>
|
||||
<path>Aircraft/followme_e-tron/Models/Starter/starter.xml</path>
|
||||
<offsets>
|
||||
<model>
|
||||
<path>Aircraft/followme_e-tron/Models/Instruments/starter/starter.xml</path>
|
||||
<offsets>
|
||||
<x-m>1.299</x-m>
|
||||
<y-m>-0.19</y-m>
|
||||
<z-m>0.90</z-m>
|
||||
<pitch-deg>18.0</pitch-deg>
|
||||
</offsets>
|
||||
</model>
|
||||
</model>
|
||||
|
||||
<!-- STEERINGWHEEL -->
|
||||
|
||||
|
|
131
Nasal/engine.nas
131
Nasal/engine.nas
|
@ -4,17 +4,17 @@ var Engine = {
|
|||
#//Class for any electric engine
|
||||
#//mTorque: Max torque, mPower: Max Power, rpmAtMPower: RPM at max power
|
||||
#//For this vehicle: maxPower: 375kW
|
||||
|
||||
|
||||
new: func(mTorque, mPower, rpmAtMPower) {
|
||||
return { parents:[Engine, followme.Appliance.new()], maxTorque: mTorque, ratedPower:mPower, rpmAtMaxPower:rpmAtMPower };
|
||||
return { parents:[Engine, followme.Appliance.new()], maxTorque: mTorque, ratedPower:mPower, rpmAtMaxPower:rpmAtMPower };
|
||||
},
|
||||
|
||||
|
||||
resistance: 0.1, #//No datasource, based on guess
|
||||
|
||||
|
||||
runningState: 0,
|
||||
|
||||
|
||||
engineSwitch: followme.Switch.new(0),
|
||||
|
||||
|
||||
isRunning: func(){
|
||||
return me.runningState;
|
||||
},
|
||||
|
@ -33,7 +33,7 @@ var Engine = {
|
|||
getDirection: func(){
|
||||
return me.direction;
|
||||
},
|
||||
|
||||
|
||||
gear: 9.73,
|
||||
setGear: func(g){
|
||||
me.gear = g;
|
||||
|
@ -41,45 +41,45 @@ var Engine = {
|
|||
getGear: func(){
|
||||
return me.gear;
|
||||
},
|
||||
|
||||
|
||||
rotor_moi: 2.3,
|
||||
wheel_moi: 0.9,
|
||||
wheel_radius: 0.31,#//M
|
||||
|
||||
|
||||
rpm: 0,
|
||||
|
||||
|
||||
maxTorque: 460, #Nm
|
||||
|
||||
|
||||
rpmAtMaxPower: 6150, #rpm
|
||||
|
||||
|
||||
angularSpeed: 0, #rad/s
|
||||
torque: 0, #Nm
|
||||
outputForce: 0, #N
|
||||
|
||||
|
||||
debugMode: 0,
|
||||
|
||||
|
||||
rpm_calculate: func(angularAcceleration){
|
||||
|
||||
|
||||
var rpm = me.rpm;
|
||||
#//var rps = rpm / 60;
|
||||
|
||||
|
||||
|
||||
|
||||
var angularSpeed = rpm * 0.10471975; #//rps * 2 * 3.1415926
|
||||
|
||||
|
||||
var friction_lbs = props.getNode("/",1).getValue("fdm/jsbsim/forces/fbx-gear-lbs");
|
||||
var friction = 4.4492 * friction_lbs * 0.25;#//0.25: single wheel
|
||||
var angularDecelaeration = friction * me.wheel_radius * (1/me.wheel_moi); #//frictionTorque = friction * wheel_radius, angularDecelaeration = frictionTorque/wheel_moi;
|
||||
var angularDecelaeration = friction * me.wheel_radius * (1/me.wheel_moi); #//frictionTorque = friction * wheel_radius, angularDecelaeration = frictionTorque/wheel_moi;
|
||||
#print(angularAcceleration);
|
||||
#print("de"~angularDecelaeration);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
angularDecelaeration = math.abs(angularDecelaeration) * me.getDirection() * -1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var totalAcceleration = angularAcceleration + angularDecelaeration;
|
||||
|
||||
|
||||
if(me.getDirection() == 1){
|
||||
if(angularSpeed + totalAcceleration * 0.1 > 10){
|
||||
angularSpeed = angularSpeed + totalAcceleration * 0.1;
|
||||
|
@ -94,23 +94,23 @@ var Engine = {
|
|||
angularSpeed = angularSpeed + angularAcceleration * 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#//rps = angularSpeed / 6.2831853;
|
||||
rpm = angularSpeed * 9.5492966; #//rps * 60
|
||||
|
||||
|
||||
me.rpm = rpm;
|
||||
props.getNode("/",1).setValue("/controls/engines/engine/rpma",rpm);
|
||||
me.angularSpeed = angularSpeed;
|
||||
|
||||
|
||||
return rpm;
|
||||
},
|
||||
|
||||
|
||||
update_engine: func(){
|
||||
var throttle = props.getNode("/",1).getValue("/controls/engines/engine/throttle");
|
||||
var direction = me.getDirection();
|
||||
var mode = props.getNode("/",1).getValue("/controls/mode");
|
||||
var volt = me.voltage;
|
||||
|
||||
|
||||
if(!volt){
|
||||
me.rpm = 0;
|
||||
props.getNode("/",1).setValue("/controls/engines/engine/rpma", 0);
|
||||
|
@ -120,14 +120,14 @@ var Engine = {
|
|||
|
||||
throttle = throttle * mode;
|
||||
#print("throttle:" ~throttle);
|
||||
|
||||
|
||||
var cmdRpm = throttle * me.rpmAtMaxPower;
|
||||
#print("cmdRpm: "~cmdRpm);
|
||||
|
||||
|
||||
var cmdPower = throttle * me.ratedPower;
|
||||
#print("cmdPower: "~cmdPower);
|
||||
me.activePower_kW = math.abs(me.rpm * me.torque / 9549);
|
||||
|
||||
|
||||
if(math.abs(me.rpm) < cmdRpm){
|
||||
#print("me.rpm < cmdRpm");
|
||||
me.torque = throttle * me.maxTorque * direction;
|
||||
|
@ -144,22 +144,22 @@ var Engine = {
|
|||
me.rpm = me.rpm_calculate(angularAcceleration);
|
||||
me.torque = direction * math.abs((9549 * me.activePower_kW) / me.rpm);
|
||||
}
|
||||
|
||||
|
||||
var force = (1/me.wheel_radius) * me.torque * me.gear;#//unit: N
|
||||
|
||||
|
||||
me.outputForce = force;
|
||||
|
||||
|
||||
if(me.debugMode){
|
||||
me.debugPrint();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
outputForce(me.outputForce * N2LBS);
|
||||
|
||||
|
||||
},
|
||||
|
||||
|
||||
engineTimer: nil,
|
||||
|
||||
|
||||
startEngine: func(){
|
||||
if(me.engineTimer == nil) me.engineTimer = maketimer(0.1, func me.update_engine());
|
||||
me.engineSwitch.switchConnect();
|
||||
|
@ -171,7 +171,7 @@ var Engine = {
|
|||
me.engineTimer.start();
|
||||
return 1;
|
||||
},
|
||||
|
||||
|
||||
stopEngine: func(){
|
||||
me.rpm = 0;
|
||||
me.torque = 0;
|
||||
|
@ -182,14 +182,14 @@ var Engine = {
|
|||
props.getNode("/",1).setValue("/controls/engines/engine/started",0);
|
||||
me.engineTimer.stop();
|
||||
},
|
||||
|
||||
|
||||
debugPrint: func(){
|
||||
print("rpm: "~me.rpm);
|
||||
print("torque: "~me.torque);
|
||||
print("power: "~me.activePower_kW);
|
||||
print("______________________________________________");
|
||||
},
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -206,19 +206,19 @@ var outputForce = func(force){
|
|||
}else{
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FL/magnitude", 0);
|
||||
}
|
||||
|
||||
|
||||
if(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[1]/compression-ft") > 0){
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FR/magnitude", force/4);
|
||||
}else{
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FR/magnitude", 0);
|
||||
}
|
||||
|
||||
|
||||
if(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[2]/compression-ft") > 0){
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/BL/magnitude", force/4);
|
||||
}else{
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/BL/magnitude", 0);
|
||||
}
|
||||
|
||||
|
||||
if(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit[3]/compression-ft") > 0){
|
||||
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/BR/magnitude", force/4);
|
||||
}else{
|
||||
|
@ -227,28 +227,37 @@ var outputForce = func(force){
|
|||
}
|
||||
|
||||
props.getNode("systems/welcome-message", 1).setValue(3);
|
||||
var startEngine = func(){
|
||||
var startEngine = func(my_engine){
|
||||
if(!props.getNode("/controls/is-recharging").getValue()){
|
||||
|
||||
if(props.getNode("systems/welcome-message", 1).getValue() == 1){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("Beijing di san tsui jiao tong wei ti xing nin, Dao lu tsian wan tiao, ann tsuan di yi tiao, xing che bull gui fun, tsin ren liang hang lei");
|
||||
}else if(props.getNode("systems/welcome-message", 1).getValue() == 2){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("This is a reminder from The Third District Traffic Commission of Beijing. There are thousands of roads, and the safety is the first. If you drive recklessly, your loved ones will be filled with tears.");
|
||||
}else if(props.getNode("systems/welcome-message", 1).getValue() == 3){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("Ben chea yee xeao do. This vehicle is disinfected.");
|
||||
}
|
||||
|
||||
var signal = engine_1.startEngine();
|
||||
var signal = my_engine.startEngine();
|
||||
if(signal){
|
||||
print("Engine started");
|
||||
if(props.getNode("systems/welcome-message", 1).getValue() == 1){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("Beijing di san tsui jiao tong wei ti xing nin, Dao lu tsian wan tiao, ann tsuan di yi tiao, xing che bull gui fun, tsin ren liang hang lei");
|
||||
}else if(props.getNode("systems/welcome-message", 1).getValue() == 2){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("This is a reminder from The Third District Traffic Commission of Beijing. There are thousands of roads, and the safety is the first. If you drive recklessly, your loved ones will be filled with tears.");
|
||||
}else if(props.getNode("systems/welcome-message", 1).getValue() == 3){
|
||||
props.getNode("/sim/messages/copilot", 1).setValue("Ben chea yee xeao do. This vehicle is disinfected.");
|
||||
}
|
||||
}else{
|
||||
print("Engine start failed");
|
||||
}
|
||||
|
||||
}else if(followme.chargeTimer.isRunning){
|
||||
#screen.log.write("Battery is recharging, cannot start engine.", 0, 0.584, 1);
|
||||
setprop("/sim/sound/voices/pilot", "Battery is recharging, cannot start engine.");
|
||||
}
|
||||
}
|
||||
|
||||
var stopEngine = func(){
|
||||
engine_1.stopEngine();
|
||||
var stopEngine = func(my_engine){
|
||||
my_engine.stopEngine();
|
||||
print("Engine stopped");
|
||||
}
|
||||
}
|
||||
|
||||
var toggleEngine = func(my_engine){
|
||||
if(my_engine.runningState == 0){
|
||||
startEngine(my_engine);
|
||||
}else{
|
||||
stopEngine(my_engine);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,13 +29,13 @@
|
|||
</button>
|
||||
</group>
|
||||
<hrule/>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<padding>6</padding>
|
||||
|
||||
|
||||
<button>
|
||||
<halign>left</halign>
|
||||
<legend>Enable Performance Mode</legend>
|
||||
|
@ -46,7 +46,7 @@
|
|||
<not>
|
||||
<property>/sim/freeze/replay-state</property>
|
||||
</not>
|
||||
|
||||
|
||||
</and>
|
||||
</enable>
|
||||
<binding>
|
||||
|
@ -55,7 +55,7 @@
|
|||
<value>1</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
|
||||
<button>
|
||||
<halign>left</halign>
|
||||
<legend>Enable Comfort Mode</legend>
|
||||
|
@ -66,7 +66,7 @@
|
|||
<not>
|
||||
<property>/sim/freeze/replay-state</property>
|
||||
</not>
|
||||
|
||||
|
||||
</and>
|
||||
</enable>
|
||||
<binding>
|
||||
|
@ -75,7 +75,7 @@
|
|||
<value>0.65</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
|
||||
<button>
|
||||
<halign>left</halign>
|
||||
<legend>Enable Low Power Mode</legend>
|
||||
|
@ -86,7 +86,7 @@
|
|||
<not>
|
||||
<property>/sim/freeze/replay-state</property>
|
||||
</not>
|
||||
|
||||
|
||||
</and>
|
||||
</enable>
|
||||
<binding>
|
||||
|
@ -95,8 +95,8 @@
|
|||
<value>0.4</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
</group>
|
||||
<text>
|
||||
<label>Advanced Steering</label>
|
||||
|
@ -116,7 +116,7 @@
|
|||
<not>
|
||||
<property>/sim/freeze/replay-state</property>
|
||||
</not>
|
||||
|
||||
|
||||
</and>
|
||||
</enable>
|
||||
<binding>
|
||||
|
@ -133,7 +133,7 @@
|
|||
<not>
|
||||
<property>/sim/freeze/replay-state</property>
|
||||
</not>
|
||||
|
||||
|
||||
</and>
|
||||
</enable>
|
||||
<binding>
|
||||
|
@ -141,9 +141,9 @@
|
|||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
|
||||
<hrule/>
|
||||
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<padding>6</padding>
|
||||
|
@ -261,7 +261,7 @@
|
|||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
|
||||
<hrule/>
|
||||
<text><label>Configuration</label></text>
|
||||
<group>
|
||||
|
@ -281,7 +281,7 @@
|
|||
<value>0</value>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
|
||||
<button>
|
||||
<halign>left</halign>
|
||||
<legend>Type O</legend>
|
||||
|
@ -322,7 +322,7 @@
|
|||
</binding>
|
||||
</combo>
|
||||
</group>
|
||||
|
||||
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
<text><label>Battery gauge type</label></text>
|
||||
|
@ -345,7 +345,7 @@
|
|||
</binding>
|
||||
</combo>
|
||||
</group>
|
||||
|
||||
|
||||
</group>
|
||||
<group>
|
||||
<layout>vbox</layout>
|
||||
|
@ -470,10 +470,10 @@
|
|||
<script>followme.circuit_1.parallelConnection[0].units[0].resetRemainingToFull()</script>
|
||||
</binding>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
</group>
|
||||
|
||||
|
||||
|
||||
<hrule/>
|
||||
<group>
|
||||
|
@ -490,7 +490,7 @@
|
|||
</enable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>engine.startEngine()</script>
|
||||
<script>engine.startEngine(engine.engine_1)</script>
|
||||
</binding>
|
||||
</button>
|
||||
<button>
|
||||
|
@ -503,11 +503,11 @@
|
|||
</enable>
|
||||
<binding>
|
||||
<command>nasal</command>
|
||||
<script>engine.stopEngine()</script>
|
||||
<script>engine.stopEngine(engine.engine_1)</script>
|
||||
</binding>
|
||||
</button>
|
||||
</group>
|
||||
|
||||
|
||||
<hrule/>
|
||||
|
||||
</PropertyList>
|
||||
|
|
Loading…
Reference in New Issue