Jump to content

Recommended Posts

Posted

ЙЕС. Заработало. Не сразу, с подвисанием, но заработало. Спасибо за помощь!

Chopper pilots make History, man. Jetfighters - make movies... ©

  • 6 months later...
Posted

Ещё вопрос. Вообще-то к Создателю, но может быть кто и так подскажет. Возможно ли воткнуть экран шквала в BSVP? и если да, то каким образом? Или, допустим, "своровать" скины приборов и воткнуть их в Гадрок Хелиос?

 

Подчёркиваю - я ни разу не программер, посему разговаривайте как с очень тупым.

Chopper pilots make History, man. Jetfighters - make movies... ©

Posted (edited)

Кто то разбирался с принимающим сокетом ? А то во всех примерах только передающий. Ну то есть чтоб передать данные в локон через сокет ?

пишу

host = host or "localhost"

port = port or 10604

socket = require("socket")

local sck = socket.try(socket.bind(host, port))

 

и молчёк локон всё отработал но при попытке подкючиться по порту на это адрес соообщение 10061 сокет не существует

Edited by jazzymanserg
Posted

Настройки на приём и на передачу одинаковы.

 

Настройка

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
Buran = socket.try(socket.connect(host,port))
Buran:setoption("tcp-nodelay",true)
end

прием DCSом комманд

function LuaExportBeforeNextFrame()
--получении управляющих комманд
rs, err = Buran:receive('*l')
if (rs ~= nil) then
	_, _, pitch, bank = string.find(rs, "(.+) (.+)")
	LoSetCommand(2001, pitch)
       	LoSetCommand(2002, bank)
       end

end

Posted (edited)

Дружище - лажу по всем тема - пока результата 0

 

 

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()

rs, err = с:receive('*l')

if (rs ~= nil) then

_, _, pitch, bank = string.find(rs, "(.+) (.+)")

LoSetCommand(2001, pitch)

LoSetCommand(2002, bank)

end

 

end

 

У меня крафт Су-25А.

 

при попытке соединения со скриптом в питоне

 

import socket,select

host = "localhost"

port = 8080

ne = socket.socket()

ne.connect((host, port))

ne.send(<комманда>)

ne.close()

 

получаю ответ что сокета не существует

 

При этом когда запускаю сиок, то коннект с сиок проходит нормально. соеднение проходит

 

Мне кажется что причина банальная

 

Да , кстати, фаервол отключил

Edited by jazzymanserg
Posted (edited)

Проверь каким-нибудь tcp терминалом, что связь с дкс точно есть.

Я с питоном не знаком, но судя по всему проблема в нем на твоей стороне, т.к. экспорт этот работает 100%.

Дкс является клиентом, чтобы с ним работать через экспорт твой софт должен быть сервером.

Убедись, что твой питоновский скрипт создает tcp сервер.

 

ps погуглил, судя из твоего кода local sck = socket.try(socket.bind(host, port))

ты как раз таки создаешь клиента, а надо сервер

 

Это если я правильно понял тут

Calling listen() puts the socket into server mode, and accept() waits for an incoming connection.

https://pymotw.com/2/socket/tcp.html

Edited by BR=55=Sevas
Posted

ps погуглил, судя из твоего кода local sck = socket.try(socket.bind(host, port))

ты как раз таки создаешь клиента, а надо сервер

огромное спасибо за направление мысли

 

При оправки питоном строки "431=1", в СИОК переменная 431 выставляется в 1. Это я проверил. А дальше ЛУА должна прочитать данные методом receive(*l). Но ГС должен сначал в сиок послать запрос на нужныіе переменные. а потом обработать методом receive. И зачем тогда нужен СИОК ? если можнонапрямую в ГС

Posted (edited)

Не знаю что есть сиок.

Чтобы программно убрать шассии я делаю так

 

function LuaExportBeforeNextFrame()
--получении управл¤ющих комманд
rs, err = Buran:receive('*l')
if (rs ~= nil) then
		_, _, pitch, bank, dCom = string.find(rs, "(.+) (.+) (.+)")
		pitch = tonumber(pitch)
		LoSetCommand(2001, pitch)
       	LoSetCommand(2002, bank)
		dCom = tonumber(dCom)
		if dCom ~= -1		then LoSetCommand(dCom)  end
		
       end

 

Из моего сервера я шлю 3м параметром -1 когда ничего не надо делать, если же надо убрать шасси я однократно отправляю 68.

список других комманд есть в exporte

Edited by BR=55=Sevas
Posted (edited)

А что за крафт у тебя ?

И как полностью строк аекспорта выглядит - ну та \n \s \d ?

В су 25 не кликабельнм Losetcommand содержит один параметр LoSetCommand(<command>) убрать шасси 431

 

Блииин - Севас - реальный чувак ! Таки да - дело было в серваке. его надо было поставить сначала на прослушку, а после коннекта слать

И за сайт спасибо !https://pymotw.com

Edited by jazzymanserg
Posted

Новый сюрприз. В чём ошибка ?

В данном варианте работает, но нужно постоянно слать данные,

или -1 или комманду. Если ни чего не слать то на методе

с:receive('*l') ГС зависает. Если разорвать соединение с сокетом

то опять работает

А по идее, если я ни чего не шлю в сокет, то

с:receive('*l') должен вернуть nil, а не ждать данных.

может еще какой то секрет есть ?

 

function LuaExportBeforeNextFrame()

rs, err = с:receive('*l')

if (rs ~= nil) then

_, _, pitch, bank, dCom = string.find(rs, "(.+) (.+) (.+)")

dCom = tonumber(dCom)

if dCom ~= -1 then LoSetCommand(dCom)

end

end

  • 8 months later...
Posted (edited)

А почему нельзя к этому:

c:setoption("tcp-nodelay",true) -- set immediate transmission mode

добавить это:

c:settimeout(.001) -- set the timeout for reading the socket

Edited by USSR_Nic

Выпитая водка не влияет на ТТХ истребителей!!!

Слава ЕД!!! У меня есть АФМ к Су-33!!!!!!

Posted

Поробовал так. DCS не виснет. Команда посылаемые 1 раз работают. Данные постоянно слать не надо.

Выпитая водка не влияет на ТТХ истребителей!!!

Слава ЕД!!! У меня есть АФМ к Су-33!!!!!!

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...