Помогите пожалуйста с синтаксисом! — Панели и приборы

Добрый день!

 

Никак не разберусь с синтаксисом XML в отношении  <GaugeString> в приборах для Prepar3D.

Как подкорректировать значение, выводимое на радиовысотомер (например прибавить 2 метра).

 

Изначально значение на приборе отображается таким способом:

 <GaugeString>
 %(((A:RADIO HEIGHT), m))%!09d!
  </GaugeString>
Согласно Prepar3D SDK:

«…if you want a gauge to show altitude in thousands of feet, divide the value of INDICATED ALTITUDE by 1000

(A:INDICATD ALTITUDE, feet) 1000 / 

Это как раз то, что мне нужно, только нужно не делить на 1000 а прибавить 2. 

Как использовать подобные арифметические выражения внутри <GaugeString>?

 
 
Пробовал  следующие варианты:
 <GaugeString> %((A:RADIO HEIGHT, m)2+)%!09d!  </GaugeString>


 <GaugeString> <Value>%((A:RADIO HEIGHT, m)2+)%!09d!</Value>  </GaugeString>


 <GaugeString> <Expression>%((A:RADIO HEIGHT, m)2+)%!09d!</Expression> </GaugeString>

Во всех трех случаях прибор переставал показывать какие либо значения либо показывал нули.

 

В чем моя ошибка и как все таки выполнять арифметические операции с отображаемым значением?

 

 

Ответов: 8

Я хз, как в Препаре, но в ФСХ надо пробелы ставить. XML вообще очень нервный до пробелов. Типа так:

<GaugeString>
%((A:RADIO HEIGHT), m) 2 + )%!09d!
</GaugeString>

 

Я хз, как в Препаре, но в ФСХ надо пробелы ставить. XML вообще очень нервный до пробелов. Типа так:

<GaugeString>
%((A:RADIO HEIGHT), m) 2 + )%!09d!
</GaugeString>

Поэкспериментировал с пробелами. К сожалению пока нули =(

Поискал у себя. И вообще таких не нашёл. Когда мне нужно было выводить в виде String какое-то кастомное значение, я писал его в L-переменную в отдельном элементе, а её уже выводил в String.

Проблема, как и подсказывал ilya1502, оказалась в совершенно негибком отношении встроенного парсера к иерархии скобок и пробелам

 

Работает только так и никак иначе:

<GaugeString>

%((A:RADIO HEIGHT, meter) 2 +)%!09d!

</GaugeString>

 

ilya1502, благодарю за наводку!

Вот блин я двоечник! На пробелы указал, а сам лишний поставил  :blush:

        Уважаемые специалисты,  Добрый день!

        Подскажите заблудшему решение проблемы.

При написании кода для измерения топлива по группам баков, суммарный объём  выдает меньше, хотя по остальным 2-м группам считает верно (т.е. в 3-х баках 80 тонн, на индикацию – идёт 70?…).

 

        <Element>

      <Position X=»145″ Y=»140″/>

      <Image Name=»FL_prib_strR.bmp» Luminous=»Yes» PointsTo=»east»>

         <Axis X=»0″ Y=»10″/>

      </Image>

      <Rotate>

<Value Minimum=»0″ Maximum=»90000″>(A:Circuit general panel on,bool) if{ (L:fuel switch, enum) 0 == if{ (A:Fuel) } (L:fuel switch, enum) 1 == if{ (A:fuel tank External2 quantity, liter) (A:fuel tank right tip quantity, liter) (A:fuel tank right aux quantity, liter) + 0.82 * } (L:fuel switch, enum) 2 == if{ (A:fuel tank right tip quantity, liter) 0.82 * } (L:fuel switch, enum) 3 == if{ (A:fuel tank External2 quantity, liter) 0.82 * } } els{ 0 } </Value>         <Failures>

            <SYSTEM_ELECTRICAL_PANELS Action=»0″/>            

         </Failures>

         <Nonlinearity>

                             <Item Value=»0″    X=»103″ Y=»214″/>

                             <Item Value=»15000″ X=»59″ Y=»152″/>

                             <Item Value=»30000″ X=»79″ Y=»79″/>

                             <Item Value=»45000″ X=»148″ Y=»46″/>

                             <Item Value=»60000″ X=»217″ Y=»79″/>

                             <Item Value=»75000″ X=»236″ Y=»152″/>

                             <Item Value=»90000″ X=»191″ Y=»213″/>

                             </Nonlinearity>

         <Delay DegreesPerSecond=»55″/>

      </Rotate>

   </Element>

 

   <Element>

      <Position X=»145″ Y=»140″/>

      <Image Name=»FL_prib_strL.bmp» Luminous=»Yes» PointsTo=»east»>

         <Axis X=»0″ Y=»10″/>

      </Image>

      <Rotate>

<Value Minimum=»0″ Maximum=»90000″>(A:Circuit general panel on,bool) if{ (L:fuel switch, enum) 0 == if{ (A:Fuel) } (L:fuel switch, enum) 1 == if{ (A:fuel tank External1 quantity, liter) (A:fuel tank left tip quantity, liter)  (A:fuel tank left aux quantity, liter) + 0.82 * } (L:fuel switch, enum) 2 == if{ (A:fuel tank left tip quantity, liter) 0.82 * } (L:fuel switch, enum) 3 == if{ (A:fuel tank External1 quantity, liter) 0.82 * } } els{ 0 } </Value>

         <Failures>

            <SYSTEM_ELECTRICAL_PANELS Action=»0″/>            

         </Failures>

         <Nonlinearity>

                             <Item Value=»0″    X=»103″ Y=»214″/>

                             <Item Value=»15000″ X=»59″ Y=»152″/>

                             <Item Value=»30000″ X=»79″ Y=»79″/>

                             <Item Value=»45000″ X=»148″ Y=»46″/>

                             <Item Value=»60000″ X=»217″ Y=»79″/>

                             <Item Value=»75000″ X=»236″ Y=»152″/>

                             <Item Value=»90000″ X=»191″ Y=»213″/>

                             </Nonlinearity>

         <Delay DegreesPerSecond=»65″/>

      </Rotate>

   </Element>

 

Спасибо!  :)

Так у вас не совпадает количество операндов и действий над ними. Операнда 4шт — 3 переменных и константа, а действия только 2

 

У вас сначала складываются (A:fuel tank left tip quantity, liter)  (A:fuel tank left aux quantity, liter)

 

затем сумма умножается на 0.82

 

(A:fuel tank External1 quantity, liter)  вообще не используется.

 

Я не уверен, что вы хотели сделать, но если сложить все баки, затем сумму умножить на 0.82, то надо писать так:

 

(A:fuel tank External1 quantity, liter) (A:fuel tank left tip quantity, liter)  (A:fuel tank left aux quantity, liter) + + 0.82 *

 

Это обратная нотация, операнды кладутся на стек, а операция выполняется над двумя верхними в стеке.

Спасибо! Решил по рабоче-крестьянски:

 

(A:Circuit general panel on,bool) if{ (L:fuel switch, enum) 0 == if{ (A:Fuel) } (L:fuel switch, enum) 1 == if{ (A:Fuel total quantity weight, kilogram) 2 / } (L:fuel switch, enum) 2 == if{ (A:fuel tank right tip quantity, liter) 0.82 * } (L:fuel switch, enum) 3 == if{ (A:fuel tank External2 quantity, liter) 0.82 * } } els{ 0 } </Value>         <Failures>
:unsure: