Jump to content
Tory

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

Recommended Posts

Коллега,

 

Я бы ОЧЕНЬ рекомендовал посмотреть, как работают эти приборы. Ну так, интереса ради...:sarcastic: Просто посмотреть код.

Share this post


Link to post
Share on other sites

Подскажите пожалуйсто: Какую нужно вписать переменную, чтоб на табло загоралась лампа при открытии двери?

Share this post


Link to post
Share on other sites

Подскажите пожалуйсто: Какую нужно вписать переменную, чтоб на табло загоралась лампа при открытии двери?

 

Коллега,

 

Чисто методическая рекомендация: читаем Panel SDK. Там сразу можно найти ответы на очень многие вопросы. Вы стали заниматься программированием приборов всерьез, так что пора поступать "профессионально".

 

Теперь собственно по вопросу. "Дверь" как таковая в МСФС отсутствует. Посмотрите в приборе annunciator_cabin_doors.xml из панели "Дугласа", как такая индикация реализована:

 

----------------------------------------------- линия отреза

 

<Gauge Name="annunciator_cabin_doors" Version="1.0">

<Size X="21" Y="28"/>

 

<Element>

<Select>

<Value>(A:Canopy Open,position) 0.5 ></Value>

<Failures>

<SYSTEM_ELECTRICAL_PANELS Action="0"/>

</Failures>

<Case Value="1">

<Image Name="annunciator_cabin_doors.bmp" Bright="Yes" UseTransparency="Yes"/>

</Case>

</Select>

</Element>

 

<Mouse>

<Tooltip ID="TOOLTIPTEXT_CABIN_DOORS"/>

</Mouse>

</Gauge>

 

----------------------------------------------- линия отреза

Share this post


Link to post
Share on other sites

Коллега,

 

Чисто методическая рекомендация: читаем Panel SDK. Там сразу можно найти ответы на очень многие вопросы. Вы стали заниматься программированием приборов всерьез, так что пора поступать "профессионально".

 

 

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

Не то чтобы я занялся порграммированием приборов всерьёз, скорее это мой первый опыт. Просто вот решил немного изменить кабину Л-410 (нравится мне эта машина). Сначало больше всего не устраивал указатель скорости - Поменял.

Дальше больше: Теперь это уже почти полная замена всего приборного оборудования. Ориентируюсь на РЛЭ и фотографии кабин самолётов, эксплуатируемых в России. Сейчас как раз занимаюсь переделкой световой сигнализации:

post-54262-0-84783000-1292698775_thumb.jpg

Я Вам был бы очень признателен, если "ткнёте носом", где можно прочесть Panel SDK. Безусловно Вы правы, что нужно изучать и читать. Но зачастую просто не хватает информации о том, что и где можно посмотреть.

Share this post


Link to post
Share on other sites

"Ну... Это можно!" © Двое Из Ларца, Одинаковых С Лица ("Вовка в Тридевятом царстве", мультфильм). :clapping:

 

Вот линки на SDK (Software Developer Kit) для МСФС2004:

 

http://jonpatch.wordpress.com/2007/03/16/links-to-flight-simulator-9-sdk/

 

Искать по строке "fs9 SDK" в Гугле. Или вот:

 

http://www.fsdeveloper.com/wiki/index.php?title=Special:Whatlinkshere/SDK_Toolset_(FS9)

 

Удачи!

 

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

Share this post


Link to post
Share on other sites

"Ну... Это можно!" © Двое Из Ларца, Одинаковых С Лица ("Вовка в Тридевятом царстве", мультфильм). :clapping:

 

Вот линки на SDK (Software Developer Kit) для МСФС2004:

 

http://jonpatch.wordpress.com/2007/03/16/links-to-flight-simulator-9-sdk/

 

Искать по строке "fs9 SDK" в Гугле. Или вот:

 

http://www.fsdeveloper.com/wiki/index.php?title=Special:Whatlinkshere/SDK_Toolset_(FS9)

 

Удачи!

 

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

Спасибо!

Share this post


Link to post
Share on other sites

Интересно: Почему при переносе строк с операторами из одного прибора в другой получается следующее:

 

 

Не удается отобразить страницу XML

Не удается просмотреть ввод XML с использованием списка стилей XSL. Исправьте ошибку и затем нажмите кнопку "Обновить"или повторите попытку позднее.

 

 

--------------------------------------------------------------------------------

 

Имя начинается с ошибочного знака. Ошибка при обработке ресурса ''file:///D:/MFS 2004/Aircraft/CVA_L410_UVPE/panel/410GAU/P...

 

<Value>(A:GEAR TOTAL PCT EXTENDED, percent) 0 == (A:FLAPS HANDLE INDEX, number) 2 == &&</Value>

-----...

 

 

Элемент включает сигнальную лампу "ВЫПУСТИ ШАССИ" при полностью выпущенных закрылках.

Взял стороки из аналогичного прибора:

 

 

- <Element>

<Position X="19" Y="64" />

- <Select>

<Value>(A:GEAR TOTAL PCT EXTENDED, percent) 0 == (A:FLAPS HANDLE INDEX, number) 2 == &&</Value>

- <Case Value="1">

<Image Name="gearwarn.bmp" Bright="Yes" />

</Case>

</Select>

</Element>

 

Поставил в свой:

 

 

- <Element>

<Position X="155" Y="200" />

- <Select>

<Value>(A:GEAR TOTAL PCT EXTENDED, percent) 0 == (A:FLAPS HANDLE INDEX, number) 2 == &&</Value>

- <Failures>

<SYSTEM_ELECTRICAL_AVIONICS Action="0" />

</Failures>

- <Case Value="1">

<Image Name="lamp10_on.bmp" Bright="Yes" />

</Case>

</Select>

</Element>

 

В результате - Ошибка. Никак не пойму, в чём причина.

Edited by Kazachek

Share this post


Link to post
Share on other sites

Насколько я понял, прибор открывали в Эксплорере. Честно говоря, сам эти способом проверки не пользуюсь. А что происходит в симуляторе? Прибор виден?

Share this post


Link to post
Share on other sites

Насколько я понял, прибор открывали в Эксплорере. Честно говоря, сам эти способом проверки не пользуюсь. А что происходит в симуляторе? Прибор виден?

Нет, прибор пропадает.

Share this post


Link to post
Share on other sites

Ничего не понимаю!

Стоит только ввести в код прибора эти самые операторы, как он отказывается работать (всё та же ошибка).

Вот теперь ещё не получается сделать сигнализацию аварийного остатка топлива.

Подскажите пожалуйсто - В чём проблема?

Share this post


Link to post
Share on other sites

ИМХО, для начала стоит оставить только существенные части:

 

<Element>

<Position X="155" Y="200" />

<Select>

<Value> (A:GEAR TOTAL PCT EXTENDED, percent) 0 == (A:FLAPS HANDLE INDEX, number) 2 == && </Value>

<Case Value="1">

<Image Name="lamp10_on.bmp" Bright="Yes" />

</Case>

</Select>

</Element>

 

Не уверен, что секцию FAILURES можно вставлять внутрь селектора. Обязательно надо проверить наличие пробелов между тегами и скобками в наименованиии переменных. Если ошибка будет повторяться, то можно отключать части кода тегами комментария <!-- (открывающий) и (закрывающий) -->. Очень важно, чтобы в приборе не было никакой кириллицы!

Edited by Alexander Belov

Share this post


Link to post
Share on other sites

Считаем количество тегов, если есть <xxx> то должен быть и </xxx> если внутри одного есть другой, то закрываться он должен до закрытия первого итд...

Share this post


Link to post
Share on other sites

Всем спасибо за ответы.

Проблема была в разночтении.

То, что в Internet Explorer записано как &&, в Блокноте (где я редактирую XML) должно записыватся как &&amp.

Прошу прощения за внесённую путаницу и потраченное Вами время.

Edited by Kazachek

Share this post


Link to post
Share on other sites

Коллега,

 

Для редактирования XML-файлов лучше, ИМХО, использовать UltraEdit - он и синтаксис подсвечивает и все теги отображает правильно.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вот есть ещё один вопрос: Возможно ли написать тумблер для определённого прибора?

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

Или вот радиовысотомер, снятый с другого самолёта. В нём всё работает (бленкер, установка высоты, лампа опасной высоты) при наличии электропитания. Можно ли отключить его отдельным тумблером?

Вот код прибора:

 

 

- <Gauge Name="Radio Altimeter" Version="1.0">

<Image Name="RV_BG.bmp" ImageSizes="312,312" />

- <Element>

<Position X="165" Y="154" />

- <Image Name="RV_NeedleDH.bmp" ImageSizes="23,165">

<Axis X="11.5" Y="133" />

</Image>

- <Rotate>

<Value Minimum="0" Maximum="750">(A:Decision height, meters)</Value>

- <Failures>

<SYSTEM_ELECTRICAL_PANELS Action="0" />

</Failures>

- <Nonlinearity>

<Item Value="0" Degrees="0" />

<Item Value="20" Degrees="31" />

<Item Value="40" Degrees="62" />

<Item Value="60" Degrees="93" />

<Item Value="80" Degrees="126" />

<Item Value="100" Degrees="159" />

<Item Value="300" Degrees="208" />

<Item Value="500" Degrees="255" />

<Item Value="700" Degrees="303" />

</Nonlinearity>

</Rotate>

</Element>

- <Element>

<Position X="165" Y="154" />

- <Image Name="RV_Needle.bmp" ImageSizes="23,165">

<Axis X="11.5" Y="110" />

</Image>

- <Rotate>

<Value Minimum="0" Maximum="750">(A:Radio height, meters)</Value>

- <Failures>

<SYSTEM_ELECTRICAL_PANELS Action="0" />

</Failures>

- <Nonlinearity>

<Item Value="0" Degrees="0" />

<Item Value="20" Degrees="31" />

<Item Value="40" Degrees="62" />

<Item Value="60" Degrees="93" />

<Item Value="80" Degrees="126" />

<Item Value="100" Degrees="159" />

<Item Value="300" Degrees="208" />

<Item Value="500" Degrees="255" />

<Item Value="700" Degrees="303" />

</Nonlinearity>

<Delay DegreesPerSecond="90" />

</Rotate>

</Element>

- <Element>

<Position X="0" Y="0" />

<Image Name="RV_UP.bmp" ImageSizes="312,312" />

</Element>

- <Element>

<Position X="0" Y="0" />

- <Select>

<Value>(A:Radio height, meters) s0 20000 > if{ 0 } els{ l0 (A:Decision height, meters) < if{ 1 } els{ l0 750 > 2 + } }</Value>

- <Failures>

<SYSTEM_ELECTRICAL_PANELS Action="0" />

</Failures>

- <Case Value="1">

<Image Name="RV_LightRed.bmp" Bright="Yes" ImageSizes="312,312" />

</Case>

- <Case Value="2">

<Image Name="RV_LightGreen.bmp" Bright="Yes" ImageSizes="0,0" />

</Case>

- <Case Value="3">

<Image Name="RV_blenker.bmp" Bright="Yes" ImageSizes="312,312" />

</Case>

</Select>

</Element>

- <Mouse>

- <Area Bottom="250">

<Tooltip>Radio Altitude (%((A:Radio height, meters))%!d! m)</Tooltip>

</Area>

- <Area Left="60" Top="250">

<Tooltip>Radio Altitude (%((A:Radio height, meters))%!d! m)</Tooltip>

</Area>

- <Area Left="0" Right="60" Top="250" Bottom="312">

<Tooltip>Decision Height (%((A:Decision height, meters))%!d! m)</Tooltip>

- <Area Right="30">

<Cursor Type="DownArrow" />

<Click Repeat="Yes">(A:Decision height, meters) 10 >= if{ (>K:DECREASE_DECISION_HEIGHT) }</Click>

</Area>

- <Area Left="30">

<Cursor Type="UpArrow" />

<Click Repeat="Yes">(A:Decision height, meters) 700 < if{ (>K:INCREASE_DECISION_HEIGHT) }</Click>

</Area>

</Area>

</Mouse>

</Gauge>

 

Если возможно, опишите пожалуйсто (хотя бы на простом примере) как создавать такие тумблеры именно для конкретных приборов.

 

P.S. Спасибо всем, кто помогает и делится своим опытом! Без Вашей помощи я, наверное, давно забросил бы свою работу.

Edited by Kazachek

Share this post


Link to post
Share on other sites

Отдельный тумблер выключения питания к отдельному уже готовому прибору не написать. Нужно вводить новую переменную и "включать" эту переменную. А в приборе анализировать ее, а не стандартную аварию SYSTEM_ELECTRICAL_PANELS.

То есть, если наша вспомогательная переменная не установлена, то прибор "не работает".

Share this post


Link to post
Share on other sites

Отдельный тумблер выключения питания к отдельному уже готовому прибору не написать. Нужно вводить новую переменную и "включать" эту переменную. А в приборе анализировать ее, а не стандартную аварию SYSTEM_ELECTRICAL_PANELS.

То есть, если наша вспомогательная переменная не установлена, то прибор "не работает".

Какие можно создавать L-переменные?

Например: У меня в основном авиагоризонте и его тумблере записано (L:AGK on, bool).

При попытке использовать подобное значение в резервном авиагоризонте, я его изменил и записал как (L:AGK1 on, bool).

Получилась полная ерунда: Тумблер резервного авиагоризонта на мышь реагирует, но не включается. Зато щёлкают сами собой тумблеры обоих генераторов.

Вероятней всего L-переменные можно записывать только определёнными именами? B SDK я таких не нашел.

Edited by Kazachek

Share this post


Link to post
Share on other sites

L-переменные описаны в Panel SDK, файл Panels SDK.doc, стр 83, раздел "Calculated Expressions in XML Gauges". Надо просто внимательно контролировать, чтобы имена в разных приборах были уникальны.

Share this post


Link to post
Share on other sites

L-переменные описаны в Panel SDK, файл Panels SDK.doc, стр 83, раздел "Calculated Expressions in XML Gauges". Надо просто внимательно контролировать, чтобы имена в разных приборах были уникальны.

Спасибо за подсказку!

Сейчас буду смотреть и пробовать заново.

Share this post


Link to post
Share on other sites

Добрый день!

Выключение резервного авиагоризонта отдельным тумблером осилил.

Но снова вынужден просить помощи.

Продолжаю собирать электропанель для Л-410 и установил на неё тумблеры включения прослушивания сигналов АРК1, АРК2, приёмника NAV и маркерного приёмника.

post-54262-0-94441300-1293100169_thumb.jpg

Установил так же тумблеры влючения COM1 и COM2 (тоесть получается замена дефолтной аудиопанели), но тут возникла трудность. Код сейчас выглядит так:

 

 

<Gauge Name="COM1" Version="1.0">

<Element>

<Select>

<Value>(A:COM1 TRANSMIT, bool)</Value>

<Case Value="0">

<Image Name="tumb_on.bmp" ImageSizes="25,61" />

</Case>

<Case Value="1">

<Image Name="tumb_off.bmp" ImageSizes="25,61" />

</Case>

</Select>

</Element>

<Mouse>

<Cursor Type="Hand" />

<Click> </Click>

</Mouse>

</Gauge>

 

 

Как видете в Mouse не хватает секции <Click>. Тумблеры сейчас просто "щёлкают" от нажатия кнопок в дефолтной панели.

Пересмотрел коды множества приборов связного радио, но так и не смог определить, какой должна быть секция <Click>.

Подскажите пожалуйсто - Как сделать, чтобы тумблеры плноценно заработали?

Share this post


Link to post
Share on other sites

смотреть надо не приборы, а тумблеры

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

Share this post


Link to post
Share on other sites

смотреть надо не приборы, а тумблеры

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

Я немного не правильно выразился: я и искал тумблеры в радиоприборах.

А эти два тумблера, что я поставил, должны выполнять роль кнопок COM1 и COM2 в дефолтной аудиопанели (там же они работают).Собственно тумблеры сейчас перещалкиваются синхронно с кнопкаим COM1 и COM2, только не нажимаются, потому как я не знаю, какую нужно записать секцию Click.

Share this post


Link to post
Share on other sites

Я прошу прощеня. Вопрос снимается, поиски принесли результаты.

Там должна быть строка:

 

 

<Click>(A:COM1 TRANSMIT, bool) 0 == if{ 0 (>K:COM1_TRANSMIT_SELECT) } els{ 0

 

(>K:COM2_TRANSMIT_SELECT) }</Click>

 

Ещё раз прошу прощения, что поспешил задать вопрос.

Edited by Kazachek

Share this post


Link to post
Share on other sites

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

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.

×