Jump to content

Shadow314

Members
  • Posts

    1
  • Joined

  • Last visited

Everything posted by Shadow314

  1. Hallo, ich weis das es nicht schön ist auf ewig alte Beiträge in einem Forum zu antworten, ich finde es in diesem Fall aber ein wenig passender als einen neuen Beitrag zu eröffnen. Ich habe auch damit begonnen mich mit LUA auseinander zu setzen, und habe mich schon ziemlich tief durchs Forum gegraben, und war auch schon verhältnismässig ziemlich erfolgreich. Mit meiner Export.lua schaffe ich es ein paar Informationen via UDP an ein kleines Testprogramm zu senden. An dieser Stelle treten aber zwei ganz wichtige Fragen auf: 1. Ich kann Daten (Strings) via UDP sehr einfach versenden, aber das Empfangen will nicht so recht. Hier erst einmal der allgemeine Aufbau meiner Export.lua Vorweg als Info: Das ist nicht der Weg für UDP-Daten der in der Export.lua vorgeschlagen wird. Habe ich diesen benutzt hat sich DCS aufgehangen. (Liegt vllt. daran, dass sich von der Lua-Verson 2006 bis heute ein wenig was geändert hat?) --- DO NOT EDIT. --- This file is for reference purposes only --- All user modifications should go to $HOME\Saved Games\DCS\Scripts\Export.lua -- Data export script for Lock On version 1.2. -- Copyright (C) 2006, Eagle Dynamics. -- See http://www.lua.org for Lua script system info -- We recommend to use the LuaSocket addon (http://www.tecgraf.puc-rio.br/luasocket) -- to use standard network protocols in Lua scripts. -- LuaSocket 2.0 files (*.dll and *.lua) are supplied in the Scripts/LuaSocket folder -- and in the installation folder of the Lock On version 1.2. -- AKTIVIEREN FÜR DEBUG --local default_output_file = nil function LuaExportStart() -- Works once just before mission start. -- Make initializations of your files or connections here. -- File -- AKTIVIEREN FÜR DEBUG --default_output_file = io.open("C:\\Test\\Test.log", "w") -- UDP package.path = package.path..";.\\LuaSocket\\?.lua" package.cpath = package.cpath..";.\\LuaSocket\\?.dll" port = 4000 -- Port zum Testen, wird auf > 10000 gelegt socket = require("socket") ip = "192.168.1.10" udp = socket.try(socket.udp()) end function LuaExportBeforeNextFrame() -- Works just before every simulation frame. -- Einschalten der Main Left Pump -- local Device = GetDevice(36) -- Device:performClickableAction(3007, 0.0) - Main Pump left end function LuaExportAfterNextFrame() -- Works just after every simulation frame. end function LuaExportStop() -- Works once just after mission stop. -- Close files and/or connections here. -- AKTIVIEREN FÜR DEBUG -- default_output_file:close() -- default_output_file = nil udp:close() end function LuaExportActivityNextEvent(t) local tNext = t -- Put your event code here and increase tNext for the next event -- so this function will be called automatically at your custom -- model times. -- Variablen auslesen local altBar = LoGetAltitudeAboveSeaLevel() local altRad = LoGetAltitudeAboveGroundLevel() local pitch, bank, yaw = LoGetADIPitchBankYaw() local MainPanel = GetDevice(0) local MasterArm = MainPanel:get_argument_value(375) local GunArm = MainPanel:get_argument_value(376) local LaserArm = MainPanel:get_argument_value(377) local TGPOnOff = MainPanel:get_argument_value(378) -- Sendedaten aufbereiten udpsend = string.format("pitch=%.2f", 57.3*pitch) .. ";" -- Nase auf/ab udpsend = udpsend .. string.format("bank=%.2f", 57.3*bank) .. ";" -- Tragflächen runter/rauf udpsend = udpsend .. string.format("yaw=%.2f", 57.3*yaw) .. ";" -- Ruder udpsend = udpsend .. string.format("altBar=%.f", 3.4*altBar) .. ";" -- Höhe über dem Meer udpsend = udpsend .. string.format("altRad=%.f", 3.4*altRad) .. ";" -- Höhe über Ground udpsend = udpsend .. string.format("MasterArm=%.1f", MasterArm) .. ";" -- MasterArm udpsend = udpsend .. string.format("GunArm=%.1f", GunArm) .. ";" -- GunArm udpsend = udpsend .. string.format("LaserArm=%.1f", LaserArm) .. ";" -- LaserArm udpsend = udpsend .. string.format("TGPOnOff=%.f", TGPOnOff) .. ";" -- TGPOnOff socket.try(udp:sendto(udpsend, ip, port)) tNext = tNext + 0.1 return tNext end Wenn ich jetzt in der Funktion function LuaExportBeforeNextFrame() folgendes ausprogrammiere hängt sich DCS auf (ich vermute, dass die Export.lua zwingend auf Daten wartet die Empfangen werden, und deshalb den Prozess blockiert local data = udp:receive() Wenn ich folgendes mache, hängt es sich trotzdem auf local data = socket.try(udp:receive()) Irgendwo in einem LUA-Beispiel habe ich eine Funktion gefunden die mir nicht ganz klar ist, aber DCS hängt sich mal nicht auf. Empfangen tue ich trotzdem nichts! local data = udp:receive("*1") Hat also nun jemand einen Ansatz für mich wie ich Daten empfangen kann? Die zweite Frage bezieht sich auf das Auslesen/Schreiben von Werten. Wie ihr seht habe ich ein paar Variablen gefunden wie z.B. die Stellung von MasterArm, etc. Die Liste der Devices habe ich auch gefunden, das hilft auch schonmal massiv weiter. Wie finde ich nun herraus welche Variablen was machen? Gibt es irgendwo eine Liste? Das File aus dem ich die Funktionen für Masterarm usw. habe beinhaltet ja noch weitere Einträge, aber sobald ich etwas nehme was nicht auf dem MainPanel (gedDeviceID(0)) liegt, bekomme ich das nicht hin. Das ich für das Schreiben (was bisher ja nur von Hand zum Testen ginge) einen Offset von 3000 addieren muss habe ich auch schon herrausgefunden. Ich hoffe es gibt den ein oder anderen der mir weiterhelfen könnte. Grüße Shadow
×
×
  • Create New...