www.flightgear.ru

FlightGear - свободно распространяемый, кросс-платформенный авиасимулятор.
Текущее время: 07 авг 2020, 16:08

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 25 сен 2015, 17:34 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
Патч.
Исправления ЯК-53М1 для повдения руля направления при движении на земле.

1.
Решение это установка "magic number" <max_steer unit="DEG">360.0</max_steer> в секции контакт/"NOSE" файла FDM
- воздушный руль направления начинает реагировать на скорость самолета более похоже на ~V^2;
- самолет перестает рулить по примитивному нереалистическому принципу "угол руля поторота равен скорости вращения".

Это приводит к двум рулевым системам смолета и двум парам кнопок на клавиатуре
- w,e для воздушного руля
- b,m,n для руления на земле

2.
Чтобы рулить на малых IAS было можно, надо эмулировать тормозной редуктор ЯК-52/53 и рулить раздельным торможением (угол воздушного руля поворота определяет как происходит торможение).

Три файла патча
"Yak-53M1-I-set.xml"
Код:
<input>
   <!-- Key bindings -->
   <keyboard n="0" include="local/keyb.xml"/>
   <keyboard n="0" include="local/keyb-dcf.xml"/>
   !<keyboard n="0" include="local/keyb-dcf-brakes-rud.xml"/>
   <keyboard n="0" include="set/Yak-53M1-keyb.xml"/>
...
   <!-- common user properties -->   
      <keyb> <file>local/Nasal/keyb-dcf.nas</file> </keyb>
      !<keyb_brakes_rud> <file>local/Nasal/keyb-dcf-brakes-rud.nas</file> </keyb_brakes_rud>


"local/keyb-dcf-brakes-rud.xml"
Код:
<?xml version="1.0"?>
<!--
Key binding definitions for yaw on ground
for plane that

has no steer wheel
has no separated brakes
has reduction of brake to left-right by rudder position
-->
<PropertyList>

 <key n="78">
  <name>N</name>
  <desc>Toggle parking brake on or off</desc>
  <binding>
   <command>nasal</command>
   <script>
   controls.applyParkingBrake(1);
   keyb_brakes_rud.brakes_off();
   </script>
  </binding>
  <mod-up>
   <binding>
    <command>nasal</command>
    <script>
    controls.applyParkingBrake(0);
    </script>
   </binding>
  </mod-up>
 </key>

 <key n="98">
  <name>b</name>
  <desc>Move rudder left</desc>
  <repeatable type="bool">true</repeatable>
  <binding>
   <command>property-adjust</command>
   <property>controls/flight/rudder</property>
   <step type="double">-0.25</step>
  </binding>
 </key>

 <key n="109">
  <name>m</name>
  <desc>Move rudder right</desc>
  <repeatable type="bool">true</repeatable>
  <binding>
   <command>property-adjust</command>
   <property>controls/flight/rudder</property>
   <step type="double">0.25</step>
  </binding>
 </key>

 <key n="110">
  <name>n</name>
  <desc>Apply all brakes by rudder position</desc>
  <binding>
   <command>nasal</command>
   <script>keyb_brakes_rud.brakes_on()</script>
  </binding>
  <mod-up>
   <binding>
    <command>nasal</command>
    <script>keyb_brakes_rud.brakes_off()</script>
   </binding>
  </mod-up>
 </key>

</PropertyList>


"local/Nasal/keyb_brakes_rud.nas"
Код:
# user aircraft control
# each included nasal file must be in own namespace
# namespace keyb_brakes_rud

#var fullBrakeTime = 0.5;
#var applyBrakes = func (v, which = 0) {
#    if (which <= 0) { interpolate("/controls/gear/brake-left", v, fullBrakeTime); }
#    if (which >= 0) { interpolate("/controls/gear/brake-right", v, fullBrakeTime); }}

##########################################################################################
# brakes by rudder reduction
##########################################################################################
#
var brake_on_time = 0.4;
var brake_off_time = 0.1;

#rudder>0 moved right
#[0.00-0.25) both brakes to max
#[0.25-0.50) reducing left brake from max/2 to zero
#[0.25-0.50) reducing right brake from max to br_shift
#[0.50-1.00] increasing right brake from br_shift to max
var lim_both = 0.25;
var lim_opp = 0.50;
var br_shift = 0.10;

# count brake reduction
# rud must be >0
var syn_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (br_shift - 1.0)/(lim_opp - lim_both);
   var b = 1.0 - (k*lim_both);
   return k*rud + b;
   }

   var k = (1.0 - br_shift)/(1.0 - lim_opp);
   var b = 1.0 - (k*1.0);
   return k*rud + b;
}

# count opposite brake reduction
# rud must be >0
var opp_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (0.0 - 0.5)/(lim_opp - lim_both);
   var b = 0.5 - (k*lim_both);
   return k*rud + b;
   }

   return 0.0;
}

#
var brakes_on = func () {
   
   #
   var rud = getprop("controls/flight/rudder");
    if( rud == nil ){ return; }
    if( rud > 1.0 ){ return; }
    if( rud < -1.0 ){ return; }

    #
   var l_brake = getprop("controls/gear/brake-left");
    if( l_brake == nil ){ return; }
   var r_brake = getprop("controls/gear/brake-right");
    if( r_brake == nil ){ return; }

    #
    if( rud >= lim_both ){
    interpolate("controls/gear/brake-right", syn_brake(rud), brake_on_time);
    interpolate("controls/gear/brake-left", opp_brake(rud), brake_on_time);
    return;
    }

    #
    if( rud <= -lim_both ){
    interpolate("controls/gear/brake-left", syn_brake(-rud), brake_on_time);
    interpolate("controls/gear/brake-right", opp_brake(-rud), brake_on_time);
    return;
    }

    #
    if( rud >= 0 ){
    interpolate("controls/gear/brake-right", 1.0, brake_on_time);
    interpolate("controls/gear/brake-left", 1.0, brake_on_time);
    return;
    }

    #
    if( rud <= 0 ){
    interpolate("controls/gear/brake-left", 1.0, brake_on_time);
    interpolate("controls/gear/brake-right", 1.0, brake_on_time);
    return;
    }
}

#
var brakes_off = func () {

    interpolate("controls/gear/brake-left", 0, brake_off_time);
    interpolate("controls/gear/brake-right", 0, brake_off_time);
}

##########################################################################################

Это скрипт второй версии, причины принятия решений:
- в условия стресса при необходимости максимальной силы поворота пилот давит на педаль до упора инстинктивно, в этой позиции педали должен быть и максимум раздельного торможения, нет времени искать центральный угол поворота руля для усиления тормоза;
- во время разбега на ЯК-53М1 пользоваться тормозами для компенсации бокового ветра категорически запрещено (риск капотирования трехколесного шасси с коротким выносом носовой стойки и перегрева тормоза к моменту когда он может быть нужен как тормоз), поэтому положение большой тормозной силы на максимуме руля направления не помеха;
- короткие нажатия на рычаг тормоза, благодаря интерполяции за 0.4 секунды, позволяют умеьшать максимальную тормозную силу даже в позициях педали с ее большими максимальными значениями;
- во время руления макс скорость ограничена 30 км/ч, пожтому времени достаточно чтобы найти позицию педали 0.5 и пользоваться минимальными торможными усилиями, также легко вращать руль влево-вправо при маневрах на малые, а не на большие углы;
- позиция педали менее 0.25 это обычный тормоз, в позиции 0.25-0.5 это обычный тормоз с малым смещением для руления+торможения, это не связано с позициями для руления 0.5-1.0 и плохая на вид кривая тормозной силы 1-0-1 не проблема, не нужна ее монотонность.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 29 сен 2015, 15:15 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
Оказалось бы трудным изготовить такой тормозной редуктор как V2, который бы отключался от педалей, когда нажат тормоз, поэтому редуктор постоянно подключен к педалям и постоянно отслеживает состояние педалей перераспеределяя тормозные усилия при нажатом рычаге тормоза.

Новый патч версии 3 реализует такое, более правильное поведение.
Код:
# user aircraft control
# each included nasal file must be in own namespace
# namespace keyb_brakes_rud

#var fullBrakeTime = 0.5;
#var applyBrakes = func (v, which = 0) {
#    if (which <= 0) { interpolate("/controls/gear/brake-left", v, fullBrakeTime); }
#    if (which >= 0) { interpolate("/controls/gear/brake-right", v, fullBrakeTime); }}

##########################################################################################
# brakes by rudder reduction
##########################################################################################
#
var version = 3.0;
var brake_on_time = 0.3;
var brake_off_time = 0.1;

var brake_on_proc_time = 0.1;
var brake_on_proc_start_val = 0.001;

#################################
#rudder>0 moved right
#[0.00-0.25) both brakes to max
#[0.25-0.50) reducing left brake from max/2 to zero
#[0.25-0.50) reducing right brake from max to br_shift
#[0.50-1.00] increasing right brake from br_shift to max
var lim_both = 0.25;
var lim_opp = 0.50;
var br_shift = 0.10;

# count brake reduction
# rud must be >0
var syn_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (br_shift - 1.0)/(lim_opp - lim_both);
   var b = 1.0 - (k*lim_both);
   return k*rud + b;
   }

   var k = (1.0 - br_shift)/(1.0 - lim_opp);
   var b = 1.0 - (k*1.0);
   return k*rud + b;
}

# count opposite brake reduction
# rud must be >0
var opp_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (0.0 - 0.5)/(lim_opp - lim_both);
   var b = 0.5 - (k*lim_both);
   return k*rud + b;
   }

   return 0.0;
}

#################################
#
var brakes_on_process = func () {

    #
   var br_pos = getprop("controls/gear/local/brake_on_interp_pos");
    if( br_pos == nil ){ return; }

    #end of brakes_on_process exec
    var eop = 0;
    if( br_pos < brake_on_proc_start_val ){
   
    eop = 1;
    #implements brake shoe disconnect system
    br_pos = 0;
    }

   #
   var rud = getprop("controls/flight/rudder");
    if( rud == nil ){ return; }
    if( rud > 1.0 ){ rud = 1.0; }
    if( rud < -1.0 ){ rud = -1.0; }

    #
   var l_brake = getprop("controls/gear/brake-left");
    if( l_brake == nil ){ return; }
   var r_brake = getprop("controls/gear/brake-right");
    if( r_brake == nil ){ return; }

    #
    while(1){

    if( rud >= lim_both ){
    setprop("controls/gear/brake-right", syn_brake(rud)*br_pos );
    setprop("controls/gear/brake-left",  opp_brake(rud)*br_pos );
    break;
    }

    #
    if( rud <= -lim_both ){
    setprop("controls/gear/brake-left",  syn_brake(-rud)*br_pos );
    setprop("controls/gear/brake-right", opp_brake(-rud)*br_pos );
    break;
    }

    #
    if( rud >= 0 ){
    setprop("controls/gear/brake-right", 1.0*br_pos );
    setprop("controls/gear/brake-left",  1.0*br_pos );
    break;
    }

    #
    if( rud <= 0 ){
    setprop("controls/gear/brake-left",  1.0*br_pos );
    setprop("controls/gear/brake-right", 1.0*br_pos );
    break;
    }

    break;
    }

    #
   if( !eop ){ settimer( brakes_on_process, brake_on_proc_time ); }
}

#################################
#
var brakes_on = func () {
   
   var tmp = getprop("controls/gear/local/brake_on_interp_pos");
    if( tmp == nil ){ return; }

    setprop("controls/gear/local/brake_on_interp_pos", brake_on_proc_start_val );
   interpolate ("controls/gear/local/brake_on_interp_pos", 1.0, brake_on_time );
   settimer( brakes_on_process, brake_on_proc_time );
}

#
var brakes_off = func () {

   interpolate ("controls/gear/local/brake_on_interp_pos", 0.0, brake_off_time );
}

##########################################################################################


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 30 сен 2015, 17:34 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
К сожалению я забыл что есть пневматические тормоза, так что составил небольшой мануал по тормозам, и как их использовать с этим nasal кодом

1. Виды тормозов трения для колес
привод: гидравлический, тросовой, пневматический
источник тормозящей силы: вакуумный (атмосферное давление), избыточное давление
регуляция тормозящей силы, когда положение тормозного рычага и редуктора определяют:
- переменное значение тормозой силы в реальном времени;
- макс значение значение тормозой силы в момент нажания на тормоз.

Примеры тормозов:
гидравлический вакуумный это "обычный" тормоз для легких авто;
тросовой избыточного давления это "обычный" тормоз для легких мото;
пневматический избыточного давления это тормоз для одной из вариаций ЯК-53М1;

Источником вакуума для торможения является работающий поршневой двигатель или иной декомпрессор, работающий от электричества, воздуха и т.д.

Пневматический тормоз избыточного давления работает по версии V03.1 (усовершенствованной версии V02, которая как и V03.0 явным образом разделяет рычаг тормоза и редуктор), путем дозирования в момент нажатия количества воздуха в тормозной цилиндр фиксированного объема, чтобы сменить силу надо отпустить тормоз, выпустить из тормозного цилиндра воздух и опять нажать на тормоз.

Впуск-выпуск воздуха в тормозной цилиндр осуществляется устройствами типа обгонных муфт на прямом и обратном ходе тормозного рычага, реальное количество воздуха в проходящего за это время в каждый цилиндр дозируется размером отверстия регулируемого редуктором. Либо это все достигается клапанами регулируемого давления на главном рычаге и на редукторе.

Для конкретной модели ЯК-53М1 надо использовать или V03.0(гидро) или новую V03.1(пневмо). В новой V03.1 отличий мало, но лучше запостить весь код чем описывать куда вставить измененые строки или использовать для этого формат diff
Код:
# user aircraft control
# each included nasal file must be in own namespace
# namespace keyb_brakes_rud

#var fullBrakeTime = 0.5;
#var applyBrakes = func (v, which = 0) {
#    if (which <= 0) { interpolate("/controls/gear/brake-left", v, fullBrakeTime); }
#    if (which >= 0) { interpolate("/controls/gear/brake-right", v, fullBrakeTime); }}

##########################################################################################
# brakes by rudder reduction
##########################################################################################
# pneumo .1
var version = 3.1;

var brake_on_time = 0.3;
var brake_off_time = 0.1;

var brake_on_proc_time = 0.1;
var brake_on_proc_start_val = 0.001;

#################################
#rudder>0 moved right
#[0.00-0.25) both brakes to max
#[0.25-0.50) reducing left brake from max/2 to zero
#[0.25-0.50) reducing right brake from max to br_shift
#[0.50-1.00] increasing right brake from br_shift to max
var lim_both = 0.25;
var lim_opp = 0.50;
var br_shift = 0.10;

# count brake reduction
# rud must be >0
var syn_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (br_shift - 1.0)/(lim_opp - lim_both);
   var b = 1.0 - (k*lim_both);
   return k*rud + b;
   }

   var k = (1.0 - br_shift)/(1.0 - lim_opp);
   var b = 1.0 - (k*1.0);
   return k*rud + b;
}

# count opposite brake reduction
# rud must be >0
var opp_brake = func (rud){

   if(rud < lim_both)return 1.0;

   if(rud < lim_opp){
   var k = (0.0 - 0.5)/(lim_opp - lim_both);
   var b = 0.5 - (k*lim_both);
   return k*rud + b;
   }

   return 0.0;
}

#################################
#
var is_br_max = 0;
var brakes_on_process = func () {

    #
   var br_pos = getprop("controls/gear/local/brake_on_interp_pos");
    if( br_pos == nil ){ return; }

    #end of brakes_on_process exec
    var is_eop = ((br_pos < brake_on_proc_start_val)? 1: 0);

    #implements brake shoe disconnect system
    if( is_eop ){
    
    br_pos = 0;
    is_br_max = 0;
    }

   #
   var rud = getprop("controls/flight/rudder");
    if( rud == nil ){ return; }
    if( rud > 1.0 ){ rud = 1.0; }
    if( rud < -1.0 ){ rud = -1.0; }

    #
   var l_brake = getprop("controls/gear/brake-left");
    if( l_brake == nil ){ return; }
   var r_brake = getprop("controls/gear/brake-right");
    if( r_brake == nil ){ return; }

    #
    while(!is_br_max){

    if( rud >= lim_both ){
    setprop("controls/gear/brake-right", syn_brake(rud)*br_pos );
    setprop("controls/gear/brake-left",  opp_brake(rud)*br_pos );
    break;
    }

    #
    if( rud <= -lim_both ){
    setprop("controls/gear/brake-left",  syn_brake(-rud)*br_pos );
    setprop("controls/gear/brake-right", opp_brake(-rud)*br_pos );
    break;
    }

    #
    if( rud >= 0 ){
    setprop("controls/gear/brake-right", 1.0*br_pos );
    setprop("controls/gear/brake-left",  1.0*br_pos );
    break;
    }

    #
    if( rud <= 0 ){
    setprop("controls/gear/brake-left",  1.0*br_pos );
    setprop("controls/gear/brake-right", 1.0*br_pos );
    break;
    }

    break;
    }

    #
    if( br_pos == 1.0 ){ is_br_max = 1;   }
   if( !is_eop ){ settimer( brakes_on_process, brake_on_proc_time ); }
}

#################################
#
var brakes_on = func () {
   
   var tmp = getprop("controls/gear/local/brake_on_interp_pos");
    if( tmp == nil ){ return; }

    setprop("controls/gear/local/brake_on_interp_pos", brake_on_proc_start_val );
   settimer( brakes_on_process, brake_on_proc_time );
   interpolate ("controls/gear/local/brake_on_interp_pos", 1.0, brake_on_time );
}

#
var brakes_off = func () {

   interpolate ("controls/gear/local/brake_on_interp_pos", 0.0, brake_off_time );
}

##########################################################################################


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 13 окт 2015, 02:42 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
Извлечение из FAQ для YAK53-M1.
Q:
12-Oct-15, 23:47 #4
Richard Marklew is online now Moderator of Blender

>and adding new objects requires control "object\display\Transparency" by texture existence.
What does this mean?
Please in clear English

A:
hey, you
"adding new objects" is subj (3d face)
"requires" is verb
"control" is noun (means what requires "he requires surface")
"object\display\Transparency" is blender property
"by" (means "with the help" "he did surface by hands")
"texture" is noun
"existence" is noun

I treat your request as "harm with planned intention" that results in:
"i don't want to discuss special tools with fairy mind persons, have no enough kindness, do not write me any more and do not remove my messages"
do you understand my english? or what?

Они напали на мирных крестьян! Задымим KSFO жирным Красным дымом.
Изображение
Изображение
Изображение
Изображение
Изображение

Для этого
добавить в файл: Models/Yak-53M1.xml
Код:
    <!-- air trainig smokes -->
  <!-- Left -->
  <model>
    <path>Aircraft/Yak-53M1/Models/Effects/Smokes/AirTrainig.xml</path>
    <offsets>
      <x-m> 2.4 </x-m>
      <y-m> -4.7 </y-m>
      <z-m> -0.23 </z-m>
      <roll-deg>    0 </roll-deg>
      <pitch-deg>   0 </pitch-deg>
      <heading-deg> 0 </heading-deg>
    </offsets>
  </model>

  <!-- Right -->
  <model>
    <path>Aircraft/Yak-53M1/Models/Effects/Smokes/AirTrainig.xml</path>
    <offsets>
      <x-m> 2.4 </x-m>
      <y-m> 4.7 </y-m>
      <z-m> -0.23 </z-m>
      <roll-deg>    0 </roll-deg>
      <pitch-deg>   0 </pitch-deg>
      <heading-deg> 0 </heading-deg>
    </offsets>
  </model>


добавить в файл: Set/Yak-53M1-local.xml
Код:
   <!-- -->
   <is_smokes type="bool">false</is_smokes>


создать файл: Models/Effects/Smokes/AirTrainig.xml
Код:
<?xml version="1.0" encoding="UTF-8"?>

<PropertyList>

  <particlesystem>
    <name>aerosmoke</name>
    <texture>smoke.png</texture>
    <emissive>false</emissive>
    <lighting>false</lighting>

    <offsets>
      <x-m> -0.3 </x-m>
      <y-m>  0.0 </y-m>
      <z-m>  0.0 </z-m>
    </offsets>

    <condition>
      <property>local/is_smokes</property>
    </condition>

    <attach>world</attach>

    <placer>
      <type>point</type>
    </placer>

    <shooter>
      <theta-min-deg> 84.0 </theta-min-deg>
      <theta-max-deg> 86.0 </theta-max-deg>
      <phi-min-deg>   -1.5 </phi-min-deg>
      <phi-max-deg>    1.5 </phi-max-deg>
      <speed-mps>
        <value>  0 </value>
        <spread> 0 </spread>
      </speed-mps>
      <rotation-speed>
        <x-max-deg-sec>  5 </x-max-deg-sec>
        <x-min-deg-sec>  5 </x-min-deg-sec>
        <y-max-deg-sec>  5 </y-max-deg-sec>
        <y-min-deg-sec> 25 </y-min-deg-sec>
        <z-max-deg-sec> 25 </z-max-deg-sec>
        <z-min-deg-sec> 25 </z-min-deg-sec>
      </rotation-speed>
    </shooter>

    <counter>
      <particles-per-sec>
        <value>  10 </value>
        <spread>  5 </spread>
      </particles-per-sec>
    </counter>

    <align>billboard</align>

    <particle>
      <start>
        <color>
          <red><value>   1.0 </value></red>
          <green><value> 0.0 </value></green>
          <blue><value>  1.0 </value></blue>
          <alpha><value> 1.0 </value></alpha>
        </color>
        <size><value> 0.8 </value></size>
      </start>
      <end>
        <color>
          <red><value>   1.0 </value></red>
          <green><value> 0.0 </value></green>
          <blue><value>  1.0 </value></blue>
          <alpha><value> 1.0 </value></alpha>
        </color>
        <size><value> 1.0 </value></size>
      </end>

      <life-sec>
        <value> 9600 </value>
      </life-sec>

      <mass-kg>  0.025 </mass-kg>
      <radius-m> 0.175 </radius-m>
    </particle>

    <program>
      <fluid>   air  </fluid>
      <gravity> true </gravity>
      <wind>    true </wind>
    </program>

  </particlesystem>

</PropertyList>


скопировать файл Models/Effects/Smokes/smoke.png
smoke.png


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 30 окт 2015, 23:27 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
Летчик, знай свой самолет!

В честь полугодия от начала публикации ЯК-53М1,
дарится праздничный самолет ЯК-53М1-И с двигателем 2000 л.с.
(самолет еще находится в стадии испытаний).

YAK-53M1-I2000V25JXM1360F240C300T1900
Такой ни за какие деньги не купишь!

Загрузить самолет r151101: inst_Yak-53M1-I_r151101.zip
Кртинки из жизни самолета: Yak-53M1-I_r150501_images_from_plane_life.zip
Изображение
Изображение


Вложения:
Комментарий к файлу: Загрузить самолет r151101
inst_Yak-53M1-I_r151101.zip [5.01 Мб]
Скачиваний: 321
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Як-53М1 отпочковался
СообщениеДобавлено: 08 ноя 2015, 16:27 
Не в сети

Зарегистрирован: 16 апр 2015, 22:03
Сообщения: 31
Важное исправление для кода стабилизатора высоты,
без этого исправления стабилизатор не будет работать, а будет загонять самолет вверх,
ошибка произшла оттого что я перед самой публикацией перенес внутренние переменные в дерево XML, но забыл об общности знака, который появляется в XML, другими словами в XML "local/caa_limit_dn" хранится не по модулю, а со знаком.

Исправить в файле "Yak-53M1/Nasal/autop.nas":
Код:
   prev_alt = alt;

    #
    var total_pitch_up_limit = getprop("local/caa_limit_up_flaps");
    if(1){
       var tmp = getprop("fdm/jsbsim/fcs/flap-pos-norm");
       if( tmp == nil ){ settimer(alt_by_elevator, 3); return; }
       
       #flaps OFF
       if( tmp < 0.01 ){ total_pitch_up_limit = getprop("local/caa_limit_up"); }
    }
    if( total_pitch_up_limit == nil ){ settimer(alt_by_elevator, 3); return; }
    if( total_pitch_up_limit < 0 ){ total_pitch_up_limit = -total_pitch_up_limit; }
    
    var total_pitch_dn_limit = getprop("local/caa_limit_dn");
    if( total_pitch_dn_limit == nil ){ settimer(alt_by_elevator, 3); return; }
    if( total_pitch_dn_limit < 0 ){ total_pitch_dn_limit = -total_pitch_dn_limit; }
    
    var pitch_ofs = getprop("local/caa_pitch_ofs");
    if( pitch_ofs == nil ){ settimer(alt_by_elevator, 3); return; }
    total_pitch_up_limit += (pitch_ofs - 2);
    total_pitch_dn_limit -= (pitch_ofs + 2);

    #
   var alt_ref = getprop("local/auto_alt_ref_m");

от знака "#" после строки 41:
Код:
   prev_alt = alt;

    #
    var total_pitch_up_limit = ...

до знака "#" в строках:
Код:
   #
   var alt_ref = getprop("local/auto_alt_ref_m");


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB