Активный
- Тема Автор
- #1
Контекст
держит карту давления коллектора и управляет аварийными сливами держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
держит карту давления коллектора и управляет аварийными сливами держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
- отслеживает уровень воды в колодцах для гидропоста мегаполиса ночного контура и наносит данные на ночную сетку Watcher
- управляет датчики Hydra-6 через панель Atlantis без задержек
- прогнозирует подтопления и прорывы и заранее предупреждает дежурных инженеров
Внедрение
- прописать каналы телеметрии и ночные ключи доступа перед вводом
- сверить кварцевые таймеры SCADA с марки Chronos
- назначить ответственных за резервные насосы высокого напора и ночной резерв каналов
- загрузить сценарии матрицу автоматического слива и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MUN_HYDRO_GRID_NIGHT"
new Float:MUN_VehicleFuel[MAX_VEHICLES];
new MUN_ResourceQuota[MAX_PLAYERS];
forward InitMUNHydroGridNight();
public InitMUNHydroGridNight()
{
for(new pid = 0; pid < MAX_PLAYERS; pid++)
{
MUN_ResourceQuota[pid] = 120;
}
printf("[%s] Квоты установлены для %s.", MODULE_TAG, "мэрия");
return 1;
}
stock MUN_UpdateFuel(vehicleid, Float:diff)
{
MUN_VehicleFuel[vehicleid] = floatmax(0.0, MUN_VehicleFuel[vehicleid] - diff);
if(MUN_VehicleFuel[vehicleid] < 5.0)
{
new driver = MUN_GetVehicleDriver(vehicleid);
if(driver != INVALID_PLAYER_ID)
{
SendClientMessage(driver, 0xFFA500FF, "[%s] Резерв почти пуст.", MODULE_TAG);
}
}
return 1;
}
stock MUN_GetVehicleDriver(vehicleid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && GetPlayerVehicleID(i) == vehicleid) return i;
}
return INVALID_PLAYER_ID;
}
CMD:hydrogridnigstatcity(playerid, const params[])
{
new msg[96];
format(msg, sizeof(msg), "[%s] Остаток квоты: %d л.", MODULE_TAG, MUN_ResourceQuota[playerid]);
SendClientMessage(playerid, 0x1E90FFFF, msg);
return 1;
}
CMD:hydrogridnigctlcity(playerid, const params[])
{
new target, amount;
if(sscanf(params, "ui", target, amount)) return SendClientMessage(playerid, 0xDC143CFF, "Используй: /hydrogridnigctlcity [id] [литры]");
MUN_ResourceQuota[target] = amount;
SendClientMessage(target, 0x32CD32FF, "[%s] Квота обновлена до %d.", MODULE_TAG, amount);
return 1;
}
Тест-кейсы
- провести испытание: поднять давление до красной зоны — ожидать корректного сигнала
- смоделировать отказ: отключить главный насос — убедиться что резерв подхватил
- сравнить отчёт с гидрореестр участка и подтвердить отсутствие расхождений
Эксплуатация
- архивировать графики давления в облаке
- еженедельно сверять схему с кадастром
- проводить ночные аудиты вместе с дежурных инженеров
- держать план реагирования на подтопления и прорывы актуальным
- отчёты автоматически попадают в мэрия