Добрый день!
Никак не разберусь с синтаксисом XML в отношении <GaugeString> в приборах для Prepar3D.
Как подкорректировать значение, выводимое на радиовысотомер (например прибавить 2 метра).
Изначально значение на приборе отображается таким способом:
<GaugeString> %(((A:RADIO HEIGHT), m))%!09d! </GaugeString>
«…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>
Во всех трех случаях прибор переставал показывать какие либо значения либо показывал нули.
В чем моя ошибка и как все таки выполнять арифметические операции с отображаемым значением?
Я хз, как в Препаре, но в ФСХ надо пробелы ставить. XML вообще очень нервный до пробелов. Типа так:
Поэкспериментировал с пробелами. К сожалению пока нули =(
Поискал у себя. И вообще таких не нашёл. Когда мне нужно было выводить в виде String какое-то кастомное значение, я писал его в L-переменную в отдельном элементе, а её уже выводил в String.
Проблема, как и подсказывал ilya1502, оказалась в совершенно негибком отношении встроенного парсера к иерархии скобок и пробелам
Работает только так и никак иначе:
<GaugeString>
%((A:RADIO HEIGHT, meter) 2 +)%!09d!
</GaugeString>
ilya1502, благодарю за наводку!
Вот блин я двоечник! На пробелы указал, а сам лишний поставил
Уважаемые специалисты, Добрый день!
Подскажите заблудшему решение проблемы.
При написании кода для измерения топлива по группам баков, суммарный объём выдает меньше, хотя по остальным 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 *
Это обратная нотация, операнды кладутся на стек, а операция выполняется над двумя верхними в стеке.
Спасибо! Решил по рабоче-крестьянски: