Записки инженера АСУ ТП
Открыть в Telegram
321
Подписчики
+224 часа
+57 дней
+2630 день
Архив постов
@BaD_HKey и @artemicqq в процессе выяснили что нужно спустить камеры ниже, ибо распознавание лиц некорректно работало с высоты, и установили кронштейны, сквозь профиль которых проходит кабель. Получилось интересно!
+4
Монтаж системы видеонаблюдения + скс
Камеры dahua, сеть 6 категория, сертифицирована Fluke DTX
тоже @BaD_HKey и @artemicqq
+4
К слову про монтажные стяжки! А вот такую красоту мне прислали мои друзья из смежной профессии - @BaD_HKey и @artemicqq
Шкаф в процессе сборки.
SCo_Код (Состояние)
Кто программировал контроллеры фирмы Segnetics и использовал их конструктор (их киллер-фича, имхо), тот наверняка сталкивался с кодом состояния, который отображает статус системы в данный момент (останов, жалюзи, прогрев, работа и т.д.). И вот если вам приходилось налаживать связь с внешним master-устройством, будь то HMI либо диспетчеризация, то вы наверняка задавались вопросом, а как это этот статус передать. Я вот сталкивался. Постоянно, блин, сталкиваюсь. В последнее время все чаще и чаще в комплект к шкафу с ПЛК Segnetics стали заказывать и HMI Weintek. И я очень долго крутился вокруг да около, пока не нашел решения.
Weintek позволяет создавать макросы. Кажется там что-то паскалеподобное. Так вот, до использования макросов я допер уже очень давно. Но я там там такой велосипед нарисовал, что кошмар. Аж на 80 строк. Правда, работало. Но переносить его из проекта в проект было очень неудобно и сложно.
Настало время оптимизаций! Вооружившись GPT(уже и не помню каким) макрос был переработан в красивое и удобно переносимое решение:
macro_command main()
// Объявляем переменные.
short sourceWord, resultWord, i
GetData(sourceWord, "MODBUS TCP/IP (Zero-based Addressing)", "SCo_Код (Состояние)", 1) //переменная из ПЛК
// Цикл для прохода по всем 16 битам слова
for i = 0 to 15 step 1
// Проверяем, активен ли бит
if ((sourceWord >> i) & 1) then
// Если бит активен, сохраняем его порядковый номер
resultWord = i
// Выходим из цикла, чтобы найти только первый активный бит
break
end if
next i
// Записываем порядковый номер найденного бита в регистр LW0.
SetData(resultWord, "Local HMI", "Статус ПВ4", 1) //переменная, в которой будет статус
end macro_command
И все! Дальше дело за малым - просто взять числовой индикатор, уставить необходимое количество состояний и на каждое состояние прописать необходимый статус.
#weintek #segnetics
Вытащили на объект с кучей замечаний, водили от одного шкафа к другому. По итогу из нашего - только замена вышедшего из строя ПЛК. Все остальные претензии разбились о суровость монтажной организации, которая некорректно произвела подключения.
Пост про использование нейросетей в АСУ ТП вызвал живой интерес.
В таком случае хотел бы показать вам код упоминаемого макроса управления компрессором.
ИИ сам придумал названия переменных (на самом деле именно переменные я указывал в промпте, когда описывал задачу), а так же комментарии.
первоначальный промпт выглядел так:
напиши функциональный блок на ST управлением ККБ/ входы: уставка, температура, мин включение сек, циклов в час, задержка между запусками сек, авария. выход: ккб.
авария останавливает систему полностью
мин включение не дает компрессору выключиться после включения. исключение - авария. цикл в час нужен для ограничения количества включений компрессора
все переменные должны быть на английском
Было очень много промежуточных итераций, после каждой успешной добавлялись новые требования и в конечном счете получился вот такой код. Рабочий. В целом это интересный опыт, советую попробовать, но с осторожностью.
Небольшой совет: кормите ИИ хелп от вашей среды разработки - очень сильно облегчает работу, не сразу я пришел к этой мысли.
И конечно же, как справедливо заметили коллеги, нужно очень тщательно перепроверять работу того, что оно там пишет. Каждый раз. И еще раз. И когда убедились, что все работает как надо - проверьте еще раз. Ибо ИИ очень любит что-то сломать в процессе исправления какого-то бага. Никого не напоминает, а?
#owen #ии
Нас 13 - чертова дюжина.
Йо-хо-хо и бутылка рома!
P.S. по такому случаю - на канале появились комментарии.
А вот к слову и сам макрос. Идея в том, что в переменную «день недели» задаешь номер дня недели (1-7), и группа из четырех переменных (время для включения/выключения) переключается на соответствующую на выходе.
Внутри все на ST, все написала нейронка. Почти с первого раза.
#owen #ии
По канону вообще должна быть синяя изолента, но в экстренной ситуации подойдет все, что есть под рукой.
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
