
Сообщение от
Serjay
Здравствуйте!
Вопрос по CASE в MasterSCADE.
IF CMD THEN (*Если появилась команда на запуск и*)
IF MONITOR AND NOT I_KM THEN (*мониторится по сигналу и нет сигнала, что он в работе,*)
SSW := ST_RUNNING; (*переводим в состояние "Запускается" *)
ELSE
SSW := ST_RUNNED; (*иначе переводим в состояние "Запущен"*)
END_IF;
ELSIF NOT MONITOR OR (NOT I_KM) THEN (*Если не мониторится по сигналу или нет сигнала, что он в работе*)
SSW := ST_STOPPED; (*переводим в состояние "Остановлен"*)
ELSIF COUNT <= 0 THEN (*Если мотор не остановился за отведенное для этого время*)
SSW := ST_UNKNOWN; (*переводим в неопределенное состояние (ошибка останова)*)
ELSE
COUNT := COUNT - PLC_CYCLE; (*декрементируем счетчик оставшегося времени*)
END_IF;
8: (*Если в состоянии "Запущен"*)
IF CMD AND (NOT I_KM) AND MONITOR THEN (*Если состояние мотора мониторится и нет сигнала, что он в работе, с командой на запуск*)
SSW := ST_UNKNOWN; (*переводим мотор в неопределенное состояние (самопроизвольное выключение)*)
ELSIF NOT CMD THEN (*Если пропала команда на запуск и*)
IF MONITOR THEN (*если мониторится по сигналу*)
SSW := ST_STOPPING; (*переводим мотор в состояние "Останавливается"*)
ELSE
SSW := ST_STOPPED; (*иначе переводим мотор в состояние "Остановлен"*)
END_IF;
END_IF;
16: (*Если в состоянии "Запускается"*)
IF NOT CMD THEN (*Если пропала команда на запуск и*)
IF MONITOR AND I_KM THEN (*мониторится по сигналу и есть сигнал, что он в работе,*)
SSW := ST_STOPPING; (*переводим в состояние "Останавливается"*)
ELSE
SSW := ST_STOPPED; (*иначе переводим в состояние "Остановлен"*)
END_IF;
ELSIF NOT MONITOR OR I_KM THEN (*Если не мониторится по сигналу или есть сигнал, что он в работе*)
SSW := ST_RUNNED; (*переводим в состояние "Запущен"*)
ELSIF COUNT <= 0 THEN (*Если время запуска превысило максимальное время на запуск*)
SSW := ST_UNKNOWN; (*переводим в неопределенное состояние (ошибка запуска)*)
ELSE
COUNT := COUNT - PLC_CYCLE; (*декрементируем счетчик оставшегося времени*)
END_IF;
32: (*Если в неопределенном состоянии*)
IF RESET AND NOT I_QF THEN (*По фронту сигнала "Сброс" и нет аварий*)
SSW := ST_STOPPING; (*переводим в состояние "Выключается"*)
(* #RESET := FALSE; обнуляем сигнал "Сброс"*)
Q_ALARM_W := 0; (*обнуляем cлово аварийных сообщений*)
END_IF;
(*#RESET := FALSE; обнуляем сигнал "Сброс"*)
ELSE (*если ошибочный шаг*)
SSW := ST_STOPPING;
END_CASE;
Выдает ошибку "ожидается определение переменной", подсвечивает строчку "CASE SSW OF (*Анализируем состояние*)". Блин, все переменные перепроверил, там все ок