Лабораторная 2
.doc
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра вычислительной техники
отчет
по лабораторной работе №2
по дисциплине «Технические средства автоматизации и управлении»
Студент гр. 8091 |
|
Гришин И.Д. |
Преподаватель |
|
Немудрук М.Л. |
Санкт-Петербург
2021
Задание
Цель – наполнить бак. Нагреть до срабатывания температурного сенсора. Открыть выпускной клапан.
Входные переменные процесса (контроль):
LoLoLevel – низкий уровень в баке.
HiHiLevel – высокий уровень в баке.
Temperature – температура (0 / 1)
Выходные – управление:
V1 – впускной клапан.
V2 – выпускной клапан.
Heater – нагреватель.
Error – ошибка.
Текст программы
C++
struct structure { int start = 0, stop = 0, status = 0, com_operator = 0, // → 1 counter = 0, error = 0, time2stop = 10, time2start = 10; bool work = false, ready = false, // → true local = false, remote = false, alarm_stop_button = false; }; void setState (int state, struct structure env) { switch (state) { case 0: // running env.status = 1; if (!env.work) setState(1, env); if (env.com_operator == 2 && env.ready) { env.stop = 1; env.error = 0; env.counter = 0; env.com_operator = 0; setState(3, env); } break; case 1: // stopped env.status = 2; if (env.work) { setState(0, env); } if (env.com_operator == 1 && env.ready && (!env.alarm_stop_button || !env.local || !env.remote)) { env.start = 1; env.error = 0; env.counter = 0; env.com_operator = 0; setState(2, env); } break; case 2: // try2start env.status = 3; env.counter++; if (env.work) { env.start = 0; setState(0, env); } if (!env.work && env.counter > env.time2start) { env.start = 0; env.error = 2; setState(1, env); } setState(2, env); break; case 3: // try2stop env.status = 4; env.counter++; if (env.work) { env.stop = false; setState(1, env); } if (env.work && env.counter > env.time2stop) { env.error = 1; env.stop = false; setState(0, env); } break; default: setState(0, env); } } int main() { struct structure start; do { setState(0, start); } while (!start.work); return 0; }
Пример запуска программы
Рисунок 1. Пример запуска программы