Наконец заработали основные приборы!
Но некоторые параметры найти в ЛокОне пока не удалось.
Это индикация положения шасси.
Индикация положения закрылков,
Тормозной шиток.
Давление топлива.
Давление масла.
Мркер, ДПР,БПР.
Прикрепленные изображения
kreml
22.09.2012 в 21:03
ra3dcs (22 September 2012 — 18:00) писал:
Это индикация положения шасси.
Индикация положения закрылков,
Тормозной шиток.
…
Еще бы пример записи этого в export.lua посмотреть!
kreml
23.09.2012 в 06:31
Ну если совсем кратко то так
local MechInfo = LoGetMechInfo()
if MechInfo then
local gVal = MechInfo.gear.value —состояние шасси (от 0 до 1)
local bVal = MechInfo.speedbrakes.value —воздушный тормоз (от 0 до 1)
local fVal = MechInfo.flaps.value —положение закрылков (от 0 о1)
local hStat = MechInfo.hook.status — тормозной гак
end
положения упр. поверхностей выдаются значениями от 0 до 1
сложность была только одна, с индикацией положений закрылков и воздухозаборника. Насколько я помню, была зависимость от высоты полета (воздухозаборник) и угла атаки (закрылки)
гдето вот в этой теме http://forums.eagle….t=67613&page=17 полный код экспорта выкладывал, поищи там самый последний вариант, тамже есть ссылка на видео работы ППИ, вроде достаточно похоже получилось
Сообщение отредактировал kreml: 23 September 2012 — 06:54
ra3dcs
23.09.2012 в 13:03
Спасибо!
Работает если только вместо value поставить status.
И по шасси хотелось бы получить состояние раздельных стоек.
С отдельными стойками косяк в экспорте, вывести по отдельности неполучица.
Сообщение отредактировал kreml: 23 September 2012 — 15:28
ra3dcs
24.09.2012 в 19:47
Kreml, подскажите эти сигналы есть возможность вытащить?
«Триммер РВ».
«Пуск разрешен»
«Отворот»
kreml
24.09.2012 в 20:33
По первым двум пунктам надо посмотреть, а вот «Отворот» думаю придется самим считать по параметрам полета.
ra3dcs
26.09.2012 в 14:10
Довольно интересно организован экспорт в ЛоскОне. Сингал airintake = {status} (клин воздухозаборника) выводится одновременно с выпуском шасси. wheelbrakes = {status,value} тормоз колес не выводится совсем!
Сообщение отредактировал ra3dcs: 26 September 2012 — 14:11
ra3dcs
11.10.2012 в 14:16
Еще интересный глюк с экспортом данных.
При сбросе тормозного парашюта пропадает сигнал выпущенного положения шасси.
ra3dcs
13.10.2012 в 17:45
Кто знает, есть в экспорте Lock On сигнал «пожар двигателя» и соответственно «пожаротушение»?
kreml
13.10.2012 в 19:24
вот кусок мего кода
local MCPState = LoGetMCPState()
local FIRE_L = (MCPState.LeftEngineFailure and 1) or 0
local FIRE_R = (MCPState.RightEngineFailure and 1) or 0
local FIRE = ( ((FIRE_L == 1) or (FIRE_R == 1)) and 1) or 0
Сообщение отредактировал kreml: 13 October 2012 — 19:24
ra3dcs
14.10.2012 в 00:27
kreml (13 October 2012 — 19:24) писал:
вот кусок мего кода
………
Cпасибо, работает!
Прикрепленные изображения
ra3dcs
14.10.2012 в 14:53
На примере кода Kreml еще получилась индикация нейтрального положения триммера РВ, ЭЛ. РН.
local TrimmerStatus = LoGetTrimmerStatus() — Индикация триммеров local TRIM_RV = (TrimmerStatus.ElevatorNeutral and 1) or 0 — триммер РВ local TRIM_EL = (TrimmerStatus. AileronNeutral and 1) or 0 — триммер ЭЛ local TRIM_RN = (TrimmerStatus. RudderNeutral and 1) or 0 — триммер РН
Сообщение отредактировал ra3dcs: 14 October 2012 — 14:55
ra3dcs
16.10.2012 в 15:12
Kreml, подскажите сигнал запуска двигателей удалось вытащить?
САБ
16.10.2012 в 18:16
kreml (16 October 2012 — 17:17) писал:
((RPM_L > 100) and 1) or 0
В последних собщениях проскакивает эта конструкция. В чем ее глубокий физический смысл? Я не знаю Lua, руководствуюсь только здравым смыслом. Можно предположить, что результат операции «>» содержит единички не только в младшем бите (что очень странно и маловероятно) и тогда «and1» сбрасывает все биты кроме младшего. Но операция or 0 для любого второго операнда даст в результате тот же самый второй операнд, т.е. фактически только зря тратит процессорное время. Язык интерпретирющий, навряд ли имеет оптимизатор способный выкинуть подобный ничего не делающий код, но даже если и выкидывает — какой смысл писать этот лишний код в исходник?
kreml
16.10.2012 в 17:17
Ну сам сигнал вытащить невыйдет, я его получал расчетным путем:
(если обороты двигателя <50% и они растут, то считаем что двигатели запускаются.)
код:
…
LastRPM_L = 0 — глобальные переменные для хранения предыдущего показания оборотов
LastRPM_R = 0
function GetOther()
local EngineInfo = LoGetEngineInfo()
local RPM_L = EngineInfo.RPM.left
local RPM_R = EngineInfo.RPM.right
local EngineLeftStart = ((RPM_L > LastRPM_L) and (RPM_L < 50) and 1) or 0 — если текущее показание больше предыдущего и обороты меньше 50%
local EngineRightStart = ((RPM_R > LastRPM_R) and (RPM_R < 50) and 1) or 0
LastRPM_L = RPM_L — запоминаем текущее показание
LastRPM_R = RPM_R
local LeftAfterburning = ((RPM_L > 100) and 1) or 0 — сигнал форсажа
local RightAfterburning = ((RPM_R > 100) and 1) or 0
end
Сообщение отредактировал kreml: 16 October 2012 — 17:18
kreml
16.10.2012 в 18:27
Да, это особенности языка. в lua нет побитовых операций к каким мы привыкли (кстати все переменные изначально с плавающей запятой), мне даже пришлось писать спец. функции чтобы организовать побитовые И и ИЛИ.
А в луа вот как это работает:
выражение (X1 and X2) = X2 если X1 ИСТИНА, в противном случае равно X1 (т.е. = ЛОЖЬ)
(X1 or X2) = X2 если X1 ЛОЖЬ, в противном случае равно X1 (т.е. = ИСТИНА)
Если из выражения выкинуть or 0, тогда результатом может быть либо 1, либо ЛОЖЬ, а ЛОЖЬ нам в качестве итогового значения совсем ненужна, or 0 делает замену ЛОЖЬ на 0
в итоге вот что получаем:
1) X = ( (RPM_L > 100) and 1), если обороты > 100 то X = 1, иначе оно X = ЛОЖЬ 2) Y = (X or 0), если X равен ЛОЖЬ, то результат выражения приравнивается к 0, иначе (а иначе Х может быть равен только 1) результат будет равен Х, т.е. 1
Сообщение отредактировал kreml: 16 October 2012 — 19:30
САБ
16.10.2012 в 22:34
kreml (16 October 2012 — 18:27) писал:
в итоге вот что получаем:
«Вон оно как, Михалыч!». То есть у них ложь и 0 — это совершенно разные, автоматом не приводящиеся друг к другу значения? Хм, запишу себе на корочку.
kreml
18.10.2012 в 20:02
ra3dcs (24 September 2012 — 19:47) писал:
Kreml, подскажите эти сигналы есть возможность вытащить?
«Триммер РВ».
«Пуск разрешен»
«Отворот»
Первый пункт уже решен. Теперь по второму:
Вытащить полностью идентичный игре сигнал «ПР» не получится, но кое что можно:
1. получил информацию по сопровождаемой цели
2. получил динамические данные по макс. и мин. дальности пуска выбранного оружия (ракет)
3. получил дальность до цели
Используя эти данные, можно вывести «ПР» если дистанция до цели находится между мин и макс дальностью пуска, теперь о том расхождениях с игрой
— дальности пуска рассчитаны только для управляемых ракет, применяемых по захваченной цели. Т.е. если. даже если мы ведем цель, но используем пушку, дальности пуска все равно выводятся для ракеты. Также если цель не захвачена например при работе по земле, то дальности также не выводятся.
в принципе, этот пункт можно решить, нужно только будет прописать дальности применения неуправляемого оружия, и сравнивать его с дистанцией до цели, а в случае работы по земле, еще рассчитывать дальность до поверхности земли (по оси самолета)
— помехи. Тут сложнее, наша функция всегда выдает нам дистанцию до цели, и диапазон пусков. Мы в принципе имеем информацию, использует цель помехи или нет, также знаем, произошел «прожиг» помехи или нет. Но, в игре, когда захвачена «непроженная» помеха, дистанцию до цели можно ввести вручную, от этого будет зависеть сигнал «ПР», в экспорте введенную дальность мы получить не можем. Это первое расхождение которое не выйдет убрать.
— ракеты с ТГСН. тут сигнал «ПР» зависит не только от разрешенных дальностей пуска, но и того смогла ли ГСН ракеты захватить цель или нет. Информации по ГСН ракет в экспорте тоже нет. Это второе неразрешимое расхождение с игрой.
В итоге, если мое описание заинтересовало, и со всеми недочетами готов мирится, то по «ПР» смогу помочь.
ra3dcs
18.10.2012 в 22:07
kreml (18 October 2012 — 20:02) писал:
В итоге, если мое описание заинтересовало, и со всеми недочетами готов мирится, то по «ПР» смогу помочь.
Было бы полезно!
Vladmode
19.10.2012 в 11:55
Дальность до цели — штука то же прикольная ! Можно оживить в родном прицеде АСП-ПФД-21(да и не только в нём) шкалу дальности и соответственно отработку кольца (база цели ) . Нужно только решить главную проблему ( для адекватной работы прицела ) — колимационную визуалку (или как она там правильно называется ) пардон за оффтоп.
Но некоторые параметры найти в ЛокОне пока не удалось.
Это индикация положения шасси.
Индикация положения закрылков,
Тормозной шиток.
Давление топлива.
Давление масла.
Мркер, ДПР,БПР.
Прикрепленные изображения
ra3dcs (22 September 2012 — 18:00) писал:
Индикация положения закрылков,
Тормозной шиток.
…
LoGetMechInfo()
result_is =
{
gear = {status,value,main = {left = {rod},right = {rod},nose = {rod}}}
flaps = {status,value}
speedbrakes = {status,value}
refuelingboom = {status,value}
airintake = {status,value}
noseflap = {status,value}
parachute = {status,value}
wheelbrakes = {status,value}
hook = {status,value}
wing = {status,value}
canopy = {status,value}
controlsurfaces = {elevator = {left,right},eleron = {left,right},rudder = {left,right}} — relative vlues (-1,1) (min /max) (sorry:(
}
local MechInfo = LoGetMechInfo()
if MechInfo then
local gVal = MechInfo.gear.value —состояние шасси (от 0 до 1)
local bVal = MechInfo.speedbrakes.value —воздушный тормоз (от 0 до 1)
local fVal = MechInfo.flaps.value —положение закрылков (от 0 о1)
local hStat = MechInfo.hook.status — тормозной гак
end
положения упр. поверхностей выдаются значениями от 0 до 1
сложность была только одна, с индикацией положений закрылков и воздухозаборника. Насколько я помню, была зависимость от высоты полета (воздухозаборник) и угла атаки (закрылки)
гдето вот в этой теме http://forums.eagle….t=67613&page=17 полный код экспорта выкладывал, поищи там самый последний вариант, тамже есть ссылка на видео работы ППИ, вроде достаточно похоже получилось
Сообщение отредактировал kreml: 23 September 2012 — 06:54
Работает если только вместо value поставить status.
И по шасси хотелось бы получить состояние раздельных стоек.
R20 = «20=»..math.floor(MechInfo.gear.status)..»:»
R21 = «21=»..math.floor(MechInfo.speedbrakes.status)..»:»
R22 = «22=»..math.floor(MechInfo.flaps.status)..»:»
Сообщение отредактировал kreml: 23 September 2012 — 15:28
«Триммер РВ».
«Пуск разрешен»
«Отворот»
Сингал airintake = {status} (клин воздухозаборника) выводится одновременно с выпуском шасси.
wheelbrakes = {status,value} тормоз колес не выводится совсем!
Сообщение отредактировал ra3dcs: 26 September 2012 — 14:11
При сбросе тормозного парашюта пропадает сигнал выпущенного положения шасси.
local MCPState = LoGetMCPState()
local FIRE_L = (MCPState.LeftEngineFailure and 1) or 0
local FIRE_R = (MCPState.RightEngineFailure and 1) or 0
local FIRE = ( ((FIRE_L == 1) or (FIRE_R == 1)) and 1) or 0
Сообщение отредактировал kreml: 13 October 2012 — 19:24
kreml (13 October 2012 — 19:24) писал:
………
Cпасибо, работает!
Прикрепленные изображения
LoGetTrimmerStatus()
возвращает таблицу вида
{
ElevatorNeutral = true/false,
AileronNeutral = true/false,
RudderNeutral = true/false
}
local TrimmerStatus = LoGetTrimmerStatus() — Индикация триммеров
local TRIM_RV = (TrimmerStatus.ElevatorNeutral and 1) or 0 — триммер РВ
local TRIM_EL = (TrimmerStatus. AileronNeutral and 1) or 0 — триммер ЭЛ
local TRIM_RN = (TrimmerStatus. RudderNeutral and 1) or 0 — триммер РН
Сообщение отредактировал ra3dcs: 14 October 2012 — 14:55
kreml (16 October 2012 — 17:17) писал:
В последних собщениях проскакивает эта конструкция. В чем ее глубокий физический смысл? Я не знаю Lua, руководствуюсь только здравым смыслом. Можно предположить, что результат операции «>» содержит единички не только в младшем бите (что очень странно и маловероятно) и тогда «and1» сбрасывает все биты кроме младшего. Но операция or 0 для любого второго операнда даст в результате тот же самый второй операнд, т.е. фактически только зря тратит процессорное время. Язык интерпретирющий, навряд ли имеет оптимизатор способный выкинуть подобный ничего не делающий код, но даже если и выкидывает — какой смысл писать этот лишний код в исходник?
(если обороты двигателя <50% и они растут, то считаем что двигатели запускаются.)
код:
…
LastRPM_L = 0 — глобальные переменные для хранения предыдущего показания оборотов
LastRPM_R = 0
function GetOther()
local EngineInfo = LoGetEngineInfo()
local RPM_L = EngineInfo.RPM.left
local RPM_R = EngineInfo.RPM.right
local EngineLeftStart = ((RPM_L > LastRPM_L) and (RPM_L < 50) and 1) or 0 — если текущее показание больше предыдущего и обороты меньше 50%
local EngineRightStart = ((RPM_R > LastRPM_R) and (RPM_R < 50) and 1) or 0
LastRPM_L = RPM_L — запоминаем текущее показание
LastRPM_R = RPM_R
local LeftAfterburning = ((RPM_L > 100) and 1) or 0 — сигнал форсажа
local RightAfterburning = ((RPM_R > 100) and 1) or 0
end
Сообщение отредактировал kreml: 16 October 2012 — 17:18
А в луа вот как это работает:
выражение (X1 and X2) = X2 если X1 ИСТИНА, в противном случае равно X1 (т.е. = ЛОЖЬ)
(X1 or X2) = X2 если X1 ЛОЖЬ, в противном случае равно X1 (т.е. = ИСТИНА)
Если из выражения выкинуть or 0, тогда результатом может быть либо 1, либо ЛОЖЬ, а ЛОЖЬ нам в качестве итогового значения совсем ненужна, or 0 делает замену ЛОЖЬ на 0
в итоге вот что получаем:
1) X = ( (RPM_L > 100) and 1), если обороты > 100 то X = 1, иначе оно X = ЛОЖЬ
2) Y = (X or 0), если X равен ЛОЖЬ, то результат выражения приравнивается к 0, иначе (а иначе Х может быть равен только 1) результат будет равен Х, т.е. 1
Сообщение отредактировал kreml: 16 October 2012 — 19:30
kreml (16 October 2012 — 18:27) писал:
«Вон оно как, Михалыч!». То есть у них ложь и 0 — это совершенно разные, автоматом не приводящиеся друг к другу значения? Хм, запишу себе на корочку.
ra3dcs (24 September 2012 — 19:47) писал:
«Триммер РВ».
«Пуск разрешен»
«Отворот»
Первый пункт уже решен. Теперь по второму:
Вытащить полностью идентичный игре сигнал «ПР» не получится, но кое что можно:
1. получил информацию по сопровождаемой цели
2. получил динамические данные по макс. и мин. дальности пуска выбранного оружия (ракет)
3. получил дальность до цели
Используя эти данные, можно вывести «ПР» если дистанция до цели находится между мин и макс дальностью пуска, теперь о том расхождениях с игрой
— дальности пуска рассчитаны только для управляемых ракет, применяемых по захваченной цели. Т.е. если. даже если мы ведем цель, но используем пушку, дальности пуска все равно выводятся для ракеты. Также если цель не захвачена например при работе по земле, то дальности также не выводятся.
в принципе, этот пункт можно решить, нужно только будет прописать дальности применения неуправляемого оружия, и сравнивать его с дистанцией до цели, а в случае работы по земле, еще рассчитывать дальность до поверхности земли (по оси самолета)
— помехи. Тут сложнее, наша функция всегда выдает нам дистанцию до цели, и диапазон пусков. Мы в принципе имеем информацию, использует цель помехи или нет, также знаем, произошел «прожиг» помехи или нет. Но, в игре, когда захвачена «непроженная» помеха, дистанцию до цели можно ввести вручную, от этого будет зависеть сигнал «ПР», в экспорте введенную дальность мы получить не можем. Это первое расхождение которое не выйдет убрать.
— ракеты с ТГСН. тут сигнал «ПР» зависит не только от разрешенных дальностей пуска, но и того смогла ли ГСН ракеты захватить цель или нет. Информации по ГСН ракет в экспорте тоже нет. Это второе неразрешимое расхождение с игрой.
В итоге, если мое описание заинтересовало, и со всеми недочетами готов мирится, то по «ПР» смогу помочь.
kreml (18 October 2012 — 20:02) писал:
Было бы полезно!