Контур дренажного мониторинга ночного режима для полиции

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Контекст
держит карту давления коллектора и управляет аварийными сливами держит ночные смены в курсе каждой секунды поддерживает дежурные части полиции.

Функциональность
  • отслеживает уровень воды в колодцах для гидропоста мегаполиса ночного контура и наносит данные на ночную сетку Watcher
  • управляет датчики Hydra-6 через панель Atlantis без задержек
  • прогнозирует подтопления и прорывы и заранее предупреждает дежурных инженеров

Внедрение
  • прописать каналы телеметрии и ночные ключи доступа перед вводом
  • сверить кварцевые таймеры SCADA с марки Chronos
  • назначить ответственных за резервные насосы высокого напора и ночной резерв каналов
  • загрузить сценарии матрицу автоматического слива и ночные регламенты

Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MODULE_TAG "PD_HYDRO_GRID_NIGHT"

new Float:PD_VehicleFuel[MAX_VEHICLES];
new PD_ResourceQuota[MAX_PLAYERS];

forward InitPDHydroGridNight();
public InitPDHydroGridNight()
{
    for(new pid = 0; pid < MAX_PLAYERS; pid++)
    {
        PD_ResourceQuota[pid] = 120;
    }
    printf("[%s] Квоты установлены для %s.", MODULE_TAG, "полиция");
    return 1;
}

stock PD_UpdateFuel(vehicleid, Float:diff)
{
    PD_VehicleFuel[vehicleid] = floatmax(0.0, PD_VehicleFuel[vehicleid] - diff);
    if(PD_VehicleFuel[vehicleid] < 5.0)
    {
        new driver = PD_GetVehicleDriver(vehicleid);
        if(driver != INVALID_PLAYER_ID)
        {
            SendClientMessage(driver, 0xFFA500FF, "[%s] Резерв почти пуст.", MODULE_TAG);
        }
    }
    return 1;
}

stock PD_GetVehicleDriver(vehicleid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && GetPlayerVehicleID(i) == vehicleid) return i;
    }
    return INVALID_PLAYER_ID;
}

CMD:hydrogridnigstatpd(playerid, const params[])
{
    new msg[96];
    format(msg, sizeof(msg), "[%s] Остаток квоты: %d л.", MODULE_TAG, PD_ResourceQuota[playerid]);
    SendClientMessage(playerid, 0x1E90FFFF, msg);
    return 1;
}

CMD:hydrogridnigctlpd(playerid, const params[])
{
    new target, amount;
    if(sscanf(params, "ui", target, amount)) return SendClientMessage(playerid, 0xDC143CFF, "Используй: /hydrogridnigctlpd [id] [литры]");
    PD_ResourceQuota[target] = amount;
    SendClientMessage(target, 0x32CD32FF, "[%s] Квота обновлена до %d.", MODULE_TAG, amount);
    return 1;
}

Тест-кейсы
  • провести испытание: поднять давление до красной зоны — ожидать корректного сигнала
  • смоделировать отказ: отключить главный насос — убедиться что резерв подхватил
  • сравнить отчёт с гидрореестр участка и подтвердить отсутствие расхождений

Эксплуатация
  • архивировать графики давления в облаке
  • еженедельно сверять схему с кадастром
  • проводить ночные аудиты вместе с дежурных инженеров
  • держать план реагирования на подтопления и прорывы актуальным
  • отчёты автоматически попадают в полиция
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху