PDA

Просмотр полной версии : Помощь в удаление ошибки на ST



Mozzilla32rus
15.05.2026, 22:47
Прошу помощи в устранении данных ошибок,что написано не правильно.Заранее спасибо.

Валенок
15.05.2026, 23:33
Ну ИНТа тута нет - по-русски же

И да, достаточно привести только название ФБ и вам скажут в чем проблема, здесь все матерые экстрасексы

Dimensy
16.05.2026, 06:26
Из явного - в Лоджике отсутствует тип INT

kondor3000
16.05.2026, 10:36
Прошу помощи в устранении данных ошибок,что написано не правильно.Заранее спасибо.
1) Если переменную INT уже убрали, то надо обновить ФБ на листе
2) Ошибки могут быть в соседних ФБ, так как в этом ФБ нет типа INT. Проверить соседние ФБ.
И лучше было, сразу выложить проект.

melky
16.05.2026, 11:10
А почему нарисовался ИНТ?
Не потому ли, что кто-то вывалился из индекса массива?

Хотя это могут быть и разные ошибки в общем.

kondor3000
16.05.2026, 11:42
А почему нарисовался ИНТ?
Не потому ли, что кто-то вывалился из индекса массива?

Хотя это могут быть и разные ошибки в общем.

Нет тут Интов в принципе, даже если уйти в минус, будет все равно типа 4294967295.
А появился он скорее всего при копировании ФБ из CDS или по незнанию типов в ОЛ.

Mozzilla32rus
16.05.2026, 23:42
причину двух ошибок нашел,появилась другая ошибка.Я только учусь еще совсем все не понимаю.

Mozzilla32rus
16.05.2026, 23:43
89220 теперь так.

EFrol
17.05.2026, 07:18
Здесь закрывающий 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);

Dimensy
17.05.2026, 19:18
вот как бы сама программа целиком

А у меня вопросы



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

Валенок
17.05.2026, 19:38
Не, норм. 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 смотрел такие

Валенок
17.05.2026, 20:44
датчик уровня ОВЕН ПДУ-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, вы опять пропустили

Dimensy
18.05.2026, 12:47
Может быть глюк самой программы изменил данные результат тот же
Либо перед 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
Просто это не на гражданке где есть время,а здесь на "КТО" кто чем может коротает минуты отдыха.Я решил заняться саморазвитием.Рано или поздно все закончится.