FSBus и 737NG. Разочарование.

Здравствуйте коллеги!
Изготовил часть компонентов FSBus. Оригинальный COM, Display, EZ_Led, EZ_Keyboard.
Нашел даже частично офсеты к PMDG Boeing 737. Такие как AP Altitude, HDG, V/S, Course ну и еще биты Alt Hold, VNAV, LNAV и т.д.

Что я имею теперь. Я имею полную визуализацию MCP. То есть, выводятся на дисплеи Высота, скорость, HDG, курс, вертикальная скорость, при активации разных режимов а/п загораются соответствующие светодиоды.
Если я меняю значения при помощи мыши на вирт. панели MCP, меняется и значение на реальных дисплеях.

Но!

При попытке при помощи энкодера поменять значение например высоты, значение переменной меняется (меняется на сответствующем физическом дисплее, а на виртуальной панели оно остается неизменным! То же самое и с HDG и Course, и с верт. скоростью и со скоростью. Причем, с HDG и Course вообще все сложно.. Потому что при изменении значения при помощи энкодера после значения 359 не следует 0, как это должно быть, а следует 361, 362 и т.д до значения 65535..

Попробовал все это проделать на дефолтном боинге, все работает преотлично. Пробовал на NG менять значения частот COM, NAV, ADF при помощи энкодера на FSBUS, тоже работает (там стандартные переменные)

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

Может быть кто-то с этой проблемой сталкивался? И если да, то как решали?
Не дайте коллеге разочароваться!

Ответов: 19

Jazz, on 26 August 2009 — 18:33, said:

У SIOC реализовано через keystrokes. Подумайте в этом направлении.

keystrokes в ПТ не работали. Проверено. В notepad-е печатают, в ПТ нет. Может в 737NG заработают, хотя непонятно о каком ЭНДЖЫ идет речь 🙂

У SIOC реализовано через keystrokes. Подумайте в этом направлении.

vitabutch, on 27 August 2009 — 00:04, said:

keystrokes в ПТ не работали. Проверено. В notepad-е печатают, в ПТ нет. Может в 737NG заработают, хотя непонятно о каком ЭНДЖЫ идет речь 🙂

To vitabutch. Речь идет об PMDG 737NG, а можно поподробнее про keystrokes, что это? И как это мне может помочь?

Ivan_Pletnev, on 26 August 2009 — 16:07, said:

Здравствуйте коллеги!
Изготовил часть компонентов FSBus. Оригинальный COM, Display, EZ_Led, EZ_Keyboard.
Нашел даже частично офсеты к PMDG Boeing 737. Такие как AP Altitude, HDG, V/S, Course ну и еще биты Alt Hold, VNAV, LNAV и т.д.

Что я имею теперь. Я имею полную визуализацию MCP. То есть, выводятся на дисплеи Высота, скорость, HDG, курс, вертикальная скорость, при активации разных режимов а/п загораются соответствующие светодиоды.
Если я меняю значения при помощи мыши на вирт. панели MCP, меняется и значение на реальных дисплеях.

Но!

При попытке при помощи энкодера поменять значение например высоты, значение переменной меняется (меняется на сответствующем физическом дисплее, а на виртуальной панели оно остается неизменным! То же самое и с HDG и Course, и с верт. скоростью и со скоростью. Причем, с HDG и Course вообще все сложно.. Потому что при изменении значения при помощи энкодера после значения 359 не следует 0, как это должно быть, а следует 361, 362 и т.д до значения 65535..

Попробовал все это проделать на дефолтном боинге, все работает преотлично. Пробовал на NG менять значения частот COM, NAV, ADF при помощи энкодера на FSBUS, тоже работает (там стандартные переменные)

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

Может быть кто-то с этой проблемой сталкивался? И если да, то как решали?
Не дайте коллеге разочароваться!

если оффсеты верны, возможно Вы не учитываете их формат ( десятичный или BCD ). В СИОКЕ для их преобразования есть команды TOBCD и FROMBCD. Я бы посоветовал найти скрипт для MCP PMDG и посмотреть какие оффсеты задействованы там и как организовано их чтение/запись.

Ivan_Pletnev, on 27 August 2009 — 05:13, said:

To vitabutch. Речь идет об PMDG 737NG, а можно поподробнее про keystrokes, что это? И как это мне может помочь?

Keystrokes это такая «фича» роутера SIOC, которая может назначить определенному событию SIOC-а, например, нажатию кнопки, состоянию переменной, вызову процедуры и т.д. подпрограмму, которая эмулирует нажатие определенной последовательности клавиш. Последовательности определяются в sioc.ini

[ Asignaciуn de teclas ]
[ assign youe keys ]

#1=BA
#2=B
#3=C
#4=D
#5=E
#6=F
#7=G
#8=H
#9=I
#10=J
#11=K
#12=L
#13=M
#14=N
#15=O
#16=P
#17=Q
#18=R
#19=S
#20=T
#21=U
#22=V
#23=W
#24=X
#25=Y
#26=Z
#27=1
#28=2
#29=3
#30=4
#31=5
#32=6
#33=7
#34=8
#35=9
#36=0
#37=<
#38=,
#39=.
#40=-
#41=*
#42=+
#43=//
#44=/0
#45=/1
#46=/A
#47=
#48=
#49=
#50=
#51=
#52=
#53=
#54=
#55=
#56=
#57=
#58=
#59=
#60=
#61=
#62=
#63=
#64=
#65=
#66=
#67=
#68=
#69=
#70=
#71=
#72=
#73=
#74=
#75=
#76=
#77=
#78=
#79=
#80=
#81=
#82=
#83=
#84=
#85=
#86=
#87=
#88=<a
#200=<b

Мне сложно сказать как это может Вам помочь, т.к. чтобы работать с вводом-выводом SIOC, надо иметь хотя-бы одну мастер-плату IOCARDS. Т.к. Вы выбрали FSBus, то тут SIOC ничем помочь не может.
Мне кажется Вам нужно поискать по сети примеры скриптов для PMDG 737го, благо что моделька старая и уже кто-то наверняка работал с ней через смещения FSUIPC.
У меня есть еще подозрение, что в нелицензионных (триальных) FSUIPC некоторые «специальные» смещения могут быть закрыты. Т.е. Ваш роутер шлет значения в FSUIPC, но FSUIPC может блокировать эти изменения из-за лицензии. Попробуйте поискать в описании на FSUIPC про это.

vitabutch, on 27 August 2009 — 09:44, said:

Т.к. Вы выбрали FSBus, то тут SIOC ничем помочь не может.

Не совсем так. На самом деле SIOC можно состыковать с FSBUS через незадействованные оффсеты FSUIPC.

Дело в том, что FSUIPC зарегистрированная и официальная, поэтому одна версия сразу отпадает.. Формат переменных тоже соблюдаю.. Я нашел скрипт SIOC для PMDG 737, просмотрел, увидел там оффсеты те, которые я использую сейчас и еще некоторые. Но при ближайшем рассмотрении оказалось, что те некоторые принадлежат Project Magenta. Удалось запустить только один энкодер на Course. Хотя тоже не полностью. Значение на вирт. панели MCP не меняется, зато на дисплее вектор меняет свое положение. В общем, придется, наверное, энкодер Course привязать через EZBus_Keyboard, а остальные четыре энкодера через MJoy. Их как раз там четыре..

601, on 27 August 2009 — 14:24, said:

Не совсем так. На самом деле SIOC можно состыковать с FSBUS через незадействованные оффсеты FSUIPC.

Получается задержка в 1.5 секунды, у меня щас как раз PMDG решил проблему через эмуляцию нажатий на клавиши во всюпике, а для точности сделал дополнительную плату, где каждому энкодеру соотв. две ноги(прошивку и файл печатной платы могу кинуть)

Также можете попробовать мой софт для плат FSBUS, но он еще сыроват, возможны глюки.

DellR, on 27 August 2009 — 18:41, said:

Получается задержка в 1.5 секунды

Полторы секунды — это как-то очень много. В файле sioc.ini имеет смысл поиграться параметром FSUipcRefresh…

DellR, on 27 August 2009 — 18:41, said:

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

В смысле, для точности? В любой плате (и в ИОКАРДС в том числе) каждому энкодеру соответствуют две ноги (+земля). В чем проблема с родными энкодерами?

DellR, on 27 August 2009 — 23:41, said:

Получается задержка в 1.5 секунды, у меня щас как раз PMDG решил проблему через эмуляцию нажатий на клавиши во всюпике, а для точности сделал дополнительную плату, где каждому энкодеру соотв. две ноги(прошивку и файл печатной платы могу кинуть)

Также можете попробовать мой софт для плат FSBUS, но он еще сыроват, возможны глюки.

Интересно-интересно, что за плата??? Киньте пожалуйста! Ivan_Pletnev собака mail точка ru.
И про софт не менее интересно.

Да, кстати, внимательно изучил скрипт SIOC для PMDG737, там действительно управление всеми переменными, которыми у меня через FSBus управлять не получается, осуществляется через keystrokes.

Сообщение отредактировано Ivan_Pletnev: 28 Август 2009 — 08:10

Ivan_Pletnev, on 28 August 2009 — 05:28, said:

Интересно-интересно, что за плата??? Киньте пожалуйста! Ivan_Pletnev собака mail точка ru.
И про софт не менее интересно.

Да, кстати, внимательно изучил скрипт SIOC для PMDG737, там действительно управление всеми переменными, которыми у меня через FSBus управлять не получается, осуществляется через keystrokes.

Тогда Вам стоит попробовать сделать как предложил 601й. СИОК очень быстрая штука. Вам осталось найти оффсеты FSUIPC, который свободны.

vitabutch, on 28 August 2009 — 12:18, said:

Тогда Вам стоит попробовать сделать как предложил 601й. СИОК очень быстрая штука. Вам осталось найти оффсеты FSUIPC, который свободны.

Ну что ж, тогда вопрос к 601! Вы давно уже занимаетесь этим вопросом, подскажите, какие офсеты под это дело можно использовать, мне их надо-то несколько штук всего.. Заранее благодарю!

Ivan_Pletnev, on 28 August 2009 — 08:55, said:

Ну что ж, тогда вопрос к 601! Вы давно уже занимаетесь этим вопросом, подскажите, какие офсеты под это дело можно использовать, мне их надо-то несколько штук всего.. Заранее благодарю!

Есть свободная область (достаточно большая) начиная с $4000. Можно также использовать области, зарезервированные для Project Magenta, если вы его не используете. Возможно есть и другие области — навскидку не вспомню…

Вот тут есть пример сиоковской модели системы впрыска воды, предназначенная для работы с FSBUS, которую я писал для Александра: http://www.avsim.su/…post__p__828360

Сообщение отредактировано 601: 28 Август 2009 — 17:10

Ivan_Pletnev, on 28 August 2009 — 15:31, said:

Хмм… Значит, значение инкремента/декремента энкодера в FSBUS прибавляется/отнимается от значения офсета FSUIPC (например, 4000) потом этот офсет читается SIOC и обрабатывается им, например, посылается нажатие клавиши в определенное окно. Правильно я понимаю?

Да.

Хотя в случае с энкодером при такой схеме теоретически могут иметь место заметные задержки, поскольку SIOC опрашивает FSUIPC раз в какое-то время. Предполагаю, что FSBUS также общается с FSUIPC по таймеру (поправьте, кто знает). Т.е. мы будем иметь дело с суммарной задержкой. Если при работе с тумблерами, кнопками и лампами это особого значения не имеет, то в случае с энкодером может кровь попортить.

Сообщение отредактировано 601: 28 Август 2009 — 18:48

Хмм… Значит, значение инкремента/декремента энкодера в FSBUS прибавляется/отнимается от значения офсета FSUIPC (например, 4000) потом этот офсет читается SIOC и обрабатывается им, например, посылается нажатие клавиши в определенное окно. Правильно я понимаю?

я при отсутствии доступа к переменным через FSUIPC связывал энкодеры и индикаторы c помощью макросов следующим способом:
Связка энкодер — индикатор работает напрямую, минуя сим, только при запуске программы значение на «железном» индикаторе должно соответствовать значению на мониторе, в АРК , например, это делается чтением оффсетов FSUIPC при обоих положениях тумблеров выбора каналов, в ТКС подаётся подаётся пачка импульсов для поворота шкалы до упора а затем конкретное число импульсов в обратном направлении для установки в конкретное наиболее часто используемое положение, всё это делается автоматически скриптом при запуске СИОКА. Возможно, в каких то случаях сам сим стартует всегда при одном определённом значении на индикаторах, ещё лучше.
Дальше всё просто. После поворота энкодера и нажатии его кнопки скрипт вычисляет знак и величину приращения и посылает соответствующее число импульсов в назначенную вами мышиную зону.Задержка знкодер-индикатор отсутствует в принципе, стандартный алгоритм обработки сигналов энкодера позволяет работать с акселерацией, а пропуск клика остаётся внутри скрипта,т.к. вычисляется разница между предыдущим и новым значением, уже дошедшим на индикатор,энкодер можно крутить с любой приемлемой для глаз скоростью, черепашья скорость обмена с FSUIPC остаётся за кадром, естественно, если вы не поклонник 3D кабины , там этот способ не приемлем. Пример скрипта я приводил в теме о IOCARDS, не знаю только поможет ли это пользователям FSBUS.

vitabutch, on 27 August 2009 — 22:13, said:

В смысле, для точности? В любой плате (и в ИОКАРДС в том числе) каждому энкодеру соответствуют две ноги (+земля). В чем проблема с родными энкодерами?

Я для FSBUS сделал, также есть, динамическая индикация и оси(пока в железе не пробовал) все совместимо с EZ_BUS. Скину в понедельник, щас на даче.

Даа.. Программист из меня никудышный, целый день просидел, пытался какой-нибудь работающий скрипт написать, ничего не получается.. В первую очередь непонятно следующее:

Какого размера незадействованные офсеты? Я имею ввиду область, про которую говорил уважаемый 601ый..