Jump to content

Archived

This topic is now archived and is closed to further replies.

KAI31

FSX | C# | FSUIPC SDK | Programming | Программирование

Recommended Posts

KAI31

По просьбе автора видео размещаю его в новой теме, т. к. планируется продолжение дальнейших вариаций с ПИД и примеров работы с  C# + FSUIPC SDK.

 

 

И сразу пример создания автопилота для дефолтного дельтаплана.

 

Share this post


Link to post
Share on other sites
NStK

FS9 также программируется. 

Share this post


Link to post
Share on other sites
KAI31

SDK FSUIPC к любому симу подходит, надо только правильно выбать общую позицию открытия или указать какой СИМ будет использываться. В первом ролике, внимательно смотрите, это показано.

 

На канале под роликом есть ссылочки на исходники и спользуемые во втором видео.

Share this post


Link to post
Share on other sites
South_Victor

Гуд :clapping: ... Единственное нормальная тема. Подписался...

Мы требуем продолжение.

Share this post


Link to post
Share on other sites
KAI31

Бум стараться. Если будут чьи либо другие наработки по этой темке - милости просим, выкладывать их сюда.

 

Автор давно хотел показать вариант работы с SDK FSUIPC, а тут 

заварились на темке Туполёнка, (off)

 

 

 

в частности - передачи данных из электронного варианта НЛки (калькулятора) напрямую в РСБН.

 

 

 

Пилится всё потихонечку.

Share this post


Link to post
Share on other sites
NStK

SDK FSUIPC к любому симу подходит, надо только правильно выбать общую позицию открытия или указать какой СИМ будет использываться. В первом ролике, внимательно смотрите, это показано.

 

На канале под роликом есть ссылочки на исходники и спользуемые во втором видео.

 

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

 

Канал полезный, позже загляну, может даже с вопросам! :)

Share this post


Link to post
Share on other sites
KAI31

Дальнейшее продолжение.

 

Исходники

 

 Если кому будет интересно и будут другие идеи и вариации пишите здесь и можно автору на канале.

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

Share this post


Link to post
Share on other sites
NStK

 Если кому будет интересно и будут другие идеи и вариации пишите здесь и можно автору на канале.

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

 

Помогите с кодом ответчика:

 

Такой вопрос:

Столкнулся с проблемой считывания кода ответчика ч/з FSUIPC.

Offsets: 0354

Size: 2

Transponder setting, 4 digits in BCD format: 0x1200 means 1200 on the dials.

 

 

 

Опытным путем установил, что ответчик это шестнадцатеричное число, которое получается из десятичной переменной с Offset 0354.

Помогите дописать код по переводу  моей переменной Sqw  из DEC в HEX.

 

Пишу в C#.

 

using FsuipcSdk;

class Program

{

    static void Main()

    {

        Fsuipc fsuipc = new Fsuipc();  

       

        bool resultSqw = false;

        int dwFSReqSqw = 0;

        int dwOffsetSqw = 0x0354;

        int dwSizeSqw = 2;

        int tokenSqw = 0;

        int dwResultSqw = 0;

 

 

       fsuipc.FSUIPC_Initialization();

 

        while (true)

        {

 resultSqw = fsuipc.FSUIPC_Open(dwFSReqSqw, ref dwResultSqw);

            resultSqw = fsuipc.FSUIPC_Read(dwOffsetSqw, dwSizeSqw, ref tokenSqw, ref dwResultSqw);

            resultSqw = fsuipc.FSUIPC_Process(ref dwResultSqw);

            resultSqw = fsuipc.FSUIPC_Get(ref tokenSqw, ref dwResultSqw);

            double Sqw = dwResultSqw;

 

            System.Console.WriteLine("Sqw=", Sqw);

               

              fsuipc.FSUIPC_Close();

        }        

    }

}

 

 

Спасибо!

 

 

 PS далее меня ждут COM и NAV/

Share this post


Link to post
Share on other sites
Leonid_071

Привет,

в данном случае простая uint переменная, поэтому это не надо:

  double Sqw = dwResultSqw;

 

Вот так получить строку ответчика:

string TransponserFreq = "";

resultSqw = fsuipc.FSUIPC_Get(ref tokenSqw, ref dwResultSqw);

TransponserFreq = Convert.ToString(dwResultSqw,16);

получаем строку с кодом ...

Share this post


Link to post
Share on other sites
NStK

Привет,

в данном случае простая uint переменная, поэтому это не надо:

  double Sqw = dwResultSqw;

 

Вот так получить строку ответчика:

string TransponserFreq = "";

resultSqw = fsuipc.FSUIPC_Get(ref tokenSqw, ref dwResultSqw);

TransponserFreq = Convert.ToString(dwResultSqw,16);

получаем строку с кодом ...

 

Понял. 

 

Еще вопрос, сегодня обнаружился БАГ. Все переменные самопроизвольно меняют значение в полный рандом и так же востанавливаются.

Сегодня тестировал Курс АРК, крутил круги на 154ке, курсы шли нормально от 0 до 360, но в какой момент стали тысячными 2010, 2124, 1345. И вдруг внезапно вернулись в нормальные от 0 до 360. 

 

Встречали, не встречали, как быть? 

Share this post


Link to post
Share on other sites
KAI31

 

в какой момент 

Случайно этот момент не совпал с проходом над маяком?

Или может 18 Кгц повлияло.

Надо посмотреть в задатчике.

 Вообще сим(ы) загадками не удивляют уже))

Для меня это, С и С++...и т.д. + XML, их взаимодействие и влияние на общие переменные, пока дремучий лес и пытаюсь разобраться в буреломе).

Но начало положено! Далее будем дерзть и разберём Что к чему.

Share this post


Link to post
Share on other sites
NStK

Случайно этот момент не совпал с проходом над маяком?

Или может 18 Кгц повлияло.

Надо посмотреть в задатчике.

 Вообще сим(ы) загадками не удивляют уже))

Для меня это, С и С++...и т.д. + XML, их взаимодействие и влияние на общие переменные, пока дремучий лес и пытаюсь разобраться в буреломе).

Но начало положено! Далее будем дерзть и разберём Что к чему.

 

Нет, крутил виражи на удалении 20-30 км. Потом коробочку... случайный рандом Причем в этом участвуют несколько переменных. И ответчик тоже.

Вчера все было нормально, сегодня появилось.

 

Я отображал только настраиваемые переменные, не знаю какие еще сбоят. Вечерком проверю...

Share this post


Link to post
Share on other sites
Leonid_071

"Встречали, не встречали, как быть?"

 

да видел подобное ....

обычно начинается этот глюк после длительного использования паузы (у меня) ...

после перезапуска программы - проходит

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

Share this post


Link to post
Share on other sites
NStK

"Встречали, не встречали, как быть?"

 

да видел подобное ....

обычно начинается этот глюк после длительного использования паузы (у меня) ...

после перезапуска программы - проходит

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

 

Симптомы один в один. Ок. Будем наблюдать пациента.

Share this post


Link to post
Share on other sites
NStK
Все переменные самопроизвольно меняют значение в полный рандом и так же востанавливаются.

 

 

БАГ пофиксин симптоматическим лечением. Убрал из кода все строки с переводом из десятичной в шестнадцатиричную. Ответчик и все частоты.

 

 PS  Как БАГ выглядел.  Три консоли. Верхняя запущена была первой, остальные с некоторым интервалом, нижняя сама последняя. 

 

 

 

H-5qfgAtuy8.jpg

 

 

 

Другой БАГ, менее противный, после минуты запуска проги, некоторые переменный разово меняют значения, из которых уже можно вычислять.

К примеру:

- Режимы работы двигателей

- Положение РВ

- давление на высотомере.

 и еще, на память не скажу.

 

К примеру, после запуска консоли с параметрами двигателя, обороты N1 = - 778.xx (точно не помню) после минуты все ок, 60%. и держится, не скачет...

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

Share this post


Link to post
Share on other sites
Leonid_071

"К примеру, после запуска консоли с параметрами двигателя, обороты N1 = - 778.xx (точно не помню) после минуты все ок, 60%. и держится, не скачет..."

 

А что в этот момент времени в симе?

p.s. я такое видел при начальном запуске (т.е. до первых манипуляций с самолетом), там зачастую даже GPS не в ту сторону показывает ориентацию самолета ...

а так в процессе работы - вроде все стабильно, правда у меня FSX

Share this post


Link to post
Share on other sites
NStK
А что в этот момент времени в симе?

Летит в автомате, стоит или рулит.

 

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

Манипуляции никак не влияют. Ч/з 60сек все приходит в норму независимо летит, стоит или рулит.

 

 

 

 

joidvAyUV5E.jpg

E_87ZfGhiNk.jpg

 

 

 

правда у меня FSX

А баги похожи, да и код в C# один к одному.

 

 

Еще подскажите:

 

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

 

Так же никак не соображу по курсу на VOR, NAV heading, с АРК/ADF разобрался легко, а вот с курсом на VOR проблемы. Дистанция до VOR - все ок, считает верно.

 

И остались переменные директорных стрелок... NAV localizer и glideslope needle кажись называются. Пока не копался, но с первого захода значения реагируют странно, но еще не углублялся в расчеты. 

Share this post


Link to post
Share on other sites
Leonid_071

"Ч/з 60сек все приходит в норму независимо летит, стоит или рулит."

Не такого не видел ...

может просто буфера не успевают очишаться (но это не более чем предположение), попробуй чутка цикл замедлить - Thread.Sleep(5);

 

"А баги похожи, да и код в C# один к одному."

Это - да )))

 

"Как у Вас реализованы переменные истинного курса, магнитного курса и маг. склонения, не могу поймать закономерность, переменные скачут в полном рандоме."

Нет такой проблемы, я сейчас как раз под себя, дальше делаю калькулятор, да и в предыдущий раз я все строил на обсчете

0x610C - курс выхода на ЛЗП

0x6028 - магнитное склонение (для текущего местоположения) - если нужно для произвольного положения нужно брать из "magdec.bgl"

(ели нужно могу показать как это делать, правда только для файла 2004 версии)

0x6038 - истинный курс

соответственно 0x6038 - 0x6028  - получаем "магнитный" курс

точнее:

 

if (TrueHeading < MagVar)
                    {
                        MagHeading = 360 + Math.Round(TrueHeading - MagVar);
                    }
                    else
                        MagHeading = Math.Round(TrueHeading - MagVar,4)

 

 

"Так же никак не соображу по курсу на VOR, NAV heading"

я с этим не работал, думаю 0x0870 смотреть ...

 

"NAV localizer и glideslope needle кажись называются."

и тут то-же не знаю ...

Share this post


Link to post
Share on other sites
MrJam

Здравствуйте! Скажите, а что-то более сложное можете написать на С++? К примеру ВСС в связке с ВСУП и ВСУТ??!!

Share this post


Link to post
Share on other sites
Leonid_071

"Скажите, а что-то более сложное можете написать на С++?"

Привет, если этот вопрос ко мне, то я никогда на С++ не писал ...

Share this post


Link to post
Share on other sites
MrJam

"Скажите, а что-то более сложное можете написать на С++?"

Привет, если этот вопрос ко мне, то я никогда на С++ не писал ...

Вопрос скорее к автору темы. Хотя так и не понял кто именно и что программирует. :-)

Интересно создание кастомного автопилота (аналог боинга) в связке с жк дисплеями и бортовым компьютером (аналог MSDU Airbus) для отечественного ВС. По сути технология работы и отображения схожа с Boeing, только на русском и с некоторыми изменениями...

Share this post


Link to post
Share on other sites
Leonid_071

"Вопрос скорее к автору темы. Хотя так и не понял кто именно и что программирует. :-)"

- я не автор темы, я автор видео )))

 

"Интересно создание кастомного автопилота (аналог боинга)..."

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

то-есть оно (ТЗ) должно содержать не только картинки приборов с пояснениями а еще и формулы описывающие модель поведения объекта как физической единицы так и поведения сопуствующего оборудования в рамках модели,  (иначе, например адекватного ПИД регулирования просто не сделать), короче очень кропотливый и творческий процесс,

а дальше уже программирование, которое при наличии грамотного ТЗ  - это уже вопрос техники.

Share this post


Link to post
Share on other sites
KAI31

Вопрос скорее к автору темы. Хотя так и не понял кто именно и что программирует. :-)

Как автор темы, но не автор разработки и видео поясняю:

Програмируется внешний, подключаемый, модуль FSUIPC через его SDK.

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

 

 

 

Интересно создание кастомного автопилота (аналог боинга) в связке с жк дисплеями и бортовым компьютером (аналог MSDU Airbus) .

Как раз это и есть основа для такой внешней! пророграммы. Здесь не разбирается возможность построения приборов модели внутри СИМа. Это совсем другая тема.

 

 

для отечественного ВС. По сути технология работы и отображения схожа с Boeing, только на русском и с некоторыми изменениями...

Какого отечественного ВС? Насколько я знаю общепринятый язык на котором програмируется MSDU, FMC и их аналоги - Английский. 

 

P.S. Выводимые на монитор прибора(того же FMC) сообщения можно конвертировать в любой понятной форме, задав нужные параметры перевода или просто текст.

Share this post


Link to post
Share on other sites
NStK
"Ч/з 60сек все приходит в норму независимо летит, стоит или рулит."

 

Не такого не видел ...

может просто буфера не успевают очишаться (но это не более чем предположение), попробуй чутка цикл замедлить - Thread.Sleep(5);

 

Баг не исчез. Беру переменную магнитного склонения, преобразую по формуле, запускаю консоль, первую минуту показывает все верно склонения = 8, 7, 6 и т.д., ч/з минуту склонение = 1448, 1447, 1446 и тд., т.е. на 1440 больше.

 

Вот такая ерунда, по сути не влияет на работоспособность.

Share this post


Link to post
Share on other sites
Leonid_071

"Вот такая ерунда, по сути не влияет на работоспособность."

 

есть мысль, она касается переменных длинной 2 байта (как раз например "магнитное склонение")

когда мы ее получаем из супика:

 

                        result = fsuipc.FSUIPC_Read(0x02A0, 2, ref token, ref dwResult);
                        result = fsuipc.FSUIPC_Process(ref dwResult);
                        result = fsuipc.FSUIPC_Get(ref token, ref dwResult);

 

у нас dwResult это int32 тоесть надо делать так:

                        ushort MagVar = 0;

                        MagVar =  (ushort)dwResult;

и должны перестать прыгать значения ...

Share this post


Link to post
Share on other sites

×
×
  • Create New...