не инвертируется тег в PLC

Промышленные Логические Контроллеры SIMATIC S7-200/300/400
Post Reply
honeybear
Posts: 5
Joined: Tue Jul 07, 2020 10:59 am

не инвертируется тег в PLC

Post by honeybear » Mon Oct 05, 2020 7:21 am

Здравствуйте! Имеется ПЛК 1500, сейфти режим отключен, имеется тиа 16. Одна из задач программы - реакция на нажатия оператором кнопок в HMI.
Суть вопроса следующая: есть FB1 с DB1, в FB1 есть тэг recoveryFlag (bool), он привязан к кнопке в HMI, при нажатии кнопки срабатывает скрипт invertBit.
Нажимаем кнопку, надеваем "очки" - тег изменился.
Пишем в том же FB1 код на SCL

Code: Select all

IF #recoveryFlag = TRUE THEN
    FOR #i := 0 TO 5 DO
        #readyToSendMsg[#i] := #sndCode.recoveryArr[#i];
    END_FOR;
    #recoveryFlag := FALSE;
END_IF;
Нажимаем кнопку - действие не происходит, ну то есть одев "очки" в массиве readyToSendMsg пусто, тег recoveryFlag - ФОЛС!
Добавляем для проверки булевый тег check с условием стать ТРУ, если тег recoveryFlag стал ТРУ.
Нажимаем кнопку - массив не записывается, тег recoveryFlag - ФОЛС, но check висит ТРУ. (h)
При истеричном нажатии на кнопку в HMI, раза с 3-10-27.. проскакивает одно срабатывание и массив пишется.
Вот ломаю голову, в чем причина...

Есть прямая связь с присутствием тега в коде SCL, потому как стоит убрать его из кода - он начинает стабильно работать, а сам код, как видно, простой и как-то навредить работе тега не в состоянии.
ЗЫ: с такой-же проблемой еще 2 оставшиеся кнопки (тега) в HMI. Одна из них идентична по работе с описанной выше, вторая отличается, но простота логики та же.

Буду признателен за помощь! (sos) (oo)

honeybear
Posts: 5
Joined: Tue Jul 07, 2020 10:59 am

Re: не инвертируется тег в PLC

Post by honeybear » Tue Oct 06, 2020 7:17 am

Добавил скрины, логика и код уже доработаны, относительно первого сообщения. Но результата нет. Всё еще жду помощи!
FB begin
Show
Image
FB end
Show
Image

sania
Site Admin
Posts: 1254
Joined: Sat Aug 13, 2005 6:15 am

Re: не инвертируется тег в PLC

Post by sania » Tue Oct 06, 2020 10:13 am

херня какая-то или я ничего не понял
зачем 2-ые строчки ледера если панель делает сет\рисет?
от этого там непонятный салат получаться должен...

honeybear
Posts: 5
Joined: Tue Jul 07, 2020 10:59 am

Re: не инвертируется тег в PLC

Post by honeybear » Wed Oct 07, 2020 6:09 am

Как еще можно обнулить Тег hmiRecoveryNSU? Он становится ТРУ при нажатии кнопки на панели HMI, а обнулиться должен после записи массива в буфер.

sania
Site Admin
Posts: 1254
Joined: Sat Aug 13, 2005 6:15 am

Re: не инвертируется тег в PLC

Post by sania » Wed Oct 07, 2020 10:13 am

в панели делать сет бита на нажатие, а в проге рисет

honeybear
Posts: 5
Joined: Tue Jul 07, 2020 10:59 am

Re: не инвертируется тег в PLC

Post by honeybear » Thu Oct 08, 2020 7:33 am

sania wrote:
Wed Oct 07, 2020 10:13 am
в панели делать сет бита на нажатие, а в проге рисет
В общем, перевел код полностью на lad, в HMI на кнопке поставил setBit, в программе логика иллюстрирована ниже на скрине, но все также тег ТРУшится, от него тригерится флаг, и он отвечает за выполнение записи в массив, после чего должен упасть. Но выполняется это всё также с 3-5 нажатия.

Для сравнения:
было на lad+scl:

Code: Select all

шми_тег1:=1 => копируем массив
если массив копирован => шми_тег1:=0
Результат: некорректно работал тег из HMI, с 3-5 нажатия выполнялся как должен

стало на lad:

Code: Select all

шми_тег1:=1 => флаг:=1 => шми_тег1:=0
если флаг==1 => копируем массив
если массив копирован => флаг:=0
Результат: теперь некорректно работает флаг, с 3-5 нажатия выполняется как должен

Последняя генерация кода дошла до того, что HMI тег связан с тегом в меркере, а уже он подается на вход FB, где происходит логика - увы, ни чего не поменялось. Я склоняюсь всё больше к проблеме соединения с HMI или багом среды/плк.

Image

honeybear
Posts: 5
Joined: Tue Jul 07, 2020 10:59 am

Re: не инвертируется тег в PLC

Post by honeybear » Wed Oct 14, 2020 8:27 am

Если кому интересно - победил проблему. На скрине рабочий код. Суть следующая:
Принимаем тег из HMI на восстановление
Активируем флаг и скидываем тег HMI
Записываем сообщение восстановления в буфер отправки
Если сообщение отправилось, то пишем в буфер отправки запрос состояния НСУ
Если НСУ присылает состояние "настройка" - сбрасываем флаг

Теперь НСУ после самоблокировки откликается и разблокируется с 1 нажатия всегда.
Image

Но теперь появилась новая проблема, отчасти сам виноват, полазил в настройках модуля (прием-отправка сообщений). После проверки на "потерю питания" НСУ перестает отвечать, в блоке отправки сообщение есть, меняется по вышеописанному условию и отправляется, о чем глаголит блок Send_ptp (16#0000, 16#7000, 16#7001, 16#7002 мелькают регулярно на выходе status), но вот блок receive_ptp висит со статусом 16#7002 постоянно. Есть подозрения в настройках модуля CM PtP RS422/485 HF. Скрины настройки ниже. Я в этом весьма слабо понимаю, буду признателен, если кто подскажет.
Связь SM c GND, обычная 8жилка, входы проверил, физически все соответствует схеме подключения в вилках.
Image
Image

Post Reply