PDA

Просмотр полной версии : Вопрос по InOut у ФБ



aaaSashaMGGU
13.10.2025, 12:19
Добрый день
Есть простенькая программка-блокировка, выполненная через ФБ
86141

Запускаем её вот так:
86142

Теперь, после сработки блокировки СработкаБлок становится равным TRUE
После пропадания условия срабатывания блокировки - он остаётся в TRUE

При попытке сбросить его с мнемосхемы:
86143
На долю секунды он присваивается в FALSE, но тут же снова обратно в TRUE
Я считаю, что так не должно быть. Мне казалось, что IN-OUT должен работать как-то не так...
На самом деле данный код почти 1 в 1 скопирован с контроллера Delta ISP SOFT - и там с ним проблем нет. С мнемосхемы (через Weintek) всё сбрасывается

Спасибо заранее

P.S. Да-да, добавить в ФБ новый вход. Назвать его "Сброс". По нему сбрасывать признак. Просто не хочу заводить кучу признаков для всех блокировок (их ~сотня)
И ещё раз напоминаю, что с Delta проблем не было...

1exan
13.10.2025, 12:37
Всё работает как задумано.
Нижняя ветвь постоянно взводит переменную, привязанную к IN_OUT и никакими внешними по отношению к этому блоку средствами вы эту переменную не обнулите (надолго)

aaaSashaMGGU
13.10.2025, 12:41
Всё работает как задумано.
Нижняя ветвь постоянно взводит переменную, привязанную к IN_OUT и никакими внешними по отношению к этому блоку средствами вы эту переменную не обнулите (надолго)

Всё так, когда и правда взводит. А теперь давление упало. И больше не взводит. Но присвоить извне всё равно нельзя

aaaSashaMGGU
13.10.2025, 12:44
это почти видимо очень существенное. То что выложено в первом скрине это задача функции, если использовался ФБ то там как минимум гистерезис вероятно использовался, отсюда и не соответствие ожидаемому в собственной реализации

Именно этот код не почти, а именно 1 в 1. И то, и другое писал я
И гистерезисов там не было
Вопрос ведь вот какой: если внутри ФБ нет прямых присвоений на InOut, то отчего-то он всё равно каждый раз перезаписывается не пойми чем из этого ФБ, что я и считаю странным...

aaaSashaMGGU
13.10.2025, 12:48
Вот, если кому интересно:
86144
86145

И ведь всё работает как ожидается

МихаилГл
13.10.2025, 12:53
В кодесисе свои понятия входа EN, может в этом проблема.
Сделайте блок без этого входа, а чтобы задействовать включение сравнения, как нибудь его через блок И заведите на сами входы сравнения.

Как то переделывал с одного контроллера на кодесис, и тоже этот EN не 1 в 1 переводил код...

PS На выход блока сравнения этот дискрет заведите через И

1exan
13.10.2025, 12:54
Всё так, когда и правда взводит. А теперь давление упало. И больше не взводит. Но присвоить извне всё равно нельзя

Вообще после падения должно присваиваться

aaaSashaMGGU
13.10.2025, 12:56
В кодесисе свои понятия входа EN, может в этом проблема.
Сделайте блок без этого входа, а чтобы задействовать включение сравнения, как нибудь его через блок И заведите н сами входы сравнения.

Как то переделывал с одного контроллера на кодесис, и тоже этот EN не 1 в 1 переводил код...
Не помогло. Всё то же самое

МихаилГл
13.10.2025, 12:58
Не помогло. Всё то же самое

PS На выход блока сравнения этот дискрет заведите через И

Так делали?

Некогда проверять, рабочий день кончился...

PS Сделайте второй ветвью, а не в 1ой цепи..., может в этом проблема...

aaaSashaMGGU
13.10.2025, 12:59
PS На выход блока сравнения этот дискрет заведите через И

Так делали?

Некогда проверять, рабочий день кончился...

Да я вообще убрал EN и всё, что с ним связано. Ничего не изменилось

МихаилГл
13.10.2025, 13:07
Да я вообще убрал EN и всё, что с ним связано. Ничего не изменилось

Так хотели? Тока это не ФБ, а программа
86146

aaaSashaMGGU
13.10.2025, 13:07
Кстати, через код значение извне меняется. Не меняется именно через мнемосхему...

aaaSashaMGGU
13.10.2025, 13:12
Так хотели? Тока это не ФБ, а программа
86146

Даже вот такой код:
86147

С мнемосхемы не даёт сбросить "СработкаБлок"

aaaSashaMGGU
13.10.2025, 13:17
Кстати, я всё это проверяю на эмуляции. Панели пока под рукой нет. Просто готовлю код для неё потом. Может, там всё будет нормально?..

МихаилГл
13.10.2025, 13:17
Даже вот такой код:
86147

С мнемосхемы не даёт сбросить "СработкаБлок"

Ну в данном коде сброс вообще невозможен...

PS Возможно косяк снаружи блока

aaaSashaMGGU
13.10.2025, 13:24
Ну в данном коде сброс вообще невозможен...

PS Возможно косяк снаружи блока
В данном коде он, конечно, "невозможен". Я извне через отладчик присваиваю "СработкаБлок". Теперь через мнемосхему пытаюсь сбросить его же. И опять то же самое: на мгновение он сбрасывается, но тут же возвращается обратно
ФБ упорно пишет своё значение (хоть и не должен) - и мнемосхема перебить его не может

МихаилГл
13.10.2025, 13:26
В данном коде он, конечно, "невозможен". Я извне через отладчик присваиваю "СработкаБлок". Теперь через мнемосхему пытаюсь сбросить его же. И опять то же самое: на мгновение он сбрасывается, но тут же возвращается обратно
ФБ упорно пишет своё значение (хоть и не должен) - и мнемосхема перебить его не может

Сделайте просто OUT. Может в этом проблема. Хотя ХЗ.

PS Что значит сбросить... Его невозможно сбросить. пока не выполнятся условия для сброса... Короче, я вас не понимаю похоже...

1exan
13.10.2025, 13:29
Кстати, через код значение извне меняется. Не меняется именно через мнемосхему...

т.е. если вручную изменяете значение переменной "...Сработка.." в программе - то оно сохраняется?

aaaSashaMGGU
13.10.2025, 13:36
Сделайте просто OUT. Может в этом проблема. Хотя ХЗ.

PS Что значит сбросить... Его невозможно сбросить. пока не выполнятся условия для сброса... Короче, я вас не понимаю похоже...

Если копнуть в алгоритм, то условий для сброса 2 штуки:
1) Выключенная блокировка - это верхняя строка LD-диаграммы
2) Щелчок оператора на мнемосхеме на кнопку "Сбросить". Данное действие через мнемосхему напрямую присваивает признак СработкаБлок = FALSE

Если случится пункт 1 - то блокировка сразу сбросится через верхнюю строку LD
Если случится пункт 2 - то блокировка сразу сбросится через присвоение. И если условие сработки останется - то тут же сработает снова. Если условия сработки нет - останется сброшенной

Ладно, спасибо за помощь, но на этом, пожалуй, мы закругляемся
Ну, не может Codesys нормально в LD, значит не может...

Сделал вот так - и всё теперь работает:
86149

Ещё раз всем спасибо

kondor3000
13.10.2025, 13:37
Даже вот такой код:
86147

С мнемосхемы не даёт сбросить "СработкаБлок"
Сброс R надо сделать после включения S, ниже по программе, у вас сброс не сработает никогда.
И переменные на кириллице не пишут.

aaaSashaMGGU
13.10.2025, 13:55
проблема в чем то другом, все работает, возможно визуализация не понимает кирилицу, но это не точно, сам таким не пользуюсь
Да, вижу, всё работает
Всё равно спасибо, но я уже костылём всё починил...
А проблема всё равно всё ещё непонятно, где

aaaSashaMGGU
13.10.2025, 13:56
Сброс R надо сделать после включения S, ниже по программе, у вас сброс не сработает никогда.
И переменные на кириллице не пишут.

Сброс происходит вручную с мнемосхемы
Но я уже всё починил костылём...

МихаилГл
13.10.2025, 16:07
Сброс происходит вручную с мнемосхемы
Но я уже всё починил костылём...

Сбрасывать как раз правильно вспомогательным битом. Еще и квитирование реализовать. Т.е. нажали сброс, и если авария осталась, то она становится не активной, а пассивной. И если условия ее влзникновения исчезают, то она должна сама уйти.