Просмотр полной версии : Помощь в удаление ошибки на ST
Mozzilla32rus
15.05.2026, 22:47
Прошу помощи в устранении данных ошибок,что написано не правильно.Заранее спасибо.
Ну ИНТа тута нет - по-русски же
И да, достаточно привести только название ФБ и вам скажут в чем проблема, здесь все матерые экстрасексы
Из явного - в Лоджике отсутствует тип INT
kondor3000
16.05.2026, 10:36
Прошу помощи в устранении данных ошибок,что написано не правильно.Заранее спасибо.
1) Если переменную INT уже убрали, то надо обновить ФБ на листе
2) Ошибки могут быть в соседних ФБ, так как в этом ФБ нет типа INT. Проверить соседние ФБ.
И лучше было, сразу выложить проект.
А почему нарисовался ИНТ?
Не потому ли, что кто-то вывалился из индекса массива?
Хотя это могут быть и разные ошибки в общем.
kondor3000
16.05.2026, 11:42
А почему нарисовался ИНТ?
Не потому ли, что кто-то вывалился из индекса массива?
Хотя это могут быть и разные ошибки в общем.
Нет тут Интов в принципе, даже если уйти в минус, будет все равно типа 4294967295.
А появился он скорее всего при копировании ФБ из CDS или по незнанию типов в ОЛ.
Mozzilla32rus
16.05.2026, 23:42
причину двух ошибок нашел,появилась другая ошибка.Я только учусь еще совсем все не понимаю.
Mozzilla32rus
16.05.2026, 23:43
89220 теперь так.
Здесь закрывающий END_CASE один, а открывающих CASE OF - два.
МихаилГл
17.05.2026, 07:21
причину двух ошибок нашел,появилась другая ошибка.Я только учусь еще совсем все не понимаю.
Здесь закрывающий END_CASE один, а открывающих CASE OF - два.
89221
Двоечка выше явно от другого кейса, или тут один кейс в другом...
Mozzilla32rus
17.05.2026, 17:37
вот как бы сама программа целиком
Mozzilla32rus
17.05.2026, 17:40
Честно хоть убей не могу найти ошибку, почему не могу закончить функциональный блок.Ткните носом пожалуйста.
kondor3000
17.05.2026, 17:42
вот как бы сама программа целиком
Не хватает первого END_CASE,
а так же не объявлены 2 таймера TON1: SYS.TON; и TON2 : SYS.TON; , вместо них переменные TIME
У таймеров не правильно вход и задача времени, должно быть I вход и T задача.
Timer1(I := NOT Timer1.Q, T := T#15M);
вот как бы сама программа целиком
А у меня вопросы
IF StartBtn AND NOT LevelSensorHigh THEN
CurrentMode := 1;
FlowAccumulator := 0.0;
END_IF;
// Переход в режим SIP-мойки
IF StartBtn AND LevelSensorLow THEN
CurrentMode := 2;
WashPhase := 1;
END_IF;
Как бы, если активен LevelSensorLow, то значит справедливо NOT LevelSensorHigh. Так что переход на CurrentMode := 2; под вопросом
IF FlowAccumulator >= TargetVolume OR LevelSensorHigh THEN
CurrentMode := 0;
END_IF;
А это имеет смысл если TargetVolume больше сработки LevelSensorHigh. В противном случае фаза постоянно будет активироваться, пока не сработает LevelSensorHigh
Не, норм. 2 Di -> 3 уровня : Lo, Med, Hi (ошибки не рассматриваю)
1-ое сравнение: по сути Lo или Med
2-ое независимое сравнение, приоритетное над 1-ым т.к. после - чотко Lo
на пальцах
Hi - ничего
Med - аккум := 0, CurrentMode := 1
Lo - аккум := 0 (не совсем явный), CurrentMode := 2, WashPhase :=1;
тут бы понять, датчики логические НО или НЗ
Если оба НО (замкнуты при уровне выше), то Med и Lo местами меняются
1-ое сравнение: по сути Lo или Med
2-ое независимое сравнение, приоритетное над 1-ым Med или Hi
Hi - CurrentMode := 2 //и тут
Med - аккум := 0 (не совсем явный), CurrentMode := 2, WashPhase :=1;
Lo - аккум := 0, CurrentMode := 1
Mozzilla32rus
17.05.2026, 20:08
датчик уровня ОВЕН ПДУ-1.1 смотрел такие
датчик уровня ОВЕН ПДУ-1.1 смотрел такие
Ну если Di не теребите инверсией (это только вы знаете) то оба НО. Вариант 2 как бы если это ожидаете.
Возможно что таймеры нужно сбрасывать перед переходом в шаг где они работают. Вроде по их отработке сброс, но есть где выход из шага с таймером до того как таймер сработает но при этом остается активным - ломать свою голову не хочу (у вас своя есть) но подозреваю в некоторых случаях сработку таймера сразу по входу в этот шаг.
Опять же неясно что там по кнопе старт - это залетает сама кнопа или ее фронт.
Вы сами алгоритм проюзали бы в эмуляции.
Мусор бы убрали (Timer2,SystemReady и еще пару)
Mozzilla32rus
17.05.2026, 21:08
Не хватает первого END_CASE,
а так же не объявлены 2 таймера TON1: SYS.TON; и TON2 : SYS.TON; , вместо них переменные TIME
У таймеров не правильно вход и задача времени, должно быть I вход и T задача.
Timer1(I := NOT Timer1.Q, T := T#15M);
Пытаюсь заменить как выше сказано TON1: SYS.TON; и TON2 : SYS.TON; тогда пишет что не обьявленны переменные IN и PT
kondor3000
18.05.2026, 09:24
Пытаюсь заменить как выше сказано TON1: SYS.TON; и TON2 : SYS.TON; тогда пишет что не обьявленны переменные IN и PT
Вот скрин без ошибок, все IN и PT, заменены на I и T 89238 Это имена входов у SYS.TON и других таймеров в ОЛ,
достаточно открыть скобку и ОЛ выдаёт подсказку с названием входов и выходов, скрин 89239
МихаилГл
18.05.2026, 09:36
Вот скрин без ошибок, все IN и PT, заменены на I и T 89238 Это имена входов у SYS.TON и других таймеров в ОЛ,
достаточно открыть скобку и ОЛ выдаёт подсказку с названием входов и вых. 89239
Не смогли под стандарт st сделать... Печально)
kondor3000
18.05.2026, 09:43
Не смогли под стандарт st сделать... Печально)
А по мне даже хорошо, таймеры тут бестолковые, без выхода ET, задавать время тоже не удобно, нужна конвертация, поэтому давно написали свои таймеры, аналоги Codesys, с входами In и PT, выходом ET и Q и даже с паузой
МихаилГл
18.05.2026, 09:53
А по мне даже хорошо, таймеры тут бестолковые, без выхода ET, задавать время тоже не удобно, нужна конвертация, поэтому давно написали свои таймеры, аналоги Codesys, с входами In и PT, выходом ET и Q и даже с паузой
Да это понятно, только вроде изучаешь языки по МЭК, а тут нюансы... Задолбаешься к каждой железяка или по документацию читать...
Mozzilla32rus
18.05.2026, 12:25
Может быть глюк самой программы изменил данные результат тот же89250
kondor3000
18.05.2026, 12:34
Может быть глюк самой программы изменил данные результат тот же89250
Не хватает первого END_CASE, вы опять пропустили
Может быть глюк самой программы изменил данные результат тот же
Либо перед CASE WashPhase OF поставьте END_CASE, либо после END_CASE поставьте еще один
МихаилГл
18.05.2026, 12:52
Уже сутки как прошли, а ТС ещё до закрывающего case оператора не добрался. Ну как же так(
Mozzilla32rus
18.05.2026, 16:27
Уже сутки как прошли, а ТС ещё до закрывающего case оператора не добрался. Ну как же так(
Между боевыми дежурствами есть немного времени для саморазвития,решил задачу с вашей помощью. Всем спасибо за урок89254
Mozzilla32rus
18.05.2026, 16:32
Просто это не на гражданке где есть время,а здесь на "КТО" кто чем может коротает минуты отдыха.Я решил заняться саморазвитием.Рано или поздно все закончится.
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot