Совсем недавно вышел патч для DCS КА-50, в котором реализован полноценный экспрот данных.
Патч можно скачать отсюда: http://www.digitalco…roducts&lang=ru
Ветка на официальном форуме: http://forums.eagle….ead.php?t=44017
В этой ветке обсуждаем особенности экспорта.
Сообщение отредактировано LISА: 11 January 2012 — 19:33
Не буду подробно останавливаться на особенностях работы ТСР, скажу только что
для того что бы данные начали отправляться, должна быть запущена программа которая
сначала создаст сервер(ведущий процесс), а сам DCS является ведомым процессом.
В моем случае данные принимаются с помощю ПСС от KOIS (см. ветку «отживление приборов»)
Что бы включить экспорт нужно найти файл Config.lua (…KA50ConfigExportConfig.lua)
и немного подредактировать, должно быть так:
EnableExportScript = true
На официальном форуме ED есть ветка посвященная lua и
экспорту данных: http://forums.eagle….ead.php?t=33051
Wiki: http://en.wiki.eagle…ki/Export_1_0_1
Еще про lua: http://www.digitalco…default&lang=ru
Сообщение отредактировано LISА: 02 September 2009 — 03:12
Рассмотрим основные куски кода:
function LuaExportStart() package.path = package.path..";.\LuaSocket\?.lua" package.cpath = package.cpath..";.\LuaSocket\?.dll" socket = require("socket") host = host or "localhost" port = port or 8080 c = socket.try(socket.connect(host, port)) c:setoption("tcp-nodelay",true) endтут натраивается TCP
далее:
тут думаю все понятно, внутри этих конструкций можно
писать код, который будет выполнятся до или после следующего
кадра
ну и на последок:
function LuaExportStop() socket.try(c:send("quit")) c:close() endСообщение отредактировано LISА: 01 September 2009 — 16:16
будет выполнять код через определенный интервал времени
без привязки к fps
function LuaExportStart() package.path = package.path..";.\LuaSocket\?.lua" package.cpath = package.cpath..";.\LuaSocket\?.dll" socket = require("socket") host = host or "localhost" port = port or 8080 c = socket.try(socket.connect(host, port)) c:setoption("tcp-nodelay",true) end function LuaExportBeforeNextFrame() end function LuaExportAfterNextFrame() local TAS = LoGetTrueAirSpeed() * 3.6 -- получаем значение истинной скорости socket.try(c:send(string.format("A %s n",TAS))) -- отправляем данные end function LuaExportStop() socket.try(c:send("quit")) c:close() endСообщение отредактировано LISА: 02 September 2009 — 03:13
Сообщение отредактировано LISА: 03 September 2009 — 00:13
socket.try(c:send(string.format("A %s n",TAS)))Эта строчка может выглядеть подругому, в зависимости от того
что и в каком виде нужно отправить, в данном случае отправляется
только одно значение истинной скорости.
Запускаем программу сервер, запускаем DCS и если все сделано
правильно, данные будут экспортироваться.
Если нет, изучаем файл Error.log (…KA50TempError.log)
например:
строка 150, ожидаем числовое значение а получаем пустое место (nil)
Если видим такую строчку, значит не запущена или не корректоно
работает программа сервер.
Сообщение отредактировано LISА: 01 September 2009 — 22:38
Есть несколько способов получить значение, старый
способ выглядит так:
Эти функции остались еще со времен LO, возвращают
переменные в чистом виде (единицы имерения метры,
км/ч, радианы) шкалы линейные.
На самом деле старых функций много, однако большинство
функций из LO в DCS уже не работают!
———————————————————
С выходом патча 1.01 стал доступен другой способ получения данных:
dofile("Scripts/Aircrafts/Ka-50/Cockpit/devices.lua") local panel = GetDevice(0) if panel then panel :update_arguments() local roll = panel:get_argument_value(100) local pitch = panel:get_argument_value(101) endGetDevice(0) это запрос девайса за номером 0. По умолчанию за номером 0
закреплена сама кабина (вернее то устройство которое отвечает за отрисовку кабины)
Почти все что шевелится в кабине, включая рычаги управления есть экспорте.
Главное правильно указать номер аргумента! Номера аргументов можно посмотреть
в файле mainpanel_init.lua (…KA50ScriptsAircraftsKa-50Cockpitmainpanel_init.lua)
Имя переменной (pitch, roll) можно придумать свое.
Возвращает флоат, причем как 0—1 так и -1—1, единицы измерения
в большинстве случаев попугаи, шкалы НЕЛИНЕЙНЫЕ.
Нужно понимать что мы имеем дело не с переменными в чистом виде, а с
аргументами отрисовки, те 0 и 1 соответсвуют двум крайним положениям
стелки на приборе.
С сигнальными лампами все просто 0 не горит, 1 горит код тот же
Для кнопок со световой индикацией, тоже есть данные.
———————————————
СПИСКИ ДАННЫХ ПО ПРИБОРАМ И ЛАМПАМ
залил сюда: http://ifolder.ru/13807475
Сообщение отредактировано LISА: 02 September 2009 — 22:25
Далее, СУО
local weapon_system = GetDevice(devices.WEAP_INTERFACE) if weapon_system then W1 = weapon_system:get_weapon_type_on_station(0-3) -- тип снаряда, строка "9A4172","S-13"","EMPTY" W2 = weapon_system:get_weapon_count_on_station(0-3) -- число снарядов, число 0-40 шт W3 = weapon_system:get_selected_weapon_stations() -- выбранные пилоны, таблица 0 1, 2 3 W4 = weapon_system:get_selected_gun_ammo() -- строка "НЕ" или "АР" W5 = weapon_system:get_selected_gun_ammo_count() -- остаток боекомплекта пушки, число 0-240 шт endпример кода
радиовысотомер
так и аргументы отрисовки, те то что показывают приборы в вирт. кабине.
Например крен-тангаж:
крен-тангаж который показывает ИКП:
крен-тангаж резервный АГД:
Резервный АГД может сбиваеться, дрейф, отказы
гировертикали и тд, все это экспортируется.
— данные с цифрового табло УВ-26 отстрел ЛТЦ
— данные с ПВИ пульт ввода и индикации
Возможно с выходом новой части DCS, что то изменится.
особенно если программы для приема данных нет, можно записывать
данные в лог. Скрипт выглядит примерно так:
-- тут указываем, что данные нужно записать в файл function LuaExportStart() local file = io.open("./Temp/Export.log", "w") if file then io.output(file) end end function LuaExportBeforeNextFrame() end function LuaExportAfterNextFrame() end function LuaExportStop() io.close() end -- получаем данные c интервалом 1 сек. function LuaExportActivityNextEvent(t) local tNext = t tNext = tNext + 1.0 -- тут устаавливается итервал if not LoGetPlayerPlaneId() then return t end ------------------------------------------------------ dofile("Scripts/Aircrafts/Ka-50/Cockpit/devices.lua") local panel = GetDevice(0) if panel then panel :update_arguments() roll = panel:get_argument_value(100)*90 -- крен pith = panel:get_argument_value(101)*180 -- тангаж heading = panel:get_argument_value(112)*360 -- курс end io.write(string.format("крен = %f,тангаж = %f,курс = %fn",roll,pith,heading)) -- записываем в файл ------------------------------------------------------ return tNext endрезультат смотрим в файле Export.log (…KA50TempExport.log)
нужно сказать отдельное спасибо Alex O’kean
из команды ED за реализацию экспорта
описывать не буду, подробно можно почитать тут:
http://freemanru.spaces.live.com/blog/cns!9E1589588902DBAA!351.entry
http://freemanru.spaces.live.com/blog/cns!9E1589588902DBAA!360.entry