Страница 4 из 18

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 00:03
ista011
supermax писал(а):АКБ - это про аккумуляторную батарею речь?


Да.

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 00:18
supermax
Я логику АКБ написал свою.
1. Есть дефолтное значение - 50 В.
2. Из этого значения дискретно (раз в секунду) отнимаю расход мощности потребителями (БФ, прожектор - при чём различен расход для тусклого и яркого, освещение ходовой части, освещение кабины - тоже зависит яркое или тусклое).
3. Но раз есть расход, должна быть и зарядка, если включён вентилятор низкий/высокий (загорается ГУ светодиод) идёт зарядка постепенная батареи микродолями, но она превышает расход всех потребителей (т.е. если даже всё включить хватает и на потребителей и на зарядку).
4. Если идёт постепенная разрядка то и уменьшаю Range источникам света (см. SetRange в моём блоге по скриптам под катом, где вызовы Call), т.е. урезаю потребителям потребляемую мощность.
Код небольшой в сумме :)

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 02:05
ista011
Черт, я понял, что у меня в скрипте не работают SendConsistMessage. Сообщения передаются только если в блюпринте выставить параметр "применить к составу". Что-то я не вкурил :)

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 02:28
supermax
Это где такой параметр? Не припомню что-то. Есть у контрола насколько помню булево - чтобы значение контрола синхронизировать у всех единиц ПС, но оно не работает(
Сейчас не смогу скинуть, как днем попаду к компу скину кусок скрипта с комментариями касательно вольтметра АКБ :)

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 02:45
ista011
Спасибо, буду ждать.

P.S. неожтданно SendConsistMessage оживил пантографы, но если не отпустив кнопку переключиться на другой вид, то он перестанет работать. Двери не оживил, точнее то есть, то нет, но только на половине состава, хотя скрипт везде одинаковый.

UPD: работает очень не стабильно. Даже переход в другую кабину является причиной работы только на одном вагоне.

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 03:03
supermax
forum54/topic6949-30.html#p212246
Если код остался как там, то следует также копнуть, что отправка идет только в одном направлении. Я к примеру отправлял для пантографа и вперёд и назад. Вперёд - 0, назад - 1. При чем направление может меняться, когда меняем направления движения. Поэтому и делается отправка вперёд/назад +ретранслятор для проталкивания сообщений дальше :)

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 03:27
ista011
Надо разобраться, как это всё реализовать. Код я уже поменял не раз:)

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 13:00
supermax
Код: Выделить всё
 function Initialise ()
prevBatteryTime = 0
source1 = 0
source2 = 0
source3 = 0
source4 = 0
source5 = 0
source6 = 0
chargeBattery = 0
end

function OnControlValueChange(name, index, value)
if(name == "tm_LightingChassis") then
        if(value == 1) then
         Call("Wheel01_Left_Light:Activate", 1)
         Call("Wheel01_Right_Light:Activate", 1)
         Call("Wheel02_Left_Light:Activate", 1)
         Call("Wheel02_Right_Light:Activate", 1)
         Call("Wheel03_Left_Light:Activate", 1)
         Call("Wheel03_Right_Light:Activate", 1)
         Call("Wheel04_Left_Light:Activate", 1)
         Call("Wheel04_Right_Light:Activate", 1)
         source1 = 0.0008   
      else
         Call("Wheel01_Left_Light:Activate", 0)
         Call("Wheel01_Right_Light:Activate", 0)
         Call("Wheel02_Left_Light:Activate", 0)
         Call("Wheel02_Right_Light:Activate", 0)
         Call("Wheel03_Left_Light:Activate", 0)
         Call("Wheel03_Right_Light:Activate", 0)
         Call("Wheel04_Left_Light:Activate", 0)
         Call("Wheel04_Right_Light:Activate", 0)
         source1 = 0   
      end
end
end

function Update(time)
simulationTime = Call( "*:GetSimulationTime") --время начала симуляции   
--------------------------------------------------------------------------------------
  --Зарядка батареи при включённом МВ---------------------------------------------------
   if(Call( "*:GetControlValue", "vnt_low", 0 ) == 1 and Call("*:GetControlValue", "Voltmeter_battery", 0) < 50) then
      chargeBattery = 0.0036
   elseif(Call( "*:GetControlValue", "vnt_hight", 0 ) == 1 and Call("*:GetControlValue", "Voltmeter_battery", 0) < 50) then
      chargeBattery = 0.0048
   else
      chargeBattery = 0
   end 
--------------------------------------------------------------------------------------
  --Симуляция вольтметра батареи--------------------------------------------------------
   if(simulationTime >= prevBatteryTime + 1) then
       Call("*:SetControlValue", "Voltmeter_battery", 0, Call("*:GetControlValue", "Voltmeter_battery", 0) - source1 - source2 - source3 - source4 - source5 - source6 + chargeBattery)
        prevBatteryTime = simulationTime
      --------------------------------------------------------------------------------------
      --Изменение интенсивности освещения в зависимости от заряда батареи------------------
      Call( "Front_Light_dim:SetRange", 1.02 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Front_Light_bright:SetRange", 4.09 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "CabLight_bright:SetRange", 0.1 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "CabLight_bright2:SetRange", 0.1 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "CabLight_dim:SetRange", 0.04 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "CabLight_dim2:SetRange", 0.04 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel01_Left_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel01_Right_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel02_Left_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel02_Right_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel03_Left_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel03_Right_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel04_Left_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "Wheel04_Right_Light:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "LeftBufer:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))
      Call( "RightBufer:SetRange", 0.2 * Call("*:GetControlValue", "Voltmeter_battery", 0))   
    end

Вот, вроде ничего не забыл. Инициализация переменных, в OnControlValueChange есть расход потребителя и он меняется на нулевое значение или какое-то конкретное, в зависимости включён ли потребитель в низковольтную цепь. В Update раз в секунду вычитаю расход всех источников, а если и работает МВ, то включаю зарядку дополнительно (chargeBattery) и там же раз в секунду от текущего значения АКБ высчитываю дальность света, если базовое 50 В - то 50 * на коэффициенты и получаем числа из конфигов света - базовые расстояния, если падает напряжение (не включён МВ долгое время) то свет начнёт пропорционально проседать...
Касательно синхронизации: она корявенькая в РВ, тоже столкнулся с многими проблемами. Но синхронизировать базу - пантограф получилось нормально.

Re: LuaScript - для RS

СообщениеДобавлено: 06.08.2013, 13:14
ista011
А можно анимацию запускить не из Update? Если просто выбрать состав, то секунд через 30 анимация будет работать только на одном вагоне.

Добавлено спустя 5 минут 51 секунду:
Спасибо! В скрипте батареи разобрался. Действительно очень простой, надо только придумать:)

Re: LuaScript - для RS

СообщениеДобавлено: 10.08.2013, 16:48
ista011
Практически сразу после выбора состава в нём перестают синхронизироваться вагоны. Во всех местах, гдде надо, прописаны "SendConsistMessage", причем я их потом переписал, чтобы они не через SetControlValue выставляли свойства, а через специальную функцию и переменные, но и это не помогло. По началу работает, а потом нет. Как быть?

Re: LuaScript - для RS

СообщениеДобавлено: 17.04.2015, 13:45
i2GR
Вопрос из серии очевидное-невероятное:
Код: Выделить всё
-- идентификаторы сообщений для SendConsistMessage
LOCO_ID = 313101200
RETURN_V0 = LOCO_ID + 4

Чему равно RETURN_V0?

313101200+4 = 313101204 ?

Код: Выделить всё
outid = "" --math.random(1,1000)
logfile = io.output("Assets/RailroadSim/LOCO/LOCO"..outid..".txt")
logfile:write("RETURN_V0 "..tostring(RETURN_V0))

в итоге в Assets/RailroadSim/LOCO/LOCO.txt:
RETURN_V0 313101216

:beak: где и что я делаю не так?

Re: LuaScript - для RS

СообщениеДобавлено: 17.04.2015, 21:09
радиомастер
А чему равен LOCO_ID ?

Re: LuaScript - для RS

СообщениеДобавлено: 17.04.2015, 23:06
le Sandro
И в какой системе счисления? В десятиричной? или в другой? например, в восьмиричной или семиричной.
Для восьмирички немного не вяжется операция сложения.

Re: LuaScript - для RS

СообщениеДобавлено: 18.04.2015, 13:08
A1iv
возврат для лока(ов) с такими-то ID, указанных через запятую (по идее). 4ка здесь вообще непонятно зачем. Если и вагонам, то они мертвы.
SendConsistMessage слышал не работает, для сигналки если применять его.

Re: LuaScript - для RS

СообщениеДобавлено: 19.04.2015, 18:21
i2GR
Кажется, печаль моя не покинет меня