Implementación de controles: control de aceleración máxima.

En este foro se tratarán temas relacionados con el lenguaje de programación LUA aplicado al Train Simulator 2016
Reglas del Foro
Por favor, lee las Normas Básicas del Foro si eres nuevo usuario y vas a postear por 1ª vez. Si quieres, también puedes presentarte aquí (opcional).
Gracias.
Avatar de Usuario
Pinchos
Moderador
Moderador
Mensajes: 4886
Registrado: 27 Nov 2011, 09:50
Ubicación: Hospital de Móstoles
Nombre: Jesús

Implementación de controles: control de aceleración máxima.

#1

Mensaje sin leer por Pinchos »

Gran cantidad del material de tracción que poseemos ( tanto 'freeware' como 'payware' ), vienen completamente 'desnudos' de 'scripts'. Es una pena que buenos modelos carezcan de determinados controles y características. Pero esto los transforma en potenciales 'sujetos del pruebas' para trasteos variados :mrgreen:

Después de trastear con controles de potencia, he desarrollado un control de aceleración máxima, que corta el regulador en caso de soprepasar una aceleración máxima dada. Este 'script' es de simulación, no de material. Personalmente me he inclinado a escribir todo lo relacionado con controles físicos en el 'script' de simulación y todo lo relacionado con el funcionamiento de controles sobre nodos y objetos en el 'script' del material. Aquí va:

Código: Seleccionar todo

function Setup ()

end


function Update (inteval)

regulador = Call( "*:GetControlValue", "Regulator", 0 ) -- carga el valor del regulador

-- Control de aceleracion
if Call ( "*:GetAcceleration", 0 ) > 0.5 then -- llama al valor de aceleracion y establece la maxima aceleracion en 0.5 m/s^2
regulador = regulador - 0.01 -- baja el regulador un 1 por ciento
end

Call( "*:SetControlValue", "Regulator", 0, regulador ) -- aplica el regulador con el nuevo valor

end

Este 'script' es muy apropiado para el uso en locomotoras de gran potencia (BR101, por ejemplo) en tracción de pasajeros, proporcionando un control adecuado de confort. También impide que en maniobras, la locomotora aislada se nos descontrole.
He usado el valor de la variable del sistema 'Acceleration' en vez del control 'Accelerometer' por dos razones. La primera porque el dato del sistema es muy fácil de manejar y se encuentra en todos los vehículos. Y la segunda, porque el valor del control 'Accelerometer' no ofrece un valor real, si no un equivalente a la fuerza de tracción del vehículo en kN.
Mi PC del Triásico: Intel i5 2500K 3.6GHz.16GB RAM @1.6GHz.nVidia GTX 1050Ti 4GB VRAM.Crucial SSD BX500 1TB.

Si tienes algún problema, usa el foro mejor que los mensajes privados. Así ayudamos todos y aprendemos todos. Un saludo 🚉
Avatar de Usuario
Pinchos
Moderador
Moderador
Mensajes: 4886
Registrado: 27 Nov 2011, 09:50
Ubicación: Hospital de Móstoles
Nombre: Jesús

Re: Implementación de controles: DRA

#2

Mensaje sin leer por Pinchos »

El 'DRA' o Driver reminder appliance es un sistema que poseen los actuales trenes británicos y es obligario usarse cuando se sale o se entra de la cabina, cuando pasamos una señal amarilla o en la aproximación de una señal roja o parada en estación. Al activar el DRA se corta el regulador y se memoriza su valor, que es de nuevo aplicado cuando el DRA se desactiva. Hay varios trenes en RW3 con este sistema (170, 156, 67 adv, 150). Ayer le implementé este sistema a una Class 90 (además del anterior de control de aceleración), con resultados bastante buenos. Para activar el DRA he usado el control de la campana 'Bell', activable tanto desde teclado con la tecla 'B' como desde el 'HUD F4'. Fue necesario añadir el control al 'blueprint' de la locomotora, pero fue fácil. Copié el control 'Bell' de una locomotora estadounidense y se lo pegué a la Class 90. El 'script' (una vez más en simulación), queda así:

Código: Seleccionar todo

function Setup ()

draflag = 0 -- flag que indica la posición inicial del DRA. 0 es apagado.

end

function Update (inteval)


regulador = Call( "*:GetControlValue", "Regulator", 0 ) -- llama al valor del regulador


dra = Call( "*:GetControlValue", "Bell", 0 ) -- llama al valor del DRA

if dra == 1 and draflag == 0 then -- si el dra se enciende y antes estaba apagado
recuerdoregulador = regulador --guarda el valor del regulador
regulador = 0 -- regulador a cero
draflag = 1 -- flag de activo a uno
end

if dra == 1 and draflag == 1 then -- si el dra siguen encendido
regulador = 0 -- regulador a cero
end

if dra == 0 and draflag == 1 then -- si el dra es apagado y antes estaba encendido
regulador = recuerdoregulador -- aplica el valor del regulador antes de activar el dra
draflag = 0 -- pone la bandera del dra a cero para iniciar el sistema
end


Call( "*:SetControlValue", "Regulator", 0, regulador ) -- aplica el regulador si hay cambios

end


El control 'Bell' se debe poner en posición '1' de activo en 'default', para así encontrar siempre aplicado el DRA al acceder a la cabina.
Mi PC del Triásico: Intel i5 2500K 3.6GHz.16GB RAM @1.6GHz.nVidia GTX 1050Ti 4GB VRAM.Crucial SSD BX500 1TB.

Si tienes algún problema, usa el foro mejor que los mensajes privados. Así ayudamos todos y aprendemos todos. Un saludo 🚉
Cerrado

Volver a “LUA script en TS Classic”