121 lines
4.7 KiB
Plaintext
121 lines
4.7 KiB
Plaintext
var gearratio = 9.73;
|
|
props.getNode("/",1).setValue("/controls/engines/engine/rpm1",0);
|
|
props.getNode("/",1).setValue("/controls/engines/engine/direction",1);
|
|
props.getNode("/",1).setValue("/controls/engines/engine/started",0);
|
|
props.getNode("/",1).setValue("/controls/gear/brake-cmd",0);
|
|
|
|
|
|
|
|
var update_engine = func(){
|
|
var throttle = props.getNode("/",1).getValue("/controls/engines/engine/throttle");
|
|
var direction = props.getNode("/",1).getValue("/controls/engines/engine/direction");
|
|
|
|
var fwdUNode = props.getNode("/systems/electrical/e-tron/fwd-eng-U-V",1);
|
|
var fwdANode = props.getNode("/systems/electrical/e-tron/fwd-eng-I-A",1);
|
|
var bwdUNode = props.getNode("/systems/electrical/e-tron/bwd-eng-U-V",1);
|
|
var bwdANode = props.getNode("/systems/electrical/e-tron/bwd-eng-I-A",1);
|
|
|
|
var fwdMaxU = props.getNode("/",1).getValue("/systems/electrical/e-tron/fwd-eng-U-V-max");
|
|
var fwdMaxA = props.getNode("/",1).getValue("/systems/electrical/e-tron/fwd-eng-I-A-max");
|
|
var bwdMaxU = props.getNode("/",1).getValue("/systems/electrical/e-tron/bwd-eng-U-V-max");
|
|
var bwdMaxA = props.getNode("/",1).getValue("/systems/electrical/e-tron/bwd-eng-I-A-max");
|
|
|
|
fwdUNode.setValue(throttle * fwdMaxU);
|
|
fwdANode.setValue(throttle * fwdMaxA);
|
|
bwdUNode.setValue(throttle * bwdMaxU);
|
|
bwdANode.setValue(throttle * bwdMaxA);
|
|
|
|
var fwdPower = fwdUNode.getValue() * fwdANode.getValue();
|
|
var bwdPower = bwdUNode.getValue() * bwdANode.getValue();
|
|
|
|
var cmd_P_kW = (fwdPower + bwdPower)/1000;
|
|
|
|
|
|
#var cmd_P_kW = throttle*max_P_kW;
|
|
|
|
var rpm = props.getNode("/",1).getValue("/controls/engines/engine/rpm1");
|
|
var rpm_rate = cmd_P_kW * 0.06;
|
|
var max_rpm = cmd_P_kW * 90 + 1000;
|
|
if(rpm > max_rpm){
|
|
rpm_rate = -20;
|
|
}else if(rpm == max_rpm){
|
|
rpm_rate = 0;
|
|
}else{
|
|
rpm_rate = cmd_P_kW* 0.06;
|
|
}
|
|
var rpmActual = rpm_calculate(rpm_rate);
|
|
var torque = 0;
|
|
if(rpmActual == 0){
|
|
torque = 0;
|
|
}else{
|
|
torque = (cmd_P_kW * 1000) / (rpmActual * 6.283 * 0.1667);#max 967
|
|
}
|
|
var force = 3.33*direction*torque*gearratio;
|
|
#print("torque:"~torque);
|
|
if(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit/compression-ft") > 0){
|
|
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FL/magnitude", force/4);
|
|
}else{
|
|
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FL/magnitude", 0);
|
|
}
|
|
|
|
if(props.getNode("/",1).getValue("/fdm/jsbsim/gear/unit/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/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/compression-ft") > 0){
|
|
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/BR/magnitude", force/4);
|
|
}else{
|
|
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/FR/magnitude", 0);
|
|
}
|
|
|
|
}
|
|
|
|
var engineTimer = maketimer(0.001, update_engine);
|
|
|
|
|
|
var rpm_calculate = func(rpm_rate){
|
|
var rpm = getprop("/controls/engines/engine/rpm1");
|
|
var rpm2 = 0;
|
|
var gearspeed = math.round(props.getNode("/",1).getValue("/gear/gear/rollspeed-ms"));
|
|
var rpm2 = (gearspeed/0.3)*9.8;
|
|
#print(rpm2);
|
|
rpm_rate = rpm_rate/1000;
|
|
rpm = rpm + rpm * rpm_rate;
|
|
var rpmActual = (rpm + rpm2)/2;
|
|
props.getNode("/",1).setValue("/controls/engines/engine/rpm1",rpm);
|
|
props.getNode("/",1).setValue("/controls/engines/engine/rpma",rpmActual);
|
|
return rpmActual;
|
|
}
|
|
|
|
|
|
var startEngine = func(){
|
|
props.getNode("/",1).setValue("/controls/engines/engine/rpm1",1000);
|
|
props.getNode("/",1).setValue("/controls/engines/engine/started",1);
|
|
props.getNode("/",1).setValue("/systems/electrical/e-tron/switch/bat-fwd-eng",1);
|
|
props.getNode("/",1).setValue("/systems/electrical/e-tron/switch/bat-bwd-eng",1);
|
|
engineTimer.simulatedTime = 1;
|
|
engineTimer.start();
|
|
print("Engine started");
|
|
}
|
|
var stopEngine = func(){
|
|
props.getNode("/",1).setValue("/controls/engines/engine/started",0);
|
|
props.getNode("/",1).setValue("/fdm/jsbsim/external_reactions/engine/magnitude", 0);
|
|
props.getNode("/",1).setValue("/systems/electrical/e-tron/switch/bat-fwd-eng",0);
|
|
props.getNode("/",1).setValue("/systems/electrical/e-tron/switch/bat-bwd-eng",0);
|
|
engineTimer.stop();
|
|
print("Engine stopped");
|
|
}
|
|
|
|
|
|
|
|
|
|
|