Jump to content
Tory

SOS: вопросы по приборам на XML

Recommended Posts

Ми-8: топлива 280 кг., загорается где-то секунд через 20

 

FL.zip

 

вот тоже самое на тушке (просто склад зап. частей :good: )

 

 

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

Теперь всё заработало! Видемо у меня где-то была ошибка в записи.

 

Share this post


Link to post
Share on other sites

А вот так будет работать с литрами:

 

 

<Value>(A:Fuel total quantity, liters) 270 <</Value>

<Failures>

<SYSTEM_ELECTRICAL_PANELS Action="0" />

</Failures>

Share this post


Link to post
Share on other sites

Да, с литрами наверное правильнее будет, тогда как раз в районе 270 литров по указателю лампа и загорается.

Share this post


Link to post
Share on other sites

Не подскажете, как реализовать следующее: например при ветре свыше 25 узлов, отображается такой-то битмап на дисплеи ( V ветра велика)...

Share this post


Link to post
Share on other sites

Проверить переменную скорости ветра и сформировать выдачу сообщения.

 

Конкретно - это от уже существующего кода зависит.

Share this post


Link to post
Share on other sites

Добрый вечер, уважаемые коллеги!

 

Возник вопрос: Возможно ли написать прибор - тумблер на три положения с двумя разными L переменными?

Например влево (L:zapusk_L, bool), в середине выключено, вправо (L:zapusk_P, bool).

Все мои неочень умелые попытки написать такой прибор не увенчались успехом - Тумблер или работает только до середины, или соответствующие битмапы свободно включаются сразу в обе стороны.

Найти подобный тоже не получилось.

Если такой код возможен, приведите пожалуйста пример - Буду весьма признателен.

Share this post


Link to post
Share on other sites

Требуемая логика не вполне понятна. Чего мы добиваемся? Что, к примеру, должно происходить, если обе переменные примут значение TRUE (численно это 1)?

 

Как возможный вариант, что мешает ввести вспомогательную переменную, хотя бы локальную (G:Var1), и ей присваивать значения 0, 1 и 2:

 

(L:zapusk_L, bool) !

if{

__0 (>G:Var1)

}

els{

__(L:zapusk_P, bool) ! if{ 1 (G:Var1) } els{ 2 (>G:Var1) }

}

Share this post


Link to post
Share on other sites

Требуемая логика не вполне понятна. Чего мы добиваемся? Что, к примеру, должно происходить, если обе переменные примут значение TRUE (численно это 1)?

 

Как возможный вариант, что мешает ввести вспомогательную переменную, хотя бы локальную (G:Var1), и ей присваивать значения 0, 1 и 2:

Здравствуйте, Александр!

Спасибо, что всегда откликаетесь на просьбу о помощи.

Если не сложно, объясните немного значение переменной G.

И как всё это правильно совместить в секции <Mouse>?

Edited by Kazachek

Share this post


Link to post
Share on other sites

Переменые "G" - это локальные переменные, видимые только в пределах данного прибора. Типа (т.е. размерности) они не имеют, они могут передавать только числовое значение.

 

Все-таки, чтобы конкретнее написать код, нужно знать, что мы должны делать для каждого возможного варианта сочетания значения переменных (L:zapusk_L, bool) и (L:zapusk_P, bool). Булевская (логическая) переменная может принимать два значения: TRUE (истинно, численно 1) и FALSE (ложь, численно 0). Возможны не три, а четыре варианта:

 

0,0

 

0,1

 

1,0

 

1,1

 

А вариантов картинки только 3. Так как их надо сочетать?

Share this post


Link to post
Share on other sites

Переменые "G" - это локальные переменные, видимые только в пределах данного прибора. Типа (т.е. размерности) они не имеют, они могут передавать только числовое значение.

 

Все-таки, чтобы конкретнее написать код, нужно знать, что мы должны делать для каждого возможного варианта сочетания значения переменных (L:zapusk_L, bool) и (L:zapusk_P, bool). Булевская (логическая) переменная может принимать два значения: TRUE (истинно, численно 1) и FALSE (ложь, численно 0). Возможны не три, а четыре варианта:

 

0,0

 

0,1

 

1,0

 

1,1

 

А вариантов картинки только 3. Так как их надо сочетать?

Задумывался тумблер для (не знаю как правильно выразить) разрешения или запрещения заппуска двигателей.

Например: Тумблер в центральном положении - двигатели не запускаются. Ставим тумблер в положение (L:zapusk_L, bool) - Жмём кнопку запуска (L:zapusk_L, bool) if{ (A:General eng1 starter, bool)} левого двигателя. Точно так же с правым...

Я полагал, что без установки тумблера в соответствующее положение кнопка запуска не сработает.

Share this post


Link to post
Share on other sites

Здесь вполне можно обойтись одной переменной с тремя значениями, например: "1" - левое положение, "2" - правое положение, "0" - нейтральное.

Share this post


Link to post
Share on other sites

Добрый вечер!

Коллеги, помогите пожалуйста ещё раз.

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

 

Я тут копался в похожих приборах (точно как нужен найти не смог), записал такой код:

 

 

 

<Gauge Name="Knop_Start_AI-9" Version="1.0">

<Element>

<Select>

<Value>(L:AI-9_start,bool)</Value>

<Case Value="0">

<Image Name="Knop_blec_off.bmp"/>

</Case>

<Case Value="1">

<Image Name="Knop_blec_on.bmp"/>

</Case>

</Select>

</Element>

<Mouse>

<Cursor Type="Hand"/>

<Click Kind="LeftSingle+LeftRelease+Leave">

(M:Event) 'LeftSingle' scmp 0 == if{ 1 (>L:AI-9_start,bool) }

(M:Event) 'LeftRelease' scmp 0 == if{ 0 (>L:AI-9_start,bool) }

(M:Event) 'Leave' scmp 0 == if{ 0 (>L:AI-9_start,bool) }

</Click>

</Mouse>

</Gauge>

 

 

Кнопка работает как надо - нажимается, после того, как отпускаешь - возвращается на место. Только вот переменная работает только пока кнопку держишь. Я так понимаю в секции <MOUSE>решение нужно искать.

 

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

post-54262-0-43680200-1326391698.jpg

Edited by Kazachek

Share this post


Link to post
Share on other sites

У Вас стоит условие, что при отжатии мышки (LeftRelease) изменять переменную в ноль

(M:Event) 'LeftRelease' scmp 0 == if{ 0 (>L:AI-9_start,bool) }

 

Вводите еще одну L переменную либо для Ваших нужд, либо специально для правильного переключения битмапа.

Share this post


Link to post
Share on other sites

Вводите еще одну L переменную либо для Ваших нужд, либо специально для правильного переключения битмапа.

Спасибо!

А как это записать?

Share this post


Link to post
Share on other sites

Могу быть не точным так как ни сима, ни СДК, ни xml редактора под рукой нет, и приборы писал лет 5 назад, но по логике сделать надо следующие:

добавить еще одну переменную:

 

<Value>(L:AI-9_startXXX,bool)</Value>

 

И в мышиную функцию (M:Event) 'LeftSingle' scmp 0 == if{ 1 (>L:AI-9_start,bool) } дописать в фигурные скобки вроде через запятую или точку с запятой (но лучше посмотреть схожие примеры как в одной строке используются две функции, потому что я уже и не уверен, что и фигурные скобки все это надо писать) 1 (>L:AI-9_startXXX,bool)

 

(M:Event) 'LeftSingle' scmp 0 == if{ 1 (>L:AI-9_start,bool) , 1 (>L:AI-9_startXXX,bool) }

 

Во второй кнопке соответственно по щелчку мышки присваивать "0" этой переменной.

 

0 (>L:AI-9_startXXX,bool)

Edited by Alex Wing

Share this post


Link to post
Share on other sites

Могу быть не точным так как ни сима, ни СДК, ни xml редактора под рукой нет, и приборы писал лет 5 назад, но по логике сделать надо следующие:

добавить еще одну переменную:

 

<Value>(L:AI-9_startXXX,bool)</Value>

 

И в мышиную функцию (M:Event) 'LeftSingle' scmp 0 == if{ 1 (>L:AI-9_start,bool) } дописать в фигурные скобки вроде через запятую или точку с запятой (но лучше посмотреть схожие примеры как в одной строке используются две функции, потому что я уже и не уверен, что и фигурные скобки все это надо писать) 1 (>L:AI-9_startXXX,bool)

 

(M:Event) 'LeftSingle' scmp 0 == if{ 1 (>L:AI-9_start,bool) , 1 (>L:AI-9_startXXX,bool) }

 

Во второй кнопке соответственно по щелчку мышки присваивать "0" этой переменной.

 

0 (>L:AI-9_startXXX,bool)

 

Во второй кнопке соответсвенно наоборот

Большое спасибо за помощь!

Сейчас буду пробовать дальше.

Share this post


Link to post
Share on other sites

<Element> // Check Power is available

<Select>

<Value>

(A:Electrical Main Bus Voltage,volts) 5 > (A:Avionics Master Switch,bool) (L:A2002_GPSon,bool) ! & &

if{

(L:296_Power,number) 1 >

if{

(L:296_power,number) 179 <

if{

(L:296_Power,number) ++ (>L:296_Power,number)

}

}

}

els{

1 (>L:a2002_GPSon,bool)

0 (>L:296_Power,number)

0 (>L:296_CurrentPage,number)

}

}

</Value>

</Select>

</Element>

Помогите расшифровать (перевести на русский "если то иначе сё") кусок XML прибора.

Прибор GPS296 пробую привинтить вместо дефолтного GPS295

в разные модели. В некоторых он нормально работает.

В других вырубается. Похоже из за питания.

Этот кусок как раз судя по комментарию и отвечает за питание.

Подскажите, что тут проверяется?

Какие значения при каких условиях присваиваются переменным?

Share this post


Link to post
Share on other sites

Здравствуйте, уважаемые коллеги!

 

Помогите пожалуйста прояснить один вопрос:

Есть задумка создать прибор, где подразумевается произвольное перемещение курсором битмапа в окне маски. Битмап должен свободно передвигаться от края до края вверх-вниз и вправо-влево. Вопрс в следующем - как это действие записать в секции <MOUSE>?

 

Вот, например, код, передвигающий движок в линейке НЛ-10:

 

<Area Left="0" Right="1498" Top="241" Bottom="312">

<Cursor Type="Hand"/>

<Click Kind="LeftSingle+LeftDrag">

(M:Event) 'LeftSingle' scmp 0 == if{ (M:X) (>L:NL-10_Cursor_Begin, enum) (L:NL-10_Visir_Position, enum) (>L:NL-10_Lin_begin, enum) }

(M:Event) 'LeftDrag' scmp 0 == if{ (L:NL-10_Lin_begin, enum) (L:NL-10_Cursor_Begin, enum) (M:X) - 2.1 * - (>L:NL-10_Visir_Position, enum) }

</Click>

</Area>

 

С помощью него движок передвигается вправо-влево на любую велечину.

Можно ли этот код дополнить таким образом, чтобы битмап таким же способом передвигался ещё вверх-вниз?

 

Буду очень благодарен за помощь.

Edited by Kazachek

Share this post


Link to post
Share on other sites

Коллега,

 

Посмотрите, как это сделано в "ветрочете" - маркер там перемещается по фоновой битмапке именно по обеим координатам:

 

 

_<Mouse>

__ <Area Left="1" Top="1" Right="1210" Bottom="1055">

___ <Cursor Type="Hand"/>

_____ <Click Kind="LeftDrag+LeftSingle">

_____ ScaleX (M:X) - (>L:Xvar,number)

_____ ScaleY (M:Y) - (>L:Yvar,number)

___ </Click>

__ </Area>

_ </Mouse>

Share this post


Link to post
Share on other sites

Коллега,

 

Посмотрите, как это сделано в "ветрочете" - маркер там перемещается по фоновой битмапке именно по обеим координатам:

 

 

_<Mouse>

__ <Area Left="1" Top="1" Right="1210" Bottom="1055">

___ <Cursor Type="Hand"/>

_____ <Click Kind="LeftDrag+LeftSingle">

_____ ScaleX (M:X) - (>L:Xvar,number)

_____ ScaleY (M:Y) - (>L:Yvar,number)

___ </Click>

__ </Area>

_ </Mouse>

Большое спасибо!

Share this post


Link to post
Share on other sites

Подскажите, есть ли возможность из прибора прервать проигрывание пользовательской анимации (или что аналогично зафиксировать значение пользовательской переменной на текущем значении)?

 

Поясню - есть выключатель с 3-я положениями: ОТКР, ОТКЛ и ЗАКР. Это управление грузолюком - открытие ((L:cargoramp,number) равен 100), закрытие ((L:cargoramp,number) равен 0) и отключение. Под отключением я понимаю фиксация грузолюка в том положении, в котором это отключение было произведено, т.е. между 0 и 100 кадром.

 

Я хочу в момент открытия/закрытия люка переключить тумблер в положение ОТКЛ и чтоб анимация люка прекратилась (остановилась). Анимация привязана к переменной (L:cargoramp,number)

Share this post


Link to post
Share on other sites

Если увеличивать/уменьшать значение вашей переменной cargoramp в цикле, то туда достаточно добавить условие на состояние тумблера. Если оно ОТКЛ, то не менять значение переменной. Анимация таким образом "зависнет".

Share this post


Link to post
Share on other sites

Ну, если другого способа нет, то подскажите как организовать цикл с задаваемым шагом по пользовательской переменной

Share this post


Link to post
Share on other sites

как сделать паузу?... т.е., чтобы при выполнении какого либо условия, событие выполнялось ни сразу...

 

ну например.... если скажем скорость мала, то при выполнении этого условия будет постоянно без перерыва звучать фраза "скорость мала", а надо чтобы через какое то время об этом шло напоминание, не постоянно, скажем, озвучка - пауза 30 секунд - опять озвучка, и так пока выполняется условие

 

подскажите, плиз

Share this post


Link to post
Share on other sites

Можно, к примеру, по условию не выполнять обработку. Да, это весьма "криво" - goto в XML приборе, но эта возможность есть.

 

Схематика такова:

 

- запускаем таймер 30 секунд;

 

- проверяем таймер:

 

-- если условие выполнено, то выполняем назначенное действие; иначе пропускаем ход.

 

Цикл тут - сам цикл вызова прибора в МСФС (18 раз в секунду).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×