trensim.comSimulación Ferroviaria
   

Control de amperaje en locomotoras

Foro destinado a la discusión de aspectos relacionados con la creación de scripts en RailWorks.

Moderador: Moderadores

Control de amperaje en locomotoras

Notapor 444.518 » Mar Ene 03, 2012 12:08 am

Este pequeño 'script' sirve tanto para locomotoras eléctricas como diesel-eléctricas, modificando un valor arbitrario de corriente máxima permisible. El resultado es que si nos pasamos de cierto rango de corriente enviada a los motores de tracción, un sistema de protección hará saltar el freno de emergencia.

Código: Seleccionar todo
function Initialise ()

isPlayerLoco = false

Call("BeginUpdate")

end

function OnConsistMessage ( msg, argument, direction )

   Call ( "SendConsistMessage", msg, argument, direction );
   
end


function OnControlValueChange ( name, index, value )

   if Call( "*:ControlExists", name, index ) then

      Call( "*:SetControlValue", name, index, value );

   end

end

function Update (time)
      
      
      
      if Call("GetIsEngineWithKey") > 0.5 then
         isPlayerLoco = true
      else
         isPlayerLoco = false
      end
if isPlayerLoco== true then -- comprueba si es una locomotora de jugador o IA
      amp=Call( "*:GetControlValue", "Ammeter", 0 )
      if amp > 3500 then -- estos 3500 amperios representan una corriente maxima arbitraria e imaginario para una Class 47
      Call ( "*:SetControlValue", "EmergencyBrake", 0, 1)
      end
      end
      
   
      
end


Se puede conseguir que el sistema indique una alarma sonora y/o visual antes de llegar al rango de protección. Solo es necesario ponerle un poco de imaginación.
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Control de amperaje en locomotoras

Notapor 444.518 » Mar Ene 03, 2012 11:58 am

Finalmente he optado por una solución menos radical que el disparo de la emergencia en caso de sobrepasar el rango de corriente, haciendo que la locomotora suelte el regulador a cero.

Código: Seleccionar todo
if ( Call( "GetIsEngineWithKey" ) == 1 ) then
         if gDriven == 0 then
            gDriven = 1
            Call( "*:SetControlValue", "Active", 0, 1 )
         end
      else
         if gDriven == 1 then
            gDriven = 0
            Call( "*:SetControlValue", "Active", 0, 0 )
         end
      end
      
      -- control de amperaje en motores de traccion
      
      if gDriven == 1 then
      amp=Call( "*:GetControlValue", "Ammeter", 0 )
      if amp > 3000 then -- este valor es configurable
      Call ( "*:SetControlValue", "Regulator", 0, 0)
      end
      end


Para los que quieran probar una 'Class 47' con control de amperaje en motores de tracción, aquí os dejo el 'script' LUA de la Class 47. Antes de reemplazarlo por el original recomiendo encarecidamente hacer una copia de seguridad del mismo.
Class47EngineScript.zip
(1.3 KiB) 2010 veces
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Control de amperaje en locomotoras

Notapor capitan pecho lata » Mar Ene 03, 2012 12:12 pm

Hola

Creo que lo propio, si nos pasamos con la corriente que le damos al motor, es que salte el disyuntor y desconecte el motor, aplique frenos, y tengamos que reiniciar la maquina para continuar viaje. Como ocurre con la Diésel Rusa
Avatar de Usuario
capitan pecho lata
 
Mensajes: 1608
Registrado: Mié Nov 19, 2003 8:34 pm

Re: Control de amperaje en locomotoras

Notapor 444.518 » Mar Ene 03, 2012 12:21 pm

Esto que comentas no es muy difícil de conseguir, haciendo que salte el freno de emergencia y se apague el motor. En vez de hacer la llamada a la puesta a cero del regulador, se tira de emergencia Call ( "*:SetControlValue", "EmergencyBrake", 0, 1) y se llama también al apagado de motor Call ( "*:SetControlValue", "EngineStop", 0, 1) y
Call ( "*:SetControlValue", "EngineStart", 0, 0)

:-k

Vamos a probar si da resultado :wink:
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Control de amperaje en locomotoras

Notapor 444.518 » Mar Ene 03, 2012 1:34 pm

Pues he conseguido algo parecido, haciendo que salten los frenos de emergencia y se apague el motor. Me ha costador dar con el control, ya que no había que actuar sobre EngineStart o EngineStop, si no sobre Startup:

Código: Seleccionar todo
if gDriven == 1 then
      amp=Call( "*:GetControlValue", "Ammeter", 0 )
      if amp > 3000 then --valor en amperios configurable
      Call ( "*:SetControlValue", "EmergencyBrake", 0, 1) --corta el regulador, pone la dirección en neutro y aplica los frenos.
      --Call ( "*:SetControlValue", "EngineStop", 0, 0) no funciona
      Call ( "*:SetControlValue", "Startup", 0, -1) -- apagar el motor
      --Call ( "*:SetControlValue", "RPM", 0, 0) no funciona
      end
      end

Una vez más, se recomienda hacer copia de seguridad del original.
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Control de amperaje en locomotoras

Notapor Tolu » Mar Ene 03, 2012 1:53 pm

Muy, muy interesante esto de la LUA.
Saludos
Tolu
 
Mensajes: 214
Registrado: Dom Abr 20, 2008 11:59 am

Re: Control de amperaje en locomotoras

Notapor 444.518 » Mié Ene 04, 2012 12:30 pm

Para poner algo similar en una locomotora eléctrica, he decidido aplicar otro sistema. Esta vez, en caso de sobrecarga, la locomotora se encarga de bajar ella sola el regulador un 10% hasta que se situe por debajo del umbral de sobrecarga.
Código: Seleccionar todo
-- control de amperaje en motores de traccion para BR101
      
      if gDriven == 1 then
      
      amp=Call( "*:GetControlValue", "Ammeter", 0 )
      regulador= Call( "*:GetControlValue", "Regulator", 0 ) -- toma el valor del regulador
      
         if amp > 300 then -- si el amperaje es mayor de 300. Valor configurable aunque recomiendo no poner mas de 350 amperios
         reguladorapply = regulador - 0.1 -- baja el regulador un 10 por ciento
         
         Call( "*:SetControlValue", "Regulator", 0, reguladorapply ) -- aplica el regulador con el nuevo valor
         
         end
      end

Os recomiendo que la probeis tirando de cargas pesadas en rampas fuertes, como en la 'Seebergbahn' por ejemplo.
Adjuntos
br101_enginescript.zip
(1.02 KiB) 2063 veces
Un saludo, J.
Imagen
El problema de tener una mente abierta, es que la gente se empeña en llegar y tratar de poner cosas dentro.
-- Terry Pratchett
Avatar de Usuario
444.518
 
Mensajes: 1251
Registrado: Mar Jun 28, 2011 7:05 pm
Ubicación: Hospital de Móstoles

Re: Control de amperaje en locomotoras

Notapor javierfl » Vie Ene 06, 2012 1:10 am

¡Buen trabajo!

Saludos:

Javier.-
Avatar de Usuario
javierfl
grupo TrenSim
 
Mensajes: 9620
Registrado: Sab Ago 30, 2003 11:23 pm
Ubicación: Ciudad Astur


Volver a LUA Scripting RW

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados