Нарисовано в TIA WinCC - окно настроек аналогового сигнала. Для чего мы все это делаем?
Делается это окно настроек датчика для того чтоб в случае поломки датчика, можно будет заменить другим датчиком(аналогом).
Приведу пример: у Вас имеется датчик температуры у которого диапазон измерения от -50 до +25 С и он по какой то причине выходит из строя. Вам срочно нужно поменять датчик, иначе не работает целая система. У Вас в городе точно такой датчик не продается, но есть другие(допустим с диапазоном -60.....+60). Покупаете аналог датчика- монтируете, и настраиваете его в таком окне. Задаете верхние и нижние пределы измерения и у Вас он сразу начинает показывать текущее значение (вторая строка в окне). Дальше, мы видим 4 строки (пороги) у которых есть индикация(красные и желтые квадраты), возможность активации и деактивации(квадраты белого цвета- при нажатии выставляется галочка) и возможность задать значения, при которых срабатывает индикация и выставляется соответствующий бит в DB. Аварийные и предупредительные пороги верхнего и предупредительного уровней пригодятся в дальнейшем, при программировании алгоритмов с использованием этих датчиков.
Например: Если выставился бит "верхний аварийный уровень" температуры подшипников, то отключить к чертям насосы, иначе они заклинят и беда придет.
Соответственно когда Вы меняете значения- нужно сохранить, или сохранить предыдущие значения. Для этого приделаны кнопки "Сохранить" и "Отмена" соответственно. Вроде по окну все понятно, далее алгоритм, с которым я чуть с ума не сошел на объекте.
Кто понимает что к чему в Step7, можете пропустить- буду разжевывать для тех кто начинает. Итак, Вам нужно в окне папки "Blocks", нажать правую кнопку мыши и создать FB-функциональный блок (это уже учитывая, что Вы уже создали проект, выбрали контроллер, настроили HW). В строке Simbolic Name кратко опишите название блока, чтоб потом не перепутать.
После открытия блока у Вас будет что - то примерно такое, только пустое(у меня с готовым примером). Обведенное красным - это переменные, которые нужно будет заполнить. Чтоб легче было как понять нарисую вот такую фигню--->
Таким образом, черный квадрат- это код алгоритма, в котором при необходимости Вы можете использовать временные переменные Temp, и статические переменные Static. Входные значения In- алгоритм пережевывает и выплевывает в значения Out. Поэтому нам придется создать все эти переменные, начнем с In.
Из выделенного красным- в левом окне выбираем IN. Нажимаем и выделяем IN. Теперь в правом окне заполняем "name"- название нашего переменного, "data"- тип переменной, "address"- выставится автоматически, и пишите комментарий- что это за переменная.
У меня входная переменная называется "ACP", тип переменной INT- так как значение переменной с датчика будет именно INT. Идем дальше...
Из выделенного красным- в левом окне выбираем OUT, только вот его заполнять в этом примере не будем- пока не нужно. Далее Static...
Давайте чтоб быстрее было, я скину скрины
Это переменные которые я использовал для алгоритма. Если хотите взять мой код алгоритма как исходный, Вам придется заполнить все эти переменные.
Итак, все это сохраняем и закрываем окно работы с функциональным блоком, чтобы сразу создать блок данных для работы с нашим функциональным блоком. Такие блоки данных называются Instance DB.
Создаем Data Block и у Вас появится следующая картина, где задаете номер своему DB и тип выбираете Instance DB и выбираете для какого FB вы создаете.
В итоге у Вас получится DB, при открытии которого должна получиться следующая картина
Узнаете строки? Да, это те строки которые Вы усердно забивали в переменных функционального блока.
Напишем программу в FBD для одного датчика....
Итак, 1 network- что мы тут делаем.... Наше входящее значение с ACP имеет тип INT, а нам нужен Real. Поэтому, используя конвертеры мы меняем тип
В левом окне находим конвертер I_DI и используем его в первом нетворке. К входной ножке приписываем наш ACP, а к выходной Темп который мы заранее создали в переменных Temp.
2 нетворк из DI в Real по аналогии.
Теперь у нас есть входное значение ACP(АЦП) с тип-ом Real.
Чтобы получить значение с датчика в инженерных единицах, нам придется воспользоваться формулой --->
Что и начинаем делать в 3 нетворке. По формуле сократили ACPmin и осталось что значение ACP делим на максимальное значение ACPmax.
Сразу оговорюсь что максимальное значение АЦП (27648) я взял из мануалов модуля, который я использую.
В 4 и 5 нетворке считаем остальную часть формулы
И в 6 нетворке получаем значение Value. Однако заказчики хотят видеть не только температуру или давление, а хотят еще и видеть само значение тока 4....20 мА. Для вычисления Value_mA используем точно такую же формулу, только вместо En_max и En_min будут максимальное и минимальное значение тока.
Далее, при выполнении условия- если ни один бит не выставлен, то записываем 1 в байт состояния датчика.
В 11 нетворке производится имитация значения с датчика
В 12 нетворке включение верхнего предупредительного порога
В 13 и 14 нетворке выключаем порог
В 15 нетворке по аналогии включаем аварийный порог
Далее нижний предупредительный и нижний аварийный пороги
Продолжу в следующем посте №2, не пускает больше картин))