FSX | C# | FSUIPC SDK | Programming | Программирование — Панели и приборы

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

 

 

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

 

Ответов: 30

1 2

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

Сообщение отредактировано NStK: 08 March 2016 — 14:36

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

 

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

Сообщение отредактировано KAI31: 08 March 2016 — 19:06

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

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

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

 

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

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

Spoiler

 

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

Spoiler

 

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

Сообщение отредактировано KAI31: 09 March 2016 — 15:01

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

 

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

 

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

 

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

Сообщение отредактировано NStK: 10 March 2016 — 08:29

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

 

Исходники

 

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

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

Сообщение отредактировано KAI31: 12 March 2016 — 02:51

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

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

 

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

 

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

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

Offsets: 0354

Size: 2

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

 

 

 

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

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

 

Пишу в C#.

 

Spoiler

 

Спасибо!

 

 

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

Сообщение отредактировано NStK: 14 March 2016 — 11:44

Привет,

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

  double Sqw = dwResultSqw;

 

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

string TransponserFreq = «»;

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

TransponserFreq = Convert.ToString(dwResultSqw,16);

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

Привет,

в данном случае простая 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. 

 

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

Сообщение отредактировано NStK: 16 March 2016 — 08:04

 

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

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

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

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

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

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

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

Сообщение отредактировано KAI31: 16 March 2016 — 00:02

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

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

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

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

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

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

 

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

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

 

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

Сообщение отредактировано NStK: 16 March 2016 — 07:37

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

 

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

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

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

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

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

 

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

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

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

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

 

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

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

 

 

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

 

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

Spoiler

 

 

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

К примеру:

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

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

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

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

 

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

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

Сообщение отредактировано NStK: 17 March 2016 — 10:45

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

 

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

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

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

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

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

 

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

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

 

 

Spoiler

 

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

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

 

 

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

 

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

 

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

 

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

Сообщение отредактировано NStK: 18 March 2016 — 11:43

«Ч/з 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 кажись называются.»

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

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

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

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

«Скажите, а что-то более сложное можете написать на С++?»
Привет, если этот вопрос ко мне, то я никогда на С++ не писал …

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

Сообщение отредактировано MrJam: 21 March 2016 — 14:46

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

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

 

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

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

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

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

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

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

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

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

 

 

 

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

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

 

 

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

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

 

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

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

 

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

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

 

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

 

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

Сообщение отредактировано NStK: 24 March 2016 — 07:48

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

 

есть мысль, она касается переменных длинной 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;

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

есть мысль, она касается переменных длинной 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;

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

 

Попробую

 

С протоколами связи и прошивками микроконтроллеров знакомы? 

Сообщение отредактировано NStK: 30 March 2016 — 12:23

1 2