SOS: вопросы по приборам на XML — Панели и приборы

10 минут назад, hrjushkin пишет:

. А что у вас в aircraft.cfg? Можно глянуть его?

Да что там?… Обычный Ан-24. 

Копайтесь:Aircraft.cfg_An-24RV.zip

6 минут назад, Казачок пишет:

Да что там?… Обычный Ан-24.

Да, все то же самое. Странно, чего это не хочет. А если нажать и подержать Ctrl-F2 и Ctrl-F3.. у вас на стоянке с выключенными двигателями лопасти перемещаются или нет? Просто может это как-то зависит от самой модели самолета (mdl файла). Хотя самолет тот же самый, что и у меня..

Модель antonov an-24rv.mdl (2.53 МБ (2 661 426 байт)) — он?

1 час назад, Казачок пишет:

Помню, что где-то на форуме по Ан-24РВ сообщалось, что можно на данной модели реализовать флюгирование (там даже скрин был самолёта с зафлюгированым винтом).

Действительно, есть фича такая — флюгируется винт только в полете, поэтому на земле у меня и не получалось.

Вот из всего этого:

1 час назад, hrjushkin пишет:

(P:Local Time, seconds) 59.00 + (>L:Feather1_Var,number) + -16384.0 (>K:PROP_PITCH1_SET) 1 (>L:Prop1_Feathered,bool) 1 (>L:Prop1_Feathered_State,enum) (>K:MIXTURE1_LEAN) (>K:ENGINE) (L:Prop2_Feathered,bool) ! if{ (>K:SELECT_2) } (L:Prop3_Feathered,bool) ! if{ (>K:SELECT_3) } (L:Prop4_Feathered,bool) ! if{ (>K:SELECT_4) }

нужный кусок это: -16384 (>K:PROP_PITCH1_SET) 1 (>K:MIXTURE1_LEAN)

Первое записывает -16384 и флюгирует лопасти, а второе перекрывает подачу топлива и останавливает двигатель.

24 минуты назад, hrjushkin пишет:

Действительно, есть фича такая — флюгируется винт только в полете, поэтому на земле у меня и не получалось.

Вот из всего этого:

нужный кусок это: -16384 (>K:PROP_PITCH1_SET) 1 (>K:MIXTURE1_LEAN)

Первое записывает -16384 и флюгирует лопасти, а второе перекрывает подачу топлива и останавливает двигатель.

Вот! Вот этого я и добивался! Спасибо тебе, добрый человек! 

Лишне из записи выкинул.

Кстати, сажал сейчас Ан-24 с зафлюгированым винтом — В момент касания полосы лопасти  перевелись на малый шаг. Так что флюгер работает действительно только в воздухе.

Всем добрый день:bye::bye:
Начал изучать как же все таки пишутся приборы на XML, давно была мечта сделать что-то свое))
Начал разбираться в XML и столкнулся с первыми трудностями:

<Gauge Name=»APU_FUEL_VALVE_Light» Version=»1.0″>
<Element>
    <Select>
       <Value>(L:Main_Switch, bool) 1 == &amp;&amp;
              (L:Fuel_Valve, bool) 1 == &amp;&amp;</Value>
        <Case Value=»0″>
            <Image Name=»Green_Light_Off.bmp» ImageSizes=»20,20″/>
        </Case>
        <Case Value=»1″>
            <Image Name=»Green_Light_On.bmp» ImageSizes=»20,20″/>
        </Case>
    </Select>
</Element>                                                                                   
</Gauge>

Как сделать так, чтобы Case Value=»1″ выполнялся только тогда, когда (L:Main_Switch, bool) и (L:Fuel_Valve, bool) оба истины?

17 минут назад, GreedLow пишет:

<Value>(L:Main_Switch, bool) 1 == &amp;&amp;
              (L:Fuel_Valve, bool) 1 == &amp;&amp;</Value>

Надо так:

<Value>(L:Main_Switch, bool) 1 == (L:Fuel_Valve, bool) 1 == &amp;&amp;</Value>

Var_Fire, XML прибор пожара, установлен на Ту-104, срабатывает в каждом полете, напрягает. Но и полностью удалять не хочется, разнообразит полет. Как бы сделать срабатывания пореже, при каких условиях срабатывает, может строчки какие поменять? Ищу специалистов, прошу разъяснить, если не сложно, а то темный лес для меня))

Spoiler

<Gauge Name=»Test» Version=»1.0″>

<Image Name=»Test_Back.bmp» /> 


<!— ==  Wings == —>

<Element>
<Select>
<Value>
(L:Fire_On_True, bool) if{ 0 (>K:TOGGLE_AFTERBURNER1) }
</Value>
</Select>
</Element>

<Element>
      <Select>
         <Value>
(L:Fire_On, bool) ! if{ (P:Absolute time, minutes) 10 / int 100 % 0 == (P:Absolute time, minutes) 10 / int 100 % 25 == ||
 (P:Absolute time, minutes) 10 / int 100 % 50 == ||  (P:Absolute time, minutes) 10 / int 100 % 75 == ||
if{ 1 (>L:Fire_On_No, bool) } els{ 0 (>L:Fire_On_No, bool) } } els{ 0 (>L:Fire_On_No, bool) }

</Value>
      </Select>
   </Element>


<Element>
      <Select>
         <Value>
(P:Absolute time, minutes) int 100 % (A:Radio height, meters) 10 * int 100 % == (L:Fire_On_No, bool) &amp;&amp; if{
1 (>L:Fire_On, bool) (P:Absolute time, minutes) 0.01 + (>L:Fire_Test_End, number) }
</Value>
      </Select>
   </Element>

<Element>
      <Select>
         <Value>
(P:Absolute time, minutes) (L:Fire_Test_End, number) &lt; if{ (A:Radio height, meters) 10 / int 10 % 6 &lt; if{ 1 (>L:Fire_On_True, bool) } els{ 1 (>L:Fire_On_True, bool) } (A:Radio height, meters) 10 / int 10 % (>L:Fire_Who, enum) }
</Value>
      </Select>
   </Element>


<Element>
      <Select>
<Value>
 (L:Fire_On_True, bool) (L:Fire_On, bool) &amp;&amp;
 (P:Absolute time, minutes) (L:Fire_Test_End, number) 1 + &gt; &amp;&amp; if{
(L:Fire_Who, enum) 0 == if{ (>K:YAW_DAMPER_OFF) 0 (>K:AUTOCOORD_OFF) 0 (>K:AP_WING_LEVELER_OFF) 
1 (>L:AP_Turn, enum) (A:ENG2 FAILED, bool) ! if{ 0 (>K:TOGGLE_ENGINE2_FAILURE) } }
(L:Fire_Who, enum) 1 == if{ (>K:MIXTURE1_LEAN) }
(L:Fire_Who, enum) 2 == if{ (>K:MIXTURE1_LEAN) }
(L:Fire_Who, enum) 3 == if{ (>K:MIXTURE1_LEAN) }
(L:Fire_Who, enum) 4 == if{ (>K:MIXTURE2_LEAN) }
(L:Fire_Who, enum) 5 == if{ (>K:MIXTURE2_LEAN) }
(L:Fire_Who, enum) 6 == if{ (>K:MIXTURE2_LEAN) }
(L:Fire_Who, enum) 7 == if{ (>K:YAW_DAMPER_OFF) 0 (>K:AUTOCOORD_OFF) 0 (>K:AP_WING_LEVELER_OFF) 
1 (L:AP_Turn, enum) (A:ENG1 FAILED, bool) ! if{ 0 (>K:TOGGLE_ENGINE1_FAILURE) } }
(L:Fire_Who, enum) 8 == if{ (A:CIRCUIT AVIONICS ON, bool) if{ (>K:TOGGLE_AVIONICS_MASTER) } }
(L:Fire_Who, enum) 9 == if{ (>K:AP_ALT_HOLD_OFF) 1 (>L:AP_Alt, enum) }
}
</Value>
      </Select>
   </Element>

<Element>
      <Select>
         <Value>
(L:Fire_Who, enum) 0 &gt; (L:Fire_Who, enum) 7 &lt;= &amp;&amp; if{ 12 (>G:Var1) } els{ 6 (>G:Var1) }
</Value>
      </Select>
   </Element>

<Element>
      <Select>
         <Value>
(L:Fire_On_True, bool) ! if{  (L:Fire_Test_End, number) 0.5 + (>L:Anti_Fire_End, number) } 
els{ (L:Antifire, bool) if{ (L:Anti_Fire_Start, number) (G:Var1) + (>L:Anti_Fire_End, number) } 
 els{ (P:Absolute time, minutes) (G:Var1) + (>L:Anti_Fire_End, number) } } }

</Value>
      </Select>
   </Element>


<Element>
      <Select>
         <Value>
(P:Absolute time, minutes) (L:Anti_Fire_End, number) &gt; if{ 0 (>L:Fire_On, bool) }
</Value>
      </Select>
   </Element>

<Element>
      <Select>
         <Value>
(L:Fire_On, bool)  (L:Fire_On_True, bool) &amp;&amp; if{ 0 (>K:SMOKE_ON) } els{ 0 (>K:SMOKE_OFF) }
</Value>
      </Select>
   </Element>

 

<Element>
<Position X=»10″ Y=»10″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((P:Absolute time, minutes) int 100 %)%!2.2f!% Digit 1</String> 
 </Text>
  </Element>


<Element>
<Position X=»10″ Y=»25″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Fire_On_No, bool))%!1d!% Fire_On_No, bool</String> 
 </Text>
  </Element>

<Element>
<Position X=»10″ Y=»40″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
  <String>%((L:Fire_On, bool))%!1d!% Fire_On, bool</String> 
 </Text>
  </Element>

<Element>
<Position X=»10″ Y=»55″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
<String>%((A:Radio height, meters) 10 * int 100 %)%!02.2f!% Digit 4</String> 
 </Text>
  </Element>

  
<Element>
<Position X=»10″ Y=»70″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((A:Radio height, meters))%!05.3f!% INDICATED ALTITUDE</String> 
 </Text>
  </Element>

<Element>
<Position X=»10″ Y=»85″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Anti_Fire_Start, number))%!12.2f!% Anti_Fire_Start, number</String> 
 </Text>
  </Element>

 
<Element>
<Position X=»10″ Y=»100″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Anti_Fire_End, number))%!12.2f!% Anti_Fire_End, number</String> 
 </Text>
</Element>

<Element>
<Position X=»10″ Y=»115″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((A:Radio height, meters) 10 / int 10 %)%!2.2f!% Digit 5</String> 
 </Text>
</Element>


<Element>
<Position X=»10″ Y=»130″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Fire_On_True, bool))%!1d!% Fire_On_True</String> 
 </Text>
</Element>


<Element>
<Position X=»10″ Y=»145″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Fire_Test_End, number))%!12.2f!% Fire_Test_End</String> 
 </Text>
</Element>


<Element>
<Position X=»10″ Y=»160″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Fire_Who, enum))%!1d!% Fire_Who</String> 
 </Text>
</Element>

<Element>
<Position X=»10″ Y=»175″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((A:ENG1 ANTI ICE, bool))%!1d!% E 1</String> 
 </Text>
</Element>


<Element>
<Position X=»10″ Y=»190″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((A:ENG2 ANTI ICE, bool))%!1d!% E 2</String> 
 </Text>
</Element>


<Element>
<Position X=»10″ Y=»205″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((L:Anti_FreezeW, bool))%!1d!% Anti_FreezeW</String> 
 </Text>
</Element>

<Element>
<Position X=»10″ Y=»220″ /> 
<Text X=»400″ Y=»14″ Bright=»Yes» Length=»100″ Font=»Arial» FontWeight=»800″  Color=»#FFFFCC» Adjust=»Left» VerticalAdjust=»Center» Multiline=»No» Fixed=»No»>
 <String>%((A:PANEL ANTI ICE SWITCH, bool))%!1d!% ANTI ICE SWITCH</String> 
 </Text>
</Element>

   <Mouse>

 <Area Left=»300″ Top=»0″ Width=»20″ Height=»100″>
  <Cursor Type=»Hand» /> 
  <Click>0 (>K:TOGGLE_STATIC_PORT_BLOCKAGE) </Click>
  </Area>
  </Mouse>


</Gauge>

Var_Fire.xml

В 17.04.2013 в 16:40, serg_p пишет:

+ еще можно намутить с периодическим (по таймеру) переключением баков.

Будьте добры, можно пример прибора на xml, где реализован периодический вызов по таймеру ? Реально такое сделать — резидентный приборчик на xml ?

Вопрос снимаю, разобрался.


Edited by 4beer

Всех приветствую!

Коллеги!
Выручите пожалуйста (в который раз)…
Есть пара вопросов (но это только пока )))…

Как записать значение «или» вот в таком условии:

<Value>(L:VU1_switch,bool) ИЛИ (L:VU1_switch,bool) if{(L:Obogrev_AKB1-2_switch,bool) ! } </Value>

И ещё…
Нужно, что бы после нажатия произвольной кнопки загорелась и через две секунды погасла лампа вот в таком коде:

  <Element>
      <Select>
         <Value>(L:VU1_switch,bool) 1 == (P:Local Time,seconds) ?????? </Value>
         <Case Value=»0″>
            <Image Name=»Lampa_2_0.bmp»/>
         </Case>
         <Case Value=»1″>
            <Image Name=»Lampa_2_OTKAZ.bmp» Bright=»Yes»/>
         </Case>
      </Select>
   </Element>

Опять тупо не знаю, какие знаки нужно писать.

On 13/12/2017 at 7:57 PM, Казачок said:

Как записать значение «или» вот в таком условии:

<Value>(L:VU1_switch,bool) ИЛИ (L:VU1_switch,bool) if{(L:Obogrev_AKB1-2_switch,bool) ! } </Value>

|| — логическое «или».

<Value>(L:VU1_switch,bool) (L:VU1_switch,bool) || if{ (L:Obogrev_AKB1-2_switch,bool) ! }</Value>

Правда, не понимаю, зачем вы в качестве операндов указываете одну и ту же переменную. Также не совсем понимаю, что вы достигаете, поставив «!» после переменной внутри { }. Не забудьте пробел после if{

Про лампу — вы так просто не сделаете. Загрузите BlackBox3 и посмотрите, что вам выдаёт Local Time — это просто местное время. Для вашей задачи надо сделать простой таймер. Как его делать можно посмотреть в SDK, там есть пример прибора Stopwatch с рабочими выражениями.

Спасибо Вам!

Две одинаковые переменные — Это просто ошибка. Там (L:VU2_switch,bool) ещё должно быть.

Вообще я иногда, наверное, полную бредятину пишу.  Я не программист, Просто люблю модели самолётов немного улучшать, по возможности. Рисовать у меня чуть лучше выходит (Текстуры, иногда панели).

А XML… Просто выискиваю в разных панелях приборы, похожие на те, что нужны мне. Пытаюсь воспроизвести, часто просто пробуя разные варианты практически вслепую. Мучительно долго потом пытаюсь запустить то, что нагородил. Не знаю, как язык освоить, что бы хоть что-то писать осознано.

Часто уповаю только на Вашу помощь  в этой вот теме. Вот такие вот «муки творчества».

Ну ладно… Что-то я тут разнылся )). Пойду поищу чего нибудь с таймером.

Ещё раз спасибо за помощь! 

Здравствуйте!

Есть вопрос:

Можно ли написать два тумблера, которые управляли бы одним событием, независимо друг от друга?  Например: Аккумулятор (или топливный насос двигателя 1) включается и выключается тумблером №1 или №2, или сразу №1 и №2.

Я пробовал сделать тумблеры через L переменные, но они у меня включаются — выключаются с оглядкой друг на друга. 

Можно всё :)

Вот вам приборы, расставьте, посмотрите. Вроде бы, ничего не забыл положить. Я их когда-то написал для мёртворождённого проекта. Если я правильно вас понял, они делают именно это: в частности, создают иллюзию наличия двух АКБ, используя единственную симовскую :) Вся логика находится в Stby_Test_Light.xml, а остальные два используются для переключения.

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

dual_bat.zip

31 минуту назад, ilya1502 пишет:

Можно всё :)

 

Огромное Спасибо!

Это именно то, что я искал. Мне действительно нужно создать иллюзию наличия двух АКБ (топливных насосов на один двигатель).

Логическую схему я тоже стараюсь себе представить перед написанием какого либо прибора, но получаются только самые примитивные. 

 

32 minutes ago, Казачок said:

Логическую схему я тоже стараюсь себе представить

Представить — не то. Надо рисовать, тогда все косяки сразу видны. Когда делаешь всё в голове, уже знаешь, как должен работать твой прибор, в результате в мысленной схеме кажется, что всё правильно.

16 минут назад, ilya1502 пишет:

Представить — не то. Надо рисовать, тогда все косяки сразу видны. Когда делаешь всё в голове, уже знаешь, как должен работать твой прибор, в результате в мысленной схеме кажется, что всё правильно.

Да. Всё так. Только хорошо, когда на XML свободно пишешь. А я только со «словарём» 🙂  (В других приборах подглядишь и пытаешься что-то подобное наваять). 

И без Ваших подсказок вообще бы туго пришлось ))).


Edited by Казачок

2 hours ago, Казачок said:

И без Ваших подсказок вообще бы туго пришлось ))).

Когда-то в этой ветке мне так же подсказывали :)

Здравствуйте!

Столкнулся с проблемой…

Есть строка в приборе, отвечающая за шрифт (цифры в часах):

 <Text X=»67″ Y=»27″ Bright=»Yes» Length=»5″ Font=»Quartz» Fixed=»Yes» FontWeight=»800″ Color=»#E0E0E0″ HilightColor=»Yellow»> 

С приведённой строкой цифры на табло белые. Мне нужно, что бы они были зелёного цвета. За цвет шрифта, как понимаю, отвечает запись  Color=»#E0E0E0″? 

Так вот… Взял я из другого прибора (с зелёным шрифтом) строку Color=»#FFFFFF» , но ничего не поменялось — В моём приборе шрифт по прежнему белый. Как мне его (цвет шрифта) изменить? И, если возможно, расскажите пожалуйста, что означают остальные записи строки (Length=»5, FontWeight=»800″, HilightColor=»Yellow»)?

Посмотрите вот здесь Chapter 1. На стр. 13 есть описание строковых выражений. И в целом хороший туториал.

18 минут назад, ilya1502 пишет:

Посмотрите вот здесь Chapter 1. На стр. 13 есть описание строковых выражений. И в целом хороший туториал.

Спасибо!

Сейчас покопаюсь.

Код цвета можно в фотошопе, в палитре цветов выбрать. Или  из таблицы https://ru.wikipedia.org/wiki/Википедия:Таблица_цветов

Скрытый текст

1.jpg.c3a2b93f9d287d1b553970f95a1fa352.jpg

 


Edited by DT-75

46 минут назад, DT-75 пишет:

Код цвета можно в фотошопе, в палитре цветов выбрать. Или  из таблицы https://ru.wikipedia.org/wiki/Википедия:Таблица_цветов

  Показать контент

1.jpg.c3a2b93f9d287d1b553970f95a1fa352.jpg

 

Огромное Спасибо!

Это действительно помогло! Теперь всё, как нужно!

Вот ещё одно….

ХАЭ-85 попытался изобразить. получается вот что:

Один и тот же прибор, но записанный в разные окна 2D панели, ведет себя не синхронно. Причём как-то на половину… Текущее время показывает нормально. Секундомер управляется нормально.

5a58e91a49c96_-85(1).jpg.d0a76886ced096a3bc4c76e1db6bea0f.jpg

А вот время полёта одинаково отображать не хочет. В одном окне нажимаю кнопку «Старт» — Время пошло. А в другом окне этот же самый прибор стоит на месте, и кнопка не нажата.

5a58e942058e6_-85(2).jpg.dba34957b795e0f11992ab2dc770827a.jpg

В чём дело?

А как у вас реализован хронометр полётного времени и кнопка «Старт»?