По просьбе автора видео размещаю его в новой теме, т. к. планируется продолжение дальнейших вариаций с ПИД и примеров работы с C# + FSUIPC SDK.
И сразу пример создания автопилота для дефолтного дельтаплана.
По просьбе автора видео размещаю его в новой теме, т. к. планируется продолжение дальнейших вариаций с ПИД и примеров работы с C# + FSUIPC SDK.
И сразу пример создания автопилота для дефолтного дельтаплана.
FS9 также программируется.
Сообщение отредактировано NStK: 08 March 2016 — 14:36
SDK FSUIPC к любому симу подходит, надо только правильно выбать общую позицию открытия или указать какой СИМ будет использываться. В первом ролике, внимательно смотрите, это показано.
На канале под роликом есть ссылочки на исходники и спользуемые во втором видео.
Сообщение отредактировано KAI31: 08 March 2016 — 19:06
Гуд
… Единственное нормальная тема. Подписался…
Мы требуем продолжение.
Бум стараться. Если будут чьи либо другие наработки по этой темке — милости просим, выкладывать их сюда.
Автор давно хотел показать вариант работы с SDK FSUIPC, а тут
заварились на темке Туполёнка, (off)
в частности — передачи данных из электронного варианта НЛки (калькулятора) напрямую в РСБН.
Пилится всё потихонечку.
Сообщение отредактировано KAI31: 09 March 2016 — 15:01
Я не смотрел, я сам сейчас программирую для собственных нужд..
Канал полезный, позже загляну, может даже с вопросам!
Сообщение отредактировано 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#.
Спасибо!
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);
получаем строку с кодом …
Понял.
Еще вопрос, сегодня обнаружился БАГ. Все переменные самопроизвольно меняют значение в полный рандом и так же востанавливаются.
Сегодня тестировал Курс АРК, крутил круги на 154ке, курсы шли нормально от 0 до 360, но в какой момент стали тысячными 2010, 2124, 1345. И вдруг внезапно вернулись в нормальные от 0 до 360.
Встречали, не встречали, как быть?
Сообщение отредактировано NStK: 16 March 2016 — 08:04
Случайно этот момент не совпал с проходом над маяком?
Или может 18 Кгц повлияло.
Надо посмотреть в задатчике.
Вообще сим(ы) загадками не удивляют уже))
Для меня это, С и С++…и т.д. + XML, их взаимодействие и влияние на общие переменные, пока дремучий лес и пытаюсь разобраться в буреломе).
Но начало положено! Далее будем дерзть и разберём Что к чему.
Сообщение отредактировано KAI31: 16 March 2016 — 00:02
Нет, крутил виражи на удалении 20-30 км. Потом коробочку… случайный рандом Причем в этом участвуют несколько переменных. И ответчик тоже.
Вчера все было нормально, сегодня появилось.
Я отображал только настраиваемые переменные, не знаю какие еще сбоят. Вечерком проверю…
Сообщение отредактировано NStK: 16 March 2016 — 07:37
«Встречали, не встречали, как быть?»
да видел подобное ….
обычно начинается этот глюк после длительного использования паузы (у меня) …
после перезапуска программы — проходит
но иногда лечится только перезапуском полета, а иногда вообще только перезапуском сима …
Симптомы один в один. Ок. Будем наблюдать пациента.
БАГ пофиксин симптоматическим лечением. Убрал из кода все строки с переводом из десятичной в шестнадцатиричную. Ответчик и все частоты.
PS Как БАГ выглядел. Три консоли. Верхняя запущена была первой, остальные с некоторым интервалом, нижняя сама последняя.
Другой БАГ, менее противный, после минуты запуска проги, некоторые переменный разово меняют значения, из которых уже можно вычислять.
К примеру:
— Режимы работы двигателей
— Положение РВ
— давление на высотомере.
и еще, на память не скажу.
К примеру, после запуска консоли с параметрами двигателя, обороты N1 = — 778.xx (точно не помню) после минуты все ок, 60%. и держится, не скачет…
Если запустить еще одну консоль параллельно, то опять сначала кривые параметры, потом встают на место, причем в первой запущенной консоли параметры уже нормальные.
Сообщение отредактировано NStK: 17 March 2016 — 10:45
«К примеру, после запуска консоли с параметрами двигателя, обороты N1 = — 778.xx (точно не помню) после минуты все ок, 60%. и держится, не скачет…»
А что в этот момент времени в симе?
p.s. я такое видел при начальном запуске (т.е. до первых манипуляций с самолетом), там зачастую даже GPS не в ту сторону показывает ориентацию самолета …
а так в процессе работы — вроде все стабильно, правда у меня FSX
Летит в автомате, стоит или рулит.
Манипуляции никак не влияют. Ч/з 60сек все приходит в норму независимо летит, стоит или рулит.
А баги похожи, да и код в 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, FMC и их аналоги — Английский.
P.S. Выводимые на монитор прибора(того же FMC) сообщения можно конвертировать в любой понятной форме, задав нужные параметры перевода или просто текст.
Баг не исчез. Беру переменную магнитного склонения, преобразую по формуле, запускаю консоль, первую минуту показывает все верно склонения = 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;
и должны перестать прыгать значения …
Попробую
С протоколами связи и прошивками микроконтроллеров знакомы?
Сообщение отредактировано NStK: 30 March 2016 — 12:23
-«С протоколами связи и прошивками микроконтроллеров знакомы?»
не, не моя тема
Может кто подсказать, как получить название самолета? Оно типа string. Я не понимаю как его получить. Пробую конверт то стринг, результат на скрине.
Сама переменная:
Код получения данных:
Что в итоге:
Сообщение отредактировано Andreypilot1: 15 June 2016 — 04:02
API fsuipc никогда не изучал. нет надобности.
По этому ничего конкретного сказать не могу.
Но меня смущает название переменной dwResult.
Это явно — число.
Обычно, когда переменная названа — dwResult, она несет в себе некий числовой код.
Код ошибки, например, индекс в таблице строк, ID переменной, ну и т.д.
Вот Вы и получаете число, преобразованное в строку.
P.S.
Наверное стоит погуглить.
Я сейчас ткнул в Гугл и сразу нашел вот такое:
int typeToken = 0; fsuipc.FSUIPC_Read(0x3D00, 256, ref typeToken, ref dwResult); fsuipc.FSUIPC_Process(ref dwResult); byte[] type = new byte[256]; if (fsuipc.FSUIPC_Get(ref typeToken, 256, ref type)) { string tmp = System.Text.Encoding.ASCII.GetString(type).TrimEnd(' '); if(tmp.Length > 1) current_aircraft = tmp; }Должно быть, что-то вроде этого.
Здесь использует метод с таким же именем — fsuipc.FSUIPC_Get, но с другой сигнатурой.
Тут уже используются три параметра.
Т.е., существует несколько перегруженных методов для разных случаев применения.
Сообщение отредактировано serg_p: 16 June 2016 — 23:25