Здравствуйте, коллеги!
На заводе у нас есть пастеризатор - управление на основе CPU S7-300 (конкретно сейчас не помню, да и не важно).
Там много клапанов - кажется 12 и иногда некоторые из них не отрабатывают (они трёхходовые) - не до конца перекрывают. Эта ошибка вроде как предусмотрена - но только выводом сообщения на панель. Процесс при этом не останавливается и нам в пиво нафигачило воды в буфере. Мне поручили дополнить программу.
Проект я на всякий прикреплю.
Я с конкретными вопросами, а не чтобы за меня написали.
Начал я с работы клапанов - раз с ними проблема - это FC98. Там по сути последовательных их вызов в зависимости от режима работы. И проверка как они отработали - это уже FC122. Вот по нему и появились вопросы.
Вставлю комментарий к функции - он важен т.к. в нём и кроется подсказка к механизму управления и отслеживанием работы клапанами:
"CO.MAC srl - Via Garibaldi 34N - Bonate Sotto BG
=----------------------------------------------=
Cliente : Krasny - Vostok
Impianto : Pastorizzatore Flash 21000 Lt
Commessa : 6181 Data : 11.03.2002
=----------------------------------------------=
................................................................................
I N G R E S S I U S C I T E
................................................................................
M 202.5 = RICHIESTA APERTURA/DESTRA M 204.0 = COMANDO APERTURA/DESTRA
M 202.6 = RICHIESTA CHIUSURA/SINISTRA M 204.1 = COMANDO CHIUSURA/SINISTRA
M 202.2 = FC APERTO/DESTRA
M 202.3 = FC CHIUSO/SINISTRA M 205.0 = ALLARME
NumAll = NUMERO ALLARME M 205.1 = ANOMALIA
RitAll = RITARDO ALLARME
................................................................................
- Numerazione allarme : 1..2000
- Stato allarme : DB120 Word = Numero allarme * 2
- Stato valvola : DB21 Byte = Numero allarme * 1 (TipoSt=0)
: DB21 Word = Numero allarme * 2 (TipoSt=1)
- Bit allarme : DB10 Byte dispari = ((N.all-1)/8)- 1 (TipoAl=0)
: DB10 Byte pari = ((N.all-1)/8)+ 1 (TipoAl=0)
: DB10 Byte = ((N.all-1)/8)+ 0 (TipoAl=1)
Pannello OP/VT :TipoAl=0)
+-------------------------+-------------------------+
| 15 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00 |
+-------------------------+-------------------------+
| Byte n | | Byte n+1 |
Allarme n.16 Allarme n.9 Allarme n.8 Allarme n.1
Pannello UniOp/ProFace :TipoAl=1)
+-------------------------+-------------------------+
| 15 14 13 12 11 10 09 08 | 07 06 05 04 03 02 01 00 |
+-------------------------+-------------------------+
| Byte n | | Byte n+1 |
Allarme n.8 Allarme n.1 Allarme n.16 Allarme n.9
FUNZIONI COMUNI:
----------------
M 3.0 = Inizio allarme acquisizione manuale
M 3.1 = Presenza allarme
M 3.2 = Compilazione bit allarme
M 3.3 = Inizio allarme acquisizione automatica
M 3.4 = Fine allarme acquisiszione automatica
M 3.5 =
M 3.6 =
M 3.7 = Impulso conteggio ritardo allarme
M 4.0 = Impulso acquisizione allarme generale
M 4.7 = Acquisizione automatica allarme
MB202 = Appoggio ingressi
MB204 = Appoggio uscite
M205.0 = Allarme in corso
M205.1 = Anomalia posizionamento
M205.2 = Anomalia perdita posizione
MB206 = Contatore ritardo allarme
M207.0 = Consenso apre/destra
M207.1 =
M207.2 = Allarme memorizzato
M207.3 = Allarme acquisito
M207.4 = Inizio allarme
M207.5 = Posizione raggiunta
M207.6 =
M207.7 =
MB209 = Stato valvola
MW210 = Numero byte, bit allarme
MW212 = Numero allarme -1"
Это на языке оригинала - я перевёл - если нужно добавлю.
Перевод правда не особо помог - т.к. я саму идею не понял.
FC 122 "Control of valve" (Контроль клапанов) вызывается с двумя параметрами: "NumAll" - номер неисправности и "RitAll" - сброс неисправности.
А дальше начинается тёмный лес - судя по комментарию - в DB120 в соответсвующем адресе лежит статус именно этой тревоги и почему-то он то ли уже умножен на 2ревоги полученный функцией зачем-то надо умножить на 2. Я уже этого момента не понял - вот про эту строку речь: "- Stato allarme : DB120 Word = Numero allarme * 2".
Далее начну с первого "нитворка" и пожалуй на нём пока и остановлюсь ибо там ещё много вопросов и нет смысла их все скопом выливать. Сам NW1:
"
CLR
= #TipoAl
CLR
= #TipoSt
OPN "STATE_ALARM" // Stato allarme
L #NumAll // Numero allarme
SLW 4
T #PStatoAl // Puntatore appoggio allarme (Nall*2)
L DBW [#PStatoAl]
T MW 206
"
В начале, я так понял они выбирают тип HMI с которой будет работать система - ну это ладно.
1)Интереснее дальше - открываем блок данных DB 120 - понятно
2) Загружаем номер аварии 41 (в проекте HMI - под этим номером прописана сооветсвующая тревога)
3) Производим логический сдвиг этого номера на 4 разряда, а это если я правильно всё понял - эквивалент умножения на 16. Получаем аж 656.
4) Далее мы используем это как смещение чтобы загрузить из DB 120? " L DBW [#PStatoAl]" - так в DB 120 такого адреса даже нет. Там всего 520 слов... И я вот и не пойму - что это и зачем?
Остальное спрошу позже, поскольку оно всё перекликается.
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Изменение программы пастеризатора с целью устранения неучтённой ошибки
Модератор: Глоб.модераторы
-
- осмотрелся
- Сообщения: 139
- Зарегистрирован: 15 дек 2020, 20:29
- Имя: Алексей
- Страна: Россия
- город/регион: Пенза
- Благодарил (а): 30 раз
- Поблагодарили: 8 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- эксперт
- Сообщения: 1584
- Зарегистрирован: 29 май 2009, 21:40
- Имя: Александр
- Страна: Россия
- город/регион: Курган
- Благодарил (а): 86 раз
- Поблагодарили: 208 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
1. Почему не до конца перекрывают?
2. Не полное перекрытие клапаном - это норма, или отклонение от нормальной работы клапана?
Можно более детальное наименование клапана?
-
- осмотрелся
- Сообщения: 139
- Зарегистрирован: 15 дек 2020, 20:29
- Имя: Алексей
- Страна: Россия
- город/регион: Пенза
- Благодарил (а): 30 раз
- Поблагодарили: 8 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
Точно не могу сказать - видимо какой-то дефект - шток иногда занимает неправильное положение и судя потому что именно эта ошибка анализируется в программе - проблема для данных клапанов известная.
Отклонение однозначное. В продукт попадает вода например. Или продукт вообще идёт не по тем трубам.
Клапана ThinkTop
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- эксперт
- Сообщения: 1584
- Зарегистрирован: 29 май 2009, 21:40
- Имя: Александр
- Страна: Россия
- город/регион: Курган
- Благодарил (а): 86 раз
- Поблагодарили: 208 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
То есть вместо устаранения дефекта оборудования - корректировка ПО? И когда однажды оборудование сломается - то крайним будет тот, кто выполнил корректировку ПО? Хм, так себе перспектива.
Отправлено спустя 2 минуты 25 секунд:
Совсем не факт.
Если, к примеру ПО анализирует состояние контактора, то это не в связи с тем, что у контактора есть проблема по включению / отключению, а для того, что бы минимизировать риски развития аварийной ситуации.
-
- осмотрелся
- Сообщения: 139
- Зарегистрирован: 15 дек 2020, 20:29
- Имя: Алексей
- Страна: Россия
- город/регион: Пенза
- Благодарил (а): 30 раз
- Поблагодарили: 8 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
В любом случае - анализ этой ошибки уже включён в программу. Меня просят немного изменить поведение из-за этой ошибки. И сделать её отработку, как например при выходе за диапазон коэффициента пастеризации - сразу переводить систему в стоп, а далее предложить оператору самому выбор действий. Мысли есть - например я думаю добавить вызов "генерации ошибки" (FC120) из функции "ошибки машины" FC 102. Но там всё равно этот пресловутый код надо понять - для чего там какие умножения делаются и т.д.
Насколько я понял все вызовы в "ошибки машины" (FC 102) приводят как раз к её остановке и выбору действий оператором.
-
- здесь недавно
- Сообщения: 12
- Зарегистрирован: 10 мар 2022, 15:38
- Имя: Роман
- Страна: Россия
- город/регион: Тверь
- Благодарил (а): 1 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
Вам для понятия принципа алгоритма программы необходимо, либо во время работы в режиме мониторинга посмотреть как оно устроено, либо же просимулировать в plcsim. Одно из очевидных первых действий
-
- освоился
- Сообщения: 221
- Зарегистрирован: 19 сен 2019, 10:09
- Имя: Макс
- Страна: Россия
- город/регион: Славянск-на-Кубани
- Благодарил (а): 5 раз
- Поблагодарили: 38 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
Не работает клапан - грузить контроллер?
У вас на автомобиле когда лампочка поворотника перегорает и реле начинает щелкать в два раза быстрее - вы меняете лампочку или меняете прошивку на мозгах?
У вас на автомобиле когда лампочка поворотника перегорает и реле начинает щелкать в два раза быстрее - вы меняете лампочку или меняете прошивку на мозгах?
WinCC 7.4 SP1 Upd15, Step5.6
-
- здесь недавно
- Сообщения: 53
- Зарегистрирован: 15 мар 2023, 21:57
- Имя: Михаил
- Страна: Россия
- город/регион: Волгоградская область / г. Волжский
- Благодарил (а): 1 раз
- Поблагодарили: 14 раз
Изменение программы пастеризатора с целью устранения неучтённой ошибки
41 аларм имеет адрес в блоке данных 41*2 = 82 ("STATE_ALARM".ALARM[41] = DB120.DBW 82)- вы можете это проверить добавив все адреса блока данных D120 в таблицу (Variable Table). Итого у вас всего в системе всего 260 алармов.
обратите внимание на тип переменной #PStatoAl - она типа DWORD - так что вся эта конструкция по факту = умножение номера аларма на 2 в виде указателя S7 Pointer format.
На скриншоте вбил в переменную MD360 значение 656 (L#656) - она же строкой выше в ввиде указателя это 82.0
У вас нет необходимых прав для просмотра вложений в этом сообщении.