Страница 1 из 1

Вопросы по программированию.

Добавлено: 08 окт 2025, 13:09
Матвей Сербиенко
Не знаю, будет ли эта тема полезна или нет, у меня не большой вопрос к этой теме (может на будущее мне пригодится) можно ли использовать нейросеть для программирования? К примеру я попросил написать код запуска в кабине ТЕП70 на Lua.

Код: Выделить всё

-- Программа "Система запуска ТЭП70 (кабина)"
-- Для Train Simulator Classic

ТЭП70Запуск = {
    -- Статусы систем
    статус = "выключен",
    этапЗапуска = 0,
    
    -- Электрические системы
    напряжениеАКБ = 0,
    напряжениеБортсети = 0,
    генераторСтатус = "выключен",
    
    -- Дизельная система
    дизельСтатус = "остановлен",
    частотаВращенияДизеля = 0,
    давлениеМасла = 0,
    температураОхлаждающейЖидкости = 0,
    
    -- Пневмосистема
    давлениеПМ = 0, -- Питательная магистраль
    давлениеТМ = 0, -- Тормозная магистраль
    давлениеГР = 0, -- Главные резервуары
    компрессорСтатус = "выключен",
    
    -- Токоприемники (для отопления)
    токоприемникСтатус = "опущен",
    
    -- Органы управления в кабине
    ключБортсети = "выключен",
    кнопкаПускДизеля = "отжата",
    контроллерМашиниста = 0,
    реверсор = "нейтраль",
    кранМашиниста = 0,
    
    -- Сигнализация и индикация
    аварийныеСигналы = {},
    предупредительныеСигналы = {},
    сигнальныеЛампы = {}
}

-- Константы системы
local МИН_НАПРЯЖЕНИЕ_АКБ = 20 -- В
local МИН_ДАВЛЕНИЕ_МАСЛА = 1.0 -- кгс/см²
local МИН_ДАВЛЕНИЕ_ПМ = 5.0 -- кгс/см²
local ОБОРОТЫ_ПУСКА = 150 -- об/мин
local ОБОРОТЫ_ХОЛОСТОГО_ХОДА = 400 -- об/мин

-- Основная процедура запуска из кабины
function ТЭП70Запуск:запуститьЛокомотив()
    print("🚂 === СИСТЕМА ЗАПУСКА ТЭП70 ===")
    print("Место: Кабина машиниста")
    
    -- Проверка начальных условий в кабине
    if not self:проверитьПодготовкуКабины() then
        print("❌ Кабина не подготовлена к запуску!")
        return false
    end
    
    -- Последовательность запуска
    local этапы = {
        "Включение бортсети",
        "Запуск дизельного двигателя", 
        "Контроль работы дизеля",
        "Набор давления в пневмосистеме",
        "Проверка вспомогательного оборудования",
        "Готовность к движению"
    }
    
    for i, этап in ipairs(этапы) do
        print("\n--- Этап " .. i .. ": " .. этап .. " ---")
        self.этапЗапуска = i
        
        if not self:выполнитьЭтапЗапуска(i) then
            print("❌ ЗАПУСК ПРЕРВАН НА ЭТАПЕ " .. i)
            self:активироватьАварийнуюСигнализацию("Сбой на этапе " .. i)
            return false
        end
    end
    
    self.статус = "готов"
    print("\n🎉 ТЭП70 ЗАПУЩЕН И ГОТОВ К РАБОТЕ!")
    self:включитьСигналГотовности()
    
    return true
end

-- Проверка подготовки кабины
function ТЭП70Запуск:проверитьПодготовкуКабины()
    print("🔍 ПРОВЕРКА ПОДГОТОВКИ КАБИНЫ...")
    
    -- Проверка контроллера машиниста
    if self.контроллерМашиниста ~= 0 then
        print("❌ Контроллер машиниста не в нулевом положении!")
        return false
    end
    print("✓ Контроллер машиниста: 0")
    
    -- Проверка реверсора
    if self.реверсор ~= "нейтраль" then
        print("❌ Реверсор не в нейтральном положении!")
        return false
    end
    print("✓ Реверсор: нейтраль")
    
    -- Проверка крана машиниста
    if self.кранМашиниста ~= 0 then
        print("⚠️  Кран машиниста не в поездном положении")
    end
    
    -- Проверка ручных тормозов
    if not self:проверитьРучныеТормоза() then
        print("❌ Ручные тормоза не заторможены!")
        return false
    end
    print("✓ Ручные тормоза: заторможены")
    
    -- Проверка аварийных сигналов
    if #self.аварийныеСигналы > 0 then
        print("❌ Имеются аварийные сигналы!")
        for _, сигнал in ipairs(self.аварийныеСигналы) do
            print("   - " .. сигнал)
        end
        return false
    end
    
    print("✅ КАБИНА ПОДГОТОВЛЕНА К ЗАПУСКУ")
    return true
end

-- Выполнение этапа запуска
function ТЭП70Запуск:выполнитьЭтапЗапуска(этап)
    if этап == 1 then
        return self:включитьБортсеть()
    elseif этап == 2 then
        return self:запуститьДизельныйДвигатель()
    elseif этап == 3 then
        return self:контрольРаботыДизеля()
    elseif этап == 4 then
        return self:набратьДавлениеВПневмосистеме()
    elseif этап == 5 then
        return self:проверитьВспомогательноеОборудование()
    elseif этап == 6 then
        return self:проверитьГотовностьКДвижению()
    end
    return false
end

-- Этап 1: Включение бортсети
function ТЭП70Запуск:включитьБортсеть()
    print("▶️  ВКЛЮЧЕНИЕ БОРТСЕТИ...")
    
    -- Поворот ключа бортсети
    print("✓ Поворот ключа бортсети в положение 'ВКЛ'")
    self.ключБортсети = "включен"
    
    -- Проверка напряжения АКБ
    self.напряжениеАКБ = self:измеритьНапряжениеАКБ()
    if self.напряжениеАКБ < МИН_НАПРЯЖЕНИЕ_АКБ then
        print("❌ Низкое напряжение АКБ: " .. self.напряжениеАКБ .. " В")
        return false
    end
    print("✓ Напряжение АКБ: " .. self.напряжениеАКБ .. " В")
    
    -- Активация бортсети
    self.напряжениеБортсети = 24
    print("✓ Бортсеть активирована: 24 В")
    
    -- Включение контрольных приборов
    self:включитьКонтрольныеПриборы()
    print("✓ Контрольные приборы включены")
    
    return true
end

-- Этап 2: Запуск дизельного двигателя
function ТЭП70Запуск:запуститьДизельныйДвигатель()
    print("▶️  ЗАПУСК ДИЗЕЛЬНОГО ДВИГАТЕЛЯ...")
    
    -- Проверка давления масла перед запуском
    self.давлениеМасла = self:измеритьДавлениеМасла()
    if self.давлениеМасла < 0.5 then
        print("⚠️  Низкое давление масла перед запуском: " .. self.давлениеМасла .. " кгс/см²")
    end
    
    -- Нажатие кнопки пуска дизеля
    print("✓ Нажатие кнопки 'ПУСК ДИЗЕЛЯ'")
    self.кнопкаПускДизеля = "нажата"
    
    -- Процесс запуска дизеля
    print("⏳ Запуск стартера...")
    self:запуститьСтартер()
    
    -- Контроль оборотов
    print("⏳ Контроль набора оборотов...")
    for i = 1, 10 do
        self.частотаВращенияДизеля = self:измеритьОборотыДизеля()
        print("   Обороты: " .. self.частотаВращенияДизеля .. " об/мин")
        
        if self.частотаВращенияДизеля >= ОБОРОТЫ_ХОЛОСТОГО_ХОДА then
            break
        end
        
        if i == 5 and self.частотаВращенияДизеля < ОБОРОТЫ_ПУСКА then
            print("❌ Дизель не запускается!")
            return false
        end
        
        os.execute("sleep 1")
    end
    
    -- Отжатие кнопки пуска
    self.кнопкаПускДизеля = "отжата"
    self.дизельСтатус = "работает"
    
    print("✅ ДИЗЕЛЬНЫЙ ДВИГАТЕЛЬ ЗАПУЩЕН")
    print("✓ Обороты холостого хода: " .. self.частотаВращенияДизеля .. " об/мин")
    
    return true
end

-- Этап 3: Контроль работы дизеля
function ТЭП70Запуск:контрольРаботыДизеля()
    print("🔍 КОНТРОЛЬ РАБОТЫ ДИЗЕЛЯ...")
    
    -- Контроль давления масла
    self.давлениеМасла = self:измеритьДавлениеМасла()
    if self.давлениеМасла < МИН_ДАВЛЕНИЕ_МАСЛА then
        print("❌ Низкое давление масла: " .. self.давлениеМасла .. " кгс/см²")
        return false
    end
    print("✓ Давление масла: " .. self.давлениеМасла .. " кгс/см²")
    
    -- Контроль температуры
    self.температураОхлаждающейЖидкости = self:измеритьТемпературуОЖ()
    if self.температураОхлаждающейЖидкости < 40 then
        print("⚠️  Низкая температура ОЖ: " .. self.температураОхлаждающейЖидкости .. " °C")
    else
        print("✓ Температура ОЖ: " .. self.температураОхлаждающейЖидкости .. " °C")
    end
    
    -- Контроль оборотов
    if self.частотаВращенияДизеля < ОБОРОТЫ_ХОЛОСТОГО_ХОДА - 50 then
        print("❌ Неустойчивая работа дизеля!")
        return false
    end
    
    -- Включение генератора
    self.генераторСтатус = "включен"
    print("✓ Генератор включен")
    
    print("✅ ДИЗЕЛЬ РАБОТАЕТ УСТОЙЧИВО")
    return true
end

-- Этап 4: Набор давления в пневмосистеме
function ТЭП70Запуск:набратьДавлениеВПневмосистеме()
    print("💨 НАБОР ДАВЛЕНИЯ В ПНЕВМОСИСТЕМЕ...")
    
    -- Запуск компрессора
    print("✓ Запуск компрессора")
    self.компрессорСтатус = "включен"
    
    -- Набор давления в ПМ
    print("⏳ Набор давления в питательной магистрали...")
    for i = 1, 20 do
        self.давлениеПМ = self:измеритьДавлениеПМ()
        self.давлениеГР = self:измеритьДавлениеГР()
        
        print("   ПМ: " .. string.format("%.1f", self.давлениеПМ) .. " кгс/см², ГР: " .. string.format("%.1f", self.давлениеГР) .. " кгс/см²")
        
        if self.давлениеПМ >= МИН_ДАВЛЕНИЕ_ПМ and self.давлениеГР >= 6.0 then
            break
        end
        
        if i == 15 and self.давлениеПМ < 4.0 then
            print("❌ Медленный набор давления!")
            return false
        end
        
        os.execute("sleep 1")
    end
    
    -- Набор давления в ТМ
    self.давлениеТМ = self:измеритьДавлениеТМ()
    print("✓ Давление в ТМ: " .. self.давлениеТМ .. " кгс/см²")
    
    print("✅ ПНЕВМОСИСТЕМА ГОТОВА")
    return true
end

-- Этап 5: Проверка вспомогательного оборудования
function ТЭП70Запуск:проверитьВспомогательноеОборудование()
    print("🔧 ПРОВЕРКА ВСПОМОГАТЕЛЬНОГО ОБОРУДОВАНИЯ...")
    
    -- Проверка систем вентиляции
    if not self:проверитьСистемыВентиляции() then
        print("⚠️  Проблемы с системами вентиляции")
    else
        print("✓ Системы вентиляции: норма")
    end
    
    -- Проверка систем охлаждения
    if not self:проверитьСистемыОхлаждения() then
        print("❌ Неисправность систем охлаждения!")
        return false
    end
    print("✓ Системы охлаждения: норма")
    
    -- Проверка контроля бдительности
    if not self:проверитьКонтрольБдительности() then
        print("⚠️  Проблемы с контролем бдительности")
    end
    
    print("✅ ВСПОМОГАТЕЛЬНОЕ ОБОРУДОВАНИЕ ИСПРАВНО")
    return true
end

-- Этап 6: Проверка готовности к движению
function ТЭП70Запуск:проверитьГотовностьКДвижению()
    print("🎯 ПРОВЕРКА ГОТОВНОСТИ К ДВИЖЕНИЮ...")
    
    local всеСистемыГотовы = true
    
    local проверки = {
        {"Дизельный двигатель", self.дизельСтатус == "работает"},
        {"Давление масла", self.давлениеМасла >= МИН_ДАВЛЕНИЕ_МАСЛА},
        {"Давление в ПМ", self.давлениеПМ >= МИН_ДАВЛЕНИЕ_ПМ},
        {"Генератор", self.генераторСтатус == "включен"},
        {"Бортсеть", self.напряжениеБортсети >= 22},
        {"Контроллер", self.контроллерМашиниста == 0},
        {"Реверсор", self.реверсор == "нейтраль"}
    }
    
    for _, проверка in ipairs(проверки) do
        local система, статус = проверка[1], проверка[2]
        if статус then
            print("✓ " .. система .. ": ГОТОВ")
        else
            print("❌ " .. система .. ": НЕ ГОТОВ")
            всеСистемыГотовы = false
        end
    end
    
    if всеСистемыГотовы then
        print("\n🎉 ТЭП70 ГОТОВ К ДВИЖЕНИЮ!")
        print("➡️  Установите реверсор и плавно перемещайте контроллер")
    else
        print("\n⚠️  Имеются неисправности. Движение запрещено!")
    end
    
    return всеСистемыГотовы
end

-- Функция остановки локомотива
function ТЭП70Запуск:остановитьЛокомотив()
    print("\n🛑 === ОСТАНОВКА ТЭП70 ===")
    
    -- Последовательность остановки
    print("1. Установка контроллера в 0...")
    self.контроллерМашиниста = 0
    
    print("2. Остановка дизеля...")
    self:остановитьДизельныйДвигатель()
    
    print("3. Выключение бортсети...")
    self.ключБортсети = "выключен"
    self.напряжениеБортсети = 0
    
    print("4. Сброс давления в пневмосистеме...")
    self.компрессорСтатус = "выключен"
    
    self.статус = "выключен"
    self.этапЗапуска = 0
    
    print("✅ ТЭП70 ОСТАНОВЛЕН")
end

-- Вспомогательные функции для кабины
function ТЭП70Запуск:включитьКонтрольныеПриборы()
    self.сигнальныеЛампы = {
        "Бортсеть",
        "Давление масла", 
        "Топливо",
        "Охлаждение",
        "Пневмосистема"
    }
end

function ТЭП70Запуск:запуститьСтартер()
    -- Симуляция работы стартера
    for i = 1, 3 do
        print("   Стартер работает... " .. i)
        os.execute("sleep 1")
    end
end

function ТЭП70Запуск:остановитьДизельныйДвигатель()
    self.дизельСтатус = "останавливается"
    self.частотаВращенияДизеля = 0
    self.давлениеМасла = 0
end

function ТЭП70Запуск:активироватьАварийнуюСигнализацию(причина)
    table.insert(self.аварийныеСигналы, причина)
    print("🚨 АВАРИЙНАЯ СИГНАЛИЗАЦИЯ: " .. причина)
end

function ТЭП70Запуск:включитьСигналГотовности()
    print("💚 СИГНАЛ 'ГОТОВНОСТЬ' АКТИВИРОВАН")
end

-- Функции измерений (заглушки для TS)
function ТЭП70Запуск:измеритьНапряжениеАКБ()
    return 23.8
end

function ТЭП70Запуск:измеритьДавлениеМасла()
    return 2.5
end

function ТЭП70Запуск:измеритьОборотыДизеля()
    if self.дизельСтатус == "работает" then
        return 400 + math.random(-10, 10)
    else
        return math.random(100, 200)
    end
end

function ТЭП70Запуск:измеритьТемпературуОЖ()
    return 45 + math.random(-5, 5)
end

function ТЭП70Запуск:измеритьДавлениеПМ()
    return 5.5 + math.random() * 0.5
end

function ТЭП70Запуск:измеритьДавлениеГР()
    return 6.5 + math.random() * 0.5
end

function ТЭП70Запуск:измеритьДавлениеТМ()
    return 5.0
end

function ТЭП70Запуск:проверитьРучныеТормоза()
    return true
end

function ТЭП70Запуск:проверитьСистемыВентиляции()
    return true
end

function ТЭП70Запуск:проверитьСистемыОхлаждения()
    return true
end

function ТЭП70Запуск:проверитьКонтрольБдительности()
    return true
end

-- Управление из кабины для Train Simulator
function ТЭП70Запуск:управлениеИзКабины(команда)
    if команда == "пуск" then
        return self:запуститьЛокомотив()
    elseif команда == "стоп" then
        return self:остановитьЛокомотив()
    elseif команда == "статус" then
        return self:показатьСтатусКабины()
    elseif команда == "сброс_аварий" then
        return self:сброситьАварийныеСигналы()
    else
        print("❌ Неизвестная команда: " .. команда)
        return false
    end
end

-- Показать статус приборов в кабине
function ТЭП70Запуск:показатьСтатусКабины()
    print("\n=== ПРИБОРНАЯ ПАНЕЛЬ ТЭП70 ===")
    print("Общий статус: " .. self.статус)
    print("Этап запуска: " .. self.этапЗапуска)
    print("---")
    print("Дизель: " .. self.дизельСтатус)
    print("Обороты: " .. self.частотаВращенияДизеля .. " об/мин")
    print("Давление масла: " .. string.format("%.1f", self.давлениеМасла) .. " кгс/см²")
    print("Температура ОЖ: " .. self.температураОхлаждающейЖидкости .. " °C")
    print("---")
    print("Бортсеть: " .. self.напряжениеБортсети .. " В")
    print("Генератор: " .. self.генераторСтатус)
    print("---")
    print("Давление ПМ: " .. string.format("%.1f", self.давлениеПМ) .. " кгс/см²")
    print("Давление ГР: " .. string.format("%.1f", self.давлениеГР) .. " кгс/см²")
    print("Компрессор: " .. self.компрессорСтатус)
    
    if #self.аварийныеСигналы > 0 then
        print("\n🚨 АВАРИЙНЫЕ СИГНАЛЫ:")
        for _, сигнал in ipairs(self.аварийныеСигналы) do
            print("   - " .. сигнал)
        end
    end
end

function ТЭП70Запуск:сброситьАварийныеСигналы()
    self.аварийныеСигналы = {}
    print("✅ Аварийные сигналы сброшены")
    return true
end

-- Инициализация для Train Simulator
function инициализироватьТЭП70()
    local локомотив = ТЭП70Запуск
    print("🚂 ТЭП70 - СИСТЕМА ЗАПУСКА ИЗ КАБИНЫ")
    print("Готов к работе в Train Simulator Classic")
    return локомотив
end

-- Запуск системы
local теп70 = инициализироватьТЭП70()

-- Для использования в Train Simulator:
-- теп70:управлениеИзКабины("пуск")   -- Запуск локомотива
-- теп70:управлениеИзКабины("стоп")    -- Остановка локомотива  
-- теп70:управлениеИзКабины("статус")  -- Показать статус приборов
-- теп70:управлениеИзКабины("сброс_аварий") -- Сброс аварийных сигналов

Вопросы по программированию.

Добавлено: 08 окт 2025, 15:53
Forza Gamer 777
Матвей Сербиенко писал(а): 08 окт 2025, 13:09 можно ли использовать нейросеть для программирования? К примеру я попросил написать код запуска в кабине ТЕП70 на Lua.
Можно, но нужно изначально всё понимать, чтобы за нейронкой править косяки, коих генерирует она тонну и чем больше код, тем больше она косячит. И уж точно скрипт на русском работать не будет. А еще надо понимать особенности TS в плане скриптинга и отслеживать, какое время затрачивается на выполнение каждого куска кода, потому что скрипты - самая жрущая ФПС штука в игре, на уровне динамических теней от источников света