From a6dfee8fddb033818ca811c29029dbfbc192819a Mon Sep 17 00:00:00 2001
From: Sidi Liang <1467329765@qq.com>
Date: Sat, 15 Feb 2020 11:14:49 +0800
Subject: [PATCH] Engines: minor updates to engines and starter
---
Models/{ => Instruments}/Starter/gray.png | Bin
.../{ => Instruments}/Starter/light_gray.png | Bin
Models/{ => Instruments}/Starter/starter.ac | 0
Models/{ => Instruments}/Starter/starter.xml | 2 +-
Models/followmeEV.xml | 8 +-
Nasal/engine.nas | 131 ++++++++++--------
gui/dialogs/vehicle-dialog.xml | 50 +++----
7 files changed, 100 insertions(+), 91 deletions(-)
rename Models/{ => Instruments}/Starter/gray.png (100%)
rename Models/{ => Instruments}/Starter/light_gray.png (100%)
rename Models/{ => Instruments}/Starter/starter.ac (100%)
rename Models/{ => Instruments}/Starter/starter.xml (86%)
diff --git a/Models/Starter/gray.png b/Models/Instruments/Starter/gray.png
similarity index 100%
rename from Models/Starter/gray.png
rename to Models/Instruments/Starter/gray.png
diff --git a/Models/Starter/light_gray.png b/Models/Instruments/Starter/light_gray.png
similarity index 100%
rename from Models/Starter/light_gray.png
rename to Models/Instruments/Starter/light_gray.png
diff --git a/Models/Starter/starter.ac b/Models/Instruments/Starter/starter.ac
similarity index 100%
rename from Models/Starter/starter.ac
rename to Models/Instruments/Starter/starter.ac
diff --git a/Models/Starter/starter.xml b/Models/Instruments/Starter/starter.xml
similarity index 86%
rename from Models/Starter/starter.xml
rename to Models/Instruments/Starter/starter.xml
index 895c308..4b7729d 100644
--- a/Models/Starter/starter.xml
+++ b/Models/Instruments/Starter/starter.xml
@@ -12,7 +12,7 @@
false
nasal
-
+
diff --git a/Models/followmeEV.xml b/Models/followmeEV.xml
index 1045868..91f4917 100644
--- a/Models/followmeEV.xml
+++ b/Models/followmeEV.xml
@@ -283,15 +283,15 @@
-
- Aircraft/followme_e-tron/Models/Starter/starter.xml
-
+
+ Aircraft/followme_e-tron/Models/Instruments/starter/starter.xml
+
1.299
-0.19
0.90
18.0
-
+
diff --git a/Nasal/engine.nas b/Nasal/engine.nas
index faf2a69..ec62fdd 100644
--- a/Nasal/engine.nas
+++ b/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");
-}
\ No newline at end of file
+}
+
+var toggleEngine = func(my_engine){
+ if(my_engine.runningState == 0){
+ startEngine(my_engine);
+ }else{
+ stopEngine(my_engine);
+ }
+}
diff --git a/gui/dialogs/vehicle-dialog.xml b/gui/dialogs/vehicle-dialog.xml
index 72ac264..4bef74e 100755
--- a/gui/dialogs/vehicle-dialog.xml
+++ b/gui/dialogs/vehicle-dialog.xml
@@ -29,13 +29,13 @@
-
-
-
+
+
+
vbox
6
-
+
-
+
-
+
-
-
+
+
@@ -116,7 +116,7 @@
/sim/freeze/replay-state
-
+
@@ -133,7 +133,7 @@
/sim/freeze/replay-state
-
+
@@ -141,9 +141,9 @@
-
+
-
+
vbox
6
@@ -261,7 +261,7 @@
-
+
@@ -281,7 +281,7 @@
0
-
+
-
+
vbox
@@ -345,7 +345,7 @@
-
+
vbox
@@ -470,10 +470,10 @@
-
-
+
+
-
+
@@ -490,7 +490,7 @@
nasal
-
+
-
+