Jump to content
  • PLC programming technology and HMI interface design Russian database

    PLC, DCS, HMI and SCADA product application technical articles

    caixiaofeng
    В предыдущей статье мы обсуждали, что такое функциональный блок FB, как он работает в программе ПЛК и как его создать и использовать. В этой статье мы поговорим об экземплярах блоков данных различных типов функциональных блоков в Siemens Tia Portal и когда использовать каждый тип.
    Содержание:
    Что такое функциональный блок FB? Различные варианты экземпляров данных. Одиночный экземпляр. Экземпляр параметра. Многоэкземпляр. Что такое функциональный блок?
    Функциональный блок или FB — это просто блок, содержащий логику кода. Вы используете этот FB для достижения определенной функциональности с помощью фрагментов кода, написанных внутри.
    При вызове функционального блока в ваш код вам будет предложено назначить блок данных, также называемый экземпляром данных, который будет связан с этим FB, чтобы сохранить значения параметров FB. Не все параметры внутри FB сохраняются в экземпляре данных, но мы вернемся к этому позже.
    При вызове функционального блока у вас есть 3 различных варианта для связывания экземпляра блока данных с этим вызовом функции. Эти различные варианты будут зависеть от того, где вы вызываете свой FB.
    Итак, вкратце. Функциональный блок FB — это в основном функция FC с выделенным блоком данных DB, этот блок данных используется для хранения значений параметров функционального блока.
    Различные варианты для экземпляров данных
    У нас есть 3 различных варианта для экземпляра данных функционального блока, эти варианты:
    Один экземпляр. Экземпляр параметра. Мультиэкземпляр. Три различных экземпляра данных вызова исходят из 3 различных методов вызова:
    Вы можете вызвать функциональный блок FB внутри основного OB1, что даст вам возможность: Один экземпляр. Вы можете вызвать функциональный блок FB внутри функции FC, что даст вам два варианта Один экземпляр Экземпляр параметра Вы можете вызвать функциональный блок внутри другого функционального блока, что даст вам три доступных варианта создания экземпляра данных Один экземпляр Экземпляр параметра Несколько экземпляров Один экземпляр данных
    Сначала давайте начнем с создания функционального блока FB, как мы уже упоминали ранее, мы создаем функциональный блок, нажимая «добавить новый блок» и выбирая нужный нам тип блока. Смотрите рисунок 1.

    Рисунок 1 — Создание функционального блока FB
    Теперь давайте вызовем ReusableFB, который мы создали внутри нашего основного OB1. См. рисунок 2.

    Рисунок 2 – Вызов FB внутри основного OB1
    Как видно из предыдущего рисунка, при вызове FB внутри основного OB1 вам будет предложено назначить экземпляр данных, который будет связан с этим вызовом FB. В этом случае будет только один вариант – один экземпляр.
    После выбора варианта один экземпляр будет создан блок данных и связан с вызовом FB. См. рисунок 3.

    Рисунок 3 – Создан один экземпляр
    Созданный один экземпляр будет использоваться для хранения значений некоторых параметров FB. Например, входов, выходов, In Out и статических параметров.
    Другие параметры FB не будут сохранены, например, temp и константы. См. рисунки 4 и 5.

    Рисунок 4 – Данные сохраняются внутри экземпляра данных

    Рисунок 5 – Данные сохраняются из FB в экземпляр данных.
    Теперь давайте создадим простую логику внутри FB, чтобы лучше понять экземпляры данных. Эта логика добавит постоянное значение 15 к статической переменной, а затем переместит результат на выход. См. рисунок 6.

    Рисунок 6 – Создание простой логики
    Теперь вернитесь к основному OB1 и обратите внимание, как теперь выглядит ваш вызов FB. См. рисунок 7.

    Рисунок 7 – Обновление вызова FB после каждого изменения
    Любое изменение, которое вы вносите в логику внутри FB, приведет к необходимости обновления вызова функционального блока, чтобы внесенные вами изменения можно было применить.
    Вы можете обновить вызов блока, щелкнув правой кнопкой мыши вызов FB и нажав опцию обновления вызова блока или перекомпилировав код ПЛК. Смотрите рисунок 8.

    Рисунок 8 – Обновление вызова FB
    После обновления вызова блока изменения, внесенные вами в код FB, будут применены и использованы в вызове блока. Как вы видите на рисунке 9.
    Теперь FB ожидает входной сигнал типа bool, а FB выдаст выход типа int.

    Рисунок 9 – Входы и выходы теперь связаны с вызовом FB
    Давайте смоделируем наш код и посмотрим, как будет вести себя ПЛК. Смотрите следующую анимацию, показывающую простую симуляцию логики ПЛК на данный момент.

    Как вы видите из анимации, всякий раз, когда сигнал запуска равен TRUE, функция будет выполняться, а выход будет продолжать меняться. И как только сигнал запуска больше не доступен, выход останется на последнем записанном значении.
    Использование экземпляра данных здесь заключается в том, что значения статической переменной и выходной переменной сохраняются внутри одного экземпляра, поэтому, когда сигнал запуска снова возвращается, функция продолжит работу с последних записанных значений.
    Очень важное примечание
    Никогда не используйте один и тот же экземпляр для двух разных вызовов FB. Смотрите следующую анимацию.

    Как вы видите из анимации, у нас есть два разных вызова FB, но оба вызова связаны с одним и тем же одним экземпляром, поэтому даже когда сигнал start2 был FALSE, значение Output2 менялось вместе с Output1.
    Как и следовало ожидать, изменение экземпляра данных 1-го вызова также будет затронуто во 2-м вызове, поскольку у них один и тот же блок памяти. Смотрите рисунок 10.

    Рисунок 10 — Никогда не используйте один и тот же экземпляр данных с разными вызовами FB
    Если вы использовали один и тот же экземпляр данных с разными вызовами FB, то ваш функциональный блок больше не может быть использован повторно. Даже если входные/выходные параметры различны для каждого отдельного вызова FB. Как вы видели в последнем видео (анимация), оба вызова дали одинаковые результаты, хотя у второго вызова даже нет входного сигнала включения.
    Еще одно очень важное замечание
    Мы уже говорили, что если вы вызываете свой FB из FC более высокого уровня, у вас будет два варианта для связанного экземпляра данных; эти варианты — один экземпляр и экземпляр параметра. Смотрите рисунок 11.

    Рисунок 11 — Использование одного экземпляра с FB, вызванным из FC
    Если это произошло, и вы вызовете FB внутри FC, вам никогда не следует использовать один экземпляр для ваших FB. Чтобы узнать, почему это так. См. рисунок 12

    Рисунок 12 – Вызов FC более одного раза
    Как видно из рисунка 12, когда вы вызываете FC более одного раза в своей логике, вам не будет предложено назначить блок данных, потому что FC не нужен один.
    Но вы знаете, что внутри FC есть вызванный FB, с этим FB связан один экземпляр. Так что теперь 3 вызова FC имеют один и тот же экземпляр данных для вызова FB. Так что ваша функция FC больше не может быть повторно использована.
    Что делать? Лучший вариант, когда вам нужно вызвать FB внутри FC, — использовать экземпляр параметра.
    Экземпляр параметра
    Как мы уже говорили, если вы вызвали FB внутри FC, вам не следует выбирать один экземпляр, а экземпляр параметра лучше для целей повторного использования.
    Экземпляр параметра сохранит экземпляр данных FB, вызванного в области In Out интерфейса блока FC. Позволяет вводить новый экземпляр данных для каждого вызова FC. Смотрите рисунки 13 и 14.

    Рисунок 13 — Назначение экземпляра параметра при вызове FB внутри FC

    Рисунок 14 — Каждому вызову FC потребуется новый экземпляр данных
    Как видно из предыдущего рисунка, всякий раз, когда вы вызываете FC внутри своей программы, она будет запрашивать экземпляр данных для повторно используемого FB внутри FC.
    Но, используя этот способ, вам придется создать экземпляр данных самостоятельно. Смотрите рисунок 15.

    Рисунок 15 — Создание нового экземпляра данных
    Чтобы создать новый экземпляр данных, вы делаете то же самое, что и при создании FC или FB, но на этот раз вы выбираете опцию DB. И убедитесь, что вы выбрали тот же тип DB, что и вызываемый FB.
    Теперь ваш FC можно использовать повторно столько раз, сколько вы хотите, вам просто нужно создать экземпляр для каждого вызова. Смотрите рисунок 16.

    Рисунок 16 — Назначение DB вызову FC
    Многоэкземплярная база данных
    Многоэкземплярная база данных просто означает, что DB вызываемого FB будет храниться внутри DB вызывающего FB более высокого уровня. Эта опция доступна только в том случае, если вы вызываете FB из другого FB.
    Давайте создадим еще один FB, чтобы использовать его как FB более высокого уровня.
    После создания этого HigherLevelFB вызовите его из основного OB1, и, конечно, единственным вариантом вызова будет один экземпляр, как показано ранее. Смотрите рисунок 17.

    Рисунок 17 – Вызов HigherLevelFB из основного OB1
    Теперь вызовите ReusableFB из HigherLevelFB. И выберите опцию Multi-instance. См. рисунок 18.

    Рисунок 18 – Назначение многоэкземплярной БД
    При выборе опции Multi-instance созданная БД будет сохранена внутри статических параметров вызывающего FB. См. рисунок 19.

    Рисунок 19 – Экземпляры сохраняются внутри статических параметров
    Вы можете вызывать ReusableFB много раз, каждый раз при его вызове многоэкземпляр будет сохранен внутри статического параметра. См. рисунок 20.

    Рисунок 20 – Многократный вызов ReusableFB
    Как вы видите, экземпляр данных FB нижнего уровня будет сохранен внутри экземпляра данных FB верхнего уровня. Это лучше всего подходит для лучшей структуры программы и удобной для чтения логики.
    Заключение
    Создание функциональных блоков внутри вашего кода потребует связывания блока данных с каждым вызовом FB, который вы сделаете в своей логике. Этот блок данных или также называемый экземпляром данных имеет различные параметры в зависимости от типа блока, который вызывает ваш FB.
    Будьте осторожны при выборе типа экземпляра данных, так как некоторые параметры могут не подходить для вашего случая, как мы показали ранее. А иногда это может привести к проблемам в вашей логике, и ваша функция больше не сможет быть повторно использована.
    Использование нескольких экземпляров может помочь лучше организовать структуру вашей программы, поскольку все вызываемые FB будут хранить свои базы данных внутри основного вызывающего FB.

    caixiaofeng
    При программировании ПЛК доступны различные структуры блоков, эти блоки включают функции FC, функциональные блоки FB и блоки данных DB. Эти блоки являются очень удобными инструментами, которые вы можете использовать для лучшего проектирования логики ПЛК и сделать ваш код более читаемым и простым для отслеживания и отладки
    В предыдущих статьях мы обсуждали FC и FB. В этой статье мы обсудим блоки данных DB, а именно глобальный блок данных.
    Содержание:
    Что такое блок данных DB? Типы блоков данных. Что такое глобальный блок данных? Создание глобального блока данных? Работа с глобальными блоками данных. Пример моделирования. Что такое блок данных?
    Блок данных DB — это область памяти, которая используется для сохранения значений параметров, которые записываются во время выполнения программы ПЛК.
    В отличие от блока кода, блок данных DB содержит только объявления переменных. Он не имеет сетей или инструкций, как FC или FB. Структура DB определяется тем, сколько переменных вы объявили внутри блока данных.
    Типы блоков данных в ПЛК
    Существует два типа блоков данных:
    Глобальные блоки данных Экземплярные блоки данных Блоки данных ARRAY Глобальные блоки данных
    Как следует из названия, глобальный блок данных глобально объявлен для всей логики ПЛК. Он не назначен определенному кодовому блоку. Вы можете получить доступ к значениям глобального блока данных из любого кодового блока в любом месте вашей логики ПЛК. Глобальный блок данных содержит только статические теги.
    Структуру глобального блока данных можно свободно определить. В таблице объявлений для блоков данных вы объявляете элементы данных, которые должны содержаться в глобальном блоке данных.
    Блоки данных экземпляра
    Экземплярный блок данных назначается непосредственно функциональному блоку FB, независимо от того, определен ли этот функциональный блок внутренне в ПЛК, например, таймеры и счетчики, или пользовательские функциональные блоки FB.
    Структура блока данных экземпляра не может быть свободно определена, а вместо этого определяется интерфейсом функционального блока. Блок данных экземпляра содержит именно те параметры блока и теги, которые объявлены в интерфейсе функционального блока.
    Однако вы можете определить значения, специфичные для экземпляра, в блоке данных экземпляра; например, начальные значения для объявленных тегов.
    Блоки данных ARRAY
    Доступные только для ЦП S7-1500, блоки данных ARRAY являются глобальными блоками данных, которые состоят из ARRAY. Этот ARRAY может быть основан на любом типе данных.
    Например, возможен ARRAY типа данных ПЛК (UDT). DB не содержит других элементов, кроме ARRAY. Благодаря своей плоской структуре блоки данных ARRAY облегчают доступ к элементам ARRAY и их передачу в вызываемые блоки.
    Раздел «Операции перемещения» карты задач «Инструкции» предлагает варианты адресации баз данных ARRAY.
    В этой статье мы рассмотрим глобальный блок данных, а два других типа обсудим в отдельных статьях.
    Что такое глобальный блок данных?
    Блоки данных используются для хранения данных программы ПЛК. Это означает, что они содержат переменные данные, которые используются пользовательской программой. Глобальные блоки данных хранят данные, которые могут использоваться всеми другими блоками.
    Максимальный размер блоков данных зависит от ЦП. Вы можете определить структуру глобальных блоков данных любым удобным для вас способом.
    У вас также есть возможность использовать типы данных ПЛК (UDT) в качестве шаблона для создания глобальных блоков данных.
    Каждый функциональный блок FB, функция FC или организационный блок OB может считывать данные из глобального блока данных или может сам записывать данные в глобальный блок данных. Эти данные остаются в блоке данных даже после выхода из блока данных. См. рисунок 1.

    Рисунок 1 – Доступ к глобальному блоку данных
    Как вы можете видеть на предыдущем рисунке, к глобальному блоку данных можно получить доступ из любого блока кода внутри программы ПЛК, тогда как к экземпляру блока данных можно получить доступ только из связанного функционального блока.
    Создание глобального блока данных
    Вы создаете глобальный блок данных так же, как создаете функцию FC или функциональный блок FB. Из добавьте новый блок в дерево проекта. См. рисунок 2.

    Рисунок 2 – Создание глобального блока данных
    Давайте объявим несколько переменных внутри глобального блока данных.
    Это можно сделать, нажав на кнопку добавить новый в разделе имени, написав нужное имя переменной, а затем выбрав тип данных переменной. См. рисунок 3.

    Рисунок 3 – Объявление переменных в глобальном блоке данных
    Работа с глобальным блоком данных
    Объявление тега. Мы уже показали, как объявить тег/переменную на рисунке 3.
    Определение начального значения Начальное значение тега – это значение, определенное вами, которое тег принимает после запуска ЦП. Значение должно соответствовать типу данных тега и не должно выходить за пределы диапазона типа данных. См. рисунок 4.
    Тег принимает определенное значение при запуске, при условии, что он не был объявлен как сохраняемый.

    Рисунок 4 – Определение начального значения ваших тегов
    Итак, если я устанавливаю начальное значение Tank1Level на любое значение, отличное от нуля, это значение будет применено при следующем перезапуске ПЛК. См. рисунок 5.

    Рисунок 5 — Определение начального значения для ваших переменных
    Сохранение переменных в глобальных блоках данных Чтобы предотвратить потерю данных в случае сбоя питания, вы можете пометить данные как сохраняемые. Эти данные хранятся в сохраняемой области памяти.
    Параметры настройки сохранения зависят от типа блока данных и типа установленного доступа к блоку. См. рисунок 6.

    Рисунок 6 —. Параметр сохранения в глобальных блоках данных
    Как вы видите на рисунке 6, переменная Tank2Level установлена как сохраняемое значение, что означает, что даже если ПЛК остановился или произошел сбой питания, в Tank2Level будут сохранены те же данные, когда ПЛК снова включится. Он не будет сброшен до начального значения.
    Доступность для/из ЧМИ В глобальном блоке данных вы можете определить, может ли переменная быть видимой из таблиц тегов ЧМИ или нет. Вы также можете определить, может ли эта переменная быть прочитана или записана из ЧМИ. См. рисунок 7.

    Рисунок 7 — Доступность из ЧМИ
    Настройка по умолчанию для любой объявленной переменной в глобальном блоке данных заключается в том, что она может быть доступна, прочитана и записана из ЧМИ. Если вы хотите отключить эту функцию для определенной переменной, вам нужно снять флажок с опции доступности для этой переменной.
    Пример моделирования
    До сих пор мы создали глобальный блок данных и объявили некоторые переменные внутри.
    Теперь мы попробуем запустить моделирование программы и посмотреть, сможем ли мы лучше понять, что такое глобальный блок данных.
    Ниже приведены два моделирования ПЛК.
    Тестирование начальных значений переменной
    Проверьте следующую анимацию, объясняющую начальное значение переменной внутри глобального блока данных.

    Анимация 1
    Объяснение анимации 1:
    Начальные значения параметров уровня резервуара равны нулю, вы можете видеть на видео, как они изменяются на экране моделирования. Когда ПЛК перезапускается, выключается и снова включается, вы видите, что значения будут сброшены до начальных значений, которые равны нулю. После этого начальные значения были изменены на 500, 32654 и -356 соответственно, а когда ПЛК перезапускается, значения были изменены на новые начальные значения. Обратите внимание, что когда мы изменили начальные значения, нам пришлось снова загрузить нашу логику в ПЛК; вам нужно делать это каждый раз, когда вы вносите изменения в свою логику. Тестирование опции сохранения переменных в глобальной базе данных
    Проверьте следующую анимацию, объясняющую опцию сохранения переменной внутри глобального блока данных.

    Анимация 2
    Объяснение анимации 2:
    Во-первых, вы заметите, что свойство Retain Tank2Level теперь активно. На видео вы видите, как изменяются значения 3 резервуаров. Когда ПЛК останавливается, а затем снова запускается, Tank1Level и Tank3Level сбрасываются до начального значения, которое равно 0, но Tank2Level сохраняет свое значение -22938 Вывод
    Глобальный блок данных может быть доступен из любого места и любым блоком, который существует в программе ПЛК. Вы можете объявить столько переменных, сколько захотите, внутри глобальной базы данных.
    Наиболее оптимальным методом является создание отдельных блоков данных для различных разделов вашей логики, чтобы было очень легко следовать вашей логике. Например, отдельный блок данных для всех переменных, которые необходимо прочитать или записать с помощью ЧМИ.

    caixiaofeng
    В предыдущей статье мы говорили о блоках данных и обсудили два различных типа блоков данных: глобальный блок данных и экземпляры данных функциональных блоков FB.
    В этой статье мы обсудим, что подразумевается под оптимизированным доступом к блоку данных и стандартным доступом к блоку данных в Siemens Tia Portal.
    Содержание:
    Что такое оптимизированные и стандартные блоки данных? Простой пример программы. Что такое стандартные базы данных? Что такое смещение? Что такое оптимизированные базы данных? Преимущества использования оптимизированных баз данных. Выводы. Что такое оптимизированный и стандартный доступ к блоку данных?
    Во-первых, это не новые типы блоков данных; мы сказали, что у нас есть только два различных типа: глобальный блок данных и экземплярный блок данных. Оптимизированный доступ к блоку данных — это функция для блока данных. Вы можете активировать или отключить эту функцию в свойствах созданного вами блока данных.
    Функция оптимизированного блока данных доступна только для ПЛК S7-1200 и S7-1500, но не для s7-300 или s7-400
    Стандартная настройка для блоков данных при работе с ПЛК S7-1200 или S7-1500 заключается в том, что они оптимизированы, если вам нужен стандартный блок данных, вам придется настроить это самостоятельно.
    Итак, что такое оптимизированные и стандартные блоки? Чтобы понять разницу, мы создадим простую программу и попытаемся показать, чем оптимизированный блок отличается от стандартного блока.
    Пример простой программы:
    В этом примере мы не будем создавать никакой логики ПЛК или кодировать какие-либо инструкции, мы просто создадим 2 глобальных блока данных, DB1 будет называться OptimizedDB, а DB2 будет называться StandardDB.
    Внутри обоих блоков данных мы объявим 4 переменные типов данных Bool, Int, Real и Word соответственно. См. рисунок 1.

    Рисунок 1 – Создание двух глобальных баз данных
    Первое, что вы заметите, это то, что оба блока данных абсолютно одинаковы, потому что, как мы уже говорили, настройка по умолчанию при создании блока данных заключается в том, что он будет оптимизирован, поэтому нам нужно изменить настройку DB2, чтобы сделать его стандартным блоком, и посмотреть, изменится ли что-то.
    Мы делаем это из свойств этого DB2. Вы получаете доступ к свойствам DB2, щелкнув правой кнопкой мыши по блоку данных и нажав «Свойства». См. рисунок 2.

    Рисунок 2 – Изменение DB2 на стандартный блочный доступ
    После того, как вы отмените выбор оптимизированных атрибутов блочного доступа, которые вы видите на рисунке 2, и нажмете OK, появится предупреждающее сообщение, см. рисунок 3.

    Рисунок 3 – Всплывающее окно изменения блочного доступа
    После того, как вы нажмете OK, ваш DB2 будет преобразован в стандартный блочный доступ. См. рисунок 4. Чтобы увидеть, к чему это привело.

    Рисунок 4 – DB2 теперь является стандартным блоком
    Мы можем напрямую увидеть, что DB1 и DB2 больше не одно и то же. Параметр стандартного блочного доступа, представленный в DB2, имеет дополнительный столбец, называемый смещением.
    Перед каждой переменной в поле смещения написано …, это изменится после компиляции вашей программы.
    Давайте скомпилируем и посмотрим, что произойдет, см. рисунок 5.

    Рисунок 5 — Скомпилируйте свою программу, чтобы перезагрузить смещение
    Теперь смещение заполнено, как вы можете видеть, 0.0, 2.0, 4.0 и 8.0 соответственно.
    Итак, что это за смещение? Что оно значит? Мы вернемся к этому позже, а сейчас давайте создадим еще один блок STANDARD и объявим те же 4 переменные, но на этот раз мы изменим порядок типов данных переменных, см. рисунок 6.

    Рисунок 6 — Создадим еще один стандартный блок DB3
    Вы видите из последнего рисунка, что смещение DB2 и DB3 отличается, почему значения смещения отличаются, когда мы изменили порядок типов данных? Это те же типы данных, но в другом порядке.
    Давайте создадим еще один стандартный DB и объявим те же 4 переменные, но снова в другом порядке. Скомпилируйте код ПЛК и теперь сравните смещение 3 БД. Смотрите рисунок 7.

    Рисунок 7 – Три разных БД с тремя разными смещениями
    Снова произошло то же самое.
    Что такое стандартные БД? Что такое смещение?
    Блоки данных со стандартным доступом имеют фиксированную структуру. Когда вы объявляете переменную внутри стандартного БД, этой переменной будет назначен фиксированный адрес внутри этого БД.
    Адрес этой переменной отображается в столбце «Смещение». Итак, то, что мы видели внутри смещения на предыдущих рисунках, было адресом, назначенным для каждой переменной.
    Поскольку структура стандартных БД фиксирована, вы можете работать только внутри БД с фиксированным объемом памяти, это область 16 бит или 2 байта. Это причина разной адресации одних и тех же переменных, когда мы изменили порядок объявления. Для получения дополнительных объяснений см. рисунок 8.

    Рисунок 8 – Простое представление DB2
    На рисунке 8 показано простое представление стандартного блока данных DB2. Как мы уже говорили, стандартная база данных имеет фиксированные блоки памяти по 16 бит, поэтому, когда мы объявляем Variable_1 как тип данных BOOL, эта Variable будет занимать все 16 бит, хотя ей нужна только 1-битная память. Вот почему вы видите оставшуюся область, отмеченную красным, потому что она не используется, но больше не может использоваться. Так что это потерянная память.
    С Variable_2 тип данных INT требует 16 бит, поэтому он использует 2 целых байта. То же самое с Variable_4, который имеет тип данных WORD.
    С Variable_3 мы заняли 4 байта, потому что он имеет тип данных REAL. Вот почему смещение для DB2 составляет 0.0, 2.0, 4.0 и 8.0 соответственно.
    Та же концепция выполняется для DB3 и DB4. Но поскольку порядок типов данных переменных отличается, представление памяти будет отличаться, и, следовательно, смещение будет отличаться. Смотрите рисунки 9 и 10 для DB3 и DB4. Посмотрите, сможете ли вы понять представление на основе предыдущего объяснения.

    Рисунок 9 – Представление памяти DB3

    Рисунок 10 – Представление памяти DB4
    Итак, когда вы работаете со стандартной DB, вы должны быть осторожны при объявлении переменных, зная, что будет потеря памяти каждый раз, когда вы определяете новую переменную BOOL.
    Если вы объявите новую переменную в конце списка DB, смещение расширится, чтобы включить вашу новую переменную. Но если вы объявите новую переменную между старой или в начале DB, произойдет что-то еще. См. рисунок 11.

    Рисунок 11 – Объявление новой переменной
    Первое, что вы заметите, это то, что ваше смещение теперь потеряно, и вам придется скомпилировать свой код, чтобы заново установить новое смещение. См. рисунок 12.

    Рисунок 12 – Повторно установите смещение, перекомпилировав свой код
    Вы заметили, как теперь изменилась адресация переменных (OFFSET)?
    Например, смещение тега REAL было 2.0, но после того, как мы добавили новую TestVariable, адресация того же тега REAL (OFFSET) теперь равна 4.0, см. рисунок 13.

    Рисунок 13 – Изменение смещения после добавления TestVariable
    Итак, при добавлении новой переменной адресация всех старых переменных была изменена. Это означает, что любая инструкция в вашей программе, которая должна записывать или считывать значение определенной переменной, теперь будет смотреть на назначенный адрес в инструкции, но теперь адрес имеет другие данные, чем ожидалось.
    Проще говоря, вся ваша логика теперь испорчена. Это приведет к большим проблемам. Не говоря уже о том, что теперь у вас есть дополнительная потерянная память после добавления новой переменной. Смотрите рисунок 14.

    Рисунок 14 — Добавление инструкции MOVE
    Давайте добавим инструкцию MOVE для перемещения значения 1 в тег Variable_2. Посмотрите, как адрес вывода MOVE равен %DB2.DBW2.
    Теперь давайте добавим новую переменную типа INT в DB2. См. рисунок 15.

    Рисунок 15 – Добавление новой переменной INT
    При добавлении новой переменной смещение теряется, и ПЛК больше не знает, где находится место назначения OUT1 инструкции MOVE.
    Нам нужно скомпилировать программу, чтобы перезагрузить новое смещение. См. рисунок 16.

    Рисунок 16 – Новый адрес OUT1
    Вы видите, как теперь изменился адрес OUT1? Теперь это %DB2.DBW4 вместо %DB2.DBW2. Это очень большой недостаток использования стандартных блоков данных.
    Что такое оптимизированные базы данных?
    Разница между оптимизированными блоками данных и стандартными блоками данных заключается в том, что переменные внутри оптимизированного блока данных не назначаются фиксированному адресу, а вместо этого переменным дается символическое имя, плюс структура блока данных не фиксируется как у стандартных блоков данных, поэтому нет потери памяти и изменения адресов при объявлении новых тегов. Смотрите рисунок 17.

    Рисунок 17 — Объявление нового тега в оптимизированных блоках
    Таким образом, объявление новых тегов в оптимизированных блоках данных не повлияет на остальные теги, поскольку они определяются символическими именами, а не абсолютной адресацией.
    Оптимизированный блок данных не позволит вам использовать адреса при работе с тегами, определенными внутри него. Смотрите рисунок 18.

    Рисунок 18 — Абсолютная адресация с оптимизированными блоками
    Как вы видите на последнем рисунке, абсолютная адресация не допускается с оптимизированным блоком данных, разрешены только символические имена. См. рисунок 19.

    Рисунок 19 – Использование символических имен с оптимизированными БД
    Преимущества блоков данных с оптимизированным доступом
    Блоки данных с оптимизированным доступом не имеют фиксированной определенной структуры. Элементам данных (тегам) назначается только символическое имя, и фиксированный адрес внутри блока не используется.
    Элементы автоматически сохраняются в доступной области памяти блока, так что в памяти нет пробелов. Это обеспечивает оптимальное использование объема памяти и позволяет избежать потери памяти по сравнению со стандартными БД.
    Это обеспечивает следующие преимущества:
    Вы можете создавать блоки данных с любой структурой, не обращая внимания на физическое расположение отдельных тегов. Быстрый доступ к оптимизированным данным всегда доступен, поскольку хранилище данных оптимизировано и управляется системой. Ошибки доступа, например, при косвенной адресации или из HMI, невозможны. Поскольку теперь есть адреса, а только уникальные символические имена для каждого тега. Вы можете определить отдельные теги как сохраняемые. В стандартных БД вы можете определить только весь блок как сохраняемый. Заключение
    Оптимизированные блоки данных имеют много преимуществ по сравнению со стандартными БД. Использование символических имен помогает избежать любых изменений адресов тегов при добавлении новых переменных в ваш блок.
    С оптимизированными блоками не теряется ни одна область памяти. В отличие от того, что происходит при использовании стандартных БД.

    caixiaofeng
    В предыдущих статьях мы говорили о таймерах в ПЛК, различных типах и о том, как их использовать. Таймерам на самом деле не нужно реальное время для работы, так как они просто зависят от подсчета секунд или миллисекунд в зависимости от ваших настроек.
    Но для некоторых приложений вам нужно знать реальную дату и время программы ПЛК, например, для целей диагностики.
    В этой статье мы поговорим о системном и локальном времени ПЛК.
    Содержание:
    Зачем мне нужно реальное время в ПЛК? Пример программы и моделирования Что такое системное время? Что такое локальное время? Выводы. Зачем мне нужно реальное время в ПЛК?
    Во многих приложениях ПЛК вам нужно знать реальное время во время выполнения процесса по многим разным причинам.
    Ниже приведены некоторые из этих причин:
    Резервное копирование ПЛК на главный сервер. Для диагностики ПЛК вам необходимо иметь запись времени для диагностики, чтобы знать, в какое время произошло определенное событие, в противном случае диагностическая информация будет не очень полезной. Для приложений, где вам необходимо работать с прерываниями времени суток OB10, вам необходимо знать фактическое время. Вам может потребоваться использовать локальное или системное время в тех частях вашей логики, где вам необходимо обрабатывать приложения реального времени. Для регистрации данных, если у вас есть важные данные для сохранения и вам нужна метка времени для каждой записи данных, вам необходимо иметь правильную настройку времени для вашего ПЛК, чтобы сохраненные данные имели смысл. Пример программы и моделирования ПЛК
    Чтобы лучше понять, что такое системное и локальное время в ПЛК, мы начнем с создания очень простой программы и используем ее для объяснения концепции реального времени внутри ПЛК.
    Проверьте следующий шаг:
    В этой статье мы не будем создавать никакой логики ПЛК, но покажем некоторые конфигурации, связанные с системным и локальным временем в ПЛК, как их устанавливать и в чем различия.
    Откройте Siemens Tia Portal, добавьте новое устройство, и на этот раз мы будем использовать CPU 1512C-1 PN. Смотрите рисунок 1.

    Рисунок 1 — Добавить новый ПЛК
    Скомпилируйте и запустите новую симуляцию ПЛК. Откройте страницу онлайн и диагностики и проверьте установленное время ПЛК. Смотрите рисунок 2.

    Рисунок 2 — Онлайн время ПЛК
    Из предыдущего рисунка вы можете видеть, что есть два разных времени:
    Время PG/PC — это локальное время вашего ПК. Время модуля — это фактическое время внутри самого ПЛК. Оба эти времени могут быть установлены как одно и то же значение, или они могут быть разными. лучше всего сделать их одинаковыми, лучше сделать модульное время похожим на ваше местное время или, точнее, похожим на местное время области, где будет использоваться ПЛК. Смотрите рисунок 3.

    Рисунок 3 — Установка времени ПЛК
    Если вы хотите, чтобы модульное время совпадало с местным временем, выберите Take from PG/PC и нажмите Apply.
    В вашем основном OB1 перетащите инструкции RD_SYS_T и RD_LOC_T.
    Это инструкции чтения системного времени и чтения локального времени. Эти инструкции являются встроенными функциями FC внутри ПЛК и используются для записи локального времени и системного времени ПЛК в любое место назначения, которое вы выберете в выводе OUT инструкции. Смотрите рисунок 4.

    Рисунок 4 — Добавление инструкций чтения системного и локального времени
    Добавьте новый глобальный блок данных и определите несколько тегов для работы. См. рисунок 5.

    Рисунок 5 – Создание нового глобального блока данных
    Запустите моделирование еще раз и проверьте оба времени. См. рисунок 6

    Рисунок 6 – Локальное и системное время ПЛК в режиме онлайн
    Из предыдущего рисунка видно, что локальное и системное время ПЛК совпадают, но они отличаются от фактического локального времени вашего ПК.
    Если вы помните, мы установили модульное время ПЛК таким образом, чтобы оно было похоже на время PG/PC, которое является вашим локальным временем. См. рисунок 7.

    Рисунок 7 – Модульное время и время PG/PC
    Как вы видите, на странице установки времени выбрано время модуля, которое будет взято из времени PG/PC. Но в реальных случаях они отличаются. Почему?
    Почему время отличается? Поскольку настройка по умолчанию местного времени ПЛК — UTC+0 или время Зулу, если вам знаком этот термин, вы не меняете его на странице онлайн-диагностики, а скорее в свойствах самого ПЛК. Смотрите рисунок 8.

    Рисунок 8 — Конфигурация времени суток в ПЛК
    Как вы можете видеть, настройка по умолчанию времени суток ПЛК установлена на время UTC+0, и именно поэтому время модуля ПЛК отличалось от вашего фактического местного времени. За исключением случая, если бы вы были в Лондоне, тогда вы бы не столкнулись с этой проблемой.
    Чтобы исправить локальное время ПЛК, нам нужно изменить его в конфигурации, нам нужно изменить часовой пояс на тот часовой пояс, который у нас есть, который в моем случае UTC+02:00. Смотрите рисунок 9.

    Рисунок 9 — Настройка локального времени ПЛК на ваш часовой пояс
    Вы также можете видеть, что опция летнего времени была деактивирована, поскольку она не используется в моей стране. Вам придется активировать ее, если она используется в вашем регионе.
    Теперь, когда все конфигурации установлены правильно, вернитесь и снова посмотрите местное время и системное время в симуляции. Смотрите рисунок 10.

    Рисунок 10 – Местное время ПЛК теперь такое же, как на ПК
    Теперь вы видите, что после настройки часового пояса ПЛК местное время ПЛК и фактическое местное время вашего региона совпадают.
    Как мы уже говорили, очень важно установить правильное местное время ПЛК по многим причинам, которые мы упомянули выше. Теперь вы можете определить, что такое системное время и локальное время ПЛК?
    Системное время в ПЛК
    Является ли модульным временем часов ЦП.
    Часы ЦП интерпретируют модульное время как всемирное координированное время (UTC). Соответственно, модульное время всегда хранится без факторов «местный часовой пояс» или «летнее время» в часах ЦП. Затем часы ЦП вычисляют локальное время часов ЦП на основе модульного времени.
    Модульное время часов ЦП используется в качестве шаблона для всех временных процессов, начинающихся с ЦП.
    Примеры использования:
    Вычисление локального времени часов ЦП на основе модульного времени Представление модульного времени в локальном времени в разделе «Онлайн и диагностика» Записи в диагностическом буфере ЦП Местное время в ПЛК
    Информация о часовом поясе и начале летнего и стандартного времени, которую вы установили в конфигурации часов ЦП, используется для вывода локального времени.
    Местное время — это время, которое у вас установлено на ПК или в вашей стране, и которое будет отличаться в разных регионах.
    Заключение
    Многие приложения потребуют, чтобы ПЛК знал реальное или локальное время процесса, чтобы он мог выполнять определенные задачи, например, задачи регистрации данных и диагностики. В будущей статье мы покажем некоторые приложения, где для вашей логики необходимо реальное время
    Локальное время ПЛК следует настроить вручную, чтобы оно соответствовало области, где будет использоваться ПЛК.

    caixiaofeng
    В предыдущих статьях мы обсуждали различные типы блоков в SIEMENS TIA Portal, мы говорили о функциональных блоках FB, функциях FC и блоках данных DB.
    В этой статье мы рассмотрим другой тип блока в ПЛК SIEMENS, это организационные блоки, и в этой статье мы обсудим самый важный организационный блок из всех, который является основным организационным блоком или OB1.
    Содержание:
    Что такое организационные блоки? Различные типы OB. Что такое OB1? Мониторинг времени цикла. Простой пример программы. Заключение. Что такое организационный блок (OB)?
    Организационные блоки, вы можете думать о них как о функциях FC или функциональных блоках FB. Но разница в том, что вы не вызываете их, операционная система ПЛК вызывает эти организационные блоки, независимо от того, вызывает ли операционная система OB циклически как OB1 или он вызывается при возникновении определенного события, в любом случае операционная система позаботится об этом. Вам нужно только создать блок и добавить любую логику, которую вы хотите, внутри блока. Иногда вам даже не нужно добавлять какой-либо код внутри OB, простое создание самого OB может дать много преимуществ, которые мы увидим при обсуждении некоторых из этих OB.
    Организационные блоки являются интерфейсом между операционной системой ПЛК и пользовательской программой. Любой ПЛК будет иметь две разные программы: исполняемую программу, которая является операционной системой ПЛК, и пользовательскую программу, которая является логикой или кодом, который программист ПЛК напишет для управления определенным процессом. Эти два разных программного обеспечения должны общаться друг с другом, и организационные блоки OB — это то, как это делается.
    Организационные блоки OB используются для выполнения множества задач, некоторые из которых перечислены ниже:
    Характеристики запуска системы автоматизации Циклическая обработка программ Выполнение программ, управляемых прерываниями Обработка ошибок. Различные типы организационных блоков
    Поскольку организационные блоки в основном являются инструментами операционной системы для выполнения множества задач.
    Различные задачи требуют разных OB, и именно поэтому у вас есть много разных OB внутри ПЛК, количество разных OB будет зависеть от типа используемого вами ПЛК, но вот некоторые из наиболее распространенных OB, которые вы можете найти почти во всех ПЛК SIEMENS:
    Главный циклический OB1. OB прерываний по времени. OB времени суток. OB ошибок программного обеспечения. OB ошибок оборудования Многие другие организационные блоки доступны для использования с вашей логикой. См. рисунок 1.

    Рисунок 1 – Различные организационные блоки, доступные в TIA Portal
    В этой статье мы обсудим самый важный организационный блок из всех, а именно главный циклический прерыватель OB1.
    Главный циклический прерыватель OB1
    Главный циклический OB1 – это организационный блок, который отвечает за циклическое выполнение вашей логики ПЛК. Всякий раз, когда вы создаете новый проект и добавляете ПЛК, главный OB1 будет автоматически создан программным обеспечением. Это минимально необходимые блоки для кода ПЛК. См. рисунок 2.

    Рисунок 2 – главный OB1 создается автоматически
    Внутри главного OB1 вы можете либо написать всю свою программу ПЛК, если это небольшой проект. Если ваш проект довольно большой, то у вас, вероятно, есть некоторые функции FC функциональных блоков FB, которые вам нужно выполнить. В этом случае вы будете использовать главный OB1 для их вызова.
    Конечно, вам не нужно вызывать каждый FC или FB с помощью OB1, но если ваш OB1 не является первым блоком ваших вложенных вызовов, то он не будет выполнен. Смотрите рисунок 3.

    Рисунок 3 — Вызов ваших блоков с помощью OB1
    Основой вашего кода ПЛК является циклическое поведение, то есть вам нужно, чтобы ваш код выполнялся непрерывно. Когда обработка вашей логики завершена, операционная система начинает обрабатывать ее снова. Это делается с помощью главного OB1, вы помещаете и вызываете всю вашу логику и код внутри этого OB1, и операционная система будет обеспечивать его непрерывное выполнение.
    Вы должны знать, что даже если вы не можете создать блок OB1, поскольку он автоматически создается при добавлении нового ПЛК, вы можете создать более одного блока циклических прерываний.
    OB1 — это циклическое прерывание, которое операционная система будет автоматически и непрерывно вызывать и выполнять любую логику внутри. Однако для больших проектов ПЛК, где в логике ПЛК так много функций и функциональных блоков, вы можете использовать более одного OB циклического прерывания, чтобы лучше структурировать свой код и сделать его более удобным для чтения и понимания.
    В этом случае вы создадите еще одно циклическое прерывание, см. рисунок 4.

    Рисунок 4 — Создание более одного циклического OB
    Когда вы создали несколько OB программного цикла, они вызываются один за другим в порядке их номеров OB.
    OB программного цикла с наименьшим номером OB вызывается первым. См. рисунок 5.

    Рисунок 5 — Программный цикл с более чем одним циклическим OB
    После завершения циклической программы операционная система обновляет образы процессов следующим образом:
    Он записывает значения из выходного образа процесса в выходные модули. Он считывает входные данные из входных модулей и передает их на входной образ процесса. Предыдущие два шага плюс выполнение программы ПЛК называются циклом сканирования. См. рисунок 6.

    Рисунок 6 – Цикл сканирования ПЛК Siemens
    Мониторинг времени цикла
    Время цикла относится к времени выполнения циклической программы, включая время выполнения всех вложенных частей программы, таких как FC, FB и OB с более высоким приоритетом. Если вы создали несколько OB программного цикла, каждый OB программного цикла вносит свой вклад во время цикла.
    Операционная система отслеживает, остается ли время цикла меньше настроенного максимального времени цикла. Если оно превышает максимальное время цикла, ПЛК либо перейдет в режим STOP, либо вызовет OB80 в зависимости от вашего программирования.
    Помимо мониторинга максимального времени цикла, также можно гарантировать минимальное время цикла. Для этого операционная система откладывает начало нового цикла до тех пор, пока не будет достигнуто минимальное время цикла.
    Вы можете настроить минимальное и максимальное время цикла в свойствах конфигурации вашего ПЛК. Смотрите рисунок 7.

    Фото 7 – Настройка минимального и максимального времени цикла
    Простой пример программы в ПЛК

    Фото 8 – Пример программы ПЛК
    Чтобы лучше понять цикл программы ПЛК и выполнение OB1, давайте создадим простую программу. Эта программа будет использовать инструкцию сложения, которая будет накапливать значение 1 в области памяти каждый 1 цикл сканирования. Смотрите следующую симуляцию.

    Как вы видите из анимации, инструкция сложения выполняется очень быстро; это то, насколько быстро выполняется цикл сканирования. Это будет зависеть от мощности вашего ПЛК. Но в основном цикл сканирования находится в диапазоне миллисекунд.
    Заключение
    Организационные блоки — это интерфейс между операционной системой ПЛК и вашей программой управления. Основной циклический OB1 циклически выполняется операционной системой. Вы будете выполнять свою логику, включив ее в один или несколько циклических OB. Время цикла сканирования — это время, используемое для выполнения вашей логики 1 раз.

    leigehong
    В предыдущей статье мы обсуждали, что такое организационный блок, и говорили об одном очень важном организационном блоке, которым является основной OB1.
    В этой статье мы продолжим обсуждение различных OB, и на этот раз мы поговорим об организационных блоках прерывания по времени суток или OB10.
    Содержание:
    Что такое прерывание по времени суток OB10? Как создать и использовать OB10? Простой пример программы. Важные правила для прерываний по времени суток. Выводы. Что такое прерывание по времени суток (OB10)?
    Как следует из названия, прерывание по времени суток — это организационный блок, который прерывает выполнение основного цикла вашей программы ПЛК в определенное время суток. Это время прерывания (дата и время) может быть указано как происходящее один раз в указанное время или периодически через указанные интервалы времени, например, каждую минуту, час, день, неделю и некоторые другие параметры.
    В одной программе может быть несколько прерываний по времени суток, они не обязательно должны иметь одинаковую логику или код, каждое из них может иметь свою собственную функциональность, а также каждое из них может быть настроено отдельно для возникновения в указанное время.
    Как создать и использовать OB10?
    Чтобы создать прерывание по времени суток, выполните те же шаги, которые вы бы сделали, если бы вам нужно было добавить любой новый блок в вашу логику. Смотрите рисунок 1.

    Рисунок 1 — Добавление прерывания по времени суток
    Нажмите опцию Добавить новый блок в дереве проекта слева, выберите организационный блок, а затем выберите прерывание по времени суток, как показано на предыдущем рисунке.
    Теперь вы можете открыть OB10 и добавить любую логику ПЛК, которую вы хотите выполнить при вызове этого блока, под вызовом мы подразумеваем, что произошло событие прерывания или время, и поэтому операционная система прервет основной цикл и выполнит OB10.
    Мы напишем очень простой код в OB10, чтобы лучше понять, как работает этот блок OB10. В этой логике мы использовали инструкцию add для добавления значения 1 в область памяти, которую мы назвали TimeOfDayInterruptCounter, а затем поместили результат суммирования обратно в ту же область. Таким образом, у нас может быть счетчик для выполнения OB10.
    Каждый раз, когда OB10 будет вызываться и выполняться, значение TimeOfDayInterruptCounter будет увеличиваться на 1. Смотрите рисунок 2.

    Рисунок 2 — Добавьте свою логику в OB10
    Теперь, когда мы создали OB10 и написали некоторую логику внутри, нам нужно настроить установленное время OB10 и то, сколько раз мы хотим, чтобы он прерывал наш основной цикл.
    Чтобы настроить время и интервал OB10, нам нужно перейти на страницу свойств OB10. См. рисунок 3.

    Фото 3 – Свойства OB10
    В свойствах OB10 вы найдете множество настроек и атрибутов, которые можно настроить.
    Теперь нам нужна страница прерывания по времени суток, чтобы мы могли настроить, когда и сколько раз будет вызываться OB10. См. рисунок 4.

    Фото 4 – Настройка прерывания по времени суток
    Как видно из последнего рисунка, вы можете установить выполнение OB10, дату начала и время суток, в которое должен выполняться OB10.
    Для симуляции мы сделали интервал выполнения равным каждой минуте, чтобы каждую минуту OB10 вызывался и выполнялся. Это означает, что начиная с даты 23.03.2023 и времени 09:25 утра значение TimeOfDayInterruptCounter будет увеличиваться на 1 каждую минуту.
    У вас есть возможность установить время в соответствии с системным временем ПЛК или местным временем, как вы видите на последней картинке. В предыдущей статье мы говорили о системном и местном времени ПЛК, о том, что означает каждое время, и о том, как их настроить и использовать.
    Как мы уже говорили ранее, местное время — это время, которое вы видите сейчас на своем ПК. Таким образом, это фактическое время региона, в котором будет использоваться ПЛК.
    Вам необходимо настроить местное время для ПЛК в зависимости от того, где он будет использоваться. См. картинку 5.

    Рисунок 5 — Установка местного времени для ПЛК
    Простой пример программы ПЛК
    Мы добавили прерывание по времени суток OB10 в нашу программу ПЛК и настроили его так, чтобы оно выполнялось каждую минуту. Мы также настроили локальное время ПЛК.
    Мы создали простую логику инструкции ADD для накопления значения TimeOfDayInterruptCounter на 1 каждый раз, когда выполняется OB10.
    Мы добавим еще одну инструкцию, но в основном OB1 эта инструкция — RD_LOC_T или чтение локального времени, поэтому мы можем видеть, как изменяется локальное время, и сравнивать его с выполнением OB10. Смотрите рисунок 6.

    Фото 6 — Простой пример программы
    Скомпилируйте программу ПЛК и запустите новую симуляцию.
    Обратите внимание, что мы установим время возникновения прерывания дня, чтобы OB10 можно было вызвать и выполнить, пока мы симуляцию логики ПЛК. Смотрите следующую симуляцию.

    Как вы видите из анимации, значение TimeOfDayInterruptCounter в начале равно нулю, а затем оно будет увеличиваться на 1 каждую минуту, начиная с 09:25 утра, указывая, что OB10 выполняется каждую минуту.
    Важные правила для прерываний по времени суток
    Если вы устанавливаете прерывание по времени таким образом, что соответствующий OB должен быть обработан один раз, время начала не должно быть в прошлом (относительно часов реального времени ЦП). Если вы устанавливаете прерывание по времени таким образом, что соответствующий OB должен быть обработан периодически, но время начала находится в прошлом, то OB прерывания по времени обрабатывается в следующий раз, когда он должен быть выполнен в соответствии с текущим временем. Дата периодических прерываний по времени должна соответствовать реальной дате. Например, ежемесячное повторение OB прерывания по времени с датой начала 1/31 невозможно. В этом случае OB запускается только в месяцы, в которых 31 день. Временное прерывание, активированное во время запуска, не выполняется до тех пор, пока запуск не будет завершен. Запуск удаляет все временные прерывания, которые были установлены и активированы инструкцией в пользовательской программе. Заключение
    OB10 — это организационный блок, который можно настроить для прерывания цикла вашей программы в определенный день и время. Это прерывание может происходить либо один раз, либо периодически через определенное количество времени.
    Нет конкретной причины, по которой вам может понадобиться OB10, поскольку это зависит от вашего процесса и вашей логики. И да, вы можете достичь той же функциональности, используя свой личный код, но это доступная и простая в использовании встроенная функция. И вы знаете, как ею пользоваться.

    leigehong
    В предыдущих статьях мы обсуждали, что такое организационный блок, и говорили о главном циклическом прерывании OB1 и прерывании по времени суток OB10.
    В этой статье мы продолжим обсуждение различных OB, и на этот раз мы поговорим об организационном блоке прерывания с задержкой или OB20.
    Содержание:
    Что такое OB20? Как вызвать OB20? Параметры инструкции SRT_DINT. Пример программы. Заключение. Что такое прерывание с задержкой (OB20)?
    OB20 — это организационный блок, который вызывается и выполняется операционной системой, но мы должны сообщить операционной системе, когда вызывать этот OB20.
    Операционная система получает информацию из пользовательской программы ПЛК для вызова этого OB20, она будет ждать настроенного времени задержки, а затем вызовет и выполнит любую логику внутри OB20.
    Мы создаем блок OB20 из Add a new block в дереве проекта. См. рисунок 1.

    Рисунок 1 – Создание нового блока OB20
    Теперь, когда я создал прерывание с задержкой, когда оно будет выполнено? И как настроить задержку выполнения блока?
    Опять же, OB20 является организационным блоком, что означает, что вы не вызываете блок для выполнения, но сообщаете операционной системе, когда она может вызвать его и выполнить любую функциональность, написанную внутри.
    Как сообщить операционной системе вызвать OB20?
    Чтобы сообщить операционной системе, что мы хотим вызвать OB20, мы используем SRT_DINT или прерывание задержки запуска, см. рисунок 2.

    Рисунок 2 – Инструкция задержки запуска
    Параметры инструкции SRT_DINT
    Как видно из последнего рисунка, вы можете использовать инструкцию SRT_DINT для вызова OB20. но вам нужно настроить некоторые параметры, чтобы инструкция работала.
    EN: инструкция не будет выполнена, пока на входе EN не будет представлен отрицательный фронт сигнала. Это означает, что вам нужно назначить условие из набора условий для включения сигнала, и инструкция будет работать только тогда, когда это условие истинно, а затем снова ложно.
    OB_NR: вы назначаете номер прерывания задержки, которое вам нужно вызвать, в нашем случае 20, поскольку мы создали OB20, но мы можем создать более одного прерывания задержки, и тогда нам придется вызывать каждое из них с помощью отдельной инструкции SRT_DINT.
    DTIME: это время задержки, которое вы хотите выждать перед выполнением OB20, мы установим это время на 5 секунд для симуляции.
    SIGN: Идентификатор, который появляется, когда прерывание с задержкой по времени OB вызывается в информации о событии запуска OB.
    Пример программы ПЛК
    Чтобы лучше понять OB20, мы создадим простую логику, чтобы увидеть, как OB20 может быть вызван и выполнен. Мы построим этот пример ПЛК на предыдущей логике, которую мы сделали для OB1 и OB10 в предыдущих статьях.
    Внутри OB20 мы создадим логику, которая подсчитывает, сколько циклов OB1 было вызвано и выполнено в течение 5 секунд задержки, которую мы настроили для OB20. См. рисунок 3.

    Рисунок 3 – Логика внутри OB20
    На последнем рисунке вы видите, что мы использовали инструкцию MOVE для передачи информации о количестве циклов в начале вызова OB20 и после его выполнения.
    См. рисунок 4 для остальной части логики.

    Рисунок 4 – Рассчитайте, сколько циклов выполняется за 5 секунд
    После этого мы вычтем два значения количества циклов, чтобы получить, сколько циклов было выполнено за пятисекундную задержку.
    Теперь, когда мы создали нужную нам логику, как мы можем вызвать OB20? Как объяснялось ранее, мы должны использовать инструкцию SRT_DINT. Мы будем использовать эту инструкцию внутри OB10, который мы настроили ранее для выполнения каждую минуту. Это означает, что OB20 также будет вызываться и выполняться каждую минуту, но с задержкой в 5 секунд.
    В предыдущей статье мы построили логику, которая определяет, сколько раз вызывается и выполняется OB1, мы также построили другую логику, которая будет вызывать OB10 каждую минуту.
    В этом примере мы будем использовать вызов OB10 для вызова OB20. Смотрите рисунок 5.

    Рисунок 5 – Вызов OB20 через OB10
    Ранее мы говорили, что SRT_DINT нужен отрицательный фронт сигнала на EN для начала вызова. Вот почему мы использовали сигнал TimeOfDayInterruptEnabled, который, как мы знаем, будет истинным при выполнении OB10, а затем вернется к ложному, давая нам нужный нам фронт сигнала.
    Теперь, когда вся логика ПЛК завершена, давайте скомпилируем и запустим новую симуляцию. Смотрите следующую симуляцию нашего проекта.

    Видите ли, в анимации сначала значения счетчиков циклов равны нулю, но когда вызывается OB10 и TimeOfDayInterruptEnabled имеет значение true, логика будет ждать 5 секунд, а затем значения счетчиков будут обновлены счетчиками циклов.
    Вывод
    OB20 — это организационный блок, вызываемый и выполняемый операционной системой. Мы можем указать операционной системе вызвать OB20 с помощью инструкции SRT_DINT.

    leigehong
    В предыдущих статьях мы обсуждали различные типы организационных блоков, например, основной OB1, который является основным циклическим блоком программы, в этой статье мы рассмотрим другой циклический организационный блок. OB30 или циклическое прерывание OB.
    Содержание:
    Что такое циклическое прерывание OB30? Что такое основной цикл OB1? Зачем мне нужен OB30? Как настроить циклические прерывания? Что делать, если у меня есть более одного циклического прерывания? Заключение. Что такое циклическое прерывание OB30?
    Циклическое прерывание OB30 — это организационный блок, который вызывается и выполняется через заданные и точные интервалы времени, в отличие от основного циклического OB1, который постоянно вызывается и выполняется, циклическое прерывание будет вызываться через интервалы времени, которые вы должны настроить при создании циклического прерывания OB.
    Например, если я создал OB30 с временным интервалом _также называемым временем цикла_ в 20 мс, это означает, что операционная система будет прерывать основной цикл OB1 и вызывать OB30 каждые 20 мс.
    Вы должны убедиться, что время выполнения циклического прерывания OB должно быть меньше его временного интервала. В противном случае все равно может случиться, что следующий вызов OB30 поступит, пока этот вызов OB30 все еще выполняется. В этом случае операционная система генерирует ошибку времени, которая может привести к переходу ПЛК в режим STOP.
    Что такое основной цикл OB1?
    Основной циклический OB1 — это организационный блок, который отвечает за циклическое выполнение вашей логики ПЛК. Всякий раз, когда вы создаете новый проект и добавляете ПЛК, основной OB1 будет автоматически создан программным обеспечением.
    Основой вашего кода ПЛК является циклическое поведение, то есть вам нужно, чтобы ваш код выполнялся непрерывно. Когда обработка вашей логики завершена, операционная система начинает ее обработку снова. Это делается с помощью основного OB1, вы помещаете и вызываете всю свою логику и код внутри этого OB1, и операционная система будет следить за тем, чтобы он непрерывно выполнялся.
    Время цикла основного OB1 относится к времени выполнения циклической программы, включая время выполнения всех вложенных частей программы, таких как FC, FB и OB с более высоким приоритетом. Если вы создали несколько OB цикла программы, каждый OB цикла программы вносит свой вклад во время цикла.
    Операционная система отслеживает, остается ли время цикла меньше настроенного максимального времени цикла. Если оно превышает максимальное время цикла, ПЛК либо перейдет в режим STOP, либо вызовет OB80 в зависимости от вашей программы.
    Зачем мне нужен OB30?
    Кто-то может возразить, что я могу поместить любую функциональность внутрь OB30 в основном OB1 и попытаться обойтись без этого в зависимости от очень высокой производительности большинства современных ПЛК. Иногда это может быть нормально, но не всегда.
    В зависимости от производительности вашего ПЛК, время основного цикла может быть где-то между 1 и 150 мс; оно может быть разным, но это стандартная конфигурация, это время цикла зависит от многих факторов, таких как размер вашей программы ПЛК и прерывания внутри вашей логики и других факторов, которые, скорее всего, сделают время выполнения вашего цикла нестабильным.
    Теперь, если вам нужно выполнять определенную функциональность точно каждые 10 мс, а не 9 мс и не 11 мс. Теперь вы не можете зависеть от основного OB1, так как результат может быть не таким, как хотелось бы. В этом случае вы используете циклическое прерывание OB30, вы настраиваете его на нужные вам 10 мс, и операционная система будет вызывать и выполнять эту функцию точно каждые 10 мс. Вот почему это называется прерыванием; потому что оно прерывает выполнение основного OB1 для вызова и выполнения вашего OB30.
    Примеры функциональности, для которой требуется OB30
    Обработка ПИД-регулятора. Мониторинг цепей безопасности. Мониторинг связи между машинами. Во всех предыдущих примерах необходимо постоянно контролировать и проверять параметры в определенные моменты времени, поскольку они относятся к реальным физическим величинам или безопасности машины. Выполнение таких функций не должно задерживаться, поскольку они влияют на безопасность и непрерывность вашего процесса.
    Как настроить циклические прерывания?
    При создании циклического прерывания необходимо настроить некоторые параметры. См. рисунок 1 для добавления нового OB30.

    Рисунок 1 – Добавление нового циклического прерывания OB30
    При создании циклического прерывания можно найти множество параметров, которые можно задать в свойствах блока, см. рисунок 2.

    Рисунок 2 – Свойства OB30
    Самые важные параметры, которые необходимо учитывать, следующие:
    Время цикла Используйте параметр «Время цикла», чтобы задать период времени между двумя вызовами циклического прерывания OB. Он является целым числом, кратным 1 мкс.
    Смещение фазы Здесь вы устанавливаете период времени, на который смещаются начальные времена по сравнению с кратным времени цикла.
    Смотрите рисунок 3 для настройки времени цикла и смещения фазы.

    Рисунок 3 – Установка времени цикла и смещения OB30
    Приоритет циклического прерывания OB Это еще один важный параметр, который необходимо учитывать при настройке циклического прерывания, поскольку у вас может быть более одного циклического блока, если в случае, если два разных OB должны быть вызваны одновременно, операционная система вызовет и выполнит блок с более высоким номером приоритета.
    Вы должны знать, что основной программный цикл ПЛК OB1 имеет номер приоритета 1, что является самым низким уровнем приоритета, который может иметь блок. Вот почему OB1 может быть прерван любым другим вызовом блока. См. рисунок 4.

    Рисунок 4 — Установка приоритета OB30
    Что делать, если у меня более одного циклического прерывания?
    Нередко в вашей логике будет более одного циклического прерывания. Если в вашей логике ПЛК есть два ПИД-регулятора, то вам может потребоваться два циклических прерывания для обработки каждого ПИД. В этом случае вам нужно убедиться, что вызов и выполнение различных циклических прерываний не будут перекрываться.
    Например, если у вас есть OB30 с интервалом цикла 5 мс и OB31 с интервалом цикла 10 мс, это означает, что второй вызов OB30 также будет временем вызова OB31. Это может привести к логическим ошибкам, даже если вы установите приоритет одного из них выше, чем другого, это испортит ваше время цикла для блока с более низким приоритетом. См. рисунок 5.

    Рисунок 5 – Перекрытие вызова различных циклических прерываний
    В этом случае может быть целесообразным смещение фазы, когда вы используете несколько OB циклических прерываний.
    Если их времена цикла имеют общие кратные, вы можете использовать смещение фазы, чтобы предотвратить одновременное время запуска. См. рисунок 6.

    Рисунок 6 – Смещение между различными вызовами OB
    Таким образом, чтобы избежать этого перекрытия, мы установим время смещения OB31 равным 1 мс.
    Это означает, что подсчет для временного интервала OB31 будет смещен на 1 мс относительно времени начала OB30. См. рисунок 7.

    Рисунок 7 – Настройка смещения OB31
    Заключение
    Циклические прерывания очень полезны для задач, критичных по времени, которые не должны сталкиваться с какими-либо задержками. В вашей логике может быть более одного циклического прерывания. Используйте настройку смещения циклических прерываний, чтобы избежать одновременного времени начала. Используйте настройку приоритета, чтобы контролировать порядок выполнения различных циклических прерываний.

    leigehong
    В предыдущих статьях мы начали обсуждать различные организационные блоки ПЛК TIA Portal, мы говорили о том, что такое OB, и мы обсудили некоторые OB, такие как OB1- Main cyclic, OB10 и OB20, прерывания с задержкой по времени и времени соответственно. В этой статье мы поговорим о OB100 или организационном блоке запуска в Сименс Tia Portal.
    Содержание:
    Что такое OB100? Зачем нужен OB100? Важные замечания во время запуска. Простой пример программы. Что такое организационный блок запуска (OB100)?
    OB100 или OB запуска — это организационный блок, который вызывается и выполняется операционной системой один раз при запуске ПЛК, то есть один раз при каждом переходе из режима STOP в режим RUN.
    Основной цикл OB1 не будет вызываться и выполняться, пока не будут выполнены все функции запуска внутри OB100.
    В вашей логике ПЛК может быть более одного OB запуска, если это произойдет, то операционная система вызовет и выполнит их все один за другим, начиная с меньшего номера OB к большему номеру. То есть, если у вас есть OB100 и OB123, то OB100 будет вызван и выполнен первым, а затем OB123.
    После выполнения OB100 операционная система прочитает входные модули в PII и запустит основную программу цикла OB1.
    Зачем нужен OB100?
    Вы используете OB100 для множества задач, которые вы можете захотеть или должны выполнить перед запуском циклической логики, по следующим причинам:
    Инициализация переменных. Сброс системных модулей. Повторная калибровка датчиков/исполнительных механизмов. Проверка наличия аварийных сигналов и условий безопасности перед запуском процесса. Даже если вы не создали OB запуска для своей логики, у операционной системы все еще есть много задач, которые ей необходимо выполнить перед запуском вашей основной логики, вот некоторые из этих задач:
    Очистка не сохраняемой памяти Очистка PIQ Вызов и выполнение OB запуска, если таковые имеются. Обновление PII Включение выходов после перехода в режим RUN. Вы заметили, что последняя задача процедуры запуска — включение выходов? Вот почему первым шагом выполнения основной циклической программы OB1 является запись PIQ в выходной модуль.
    Важные замечания во время запуска
    Обратите внимание на следующие моменты относительно режима «STARTUP»:
    Выходы на модулях отключены. Инициализируется образ процесса. Образ процесса не обновляется. Чтобы прочитать текущее состояние с входов во время «STARTUP», вы можете получить доступ к входам через прямой доступ ввода-вывода. Чтобы инициализировать выходы во время STARTUP, значения можно записать через образ процесса или через прямой доступ ввода-вывода. Значения выводятся на выходах во время перехода в режим «RUN». Инициализируются несохраняемые битовые памяти, таймеры и счетчики. Инициализируются несохраняемые теги в блоках данных. Во время запуска мониторинг времени цикла еще не запущен. Простой пример программы
    В этом примере мы добавим стартовый OB100 в нашу логику ПЛК и посмотрим, сколько раз выполняется OB100. См. рисунок 1 для добавления нового OB100.

    Рисунок 1 — Добавление OB100
    Как видно из последнего рисунка, вы добавляете стартовые организационные блоки так же, как мы добавляем функцию функционального блока.
    Внутри только что созданного OB100 мы добавим простую инструкцию ADD, чтобы накапливать, сколько раз вызывается и выполняется OB100. См. рисунок 2.

    Рисунок 2 – Накопление времени выполнения OB100
    Теперь скомпилируйте и запустите свою программу и посмотрите, что произойдет. Посмотрите следующую анимацию для моделирования программы ПЛК.

    Анимация 1
    Как вы можете видеть из приведенной выше анимации, OB100CycleCounter равен 1 и не меняется, когда режим ПЛК переходит из режима STOP в режим RUN.
    Ну, он меняется, но вы не видите этого изменения. Каждый раз, когда ПЛК переходит в режим STOP, а затем снова в режим RUN. Счетчик будет сброшен на ноль, а затем снова на 1 после выполнения OB100. Вы также можете увидеть, как изменяется основной счетчик циклов OB1, и ПЛК останавливается, а затем снова запускается, OB1CycleCounter снова начнет накапливать данные.
    Чтобы увидеть изменение в счетчике запуска, нам нужно сохранить значение памяти тега. Смотрите рисунок 3.

    Рисунок 3 – Сохранение памяти тега OB100CycleCounter
    После того, как мы сохранили тег OB100CycleCounter, теперь снова запустите симуляцию ПЛК и посмотрите, что произойдет. Смотрите анимацию симуляции 2.

    Анимация 2
    Теперь вы видите из вышеприведенной анимации, что счетчик запуска увеличивается каждый раз, когда я останавливаю ПЛК, а затем снова запускаю его. Поскольку память тега теперь сохраняется, значение не будет сброшено до нуля, и именно поэтому вы видите, что значение OB100CycleCounter накапливается.
    Теперь мне нужно добавить дополнительную функциональность в мою логику запуска ПЛК, которая заключается в том, чтобы знать, когда был последний запуск ПЛК. Мы достигнем этого с помощью простой логики, где я считываю локальное время ПЛК при запуске и перемещаю дату и время в определенную область памяти. Смотрите рисунок 4.

    Рисунок 4 – Чтение локального времени при запуске
    После добавления логики скомпилируйте и снова запустите симуляцию. Смотрите анимацию симуляции ПЛК 3.

    Анимация 3
    Из анимации выше видно, что каждый раз при запуске ПЛК дата и время запуска будут записаны в назначенную нами область памяти. Так что теперь у меня есть информация о том, сколько раз запускался мой ПЛК и когда был последний запуск.
    Заключение
    OB запуска очень важны, если вы хотите оценить некоторые функции перед запуском вашего циклического процесса. Вы можете использовать OB запуска для инициализации параметров, калибровки датчиков и даже проверки условий безопасности перед запуском вашего процесса.

    leigehong
    В этой статье мы продолжаем обсуждение различных типов организационных блоков в ПЛК Siemens. На этот раз мы рассмотрим OB121 или прерывание ошибок программирования в портале Tia.
    Содержание:
    Что такое прерывание ошибок программирования OB121? Примеры ошибок программирования. Что произойдет, если будет обнаружена ошибка программирования? Моделирование ошибки программирования в TIA Portal. Как OB121 может быть полезен против ошибок программирования? Выводы. Что такое прерывание ошибок программирования (OB121)?
    OB121 — это организационный блок, который будет вызван операционной системой ПЛК, если во время выполнения вашей логики возникнет ошибка программирования. Обратите внимание, что мы не говорим об ошибке программирования, которая будет обнаружена компилятором при попытке загрузить вашу логику в ПЛК. См. рисунок 1.

    Рисунок 1 – Некоторые ошибки программирования будут обнаружены компилятором
    Как вы видите на последнем рисунке, в моей логике ПЛК есть ошибка программирования; некоторые операнды отсутствуют на входе и выходе сети 1. Но эта ошибка была обнаружена компилятором еще до загрузки логики в ПЛК. Ошибка на рисунке 1 не является типом ошибки программирования, которая может вызвать необходимость вызова OB121.
    Ошибки в вашей программе ПЛК, которые не могут быть обнаружены компилятором, но все равно могут вызвать проблемы в вашей логике во время работы ПЛК, — это ошибки программирования, которые мы имеем в виду. Эти ошибки вызовут вызов OB121 операционной системой.
    Примеры ошибок программирования
    Вот несколько примеров ошибок в вашей логике ПЛК, которые могут вызвать ошибки программирования:
    Превышена максимальная глубина вложенности вызовов блоков. Вы использовали указатель NULL для обращения к операнду. Неизвестная инструкция. Адресованная строка имеет неверную информацию о длине. Ошибка длины области при чтении. Ошибка длины области при записи. Ошибка в номере таймера. Доступ к базе данных, которая не загружена; номер базы данных находится в разрешенной области. База данных не существует. Эти и многие другие ошибки могут вызвать ошибки программирования в вашем ПЛК. Вы можете проверить раздел справки на портале TIA, чтобы узнать, какие еще причины могут вызвать ошибки программирования ПЛК.
    Что произойдет, если обнаружена ошибка программирования?
    Когда ваш ПЛК обнаруживает ошибку программирования, может произойти одно из трех событий.
    Ваш ПЛК покажет ошибку и перейдет в режим STOP. Ваш ПЛК покажет ошибку, но продолжит выполнять вашу логику. Ваш ПЛК покажет ошибку, а затем попытается устранить эту ошибку. Эти три события будут в основном зависеть от программирования вашего ПЛК. Это означает, что ваш код будет определять, как будет вести себя операционная система при обнаружении ошибки программирования.
    Моделирование ошибки программирования в TIA Portal
    Чтобы лучше понять, как будет вести себя ПЛК, мы создадим простую программу, в которой вызовем ошибку программирования, а затем посмотрим, что произойдет. Смотрите рисунок 2.

    Рисунок 2 — Простая логика программы
    Созданная нами логика очень проста: при включении InitiateProgError значение 126 будет перемещено в область DB52.DBW16. Обратите внимание, что мы не создали DB52. поэтому это будет наша ошибка программирования. Обратите внимание, что эта ошибка не будет обнаружена во время компиляции или загрузки в ПЛК. Смотрите рисунки 3 и 4.

    Рисунок 3 — Ошибка, не обнаруженная компилятором
    Посмотрите, как блок был успешно скомпилирован, включая ошибку программирования.

    Рисунок 4 – Блок загружен в ПЛК
    И снова, блок был загружен в ПЛК с ошибкой программирования.
    Теперь давайте смоделируем нашу программу ПЛК и посмотрим, что произойдет. См. анимацию 1 для моделирования кода ПЛК.

    Анимация 1
    Как вы видите из анимации выше, светодиод ПЛК ERROR будет мигать красным в течение нескольких секунд, а затем ПЛК перейдет в режим STOP.
    Перейдите к онлайн-диагностике ПЛК, чтобы увидеть, что произошло. См. рисунок 5.

    Рисунок 5 – Онлайн и диагностика ПЛК
    То, что вы видели в анимации, это то же самое, что вы видите на предыдущем рисунке. Их можно разделить на 3 шага:
    ПЛК обнаруживает ошибку программирования, которая заключается в том, что OB52 не загружен. Операционная система инициирует вызов OB121, но в нашей логике OB121 не создан. Когда ПЛК обнаруживает, что в нашей логике не создан OB121, операционная система инициирует запрос STOP. И ПЛК переходит в режим STOP. Как OB121 может быть полезен против ошибок программирования?
    Давайте добавим OB121 в наш код ПЛК и посмотрим, как все изменится. См. рисунок 6.

    Рисунок 6 – Добавление OB121
    После создания и добавления OB121 в нашу логику ПЛК давайте посмотрим, что произойдет в симуляции.
    Помните, что мы не написали никакой логики ПЛК внутри OB121. См. анимацию 2.

    Анимация 2
    Как видно из анимации 2, при возникновении InitiateProgError светодиод ПЛК ERROR будет мигать красным, но ПЛК продолжит работу.
    Это означает, что ПЛК не перейдет в режим STOP. Давайте проверим онлайн-диагностику, чтобы увидеть, что на самом деле произошло. Смотрите рисунок 7.

    Рисунок 7 — Ошибка не привела к остановке ПЛК
    На рисунке видно, что ПЛК обнаруживает ошибку, но не переходит в режим STOP. Он пропустит эту ошибку, продолжит цикл и начнет все сначала с самого начала.
    Когда он снова достигнет ошибки, он снова обнаружит ошибку, выдав сигнал тревоги в диагностике. Пропустите ошибку и продолжите. Это означает, что ПЛК будет выдавать тот же сигнал тревоги в каждом цикле сканирования. И именно поэтому на рисунке вы видите, что событие продолжает срабатывать, а сигнал тревоги повторяется в каждом цикле сканирования.
    Таким образом, просто наличие пустого OB121 даст вам преимущество в поддержании работы ПЛК и расширения y, поддерживая работу вашего процесса.
    Но мы можем сделать больше, мы можем попытаться поймать эту ошибку и устранить ее. Также мы можем попытаться показать тип обнаруженной ошибки программирования.
    Определение типа ошибки
    OB121 имеет внутренний идентификатор идентификатора ошибки, который мы можем использовать для отображения типа ошибки, возможно, как сигнал тревоги на HMI. Внутри OB121 мы создадим простую инструкцию MOVE, в которой мы поместим вход Fault_ID OB121 в определенную область памяти внутри нашей глобальной базы данных. См. рисунок 8.

    Рисунок 8 — Определение типа ошибки
    Как вы видите на предыдущем рисунке, при возникновении ошибки программирования Fault_ID будет помещен в Data.ProgErrorID. См. рисунок 9.

    Рисунок 9 — Ошибка программирования Fault_ID
    Вы можете увидеть, что идентификатор ошибки — 3A. Если вы посмотрите справку TIA Portal, вы можете узнать значение этой ошибки.
    3A: Доступ к незагруженной базе данных; номер DB находится в разрешенной области.
    Перехват ошибки
    Это просто означает попытку решить ошибку программирования ПЛК после того, как вы определили причину. Это будет зависеть в основном от того, что это за ошибка и как вы хотите ее обработать. Мы просто смоделируем решение ошибки, чтобы посмотреть, как будет себя вести ПЛК.
    Фактическое решение для созданной нами ошибки будет заключаться в том, чтобы просто создать DB52 или использовать уже созданный блок данных.
    Но ради симуляции мы просто добавим простой контакт, который будет размыкаться при возникновении ошибки программирования, чтобы перехватить эту ошибку. Смотрите рисунки 10 и 11.

    Рисунок 10 – Перехват ошибки
    Всякий раз, когда вызывается OB121, будет устанавливаться CatchError.

    Рисунок 11 – Устранение ошибки
    Всякий раз, когда вызывается OB121, будет установлен CatchError, и он будет использоваться для перехвата ошибки программирования в Network 1. См. анимацию 3 для моделирования ПЛК.

    Анимация 3
    Из вышеприведенной анимации вы можете видеть, что при запуске InitiateProgError ПЛК на мгновение переходит в состояние ошибки, затем ошибка сбрасывается, и ПЛК все время находится в режиме RUN.
    Заключение
    Простое наличие пустого OB121 в вашей логике гарантирует, что ваш ПЛК не перейдет в режим STOP, если в вашем коде была ошибка программирования. Позже вы можете использовать OB121, чтобы также определить ошибку и устранить ее.

    leigehong
    В этой статье речь идет о системе управления движением на Т-образном перекрестке с помощью логики ПЛК, использующей компаратор для работы светофоров.
    Система управления движением на Т-образном перекрестке
    Функция системы управления движением на Т-образном перекрестке состоит из трех групп сегментов. С помощью логики работы компаратора мы управляем системой светофоров.

    Первый сегмент:
    В первом сегменте движение по полосе 1 разрешено, а полосы 2 и 3 остановлены. Здесь, в этом сегменте, горит зеленый свет (Зеленый 1) полосы 1, и горят красные огни (Красный 2) полосы 2 и (Красный 3) полосы 3. Этот период продолжается пятнадцать секунд.
    Второй сегмент:
    Во втором сегменте движение по полосе 2 разрешено, а полосы 1 и 3 остановлены. Здесь, в этом сегменте, горит зеленый свет (зеленый 2) полосы 2, а также красные огни (красный 1) полосы 1 и (красный 3) полосы 3. Этот период продолжается пятнадцать секунд.
    Третий сегмент:
    В третьем сегменте движение по полосе 3 разрешено, а полосы 1 и 2 остановлены. Здесь, в этом сегменте, горит зеленый свет (зеленый 3) полосы 3, а также красные огни (красный 1) полосы 1 и (красный 2) полосы 2. Этот период продолжается пятнадцать секунд.
    После выполнения всех трех сегментов последовательность операций снова запускается и повторяется непрерывно.
    Описание входов и выходов
    В этом проекте ПЛК мы использовали 2 входа, 6 выходов, 2 памяти и 1 таймер задержки включения.
    С.Нет Символ Описание 1 Я 0.0 НАЧИНАТЬ 2 Я 0.1 ОСТАНАВЛИВАТЬСЯ 3 М 0.0 ПАМЯТЬ 4 М 0,1 ПАМЯТЬ 1 5 В 0.0 ЗЕЛЕНЫЙ 1 6 В 0,1 КРАСНЫЙ 1 7 В 0,2 ЗЕЛЕНЫЙ 2 8 В 0,3     КРАСНЫЙ 2 9 В 0,4     ЗЕЛЕНЫЙ 3 10 В 0,5 КРАСНЫЙ 3 11 DB1 ТАЙМЕР ЗАДЕРЖКИ ВКЛЮЧЕНИЯ Программирование ПЛК и его пояснение
    1. При нажатии кнопки ПУСК (I 0.0) активируется ПАМЯТЬ (M 0.0). Эта M 0.0 является основной памятью, используемой для выполнения всех процессов в программе. Поскольку она защелкнута, она будет находиться только во включенном состоянии. Если нажать кнопку СТОП (I 0.1), весь процесс будет остановлен в любой момент.

    2. После подачи питания на MEMORY он включит TIMER DB1, который управляет синхронизацией дорожной развязки. В этом таймере мы устанавливаем заданное время 45 секунд. Как только таймер достигает заданного времени, он активирует MEMORY 1 (M 0.1), и этот M 0.1 также сбрасывает таймер согласно логике и непрерывно запускает цикл.
    3. Далее компаратор играет важную роль в управлении дорожной развязкой. Во-первых, выход GREEN 1 (Q 0.0) включается согласно логике. Здесь мы использовали компаратор «Меньше или равно». В этой логике Q0.0 будет находиться в состоянии ВКЛ от 0 секунд до 15 секунд. После этого он перейдет в состояние ВЫКЛ
    4. Далее для выхода RED 1 (Q0.1) мы использовали функцию «Больше или равно». Q0.1 будет находиться в состоянии ВКЛ от 15 до 45 секунд. Он будет находиться в состоянии ВЫКЛ, когда Q0.0 находится в состоянии ВКЛ.
    5. Затем для выхода GREEN 2 (Q0.2) мы использовали как «Меньше или равно», так и «Больше или равно» для этого выхода. Обе функции компаратора были подключены последовательной логической связью к выходу. В этом Q0.2 будет находиться в состоянии ВКЛ от 16 до 30 секунд в соответствии с условием.
    6. Далее для выхода RED 2 (Q0.3) мы также использовали как «Меньше или равно», так и «Больше или равно» для выполнения операции. Компараторы были подключены параллельно к выходу. Этот выход будет находиться в состоянии ВКЛ от 0 до 15 секунд и от 30 до 45 секунд. В промежутке между 15 секундами он будет находиться в состоянии ВЫКЛ только потому, что в это время Q0.2 находится в состоянии ВКЛ.
    7. Затем для последнего выхода GREEN 3 (Q0.4) мы использовали функцию «Больше или равно». Согласно условной логике, он будет находиться в состоянии ВКЛ от 30 до 45 секунд. До этого времени он будет находиться в состоянии ВЫКЛ.
    8. Наконец, выход RED 3 (Q0.5). Здесь мы использовали функцию «Меньше или равно» для выполнения логики ПЛК. Он будет находиться в состоянии ВКЛ от 0 до 30 секунд, после чего он будет находиться в состоянии ВЫКЛ.
    Заключение
    Итак, таким образом, заданное управление движением на Т-образном перекрестке выполняется функцией компаратора с логикой ПЛК. Мы можем управлять логикой движения с помощью логики ПЛК многими способами, и это также один из способов.

    leigehong
    Когда вы работаете с ПЛК, вам нужно знать, какие типы напряжений обычно доступны в нем; чтобы вы могли соответствующим образом выполнить подключение. Не только источник питания, но мы также должны быть связаны с требуемым входным и выходным напряжением.
    У каждого производителя ПЛК есть свой собственный набор диапазонов напряжения и тока в зависимости от модуля и ЦП, которые они предоставляют. В этой статье мы изучим рабочие напряжения ПЛК, которые обычно доступны везде.
    Источник питания ПЛК
    В стандарте ПЛК работает при четырех типах напряжений — 24 В постоянного тока, 24 В переменного тока, 110 В переменного тока и 240 В переменного тока. В некоторых ПЛК только ЦП требует источника питания, а модули ввода-вывода получают питание от объединительной платы ЦП, тогда как в некоторых ПЛК все модули, включая ЦП, входы и выходы, требуют источника питания.

    В любом случае вам понадобится ИБП или трансформатор на панели ПЛК для преобразования необработанного напряжения питания. В напряжении питания переменного тока некоторые ПЛК предлагают диапазон напряжений от 110 до 240 В переменного тока.
    Каждая точка питания в ПЛК имеет точку заземления для обеспечения безопасности ПЛК в случае любого скачка напряжения или короткого замыкания. Когда используется питание переменного тока, оно в основном оснащено защитным предохранителем внутри.
    Питание постоянного тока также имеет предохранитель внутри, но для питания переменного тока его обязательно использовать из-за высокого напряжения. Когда номинальное напряжение указано в ЦП, это означает, что напряжение, которое вы предоставляете, было должным образом стабилизировано и в значительной степени контролируется.
    Но нецелесообразно, чтобы напряжение оставалось постоянным на уровне 24 В или 240 В. Таким образом, для ПЛК предусмотрен диапазон номинального напряжения, например, 20–28 В постоянного тока или 220–245 В переменного тока. Этот диапазон предопределен в каждом ПЛК, чтобы вы получили область питания для эффективной работы с ними без каких-либо проблем.
    Питание для модулей ввода-вывода
    Теперь давайте перейдем к нашей следующей теме о питании, необходимом для модулей ввода-вывода. Как обсуждалось ранее, доступны два типа питания: один, в котором модуль питается от самой объединительной платы ЦП, и один, в котором модулю требуется внешний источник питания.
    При использовании объединительной платы каждый ЦП имеет номинал в мА, который он будет предоставлять в качестве нагрузки для подключенных модулей.
    Например, если ЦП имеет номинал 24 В постоянного тока - 450 мА, то он также будет указывать, что объединительная плата ЦП может обеспечивать такое количество тока для модулей ввода-вывода, и вы можете подключить только это количество модулей к стойке ЦП.
    Кроме того, каждый модуль будет указывать, какой ток он будет потреблять при подключении к шине объединительной платы. Это может помочь вам выбрать соответствующие модули и ЦП для конкретного приложения.
    Переходя ко второму типу питания, есть некоторые модули, которым требуется внешний источник питания. Итак, в этом случае вам нужно выбрать ИБП или трансформатор с более высоким током и соответствующей нагрузкой. Это, в свою очередь, может правильно питать как ЦП, так и модули, а также питать другие компоненты панели, которым требуется такое же питание.
    Источник питания для полевых приборов
    Полевая проводка для ПЛК также в основном требует постоянного напряжения для приборов и переменного напряжения для мощных устройств. Таким образом, вышеупомянутые четыре напряжения, упомянутые ранее, работают одинаково для общей проводки питания модуля ввода-вывода.
    Кроме того, помните, что внутри ПЛК, помимо стандартного источника питания, в основном находится резервная батарея. Это гарантирует, что программа в памяти ПЛК останется нетронутой в случае любого отключения питания.
    Выбор источника питания для ПЛК
    При выборе источника питания необходимо учитывать следующие параметры в целом: номинальное напряжение, номинальный ток, номинальную мощность, пульсацию и шум, регулируемый диапазон напряжения, допуск напряжения, регулировку линии и регулировку нагрузки.
    После того, как вы выбрали правильный источник питания, вы можете подключить ЦП и модули для правильного питания.
    Таким образом, мы понимаем концепцию рабочих напряжений ПЛК.

    leigehong
    Программируемые логические контроллеры (ПЛК) и программируемые контроллеры автоматизации (ПАК) — это два типа промышленных контроллеров, используемых для автоматизации процессов и машин в производстве, обработке и других промышленных приложениях. Оба типа контроллеров имеют схожие функции, но между ними также есть существенные различия.
    В этой статье мы рассмотрим различия, сходства и примеры ПЛК и ПАК.
    Содержание:
    Что такое ПЛК? Что такое ПАК? Сходства между ПЛК и ПАК. Различия между ПЛК и ПАК. Примеры моделей ПЛК от разных поставщиков. Примеры моделей ПАК от разных поставщиков. Когда лучше всего подходит ПЛК? А когда ПАК? Заключение Что такое ПЛК?
    ПЛК означает программируемый логический контроллер, который представляет собой специализированный промышленный компьютер, используемый для систем управления автоматикой. ПЛК предназначены для работы в суровых условиях и используются для управления оборудованием на производственных предприятиях, сборочных линиях и других промышленных предприятиях.
    ПЛК можно программировать с использованием 5 различных языков, таких как релейная логика, схемы функциональных блоков, структурный текст, список инструкций и последовательные диаграммы. Эти 5 языков одобрены и применяются в соответствии со стандартами IEC 61131-3.
    Что такое ПАК?
    ПАК означает программируемый контроллер автоматизации, который похож на ПЛК, но имеет более продвинутую функциональность. ПАК сочетает в себе возможности традиционного ПЛК с возможностью выполнять гораздо более сложные задачи и взаимодействовать с другими устройствами и системами, что делает их более гибкими и мощными, чем ПЛК.
    ПАК обычно используется для более сложных приложений автоматизации и управления в таких отраслях, как автомобилестроение, аэрокосмическая промышленность и производство электроэнергии. ПАК можно программировать с использованием тех же 5 языков, что и ПЛК, но также их можно программировать с использованием C и C++, что дает им возможность обрабатывать кодирование более сложных алгоритмов.
    Сходства между ПЛК и ПАК
    Сходства между ПЛК и ПАК настолько много, что иногда трудно сказать, отличаются ли они вообще. Хотя между ними все же есть некоторая разница.
    Сходства, которые они разделяют, могут быть еще больше. Вот некоторые общие моменты между ПЛК и ПАК:
    Основная функциональность
    И ПЛК, и ПАК разработаны для обеспечения надежного и точного управления промышленными системами автоматизации. Они используются для контроля входных сигналов от датчиков и других устройств, обработки информации, а затем вывода сигналов управления на исполнительные механизмы и другое оборудование.
    Программирование
    И ПЛК, и ПАК используют языки программирования для создания логики управления, которая определяет поведение системы автоматизации. Они используют 5 языков программирования, определенных в стандартах IEC 61131-3, но ПАК предлагают больше вариантов языков программирования, включая C и C++.
    Долговечность
    И ПЛК, и ПАК созданы для работы в суровых промышленных условиях, таких как экстремальные температуры, влажность и вибрация. Они разработаны для обеспечения прочности и надежности, длительного срока службы и меньших требований к обслуживанию.
    Модульная конструкция
    Как ПЛК, так и ПАК имеют модульную конструкцию, что обеспечивает простоту расширения и настройки. Модули можно добавлять или удалять для удовлетворения конкретных требований.
    Отраслевые стандарты
    Как ПЛК, так и ПАК созданы в соответствии с отраслевыми стандартами для систем автоматизации и управления, такими как IEC 61131. Эти стандарты обеспечивают совместимость между устройствами и системами разных производителей.
    Различия между ПЛК и ПАК
    Различие между ПАК и ПЛК может быть несколько размытым. Хотя определения того, что представляет собой ПАК, нет, есть некоторые общие характеристики, которые отличают ПАК от ПЛК:
    Функциональность
    Хотя и ПЛК, и ПАК используются для приложений автоматизации и управления, ПАК имеют более продвинутые функции, такие как управление движением, управление процессами и сбор данных. ПАК также обычно имеют большую вычислительную мощность и память, чем ПЛК.
    Возможности подключения
    ПАК имеют более продвинутые возможности подключения, чем ПЛК, включая Ethernet, USB и беспроводную связь. Это упрощает их интеграцию в более крупные системы автоматизации и взаимодействие с другими устройствами и системами.
    Стоимость
    Благодаря более продвинутой функциональности и гибкости ПАК, как правило, дороже, чем ПЛК.
    Более продвинутые функции
    ПАК часто имеют более продвинутые программные функции, чем ПЛК, такие как интегрированное управление движением, регистрация данных и расширенные диагностические инструменты. Эти функции облегчают инженерам и техникам мониторинг и устранение неисправностей системы управления.
    Примеры моделей ПЛК от разных поставщиков
    Сименс S7-1500 ПЛК:
    Это высокопроизводительный ПЛК от Сименс, одного из ведущих поставщиков автоматизации. Он разработан для требовательных приложений и предлагает расширенные функции, такие как управление движением, безопасность и защита. См. рисунок 1.

    Рисунок 1 – Сименс S7-1500 ПЛК
    Allen-Bradley ComПАКtLogix 5370 ПЛК:
    Это универсальный ПЛК от Rockwell Automation, который предлагает широкий спектр вариантов ввода-вывода и протоколов связи. Он подходит для различных приложений, включая управление машинами и автоматизацию процессов. См. рисунок 2.

    Рисунок 2 – ПЛК Allen-Bradley ComПАКtLogix 5370
    ПЛК Mitsubishi Electric серии Q:
    Это надежный ПЛК от Mitsubishi Electric, который предлагает высокоскоростную обработку, гибкие варианты ввода-вывода и расширенные возможности программирования. Он подходит для различных приложений, включая автомобилестроение, пищевую промышленность и фармацевтику. См. рисунок 3.

    Рисунок 3 – ПЛК Mitsubishi Electric серии Q
    ПЛК Omron серии NJ:
    Это высокоскоростной, высокопроизводительный ПЛК от Omron, который предлагает расширенные возможности управления движением и сетевые возможности. Он подходит для различных приложений, включая упаковку, печать и производство полупроводников. См. рисунок 4.

    Фото 4 – ПЛК Omron NJ Series
    ПЛК Beckhoff TwinCAT:
    Это программный ПЛК от Beckhoff, работающий на платформе на базе ПК. Он предлагает расширенные функции, такие как управление движением, ЧПУ и робототехника, и подходит для различных приложений, включая управление машинами и автоматизацию процессов. См. рисунок 5.

    Фото 5 – ПЛК Beckhoff TwinCAT CX9240 на базе ПК
    Примеры моделей ПАК от разных поставщиков
    ПАК Emerson DeltaV DCS:
    Это ПАК распределенной системы управления (РСУ) от Emerson. Он разработан для сложных приложений непрерывного управления и предлагает расширенные функции, такие как моделирование процессов, управление партиями и расширенное управление. См. рисунок 6.

    Рисунок 6 – Emerson DeltaV DCS ПАК
    Schneider Electric Modicon M340 ПАК:
    Это высокопроизводительный ПАК от Schneider Electric, который предлагает расширенные функции, такие как управление движением, безопасность и кибербезопасность. Он подходит для различных приложений, включая энергетику, очистку воды и горнодобывающую промышленность. См. рисунок 7.

    Рисунок 7 – Modicon M340 ПАК
    Некоторые другие примеры ПАК:
    ABB AC 800M ПАК Yokogawa ProSafe-RS ПАК Phoenix Contact ПЛКnext Technology ПАК Bosch Rexroth IndraMotion MLC ПАК Когда лучше всего подходит ПЛК? А когда ПАК?
    ПЛК и ПАК используются в различных типах приложений автоматизации в зависимости от конкретных требований этого приложения. Вот несколько общих рекомендаций о том, где лучше всего подходит ПЛК, а где лучше всего подходит ПАК:
    ПЛК лучше всего подходят для:
    Приложений с дискретным управлением:
    ПЛК лучше всего подходят для приложений, включающих дискретное управление, например, управление работой конвейера, сортировочного оборудования или упаковочных машин.
    Простые системы управления:
    ПЛК идеально подходят для приложений, имеющих относительно простую систему управления, которую можно запрограммировать с помощью релейной логики или других подобных языков программирования.
    Приложения, чувствительные к стоимости:
    ПЛК, как правило, менее дороги, чем ПАК, что делает их хорошим выбором для приложений, где стоимость является существенным фактором.
    Системы малого и среднего размера:
    ПЛК подходят для систем управления малого и среднего размера, где количество входов и выходов относительно невелико.
    Конвейерная система на производственном предприятии является хорошим примером системы автоматизации, где лучше всего подходит ПЛК. В этом приложении ПЛК отвечает за управление скоростью и направлением конвейера, а также за мониторинг состояния датчиков и другого оборудования вдоль конвейерной линии. ПЛК также можно запрограммировать для выполнения определенных производственных задач, таких как сортировка, подсчет или упаковка.
    Обычно конвейерная система имеет фиксированную структуру и четко определенный набор операций, которые необходимо выполнять последовательно. ПЛК хорошо подходят для этого типа приложений, поскольку они предназначены для выполнения дискретных задач управления и очень надежны в своей работе. ПЛК можно легко запрограммировать и настроить для работы с различными типами датчиков, исполнительных механизмов и протоколов связи.
    ПЛК лучше всего подходят для:
    Приложений управления технологическими процессами:
    ПЛК лучше всего подходят для приложений, включающих управление технологическими процессами, например, управление работой химического завода, водоочистной станции или электростанции.
    Сложные системы управления:
    ПЛК идеально подходят для приложений, в которых используется сложная система управления, требующая расширенных алгоритмов и функций оптимизации.
    Крупномасштабные системы:
    ПЛК подходят для крупномасштабных систем управления, где количество входов и выходов велико, а система распределена по большой площади.
    Высокопроизводительные приложения:
    ПАК, способный обрабатывать высокопроизводительные приложения, требующие быстрой обработки данных, управления в реальном времени и высокой надежности.
    Система управления электростанцией является хорошим примером системы автоматизации, где ПАК является наилучшим вариантом. В этом приложении ПАК отвечает за управление и мониторинг большого количества сложных процессов и оборудования, таких как турбины, генераторы, котлы и насосы. ПАК также отвечает за сбор и анализ данных с различных датчиков и других источников и принятие решений на основе этих данных для оптимизации производительности станции.
    Система управления электростанцией является очень сложной и динамичной средой, в которой одновременно работает множество различных процессов и оборудования. ПАК хорошо подходят для этого типа приложений, поскольку они предлагают расширенные функции, такие как распределенное управление, резервирование и отказоустойчивость, которые необходимы для обеспечения надежности и безопасности станции. ПАК может обрабатывать большие объемы данных и может быть запрограммирован для выполнения сложных алгоритмов и задач оптимизации.
    Заключение
    ПЛК и ПАК используются в приложениях промышленной автоматизации. Они имеют разные возможности и лучше всего подходят для разных типов приложений. При выборе между ПЛК и ПАК важно учитывать конкретные требования приложения. ПЛК обычно используется в дискретных приложениях управления, которые имеют относительно простую систему управления. ПАК используется в приложениях управления процессами, которые имеют сложную систему управления и требуют расширенных алгоритмов и функций оптимизации.

    leigehong
    Управление процессом в любой машине или системе всегда было мечтой инженеров. Благодаря появлению технологий было разработано множество контроллеров для гибкого и надежного управления процессом.
    Существует два основных типа контроллеров, которые широко используются во многих процессах, от малых до больших. Это микроконтроллеры и ПЛК. Они могут выполнять любую операцию, начиная от небольших вычислений до сложных алгоритмов, логической производительности и обработки данных. Это упрощает задачу за счет автоматизации процесса.
    В этой статье мы рассмотрим разницу между микроконтроллером и ПЛК.
    Что такое микроконтроллер?
    Давайте сначала разберемся с основами. У вас есть одна кнопка и одна лампа. Вас просят включить лампу через 5 секунд после нажатия кнопки. Что из этого нам требуется для выполнения этой задачи? Вам понадобится один вход (кнопка), один выход (лампа), один контроллер для выполнения этой задачи (тип процессора), один источник питания для питания схем и одна память для хранения этой логики и состояния входов и выходов. При объединении в одном корпусе это создает микроконтроллер.
    Короче говоря, микроконтроллер — это тип небольшого компьютера, который принимает физические входы, обрабатывает логику в соответствии с ними и включает или выключает физические выходы. Это небольшое устройство типа чипа, которое встраивает в себя все эти схемы, как небольшой корпус, и выполняет всю работу по обработке и управлению.
    Микроконтроллер будет обрабатывать небольшое количество входов и выходов. Например, рассмотрим небольшую схему дисплея, такую как светодиод или ЖК-дисплей, установленную на портативном устройстве. Если вы нажмете на нем кнопку, он отобразит соответствующее число на дисплее.
    А когда вы нажмете другую кнопку, он отобразит какое-то другое число, записанное в соответствии с логикой внутри процессора. Это означает, что сначала он был запрограммирован на отображение числа, а затем при нажатии второй кнопки будет показано вычисленное число. Все эти вычисления, хранение обработки переменных и обработка ввода-вывода выполняются внутри этого чипа микроконтроллера.

    Что такое ПЛК?
    Давайте перейдем к более высокому уровню обработки. У вас есть 50 датчиков, либо 4-20 мА, либо термопар. У вас есть 20 различных типов выходов, либо приводы постоянного тока 0-10 В, либо релейные выходы. Вам была назначена одна и та же задача принимать входы и управлять выходами в соответствии с прописанной в нем логикой.
    Потребуются все те же компоненты ввода-вывода, блок питания, процессор и память. Но вы можете видеть, что все эти платы/контакты ввода-вывода с памятью и процессором не могут быть встроены в небольшой одиночный чип. Вот тут-то и появляется ПЛК. ПЛК по сути является расширением микроконтроллера. Это устройство типа шкафа-коробки, которое имеет платы ввода-вывода, память и процессор; все они соединены друг с другом на разных чипах. Все эти чипы составляют один шкаф ПЛК.
    Вводы-выводы могут быть разных типов, от простых цифровых сигналов до сложных аналоговых сигналов. У них есть специальные платы связи, которые могут взаимодействовать с реальными протоколами, такими как Ethernet, Modbus, CAN Open, Profibus, Profinet и т. д.
    Микроконтроллеры тоже имеют платы связи, но они имеют небольшие интерфейсы и ограниченные возможности подключения.
    Модули ввода-вывода либо встроены в основной ПЛК, либо подключены к удаленным модулям через связь. Это легко позволяет расширять ввод-вывод. Различные высококачественные промышленные датчики и исполнительные механизмы могут быть легко соединены с ПЛК.
    Разница между микроконтроллером и ПЛК
    Теперь, когда мы поняли их значение, давайте рассмотрим их различия:
    Только в определении мы узнали, что ПЛК может обрабатывать большое количество процессов и циклов. Вот почему его лучше всего использовать для промышленных приложений. Микроконтроллеры не могут обслуживать большое количество входов/выходов со сложными требованиями к проводке и коммуникациям. Лучше всего подходит для небольших приложений. Обработка сигналов в ПЛК гораздо более гибкая по сравнению с микроконтроллером. Это означает, что аналого-цифровое преобразование, высокоскоростные входы счетчика и выходы легче настраивать в ПЛК, чем в микроконтроллере. Микроконтроллеры дешевле ПЛК из-за ограниченного количества предоставляемых ими функций. Главное преимущество ПЛК — его прочность и стабильность. Благодаря очень высокой температуре и устойчивости к воздействию окружающей среды он является наилучшим подходящим продуктом для критических, опасных и суровых условий. ПЛК может быть гораздо более подвержен электромагнитным помехам и другим типам помех, чем микроконтроллер. Программирование в ПЛК намного проще, чем в микроконтроллере. Микроконтроллеры используют сложное программное обеспечение, такое как C и C++, для программирования, что намного проще в ПЛК, поскольку в нем есть языки, которые легко соотносятся с пониманием электрических чертежей. Для проектирования микроконтроллеров необходимы знания встраиваемых систем, СБИС и программного обеспечения, тогда как программистам ПЛК для проектирования требуются знания промышленной автоматизации, контрольно-измерительных приборов и сетей.

    leigehong
    Последовательная логика очень полезна в программировании ПЛК. Она помогает легко сортировать вещи. Во многих приложениях, использующих ПЛК, написана та или иная последовательная логика.
    Две наиболее широко используемые последовательности — LIFO и FIFO. Вы наверняка слышали эти названия в электронике, когда они используются для укладки и упорядочивания. Эти типы последовательной логики также доступны в ПЛК.
    В этой статье мы изучим концепции последовательностей LIFO и FIFO в программировании ПЛК.
    Последовательность FIFO в ПЛК
    FIFO означает «первым пришел — первым вышел». Значение этой последовательности легко понять из ее названия. То, что пришло первым, выйдет первым. Вы вводите один элемент; и когда вы запрашиваете элемент, вам будет предоставлен первый введенный элемент. Эта же логика работает в программировании ПЛК для последовательности FIFO.
    В программировании логическому блоку присваивается имя FIFO. Он может хранить до 16 слов или более, в зависимости от ПЛК. Он содержит три типа входов — сброс, хранение и извлечение.
    По переднему фронту входа сброса последовательность сбрасывается и становится пустой. По переднему фронту входа хранения слово, присутствующее на входе, сохраняется в блоке. Блок запомнит последовательность полученных слов.
    По переднему фронту входа извлечения слово, введенное первым, будет выдано в слове назначения, настроенном программистом ПЛК. Он имеет два выхода — пустой и полный. Если пустой бит истинен, то это означает, что хранилище пусто, а если полный вход истинен, то это означает, что хранилище заполнено.

    Последовательность LIFO в ПЛК
    LIFO означает последний вошел — первый вышел. Значение этой последовательности можно легко понять из ее названия. То, что приходит последним, выйдет первым. Вы вводите один элемент; и когда вы запрашиваете элемент, вам будет выдан последний введенный элемент. Эта же логика работает в программировании ПЛК для последовательности LIFO.
    В программировании логический блок называется LIFO. Он может хранить до 16 слов или больше, в зависимости от ПЛК. Он содержит три типа входов — сброс, хранение и извлечение. По переднему фронту входа сброса последовательность сбрасывается и становится пустой.
    По переднему фронту входа хранения слово, присутствующее на входе, сохраняется в блоке. Блок запомнит последовательность полученных слов.
    По переднему фронту входа извлечения слово, которое поступило последним, будет передано в целевое слово, настроенное программистом. Он имеет два выхода — пустой и полный. Если пустой бит истинен, то это означает, что хранилище пусто, а если полный вход истинен, то это означает, что хранилище заполнено.
    Эти последовательности довольно просты в использовании. Программист должен следить за тем, чтобы никакие входы не подавались одновременно в блоки хранения. В этом случае блок не будет выполнять никаких действий. Только один вход должен быть предоставлен за один раз. Также следует отметить, что разные ПЛК функционируют по-разному при теплом или холодном перезапуске.
    Обычно, например, при холодном перезапуске ПЛК регистр будет сброшен, а в случае теплого перезапуска регистр останется нетронутым. Это зависит от производителя.

    leigehong
    Это программа ПЛК для работы пневматического клапана в последовательном режиме.
    Последовательное программирование ПЛК для пневматических клапанов
    Напишите релейную логику для последовательного программирования ПЛК для пневматических клапанов, чтобы управлять цилиндрами в последовательном режиме.

    Решение:
    В этой системе есть два цилиндра и две кнопки, которые подключены к ПЛК.
    Кнопки подключены к входам ПЛК, а цилиндры подключены к выходам ПЛК.
    Для работы системы существуют следующие условия: –
    При нажатии START PB цилиндр A должен запуститься, а цилиндр B должен запуститься через 5 секунд после цилиндра A.
    При нажатии STOP PB оба цилиндра A и B должны быть остановлены.
    Теперь, чтобы выполнить следующие условия, мы должны использовать таймер, который задерживает работу цилиндра B.
    Список входов/выходов
    Входы:
    X1 - START PB X2 - STOP PB Выходы:
    Y0 - Цилиндр A Y1 - Цилиндр B Релейная диаграмма последовательной работы цилиндров

    Пояснение программы:
    В звене 1 мы использовали STRAT PB (X1) для запуска цилиндра A (Y0). Здесь мы использовали NC контакт STOP PB (X2) для остановки цилиндра A (Y0). Параллельно с контактом X1 мы использовали NO контакт Y0 для защелкивания выхода.
    В звене 2 мы использовали таймер T0 для подсчета задержки для цилиндра B (Y1).
    В звене 3 мы использовали нормально разомкнутый контакт T0, поэтому после истечения времени задержки цилиндр B (Y1) включится.

    leizuofa
    В этой статье мы рассмотрим биты памяти тактовых импульсов в TIA Portal и Siemens PLC. И покажем, как включить использование битов памяти и как это может помочь вам избежать кодирования большого количества логических линий для получения простой функции, которую ваш ПЛК уже выполняет внутри.
    Содержание:
    Что такое биты памяти тактовых импульсов? Необходимость в битах памяти тактовых импульсов. Включение памяти тактовых импульсов в моем проекте. Простой пример программы. Моделирование программы. Заключение. Что такое биты памяти тактовых импульсов?
    Память тактовых импульсов – это битовая память, которая периодически изменяет свой двоичный статус в соотношении 1:1. Это просто означает, что она периодически изменяет свой статус между истинным и ложным с предопределенной частотой.
    В ЦП предварительно определены 8 бит памяти тактовых импульсов, поэтому их также называют байтами памяти тактовых импульсов.
    Вы решаете, какой байт памяти ЦП станет байтом памяти тактовых импульсов, когда вы включаете использование байта памяти и назначаете параметры памяти тактовых импульсов.
    Необходимость в битах памяти часов
    Вам не обязательно нужна память часов, так как вы можете создать свою собственную логику и достичь той же функциональности. Тем не менее, ее полезно иметь в кармане, когда вам понадобится такая функциональность. Так как создание 8 отдельных логических схем для 8 бит памяти часов займет некоторое время и усилия и может сделать вашу программу неоправданно большой.
    Вы можете использовать память часов, например, для активации мигающих индикаторных ламп или для инициирования периодически повторяющихся операций, таких как запись фактических значений.
    Каждому биту байта памяти битов часов назначается частота. См. следующую таблицу.
    Бит байта памяти часов 7 6 5 4 3 2 1 0 Период (с) 2.0 1.6 1.0 0.8 0.5 0.4 0.2 0.1 Частота (Гц) 0.5 0.625 1 1.25 2 2.5 5 10 Таблица 1. Частоты битов памяти часов согласно справочному руководству TIA Portal.
    Включение памяти часов в ПЛК Siemens
    Чтобы использовать биты памяти часов в вашей логике, вам необходимо включить использование байта памяти часов в свойствах ЦП. См. рисунок 1.

    Рисунок 1 — Включение использования байта памяти часов
    Вы можете выбрать адрес байта, который вы хотите назначить для памяти часов, просто убедитесь, что он не конфликтует с другими байтами памяти в логике вашего ПЛК.
    Как вы видите на рисунке, мы выбрали адрес 0, поэтому, если вам нужно использовать бит синхронизации 2 Гц, вы будете использовать бит %M0.3
    Пример программы конвейерной ленты Tia Portal
    В предыдущей статье мы использовали простой пример конвейерной ленты, перемещающей продукт между началом и концом ленты. Был светодиод индикации, который включается, когда лента работает. Смотрите рисунок 2.

    Рисунок 2 — Простая система конвейерной ленты
    Мы будем использовать тот же пример, но на этот раз мы сделаем светодиод более интуитивно понятным, используя биты памяти часов. На этот раз мы будем использовать биты памяти часов со светодиодом, чтобы дать индикацию различных случаев процесса.
    Описание процесса
    В системе конвейерной ленты, управляемой ПЛК, на двух концах ленты есть два датчика присутствия для обнаружения наличия продукта. Когда продукт обнаружен в начале ленты, конвейер можно запустить с помощью кнопки запуска, а когда продукт достигает конца, лента автоматически остановится и не будет работать снова, пока новый продукт не будет обнаружен снова в начале и не будет нажата кнопка ПУСК.
    Светодиод индикации должен иметь более одного поведения в зависимости от текущего случая системы.
    Эти случаи следующие:
    Если в начале ленты есть продукт, но кнопка ПУСК еще не нажата, светодиод должен мигать с частотой 0,5 Гц. Если конвейер перемещает продукт, светодиод должен мигать с частотой 2 Гц. Когда продукт достигает конца ленты, светодиод должен загореться. Когда продукт удаляется с конца, светодиод выключается. Проект IO
    У нас есть 4 цифровых входа, как показано ниже:
    START: кнопка запуска для запуска конвейера. STOP: кнопка остановки для остановки конвейера в любой момент. P1: датчик присутствия в начале ленты. P2: датчик присутствия в конце ленты. У нас также есть 2 цифровых выхода, как показано ниже:
    MOTOR: при активации конвейерная лента начнет работать.
    LED: будет активирован в соответствии с последовательностью, упомянутой ранее.
    Программный код
    Сначала мы выбираем наш ПЛК и назначаем теги IO. Смотрите рисунок 3

    Рисунок 3 — Назначение тегов входов и выходов
    Не забудьте включить использование байта памяти часов, как показано на рисунке 1.
    У нас будет две сети кода, одна для управления лентой конвейера, а другая для светодиодной логики. Смотрите рисунки 4 и 5 для логики.

    Рисунок 4 – Логика управления конвейерной лентой

    Рисунок 5 – Логика управления светодиодом
    Как вы видите, использование битов памяти часов сделало логику простой и легкой для чтения. Представьте, если бы вы создали ту же логику без использования этих битов, вы бы использовали много таймеров, и ваша логика была бы довольно сложной.
    Моделирование программы
    Ранее мы объясняли, как использовать PLCSim для моделирования нашего кода. В этом примере мы будем использовать последовательность моделирования для создания той же последовательности фактического процесса и посмотрим, будет ли поведение светодиода соответствовать предполагаемой функциональности или нет.
    Начните с компиляции нашего кода и запуска новой симуляции. Смотрите рисунок 6.

    Рисунок 6 – Программная симуляция
    Как вы можете видеть, светодиод теперь выключен; в начале или конце конвейера нет продуктов.
    Мы создали последовательность моделирования и посмотрим, как светодиод будет реагировать на различные условия процесса. Смотрите следующую анимацию.

    Посмотрите, сможете ли вы заметить, как поведение светодиода меняется при различных условиях процесса.
    Заключение
    Биты тактовой памяти включаются и выключаются с предопределенной частотой. Они очень полезны, когда вам нужно активировать мигающие индикаторные лампы или инициировать периодически повторяющиеся операции. Использование битов тактовой памяти сэкономит вам время и усилия, затрачиваемые на получение той же функциональности посредством вашей собственной логики.

    leizuofa
    В этой статье мы поговорим об обработке аналоговых входных сигналов в ПЛК и о том, как мы можем обрабатывать эти сигналы в процессе автоматизации.
    Содержание:
    Что такое аналоговые входные сигналы? Обработка аналоговых входных сигналов в S7-1200 и 1500. Обработка аналоговых входных сигналов в S7-300 и 400. Что лучше всего подходит для управления? – аналоговые или цифровые сигналы Заключение. Что такое аналоговые входные сигналы?
    Прежде чем мы углубимся в обработку аналоговых входных сигналов в TIA Portal, давайте сначала разберемся с аналоговыми входами.
    Любой системе автоматизации нужны входные сигналы для понимания состояния процесса, чтобы иметь возможность принимать решения, которые будут поддерживать его работу и стабильность. Эти входные сигналы являются либо дискретными, либо цифровыми входными сигналами, которые имеют форму значений 0 или 1. Другой тип входа – аналоговые сигналы.
    Аналоговый сигнал — это просто непрерывное представление физической величины в вашей системе, поэтому, если вам нужно контролировать температуру или давление в вашем процессе, аналоговый сигнал даст вам непрерывные и мгновенные значения, которые соответствуют реальным изменениям физической величины.
    Аналоговые сигналы предоставляются во многих стандартных формах, но чаще всего это 0–10 В или 4–20 мА. Это будет зависеть от типа используемого вами аналогового датчика, а также от типа аналогового модуля ПЛК, который вы можете использовать.
    Предположим, что аналоговый датчик давления имеет диапазон измерения 0–10 бар и выход в форме 4–20 мА. Обычно аналоговый сигнал будет иметь линейную зависимость между измеренной физической величиной и соответствующим выходом.
    Это означает, что если датчик измеряет 0 бар, он выдаст сигнал 4 мА, а если он измеряет 10 бар, он выдаст сигнал 20 мА, и то же самое между ними также будет линейным. См. рисунок 1.

    Рисунок 1 – Аналоговое представление сигнала.
    ПЛК по-прежнему не может понять 4-20 мА физической величины, и здесь вступает в дело аналоговый модуль ПЛК. Аналоговый модуль выполнит еще одно преобразование этого представления, чтобы ПЛК мог его фактически понять.
    Аналоговый модуль преобразует аналоговые измерения мА в цифровые значения, которые зависят от типа модуля, но для ПЛК Siemens эти значения всегда находятся в диапазоне 0 – 27648. Таким образом, если датчик измеряет 0 бар, выходной сигнал будет равен 4 мА, и он будет преобразован в 0-е значение внутри ПЛК. См. рисунок 2.

    Рисунок 2 – Аналогово-цифровое преобразование входного сигнала
    ПЛК затем преобразует значения 0-27648 в эквивалентное физическое измерение в зависимости от вашего программирования, к которому мы вернемся позже. См. рисунок 3.

    Рисунок 3 – Масштабированное измеренное значение внутри ПЛК.
    Аналоговая обработка температур совершенно иная, поскольку поведение датчика температуры с физическими изменениями не линейно, как у датчика уровня или давления. Вот почему существуют стандартизированные таблицы для различных типов датчиков температуры, которые сообщают, какая температура соответствует какому значению датчика.
    Вот почему при измерении температуры вы должны выбрать специальные типы входных модулей вашего ПЛК, где эти стандартные таблицы определены внутри, и вы напрямую получаете значение температуры, соответствующее измерению датчика.
    Вот почему вы не можете найти датчик температуры, на котором написан диапазон измерения напряжения или тока. Вы найдете только написанный тип датчика, например, PT100, PT1000, KTY84, PTC и т. д.
    Обработка аналогового ввода в S7-1200 и 1500
    Чтобы увидеть, как мы обрабатываем аналоговые сигналы в современных ПЛК семейства S7, давайте начнем с создания нового проекта и добавления ЦП S7-1200. Мы также добавим модуль аналогового ввода/вывода. См. рисунок 4.

    Рисунок 4 — Добавление модуля аналогового ввода.
    Теперь давайте определим наш тег входного сигнала, предположим, что датчик давления может измерять давление от 0 до 10 бар и выдает соответствующий сигнал от 4 до 20 мА.
    Мы определим этот входной сигнал в первых тегах входного модуля. См. рисунок 5.

    Рисунок 5 — Определение тега входного сигнала.
    Как мы уже говорили, входной модуль может работать с различными входными сигналами, будь то 0–10 В или 4–20 мА, поэтому нам нужно назначить правильную конфигурацию для нашего датчика.
    Как мы уже говорили, сигнал давления подается в форме 4–20 мА, поэтому мы настроим наш входной канал на него. Смотрите рисунок 6.

    Рисунок 6 – Настройка входного канала
    Теперь, когда мы закончили часть конфигурации оборудования, мы начнем программировать наш код обработки. Для этого мы создадим функцию FC, чтобы мы могли повторно использовать ее каждый раз, когда у нас есть аналоговый сигнал для обработки. Внутри этого FC мы создадим логику, которая будет обрабатывать аналоговый сигнал и преобразовывать его в физическое измеренное значение.
    В TIA Portal есть предопределенные инструкции, которые мы можем использовать для этого, эти инструкции — инструкции NORM_X и SCALE_X. Смотрите рисунок 7.

    Рисунок 7 – Инструкции NORM_X и SCALE_X
    Как вы можете видеть, NORM_X нормализует аналоговый вход в значение от 0 до 1, а затем SCALE_X будет использоваться для масштабирования этого нормализованного значения в диапазоне измеренного физического значения, которое в случае нашего датчика составляет от 0 до 10 бар.
    Мы использовали функцию FC вместо того, чтобы писать наш код непосредственно в главном OB1, чтобы сделать наш код пригодным для повторного использования с любым аналоговым сигналом. Каждый раз, когда у меня есть новый аналоговый входной сигнал, я просто перетаскиваю блок FC в наш главный OB1 и просто записываю связанные параметры требуемого входа. Смотрите рисунок 8.

    Рисунок 8 – Перетащите свой FC.
    Когда вы перетаскиваете FC в свой главный OB1, вам будет предложено указать связанный параметр этого вызова функции.
    В нашем случае входной сигнал — это датчик давления, а ScaledMIN и ScaledMAX — это диапазон значений измерения 0–10 бар. Смотрите рисунок 9.

    Рисунок 9 — Назначение параметров функции нашему датчику давления.
    Если у меня есть новый аналоговый вход, то мне не придется заново создавать логику ПЛК, я просто перетащу FC в главный OB1 и назначу новые параметры датчика.
    Предположим, что теперь у нас есть новый аналоговый датчик для измерения уровня внутри резервуара с водой от 0 до 100 % резервуара. Мы выполним те же шаги, что и раньше, начав с определения нового входного тега. Смотрите рисунок 10.

    Рисунок 10 — Определение нового датчика уровня
    Далее мы настроим входной канал для датчика уровня, как на рисунке 6. Мы предположим ту же конфигурацию.
    Далее мы просто перетащим созданный нами FC и просто назначим параметры датчика уровня. Смотрите рисунок 11.

    Фото 11 – Повторное использование FC с датчиком уровня.
    Как вы можете видеть на предыдущем рисунке, это одно из многих преимуществ использования функций FC в вашей логике, поскольку это помогло сократить объем программирования, который мы сделали.
    Теперь у вас есть универсальный код, который можно многократно использовать с любым входным аналоговым сигналом, который вам может понадобиться в вашем проекте ПЛК.
    Смотрите следующую симуляцию обработки входных сигналов в ПЛК Siemens.

    Аналоговые входы в S7-300 и S7-400
    Чтобы увидеть, как мы обрабатываем аналоговые сигналы в старых ПЛК семейства S7, таких как S7-300, давайте начнем с создания нового проекта и добавления ЦП S7-300.
    Выбранный ПЛК уже имеет достаточно каналов аналогового ввода, поэтому мы не будем добавлять аналоговые модули. См. рисунок 12.

    Фото 12 — Добавление ПЛК S7-300.
    Затем мы определим новый тег аналогового датчика, предположим, что это датчик давления с диапазоном измерения от 0 до 100 бар и выходом 4–20 мА.
    Мы настроим входной канал ПЛК, как мы делали это ранее с S7-1200, чтобы он соответствовал нашему датчику аналогового ввода. См. рисунок 13.

    Фото 13 — Настройте входной канал.
    Теперь к части кодирования ПЛК: инструкция в s7-300, которая используется для обработки аналоговых сигналов, отличается от s7-1200.
    В ПЛК S7-1200 мы должны использовать NORM_X и SCALE_X. но в S7-300 у нас нет нормализованной инструкции, используется только инструкция SCALE. Смотрите рисунок 14.

    Рисунок 14 – Инструкция SCALE в S7-300
    Как вы можете видеть на предыдущем рисунке, инструкция SCALE в S7-300 в некотором роде похожа на инструкции NORM_X и SCALE_X, объединенные вместе. Есть еще одно явное отличие, а именно вход BIPOLAR.
    Вход BIPOLAR используется для указания того, следует ли интерпретировать значение параметра IN как биполярное или униполярное. Параметр может принимать следующие значения:
    BIPOLAR = 1, тогда предполагается, что входное целочисленное значение находится в диапазоне от -27648 до +27648. Например, когда аналоговый датчик выдает нам выходной сигнал в диапазоне от -10 В до +10 В BIPOLAR = 0, то предполагается, что входное целочисленное значение находится в диапазоне от 0 до 27648. Например, когда датчик выдает нам выходной сигнал в диапазоне 0-10 В И это просто как обрабатывать аналоговые входные сигналы в ПЛК S7-1200 и S7-300.
    Что лучше для управления? — Аналоговые или цифровые сигналы
    Послушайте, оба сигнала важны и полезны для любой системы автоматизации, но я лично предпочитаю использовать аналоговые сигналы, если могу, потому что наличие аналоговых сигналов измерений для физических величин процесса даст мне непрерывный мониторинг параметров процесса, что позволит мне лучше отслеживать и контролировать мой процесс.
    Кроме того, наличие непрерывного мониторинга параметров позволит мне устанавливать различную логику управления для различных значений сигнала, это упростит наличие диапазона значений для управления процессом и других диапазонов значений для аварийных сигналов и предупреждений об отклонении процесса от нормальной работы.
    Заключение
    Аналоговый сигнал — это непрерывное представление физической величины в вашей системе. Аналоговые входы чаще всего предоставляются в диапазоне 0–10 В или 4–20 мА. Аналоговая обработка сигнала означает преобразование аналогового сигнала 4–20 мА в диапазон значений, который соответствует реальной физической величине и который может понять ПЛК. В современном семействе ПЛК S7, например S7-1200, обработка аналоговых сигналов выполняется с помощью инструкций NORM_X и SCALE_X. В более старом семействе ПЛК S7, например S7-300, обработка аналоговых сигналов выполняется с помощью инструкции SCALE, которая по сути является комбинацией инструкций NORM_X и SCALE_X.

    leizuofa
    Когда вы слышите о программировании ПЛК, пять используемых в нем языков — релейная логика, структурированный текст, функциональная блок-схема, последовательная блок-схема и список инструкций. Любой язык, если его понять, можно использовать для написания кода приложения и правильного управления машиной.
    Лучший язык программирования ПЛК

    Рисунок — пример релейной логики
    Но часто начинающие программисты ПЛК путаются, что использовать для написания программы. Если он понимает преимущества и недостатки языка, то он может легко определить, что использовать для написания программы ПЛК. Поэтому необходимо понимать разницу между ними и определить, какой язык использовать для кодирования. В этой статье мы рассмотрим, какой язык лучше всего подходит для программирования ПЛК.
    Релейная логика
    Релейная логика — это самый базовый тип языка программирования ПЛК. Его можно легко соотнести со схемой управления электропроводкой. Традиционно для управления выходами в соответствии с предоставленными входами использовалась электрическая проводка управления.
    Схема релейной логики, состоящая из контактов и катушек, была реализована таким же образом в программировании релейной логики. У вас есть ряд ступеней, каждая из которых имеет контакты и катушки. Когда ступень включена, катушка, в зависимости от ее типа, работает соответствующим образом.
    Вы можете написать столько ступеней в программе, сколько необходимо, и код будет выполняться соответствующим образом. Когда вы видите это, сходство похоже на лестницу, и поэтому название дано релейной логикой. Обратитесь к схеме ниже для понимания. Вы можете увидеть, насколько это просто.

    На приведенной выше иллюстрации входы, связанные с коммутационным устройством в релейной логической схеме, показаны как контакты в релейной логической схеме. Выходная катушка M1 в релейной логической схеме представлена символом выходной катушки в релейной логической схеме.
    Номера адресов, появляющиеся над каждым символом контакта/катушки на лестничной диаграмме, являются ссылками на расположение внешних входных/выходных соединений с логическим контроллером. Таким образом, между двумя конечными шинами питания вы можете разместить требуемые элементы и записать в них логику. Ступени выполняются циклически сверху вниз.
    Структурированный текст
    Структурированный текст можно назвать языком локального уровня ИТ. Сходство языка структурированного текста очень похоже на коды, которые мы пишем на языке программного обеспечения. Как следует из названия, структурированный текст представляет собой серию текстов, написанных способом присваивания.
    Инструкции должны заканчиваться точкой с запятой. Когда выполняется присваивание, текущее значение переменной с одним или несколькими элементами заменяется результатом вычисления выражения.
    Назначение состоит из спецификации переменной с левой стороны, за которой следует оператор присваивания: =, за которым следует выражение для вычисления. Обе переменные (левая и правая стороны оператора присваивания) должны иметь одинаковый тип данных. Для понимания обратитесь к приведенной ниже схеме.

    Как вы можете видеть, он имеет различные типы операций и условий. В приведенном выше примере оператор if-else используется для оценки выражения. Если условие истинно, то переменная, назначенная на выходной стороне, включается, а когда условие становится ложным, то переменная выключается. Таким образом, язык ST лучше всего подходит для математических вычислений, так как он выглядит трезвым и простым для понимания.
    Последовательная блок-схема
    Последовательная блок-схема — это самый продвинутый инструмент, когда вы хотите писать сложные программы повторяющимся или последовательным способом. Как следует из названия, язык SFC позволяет вам писать программу с помощью блок-схемы. Он работает по шагам, ветвям, ссылкам, переходам и переходам.
    Раздел SFC — это «машина состояний», т. е. состояние создается активным шагом, а переходы передают поведение переключения/изменения. Шаги и переходы связаны друг с другом посредством направленных ссылок.
    Два шага никогда не могут быть связаны напрямую и всегда должны быть разделены переходом. Процессы состояния активного сигнала происходят вдоль направленных связей и запускаются переключением перехода. Для понимания см. изображение ниже.

    Направление процесса цепочки следует направленным связям и проходит от конца предыдущего шага до начала следующего шага. Ветви обрабатываются слева направо. Каждый шаг имеет ноль или более действий.
    Условие перехода необходимо для каждого перехода. Последний переход в цепочке всегда связан с другим шагом в цепочке (через графическую связь или символ перехода) для создания замкнутого цикла. Поэтому цепочки шагов обрабатываются циклически.
    Функциональная блок-схема
    Язык функциональной блок-схемы (FBD), который обычно используется в микропроцессорах, также доступен в аналогичном формате в программировании ПЛК. Это схема блоков, связанных друг с другом, причем каждый блок имеет свой вход и выход.
    Язык FBD очень прост в устранении неполадок, поскольку вы можете буквально просмотреть весь код в одном представлении, а не прокручивать его вверх и вниз. Это помогает в быстром обслуживании и также повышает эффективность программирования. Для понимания обратитесь к изображению ниже.

    Как вы можете видеть, вы можете легко соединять различные типы функций и блоков линиями, что показывает, как поток происходит в логике. Вам просто нужно назначить входные и выходные контакты, соединить линии между этими контактами, и ваш код будет работать соответствующим образом.
    Список инструкций
    Программа, написанная на языке списка инструкций, состоит из ряда инструкций, которые последовательно выполняются логическим контроллером.
    Каждая инструкция представлена одной строкой программы и состоит из следующих компонентов: номер строки, текущее значение, которое можно увидеть только онлайн, оператор инструкции и операнд. Для понимания обратитесь к изображению ниже.

    Вы можете видеть, что каждая строка выполняет только одну операцию. Вместо контактов и катушек, используемых в релейной логике, у вас есть соответствующие инструкции загрузки и установки/сброса. Это смесь релейной логики и структурированного текста. Вот почему его также называют похожим на язык ассемблера. Когда вы подключаетесь к ПЛК онлайн, вы можете видеть анимированные значения в этом окне.
    Когда мы видим эти пять языков, мы видим, что большинство из них, которые обычно используются программистами, — это релейная логика, структурированный текст и функциональная блок-схема. У каждого языка есть свои достоинства и недостатки. Но эти три языка просты для понимания, интерпретации и проектирования. Это помогает программисту правильно проектировать логику.
    Это не значит, что оставшиеся два языка не используются. То, что он должен использовать для реализации кода, зависит от навыков программиста. Поэтому сложно прокомментировать лучший язык; но да, из этих трех также наиболее используемым является релейная логика.

    leizuofa
    Программирование ПЛК имеет много типов инструкций и операндов для выполнения логики. Одной из наиболее используемых инструкций является счетчик.
    Счетчик используется для подсчета чисел. Подсчет требуется для многих приложений; например, даже небольшая логика, такая как подсчет количества бутылок, пропущенных за минуту, требует счетчика. Если такому небольшому приложению нужен счетчик, то технологии автоматизации имеют в себе много более крупных типов логики, которые используют счетчики для использования. Таким образом, это важные типы инструкций, используемых в программировании ПЛК.
    Существуют две категории счетчиков — обычные счетчики и счетчики шагов. В этой статье мы узнаем разницу между обычными счетчиками и быстрыми счетчиками.
    Что такое обычный счетчик?
    В ПЛК нет официального термина, называемого обычным счетчиком. Это просто определение, используемое для отображения двух основных типов счетчиков — повышающий и понижающий. Как следует из названия, эти инструкции используются для подсчета чисел при подаче входного импульса.
    Предположим, у вас есть кнопка, и вы хотите посчитать, сколько раз она была нажата. Если вы понимаете, что мы пытаемся передать, нажатие означает, что она будет оставаться включенной, пока она нажата. Как только вы убираете ее, она выключается.
    Это означает, что это импульсный вход, и счетчик понимает только такие типы входов. Если вход остается постоянно включенным, то он не будет считать. Он считает только тогда, когда вход переходит из состояния «включено» в состояние «выключено», а затем снова повторяет ту же последовательность.

    См. изображение выше для понимания. Вход CU (count up) используется для увеличения счетчика при каждом получении входного сигнала. Поскольку это триггер, счет увеличивается при получении входного сигнала импульсного типа. Вход PV — это установленное значение. Пока установленные счетчики не достигнуты, выход счетчика (Q) будет оставаться выключенным. Когда установленное значение достигнуто, выход включается.
    Теперь, даже если задан входной сигнал счета, счет будет продолжать увеличиваться, а выход останется включенным. Чтобы выключить его, необходимо подать вход сброса, который сбрасывает счетчик и делает текущее значение нулевым. Это общая работа счетчика.
    Что такое быстрый счетчик?
    Быстрый счетчик такой же, как и обычный счетчик, но единственное отличие в том, что он считает очень быстрые типы входов. Предположим, у вас есть датчик приближения, который включается или выключается, например, 1000 раз за 30 секунд. Такие быстрые входы трудно обнаружить в обычном счетчике, так как у него меньшее время сканирования. Быстрый счетчик выполнит эту работу, быстро подсчитав количество импульсов, полученных на его входе.
    Подобно обычному счетчику, его выход включается после достижения установленного значения, и для сброса счетчика и отключения выхода требуется вход сброса. Быстрый счетчик может работать на частотах 5 кГц.
    Поскольку функциональные блоки быстрого счетчика управляются определенными аппаратными прерываниями, поддержание максимальной частоты дискретизации может различаться в зависимости от вашего конкретного приложения и конфигурации оборудования. Не все входы ПЛК можно использовать в качестве быстрых счетчиков; у него есть только несколько выделенных входов ПЛК для назначения функции быстрого счета.
    Как видите, единственное различие между этими двумя счетчиками — это скорость работы, поскольку обычный счетчик не может принимать быстрый тип ввода.

    leizuofa
    В этой программе ПЛК автоматическая работа двери разработана с использованием программирования ПЛК для открытия или закрытия двери при обнаружении объекта. Здесь объектом является не что иное, как автомобиль.
    Автоматическая работа двери
    Нижеприведенная симуляция показывает работу автоматической системы дверей.

    Входы и выходы
    Тип Номер устройства Название устройства Операция Вход X0 Нижний предел ВКЛ., когда дверь достигает нижнего предела. Вход X1 Верхний предел ВКЛ., когда дверь достигает верхнего предела. Вход X2 Датчик входных ворот ВКЛ., когда объект приближается к двери. Вход X3 Датчик выходных ворот ВКЛ., когда объект покидает дверь. Вход YO Дверь вверх Двигается вверх, когда YO ВКЛ. Выход Y1 Дверь вниз Двигается вниз, когда Y1 ВКЛ. Выход Y6 Свет горит, когда Y6 ВКЛ. Выход Y7 Зуммер Звучит, когда Y7 ВКЛ. (Лампа на экране горит). Описание программы
    Когда автомобиль приближается к входу, дверь поднимается. Датчик In-gate X2 используется для обнаружения присутствия автомобиля у входа.
    В момент проезда автомобиля дверь опускается. Датчик Out-gate X3 используется для обнаружения присутствия автомобиля после пересечения двери.
    Движение двери вверх останавливается, когда активируется верхний концевой выключатель (X1).
    Аналогично, движение двери вниз останавливается, когда активируется нижний концевой выключатель (X0).
    Дверь остается поднятой до тех пор, пока автомобиль обнаруживается в пределах диапазона входа (датчик In gate X2) и выхода (датчик Out X3).
    Зуммер (Y7) издает звуковой сигнал в качестве сигнала о движении двери.
    Пока автомобиль находится в пределах диапазона обнаружения, между датчиком In gate (X2) и датчиком Out (X3) горит свет (Y6).
    Состояние движения двери отображается включением или выключением четырех индикаторных ламп на панели управления.
    Возможно ручное управление дверью. Кнопки на панели управления можно нажимать, чтобы открыть (⬆Дверь вверх) или закрыть (⬇Дверь вниз) дверь.
    Программирование ПЛК


    leikang
    Счетчики — очень важная инструкция в программировании ПЛК. Она требуется практически в каждой логике. Будь то подсчет чего-либо или подсчет событий, счетчики составляют важную часть программирования ПЛК.
    Поскольку подсчет событий используется во многих приложениях, он помогает программистам ПЛК экономить время на написание громоздкого кода. Но часто требуется найти резервное решение для плана, если он не работает.
    В случае со счетчиками программист ПЛК также должен знать резервную логику, если он не работает должным образом. Для этого можно объединить и написать две инструкции — перемещение и сложение.
    В этой статье мы узнаем, как проектировать счетчики в программировании ПЛК с помощью инструкции перемещения и сложения.
    Счетчики
    Прежде всего, мы рассмотрим инструкцию счетчика и то, как она написана. Обратитесь к изображению ниже. Как вы можете видеть, счетчик имеет три входа — подсчет, сброс и установку значения; и имеет два выхода — выполнено и текущее значение.
    Вход счетчика необходим для подачи импульса на счетчик для его подсчета, вход сброса необходим для сброса счетчика, а установленное значение необходимо для подачи счетчику установленных счетчиков. Выход done используется для обозначения того, что счетчик закончил подсчет, а текущее значение показывает текущее значение счетчика, которое счетчик подсчитал до настоящего момента.

    Когда получен вход счетчика, счетчик увеличивается на значение. Вход счетчика работает на импульсной основе, а не на непрерывной основе. Когда счетчик достигает установленного счетчика, включается выходной бит done.
    Единственный способ затем выключить его — подать вход сброса. Значение счетчика станет равным нулю на этом входе, и счетчик сбрасывается из-за этого. Следует отметить, что даже если счетчик был достигнут, и вы все еще подаете вход счетчика, то счетчик также будет продолжать увеличиваться.
    Вы также можете увидеть, что после выхода счетчика используется блок сравнения, который позволяет ему перейти к последнему биту для включения. Это предотвращает ненужное включение последнего бита, если установленное число равно нулю.
    Проектирование счетчиков в ПЛК с помощью инструкции перемещения
    Теперь мы увидим, как написать этот же код с помощью инструкций перемещения и сложения. Обратитесь к изображению ниже. В первой ступени вход подсчета заменяется инструкцией сложения.
    Сложение произойдет, если входное условие истинно, и это также с импульсом. Импульс должен использоваться, в противном случае будет продолжаться непрерывное сложение, и не будет никакого контроля над ним.

    Во второй ступени он сравнивает, достигнуты ли установленные числа или нет. Он также проверяет, больше ли установленное число нуля или нет. Если эти условия истинны, то выход включается.
    В третьей ступени значение счетчика становится нулевым при получении соответствующих входов. Это равносильно операции сброса входа.
    Этих трех ступеней достаточно, чтобы повторить функцию счетчика. Вы можете использовать либо счетчик, либо эту логику ПЛК, в зависимости от ваших потребностей. Но следует отметить, что мы можем запрограммировать счетчик, написав его таким образом.
    Таким образом, мы увидели, как писать счетчики в программировании ПЛК с помощью инструкции перемещения и добавления.

    leikang
    В предыдущей статье мы говорили о том, что такое ПИД, а также объяснили различные параметры ПИД и то, как система будет реагировать на изменение этих параметров. В этой статье мы покажем, как программировать, настраивать и настраивать ПИД в вашем проекте TIA Portal.
    Содержание:
    Как добавить ПИД в вашу логику? Как настроить ПИД? Базовая настройка параметров процесса Расширенная настройка Как выполнить настройку ПИД? Предварительная настройка ПИД Тонкая настройка Каковы различные методы настройки ПИД? Как добавить ПИД в вашу логику?
    В TIA Portal и почти на любой другой платформе ПЛК вам не нужно программировать ПИД-регулятор, поскольку в TIA Portal уже есть встроенные блоки для ПИД. Чтобы добавить PID в вашу логику, вам просто нужно перетащить блок PID в ваш код и просто начать настраивать его для вашей системы.
    Добавление PID в ваш код очень просто, однако есть очень важный момент, который вы должны принять во внимание. Это интервал выполнения вашего PID.
    Как вы знаете, основной цикл выполнения происходит внутри основного циклического OB1, и время цикла OB1 зависит от многих факторов, таких как длина вашего кода, математические вычисления в вашем коде, а также циклы и последовательности, все эти различные факторы могут сделать время цикла вашего OB1 не только длинным, но и разным для каждого цикла, в зависимости от вашего кодирования.
    Это означает, что если вы вызвали свой блок PID внутри основного OB1, выполнение PID будет зависеть от времени цикла вашего OB1, и это не лучший подход.
    PID обычно используются для управления физическими параметрами, такими как давление, температура или скорость, и это означает, что ваш контроллер должен очень быстро определять любые изменения в значении вашего процесса и быстро реагировать, чтобы противодействовать этим изменениям и обеспечивать вам плавное стабильное управление, которое должен иметь PID. Поэтому, если PID добавляется в основной OB1 и на него влияет время его выполнения, ему могут потребоваться задержки действия, и это сделает вашу систему нестабильной.
    Что делать?
    Лучше всего вызывать ваш блок PID в циклическом прерывании OB и устанавливать время цикла этого циклического прерывания на любое значение, которое вы считаете подходящим для вашей системы, обычно в диапазоне миллисекунд в зависимости от вашего приложения. Это означает, что если вы установите циклическое прерывание, например, на 1 миллисекунду, ваш PID будет вызываться и выполняться каждую миллисекунду независимо от того, где находится основной цикл OB1.
    Итак, чтобы добавить PID в вашу логику, мы начнем с добавления нового циклического прерывания OB и дадим ему правильное имя. См. рисунок 1.

    Рисунок 1. Добавление циклического прерывания в ваш проект.
    На рисунке видно, что мы установили циклическое время на 1000 микросекунд или 1 миллисекунду. Таким образом, наш PID будет вызываться и выполняться каждую миллисекунду.
    Теперь, когда вы добавили свой циклический OB в проект, вы можете просто перетащить блок PID. Вы можете найти его на вкладке «Инструкции»/«Технология»/«Управление PID»/«Компактный PID». См. рисунок 2.

    Рисунок 2. Добавление блока PID.
    Теперь добавьте системные параметры в блок PID, вход, выход и заданное значение. См. рисунок 3.

    Рисунок 3. Назначьте параметры PID.
    Вы заметили на последней картинке, что у вас есть 2 разных входа и 3 разных выхода, что это?
    Вход:
    Это ваше входное значение параметра процесса в реальных физических величинах, мы будем использовать нашу систему моделирования резервуара, поэтому в этом случае вход здесь — это уровень заполнения резервуара в литрах. Это означает, что вы сделали масштабирование аналогового входа где-то в другом месте вашего проекта и просто предоставляете ПИД фактический уровень заполнения в литрах.
    Input_PER:
    Это входное значение параметра процесса, но оно поступает из модуля аналогового входа. Это означает, что оно не будет масштабироваться и будет находиться в диапазоне 0-27648, а масштабирование входа будет выполняться внутри ПИД.
    Выход:
    В этом случае ПИД даст вам выходное значение контроллера в диапазоне от 0% до 100% от максимального выходного значения.
    Output_PER:
    То же, что и input_PER, ПИД даст выход в виде 0-27648.
    Output_PWM:
    В этом случае ПИД будет выдавать свой выходной сигнал в виде импульсов ВКЛ/ВЫКЛ, так что либо есть выход, либо нет. И выходное значение тогда составляет 100%, когда он ВКЛ и 0%, когда он ВЫКЛ.
    Мы будем использовать ту же систему моделирования резервуара, которую использовали раньше, и, как вы можете видеть на предыдущем рисунке, мы использовали Input и Output_PER, поскольку наше моделирование построено таким образом.
    Как настроить ПИД?
    Чтобы войти в представление конфигурации ПИД, вы можете либо щелкнуть вкладку конфигурации в дереве проекта, либо нажать на небольшой значок конфигурации над самим блоком ПИД. См. рисунок 4.

    Рисунок 4. Вход в представление конфигурации.
    Это перенесет вас в функциональное представление, где вы можете настроить различные параметры вашего ПИД. См. рисунок 5.

    Рисунок 5. Настройка типа контроллера.
    Первая конфигурация — это тип контроллера, и здесь вы можете выбрать, какой тип управления вы хотите использовать, у вас есть много вариантов из показанных раскрывающихся меню, таких как температура, давление, длина и многое другое. Вы также можете установить его на общий, где система будет видеть ваши значения как %. В нашей системе мы контролируем литры воды внутри бака, поэтому мы выберем объем.
    Вы также можете установить ручной/автоматический режим ПИД.
    Далее вам нужно настроить параметры ввода/вывода. Смотрите рисунок 6.

    Рисунок 6. Параметры ввода/вывода.
    Здесь вы можете выбрать из различных типов входов или выходов, как мы объясняли ранее. Как мы сказали, мы будем использовать Input и Output_PER.
    Далее вам нужно настроить настройку значения процесса. Смотрите рисунок 7.

    Рисунок 7. Предел значения процесса.
    На этом этапе вы установите нижний и верхний пределы значения вашего процесса. Если вы выберете тип Input. Тогда эта настройка будет открыта для изменения, и вы сможете установить пределы вашего процесса. В нашем случае пределы резервуара составляют от 0 до 50 литров. Поэтому мы устанавливаем эти значения.
    Обратите внимание, что если вы выберете Input_PER, эта настройка будет вам недоступна, и вы сможете установить предел вашего процесса только на следующей вкладке. Смотрите рисунок 8.

    Рисунок 8. Масштабирование значения процесса.
    Если вы используете Input_PER, то, как вы видите на предыдущем рисунке, вы можете установить предел вашего значения процесса относительно имеющегося у вас масштабирования 0-27648.
    Если вы хотите настроить предупреждение, когда значение вашего процесса достигает нижнего или верхнего предела, вы можете настроить его на вкладке мониторинга значения процесса. Смотрите рисунок 9.

    Рисунок 9. Мониторинг значения процесса.
    Далее в списке настроек вы найдете пределы ШИМ, см. рисунок 10.

    Рисунок 10. Пределы ШИМ
    Здесь вы можете установить минимальное время включения и выключения вашего выхода, представьте, что у вас есть насос или клапан в вашей системе, которым ПИД управляет через выход ШИМ, вы не хотите, чтобы ПИД просто давал вашему насосу череду очень быстрого поведения ВКЛ/ВЫКЛ, потому что это, вероятно, приведет к тому, что ваш насос сгорит. Таким образом, вы можете указать ПИД из этой настройки, чтобы он включал насос на минимальное время, прежде чем закрыть его, и наоборот.
    Вы можете иметь такое же управление с вашим ПИД, если у вас нет выхода ШИМ из следующей настройки, пределов выходного значения. См. рисунок 11.

    Рисунок 11. Пределы выходного значения.
    Вы можете контролировать нижний и верхний пределы вашего управляющего выхода, например, вы можете сделать нижний предел 20%, и это заставит ПИД запустить насос как минимум на 20% его расхода. Таким образом, ваш диапазон управления будет от 20% до 100%.
    Наконец, и самое главное, вы можете установить параметры ПИД в режиме конфигурации из следующей вкладки, вкладки параметров ПИД, см. рисунок 12.

    Рисунок 12. Параметры ПИД.
    Здесь вы можете записать параметры настройки для ваших коэффициентов усиления ПИД P, I и D, если вы их знаете или если вы выполнили настройку самостоятельно и у вас есть параметры откуда-то еще. Вы также можете выбрать использование ПИД или просто ПИ-регулятора.
    Если у вас нет этих параметров, вы можете загрузить их автоматически после настройки вашего ПИД.
    Как выполнить настройку ПИД?
    Теперь, когда вы закончили настройку ПИД, вы можете так же легко настроить свой контроллер с вкладки ввода в эксплуатацию в дереве проекта. Смотрите рисунок 13.

    Рисунок 13. Ввод в эксплуатацию вашего ПИД
    На странице ввода в эксплуатацию ваш экран разделен на 3 части, на верхней странице вы можете начать предварительную и тонкую настройку ПИД.
    Посередине у вас будет область графика, которая покажет вам реакцию вашей системы в реальном времени. Вы можете видеть выход контроллера и значение процесса. И каждый раз, когда изменяется заданное значение, вы будете видеть поведение вашего ПИД, чтобы поймать это новое заданное значение. Даже если заданное значение не изменилось, но, например, увеличился спрос на поставку из нашего резервуара, вы увидите реакцию ПИД, чтобы удовлетворить этот спрос, а также поддерживать заданное значение на требуемом уровне.
    В третьей области у вас будет онлайн-статус вашего контроллера, и вы также можете выбрать режим работы вашего ПИД. Посмотрите следующее видео моделирования, демонстрирующее процедуру автоматической настройки ПИД в TIA Portal.
    Из видео вы можете увидеть, что после предварительной настройки наш ПИД нашел параметры P, I и D, которые лучше всего подходят для нашей системы. Вы можете увидеть, что при изменении уставки или расхода контроллер очень быстро отреагирует, чтобы вернуть уставку к требуемым значениям.
    Теперь вы можете загрузить параметры настройки непосредственно в свой проект простым нажатием кнопки, см. рисунок 14.

    Рисунок 14. Загрузите свои параметры.
    После загрузки своих параметров вы сможете найти их на вкладке параметров ПИД в представлении конфигурации. См. рисунок 15.

    Рисунок 15. Параметры ПИД.
    Следующим шагом должно стать выполнение процедуры тонкой настройки ПИД из того же представления ввода в эксплуатацию, однако, поскольку у нас нет реальной системы, и мы просто моделируем поведение резервуара и насоса с помощью математических расчетов, мы не можем выполнить шаг тонкой настройки.
    Когда у вас есть реальная система, вы можете выполнить тонкую настройку, при которой ваш ПИД попытается найти параметры, которые дадут системе лучший отклик и даже устранят перерегулирование вашего значения процесса и напрямую достигнут заданного значения.
    В будущем, если у нас будет реальная система, мы сможем показать, как она выглядит.
    Каковы различные методы настройки ПИД-регулятора?
    Вам не нужно выполнять настройку вашего ПИД с помощью TIA Portal; существует множество различных методов, которые пытаются найти наилучшие параметры ПИД для вашей системы. В основном это математические методы, основанные на пробах и ошибках. Я бы рекомендовал использовать функцию автоматической настройки в TIA Portal.
    Но вот некоторые из методов, используемых для достижения тех же параметров.
    Эвристическая настройка. Метод настройки Циглера-Николса Метод настройки Коэна-Куна Метод настройки Каппа-Тау Метод настройки Лямбда И несколько других. Заключение
    Используйте циклическое прерывание с вашими PID. Настройте ваш PID так, чтобы он наилучшим образом подходил вашей системе. Функция автонастройки в TIA Portal очень полезна и эффективна.

Apply for friendship links:WhatsApp or E-mail: admin@plchmis.com
×
×
  • Create New...