Jump to content

caixiaofeng

Staff group
  • Content Count

    147
  • Joined

  • Last visited

Community Reputation

0 Neutral

About caixiaofeng

  • Rank
    Intermediate PLC Programming Learner - 1
  1. В предыдущей статье мы обсуждали, что такое функциональный блок 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.
  2. При программировании ПЛК доступны различные структуры блоков, эти блоки включают функции 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 Вывод Глобальный блок данных может быть доступен из любого места и любым блоком, который существует в программе ПЛК. Вы можете объявить столько переменных, сколько захотите, внутри глобальной базы данных. Наиболее оптимальным методом является создание отдельных блоков данных для различных разделов вашей логики, чтобы было очень легко следовать вашей логике. Например, отдельный блок данных для всех переменных, которые необходимо прочитать или записать с помощью ЧМИ.
  3. В предыдущей статье мы говорили о блоках данных и обсудили два различных типа блоков данных: глобальный блок данных и экземпляры данных функциональных блоков 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, невозможны. Поскольку теперь есть адреса, а только уникальные символические имена для каждого тега. Вы можете определить отдельные теги как сохраняемые. В стандартных БД вы можете определить только весь блок как сохраняемый. Заключение Оптимизированные блоки данных имеют много преимуществ по сравнению со стандартными БД. Использование символических имен помогает избежать любых изменений адресов тегов при добавлении новых переменных в ваш блок. С оптимизированными блоками не теряется ни одна область памяти. В отличие от того, что происходит при использовании стандартных БД.
  4. В предыдущих статьях мы говорили о таймерах в ПЛК, различных типах и о том, как их использовать. Таймерам на самом деле не нужно реальное время для работы, так как они просто зависят от подсчета секунд или миллисекунд в зависимости от ваших настроек. Но для некоторых приложений вам нужно знать реальную дату и время программы ПЛК, например, для целей диагностики. В этой статье мы поговорим о системном и локальном времени ПЛК. Содержание: Зачем мне нужно реальное время в ПЛК? Пример программы и моделирования Что такое системное время? Что такое локальное время? Выводы. Зачем мне нужно реальное время в ПЛК? Во многих приложениях ПЛК вам нужно знать реальное время во время выполнения процесса по многим разным причинам. Ниже приведены некоторые из этих причин: Резервное копирование ПЛК на главный сервер. Для диагностики ПЛК вам необходимо иметь запись времени для диагностики, чтобы знать, в какое время произошло определенное событие, в противном случае диагностическая информация будет не очень полезной. Для приложений, где вам необходимо работать с прерываниями времени суток 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). Соответственно, модульное время всегда хранится без факторов «местный часовой пояс» или «летнее время» в часах ЦП. Затем часы ЦП вычисляют локальное время часов ЦП на основе модульного времени. Модульное время часов ЦП используется в качестве шаблона для всех временных процессов, начинающихся с ЦП. Примеры использования: Вычисление локального времени часов ЦП на основе модульного времени Представление модульного времени в локальном времени в разделе «Онлайн и диагностика» Записи в диагностическом буфере ЦП Местное время в ПЛК Информация о часовом поясе и начале летнего и стандартного времени, которую вы установили в конфигурации часов ЦП, используется для вывода локального времени. Местное время — это время, которое у вас установлено на ПК или в вашей стране, и которое будет отличаться в разных регионах. Заключение Многие приложения потребуют, чтобы ПЛК знал реальное или локальное время процесса, чтобы он мог выполнять определенные задачи, например, задачи регистрации данных и диагностики. В будущей статье мы покажем некоторые приложения, где для вашей логики необходимо реальное время Локальное время ПЛК следует настроить вручную, чтобы оно соответствовало области, где будет использоваться ПЛК.
  5. В предыдущих статьях мы обсуждали различные типы блоков в 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 раз.
  6. В этой статье мы поговорим о децентрализованной периферии или распределенном вводе-выводе, мы не будем рассматривать портал TIA, мы просто обсудим, что такое распределенный ввод-вывод и зачем он нам нужен. Содержание: Что такое внешняя периферия или распределенный ввод-вывод? Простой пример, объясняющий необходимость распределенного ввода-вывода. o 1 машина с ПЛК на машине. o 1 машина с ПЛК находится далеко в безопасном месте. o 2 или более машин с одним и тем же ПЛК o наличие уже установленной машины с разными модулями ввода-вывода (файлы GSD) заключение Внешняя периферия Устройства распределенного ввода-вывода — это устройства, используемые в системах автоматизации и управления. Они действуют как посредники между центральным контроллером (ПЛК) и различными датчиками и исполнительными механизмами, установленными в вашем процессе автоматизации. Представьте их как посланников, которые собирают информацию с датчиков и передают команды исполнительным механизмам. Распределенный ввод-вывод Этот распределенный подход упрощает проводку, вместо того, чтобы все провода шли напрямую к ПЛК, вы устанавливаете эти распределенные устройства ввода-вывода на стороне машины. Они собирают информацию с датчиков (например, температуры или движения) и отправляют команды исполнительным механизмам (например, двигателям или клапанам). Это обеспечивает бесперебойную работу всей системы, с меньшим количеством проводов, а также упрощает управление и расширение, что приводит к повышению гибкости системы. В следующем разделе мы воспользуемся несколькими примерами, чтобы объяснить идею и необходимость распределенного ввода-вывода более простым способом. Простой пример, чтобы объяснить необходимость распределенного ввода-вывода Предположим, что у нас есть производственная машина, эта машина управляется через ПЛК, любой тип ПЛК, см. рисунок 1. Рисунок 1. Производственная машина, управляемая через ПЛК. Как вы можете видеть, ПЛК, управляющий машиной, установлен на поле со стороны машины. Как мы знаем, ПЛК предназначены для работы в суровых условиях, поэтому не так уж и плохо установить ПЛК на стороне машины, поскольку мы знаем, что он сможет выдерживать различные условия эксплуатации, связанные с машиной, будь то высокая температура окружающей среды, влажность, вибрация и т. д. Теперь, что если нам нужно изменить наш процесс и усилить контроль над машиной, то есть нам нужно увеличить количество входов и выходов машины, это будет означать, что нам понадобится более крупный ПЛК с большим количеством входов/выходов или, по крайней мере, нам нужно будет добавить модули входов/выходов к текущему ПЛК. Вы должны знать, что добавление дополнительных модулей входов/выходов к текущему ПЛК будет зависеть от ПЛК, который вы выбрали для своего проекта, поскольку каждый ПЛК имеет максимальное количество входов/выходов, которое вы можете добавить к ПЛК. Итак, если дополнительное количество вводов-выводов, которое нам нужно, превысит максимальное количество вводов-выводов, которое я могу добавить в ПЛК, то мне придется приобрести более крупный ПЛК, и это будет означать переписывание вашего программного обеспечения для нового ПЛК или, по крайней мере, миграцию вашего проекта. Смотрите рисунок 2. рисунок 2. Более крупный ПЛК для нового расширения машины. Итак, с новым расширением нам пришлось приобрести более крупный ПЛК. ТЕПЕРЬ мы сказали, что ПЛК можно установить в полевых условиях, и он рассчитан на работу в суровых условиях, но обычно этого не происходит, и обычно ПЛК устанавливается далеко в хорошо кондиционированном и защищенном месте, например, в комнате ЦУД. Это означает, что каждый входной или выходной сигнал нашего процесса должен быть подключен со стороны машины к ПЛК в комнате ЦУД, поэтому, если у меня 100 сигналов вводов-выводов, мне придется протянуть 100 сигнальных кабелей между машиной и ПЛК. И если мне понадобится сделать какое-либо расширение в будущем, мне придется протянуть дополнительные новые кабели. Смотрите рисунок 3. Рисунок 3. Установка ПЛК внутри помещения MCC. Как вы можете видеть, теперь нам нужно протянуть кабель между ПЛК и машиной для каждого сигнала ввода-вывода, который есть в нашем процессе. Это может быть приемлемо для небольшой машины с небольшим количеством вводов-выводов, но не так уж и для большого процесса с большим количеством вводов-выводов. Поскольку это будет включать прокладку большого количества кабелей, это увеличит стоимость этого процесса, а также приведет к новым проблемам, которые необходимо решить, таким как кабельные каналы, совместимость с ЭМС, кабельные лотки и другие дополнительные соображения. И вот здесь внешние периферийные устройства или модули распределенного ввода-вывода становятся очень полезными. Смотрите рисунок 4. Рисунок 4. Использование устройства распределенного ввода-вывода. Модуль распределенного ввода-вывода — это просто модуль ввода-вывода, который может быть установлен на стороне машины для сбора всех входов процесса и отправки их в ПЛК, а также для получения выходного сигнала от ПЛК и отправки его в соответствующие исполнительные устройства. Как вы можете видеть на рисунке, соединение между ПЛК и машиной теперь осуществляется путем протягивания кабеля связи между устройством распределенного ввода-вывода и ПЛК. Устройства распределенного ввода-вывода имеют множество возможностей связи, в нашем примере мы предположили связь Profinet, отсюда и зеленый цвет. Использование устройства распределенного ввода-вывода даст вам преимущество расширения ваших технологических вводов-выводов без необходимости установки более крупного ПЛК. Вы просто добавите новые вводы-выводы к своему устройству, а связь между ПЛК останется прежней с использованием Profinet или любого другого метода связи. Вы даже можете управлять совершенно новой машиной с помощью того же ПЛК, вам просто нужно будет протянуть новый кабель связи от ПЛК к новой машине. См. рисунок 5. рисунок 5. Управление 2 машинами с помощью одного ПЛК. Как видите, для управления совершенно новой машиной с помощью моего ПЛК мне понадобится только один дополнительный кабель связи от ПЛК и машины. Конечно, вам нужно убедиться, что возможности вашего ПЛК позволяют обрабатывать и управлять двумя машинами. Еще один момент: распределенные вводы-выводы можно использовать с разными марками ПЛК, то есть я могу использовать разные марки распределенных вводов-выводов с ПЛК Siemens. См. рисунок 6. рисунок 6. Использование различных марок распределенных вводов-выводов. Как вы можете видеть на рисунке, одна машина использует распределенное устройство ввода-вывода SIEMENS, а другая машина использует распределенное устройство ввода-вывода Schneider, и обе они будут управляться через один и тот же ПЛК. Вывод Распределенные устройства ввода-вывода используются для расширения зоны действия системы управления, позволяя подключать большое количество датчиков и исполнительных механизмов на больших расстояниях. Распределенные вводы-выводы сокращают количество требуемых проводов по сравнению с традиционным соединением сигналов машины и ПЛК. В системе распределенных вводов-выводов легко добавлять или удалять устройства, что делает ее высокомасштабируемой и надежной.
  7. В предыдущей статье мы дали простое введение в концепцию распределенных устройств ввода-вывода, что они собой представляют и зачем они нам нужны. В этой статье мы покажем, как настроить распределенное устройство ввода-вывода в нашем проекте ПЛК. Как обычно, мы сосредоточены на системах Siemens и TIA Portal, поэтому мы покажем, как использовать распределенный ввод-вывод Siemens ET200S. Содержание: Аппаратная конфигурация распределенных устройств ввода-вывода. Назначьте модуль ввода-вывода контроллеру. Загрузите конфигурацию в фактический аппаратный модуль. Аппаратная конфигурация распределенных устройств ввода-вывода Аппаратная конфигурация любого распределенного устройства ввода-вывода просто означает назначение этого устройства ввода-вывода определенному контроллеру в вашем проекте, так что входной сигнал от этого ввода-вывода будет поступать на этот ПЛК, а выходная команда будет поступать с этого ПЛК. Давайте добавим ПЛК в наш проект и посмотрим, как мы можем действовать дальше. См. рисунок 1. рисунок 1. Добавьте ПЛК в наш проект. Как вы можете видеть из только что добавленного ПЛК, ПЛК уже имеет некоторые централизованные IO, но в этой статье мы предполагаем, что у нас есть часть машины, которая находится далеко, и мне нужно подключиться к ПЛК, в этом случае мы бы использовали устройство распределенного IO, которое будет установлено в части машины, и оно будет иметь все IO, связанные с этой частью машины, а затем устройство распределенного IO будет взаимодействовать с ПЛК через подходящий тип метода связи, например Profinet или Profibus. Распределенный IO в проекте ПЛК Давайте добавим наше устройство ET200S. См. рисунок 2. рисунок 2. Добавьте нужный вам модуль IO. Как вы можете видеть из рисунка, существует множество различных модулей IO, которые вы можете выбрать в зависимости от вашего приложения. Мы выберем стандартный модуль ET200S. См. рисунок 3. рисунок 3. Перетащите модуль ET200s Как вы можете видеть на рисунке, просто перетащите модуль ввода-вывода в сетевой вид вашего проекта. Обратите внимание, что мы выбираем интерфейс Profinet для модуля ввода-вывода, который будет таким же, как у нашего ПЛК. После добавления модуля ET200S в наш проект мы можем начать добавлять наши модули входов и выходов в ET200S, вы можете найти все модули ввода-вывода, совместимые с выбранным модулем, в строке каталога оборудования справа, см. рисунок 4. рисунок 4. Добавьте модули ввода-вывода в ET200S. Как вы можете видеть на рисунке, я могу добавлять модули ввода-вывода, перетаскивая их в пустые области. Максимальное количество входов/выходов, которые я могу использовать с ET200S, зависит от его типа и спецификации. Чтобы добавить модули входов и выходов, просто перетащите его из каталога оборудования справа, см. рисунок 5. рисунок 5. Перетащите нужные вам входы/выходы. Назначьте модуль ввода/вывода контроллеру Теперь, когда вы добавили модуль распределенного ввода/вывода в свой проект, вы заметите, что устройство ввода/вывода не назначено и не подключено ни к одному контроллеру. См. рисунок 6. Рисунок 6. Добавленный модуль ввода/вывода не назначен ПЛК. Другой способ увидеть, что модуль распределенного ввода/вывода не назначен ни одному контроллеру, заключается в том, что моим входам/выходам не назначены адреса. Так как он не подключен ни к одному контроллеру, см. рисунок 7. рисунок 7. Адреса не определены. Как вы можете видеть на рисунке, области адресов ввода-вывода пусты, что указывает на то, что они еще не назначены контроллеру. Поэтому нам нужно назначить модуль ввода-вывода ПЛК. Чтобы назначить модуль ввода-вывода контроллеру, нам нужно перейти в режим просмотра сети, выбрать модуль ввода-вывода, затем щелкнуть правой кнопкой мыши и нажать «Назначить новому ведущему устройству DP/контроллеру ввода-вывода», см. рисунок 8. рисунок 8. Назначьте модуль ввода-вывода контроллеру. После нажатия кнопки «Назначить новому ведущему устройству DP/контроллеру ввода-вывода» появится окно выбора контроллера ввода-вывода, в котором вы можете выбрать ПЛК, которому вы хотите назначить модуль ввода-вывода. В нашем проекте у нас только один контроллер, поэтому в окне будет отображаться только один вариант. См. рисунок 9. рисунок 9. Выберите окно контроллера ввода-вывода. После нажатия кнопки ОК модуль ввода-вывода будет назначен ПЛК. И теперь, если вы проверите вид устройства модуля ввода-вывода, вы увидите, что теперь входам и выходам назначены адреса в проекте, что означает, что теперь они принадлежат определенному контроллеру ПЛК. См. рисунок 10. Рисунок 10. Теперь модулю ввода-вывода назначены адреса. Загрузите конфигурацию в фактический аппаратный модуль И вот как вы можете выбрать и настроить распределенный модуль ввода-вывода и назначить его ПЛК в своем проекте. Однако есть кое-что, что вы должны знать, ДА, мы назначили наш модуль ввода-вывода ПЛК, но это было сделано только на стороне программного обеспечения (TIA Portal). Фактическое аппаратное устройство ввода-вывода по-прежнему не знает, что оно назначено этому ПЛК. Это означает, что если я загрузил свой проект в ПЛК, он будет скомпилирован и успешно загружен, но когда ПЛК потребуется связаться с устройством ввода-вывода, чтобы получить вход или дать команду вывода, он не сможет найти устройство, даже если между ними есть кабель связи. И ПЛК выдаст ошибку. Чтобы решить эту проблему, мне нужно сделать что-то под названием «НАЗНАЧИТЬ ИМЯ УСТРОЙСТВА» Чтобы сделать это, просто щелкните правой кнопкой мыши по устройству ввода-вывода и нажмите «Назначить имя устройства», это откроет следующее окно, см. рисунок 11. рисунок 11. Назначить имя устройства. Когда вы нажмете на «Назначить имя устройства», появится окно «Назначить имя устройства PROFINET». См. рисунок 12. рисунок 12. Окно «Назначить имя устройства». Эта процедура выполняется с помощью аппаратных устройств, но поскольку у нас нет аппаратного компонента и мы только имитируем, мы не можем его здесь увидеть. Но, просто когда вы выбираете интерфейс ПК/ПГ и нажимаете «Обновить», вы должны найти свое устройство ввода-вывода, затем вы просто выбираете «Назначить имя устройства», чтобы назначить имя устройства фактическому аппаратному модулю ввода-вывода. После этого вы можете использовать это устройство ввода-вывода как обычный ввод-вывод ПЛК. И вы можете найти модуль ввода-вывода внутри дерева проекта ПЛК, потому что теперь он является частью ПЛК. Смотрите рисунок 13. Рисунок 13. Модуль ввода-вывода принадлежит дереву проекта ПЛК.
  8. В предыдущих статьях мы представили концепцию распределенных модулей ввода-вывода и то, как настроить модуль ввода-вывода с ПЛК. В этой статье мы покажем, как реализовать распределенное совместное использование ввода-вывода между системами ПЛК. Содержание: Описание проблемы. Совместное использование устройства ввода-вывода с двумя ПЛК. Назначение различных внутренних модулей ПЛК. Описание проблемы В предыдущей статье мы показали, как можно подключить и настроить модуль распределенного ввода-вывода с ПЛК и управлять точками ввода-вывода распределенного модуля через этот ПЛК. В этой статье мы обсудим случай, когда нам нужно использовать один и тот же модуль распределенного ввода-вывода с двумя разными ПЛК. См. рисунок 1. Рисунок 1. Два разных проекта ПЛК. Распределенное совместное использование ввода-вывода между системами ПЛК Представьте, что нам нужно совместно использовать входы и выходы распределенного модуля между двумя ПЛК. Совместное использование распределенного модуля ввода-вывода между двумя ПЛК возможно, но не все модули могут это сделать, но большинство современных могут. Другой способ совместного использования информации — получить всю информацию из распределенного ввода-вывода в один ПЛК и установить связь между двумя ПЛК, а затем обменяться необходимыми данными. Это будет показано в другой статье. В распределенном устройстве ввода-вывода (IO device_1) мы настроили много модулей ввода-вывода, таких как модуль 4DIx24VDC, модуль 8DOx24VDC, модуль 2DIx24VDC и еще несколько модулей. См. рисунок 2. рисунок 2. Различные модули ввода-вывода в нашем устройстве ввода-вывода. Совместное использование устройства ввода-вывода с двумя ПЛК В этой статье мы предположим, как вы видите на рисунке, что мы хотим управлять модулем 4DIx24VDC и модулем 8DOx24VDC через ПЛК_1, а я хочу управлять модулем 2DIx24VDC и модулем 2DOx24VDC из ПЛК_2. Поэтому я хочу совместно использовать разные модули между двумя ПЛК, отсюда и названия устройств совместного использования. Как вы можете видеть на рисунке 1, распределенное устройство ввода-вывода (устройство ввода-вывода_1) уже является расширением ПЛК_1, как мы настроили в предыдущей статье, но нам также нужно сделать его расширением ПЛК_2, чтобы его можно было совместно использовать между двумя ПЛК. См. рисунок 3. рисунок 3. Устройство ввода-вывода является расширением ПЛК_1 Обычно при этом мы бы размещали каждый ПЛК в отдельном проекте TIA Portal, но поскольку у нас нет реальных аппаратных устройств, мы просто используем один программный проект TIA Portal, чтобы показать, как совместно использовать распределенный модуль ввода-вывода между двумя ПЛК. У нас есть один проект с двумя ПЛК. И нам нужно назначить IO device_1 для ПЛК_1 и ПЛК_2 Для этого скопируйте модуль в представлении «Сеть» и вставьте его, чтобы в вашем проекте было два модуля. См. рисунок 4. рисунок 4. Скопируйте и вставьте устройство ввода-вывода. Теперь нам нужно назначить это устройство ввода-вывода для ПЛК_2, как мы делали с ПЛК_1 в предыдущей статье. См. рисунок 5. рисунок 5. Назначьте модуль ПЛК_2 ТЕПЕРЬ, если вы попытаетесь загрузить свой проект на оба ПЛК, ПЛК_1 сможет найти модуль ввода-вывода. Однако ПЛК_2 не сможет найти модуль ввода-вывода, потому что нет фактического аппаратного модуля с именем IO device_2, у нас есть только одно аппаратное устройство ввода-вывода, и из последней статьи оно было настроено с именем IO device_1, поэтому ПЛК_2 не найдет устройство ввода-вывода. См. рисунок 6. рисунок 6. Подключение осуществляется через сетевое имя устройства. Итак, нам нужно дать одинаковое сетевое имя устройства обоим модулям ввода-вывода, см. рисунок 7. рисунок 7. Имя сетевого устройства Как вы можете видеть, имя сетевого устройства для модуля ввода-вывода — IO device_1, см. рисунок 8 для другого модуля ввода-вывода. рисунок 8. Имя сетевого устройства для второго модуля ввода-вывода. Здесь сетевое имя — IO device_2. Нам нужно дать обоим модулям ввода-вывода одинаковое имя, чтобы оба ПЛК могли его найти и подключиться к нему. Отключите опцию автоматической генерации имени, чтобы мы могли изменить имя и сделать оба модуля IO device_1, также убедитесь, что вся информация внутри красной области одинакова в обоих модулях. См. рисунок 9. рисунок 9. Отключите опцию автоматической генерации. Проверьте изображения 10a и 10b после того, как мы изменили информацию, чтобы она была одинаковой для обоих модулей. Фото 10a. 2-й модуль ввода-вывода. Фото 10b. 1-й модуль ввода-вывода Теперь, когда два модуля ввода-вывода идентичны, оба ПЛК могут найти модуль ввода-вывода и взаимодействовать с ним. Смотрите изображение 11. фото 11. Оба ПЛК могут найти модуль ввода-вывода. До этого момента мы предполагали, что оба ПЛК находятся в одном проекте TIA Portal. Но в случае, если мы совместно используем модуль ввода-вывода с контроллером в другом проекте TIA Portal, мы сделаем то же самое, что и раньше, но добавим дополнительный шаг. На этом этапе мы перейдем к свойствам модуля ввода-вывода и изменим параметр цикла ввода-вывода общего устройства, как показано на рисунке 12. рисунок 12. Контроллер ввода-вывода вне проекта Как вы можете видеть на рисунке, если два ПЛК принадлежат разным проектам TIA Portal, мы изменим значение внутри красного поля на 1. Поскольку оба ПЛК находятся в одном проекте, мы оставим его равным нулю. Теперь, когда оба ПЛК могут видеть устройство ввода-вывода и взаимодействовать с ним, нам нужно указать модулю ввода-вывода, какие внутренние модули должны взаимодействовать с каким ПЛК. Как мы уже упоминали на рисунке 2, нам нужны модуль 4DIx24VDC и модуль 8DOx24VDC для связи с ПЛК_1, и я хочу управлять модулем 2DIx24VDC и модулем 2DOx24VDC из ПЛК_2. Это можно сделать, выполнив следующие шаги. Назначение различных внутренних модулей ПЛК Начнем с перехода к свойствам устройства ввода-вывода_1, вы увидите, что все внутренние модули устройства ввода-вывода принадлежат ПЛК_1. См. рисунок 13. рисунок 13. Совместное устройство модуля ввода-вывода. Как вы можете видеть на рисунке, доступ ко всем внутренним модулям устройства ввода-вывода назначен ПЛК_1, но, как мы уже упоминали ранее, нам нужно, чтобы последние два внутренних модуля, модуль 2DIx24VDC и модуль 2DOx24VDC, были доступны ПЛК_2. Для этого просто щелкните правой кнопкой мыши нужный модуль и снимите флажок ПЛК_1, а затем сделайте его пустым, чтобы указать, что этот модуль будет управляться через другой контроллер. См. рисунок 14. рисунок 14. Снимите флажок внутренних модулей. Если вы проверите обзор устройства устройства ввода-вывода_1 после снятия флажка ПЛК_1, вы увидите, что этим внутренним модулям не назначена адресация с ПЛК_1, что указывает на то, что они принадлежат к другому устройству. См. рисунок 15. фото 15. Нет адресации для модулей, не назначенных ПЛК_1 ТЕПЕРЬ мне нужно назначить эти два модуля устройству ввода-вывода_2 для ПЛК_2. Выполнив те же шаги, что и раньше, перейдите в свойства общего устройства устройства ввода-вывода_2 и назначьте только два необходимых модуля с помощью ПЛК_2. См. рисунок 16. фото 16. Назначьте необходимые модули с помощью ПЛК_2 Теперь, когда модуль 2DIx24VDC и модуль 2DOx24VDC назначены для ПЛК_2, если вы проверите обзор устройств, вы увидите их адресацию с помощью ПЛК_2, как мы и хотели. См. рисунок 17. рисунок 17. Адресация принадлежит ПЛК_2 Вот как мы можем совместно использовать один модуль ввода-вывода между двумя ПЛК, независимо от того, находятся ли они в одном проекте TIA Portal или в двух разных проектах.
  9. В этой статье мы обсудим еще один способ связи между двумя ПЛК, независимо от того, находятся ли они в одном проекте или в двух разных проектах ПЛК. В этой статье мы поговорим о команде PUT в Siemens ПЛК, которую можно использовать для отправки или помещения данных из одного ПЛК во второй ПЛК. Что такое команда PUT? В общем, команда PUT — это встроенный функциональный блок TIA Portal FB, который используется исключительно для ЦП семейства S7 для помещения данных из локального ПЛК в удаленный партнерский ПЛК. При использовании команды PUT у меня будет два ПЛК, где мне нужно будет отправить данные из одного ПЛК, называемого локальным, в другой ПЛК, называемый партнерским. Необходимо выполнить некоторые настройки для партнерского ПЛК, чтобы обеспечить к нему доступ для другого ПЛК. В дополнение к соединению Profinet между ПЛК. Мы создадим пример проекта, чтобы показать, как использовать команду PUT. Команда PUT в ПЛК Siemens Предположим пример проекта, в котором у нас есть два ПЛК в одном проекте, ПЛК_1, который будет действовать как локальный ПЛК, и ПЛК_2, который является партнерским ПЛК. Мы хотим записать целое число из локального в партнерский ПЛК. Пример проекта ПЛК Сначала создадим новый проект и добавим два ПЛК. Смотрите рисунок 1. рисунок 1. Добавьте локальный и партнерский ПЛК. Теперь мне нужно настроить ПЛК_2, который будет получать данные, чтобы иметь возможность получать эти данные. А ПЛК_1 будет использоваться с командой PUT. Первое, что мне нужно сделать, это разрешить доступ команды PUT к ПЛК_2, который будет получать данные. Смотрите рисунок 2. рисунок 2. Разрешить доступ к команде PUT. Как вы видите на рисунке, мы разрешаем команде PUT доступ к ПЛК_2 из свойств ПЛК_2, в опции «Защита и безопасность» нажмите на «Разрешить доступ с помощью связи PUT/GET от удаленного партнера» Теперь мне разрешено помещать данные от любого удаленного партнера в ПЛК_2 с помощью команды PUT. Второй шаг — подготовить пространство или память в ПЛК_2 для данных, которые будут помещены в него. Предположим, что мы хотим поместить целочисленное значение в этот ПЛК, поэтому я подготовлю память в соответствии с этим. См. рисунок 3. рисунок 3. Подготовка области для приема данных. И это все; это вся конфигурация, которую вам нужно подготовить со стороны ПЛК_2, чтобы иметь возможность получать данные с помощью команды PUT. Далее мы настраиваем данные, отправляемые с ПЛК_1. Мы создадим блок данных для хранения данных, отправляемых в ПЛК_2, и внутри этого блока данных мы определим целочисленный тег для PUT в ПЛК_2. Смотрите рисунок 4. рисунок 4. Создайте блок данных для хранения отправленных данных. Мы определили целочисленный тег «SendMeToПЛК_2», который мы хотим отправить в ПЛК_2. Смотрите рисунок 5. рисунок 5. Определите данные для отправки. Обратите внимание, что для ПЛК_1 нам не нужно разрешать доступ с опцией команды PUT. Мы активируем эту функцию в ПЛК, который будет получать данные, а не в ПЛК, который будет их отправлять. Теперь давайте используем команду PUT в нашем программировании, в главном OB1 мы перетащим команду PUT FB. См. рисунок 6. рисунок 6. Добавьте команду PUT в OB1. Обратите внимание, что команда PUT находится в папке связи S7, так как это эксклюзивная функция для ПЛК семейства S7, поскольку она связана с проблемами безопасности. Помните, на рисунке 2, когда мы разрешили использование команды PUT, она была в атрибуте «Безопасность и защита» свойств ПЛК, так как она связана с безопасностью и защитой ПЛК. Команда PUT по сути является функциональным блоком, поэтому при добавлении ее в мою логику мне будет предложено создать экземпляр данных. См. рисунок 7. рисунок 7. Создайте экземпляр данных для команды PUT. После нажатия кнопки «ОК» команда PUT теперь добавлена в вашу логику ПЛК. См. рисунок 8. рисунок 8. Команда PUT После того, как мы добавили команду PUT, теперь нам нужно ее настроить, у нас есть два параметра для настройки команды PUT. Соединение между ПЛК Блок, который будет PUT из ПЛК_1 в ПЛК_2 Чтобы перейти к конфигурационному виду команды PUT, нажмите на маленькую синюю иконку, показанную на последнем рисунке. В параметре соединения вы установите связь между локальным (ПЛК_1) и партнерским (ПЛК_2) ПЛК. См. рисунок 9. рисунок 9. Параметр соединения. Как вы можете видеть, локальный ПЛК установлен на ПЛК_1, который является ПЛК, где используется команда PUT. Сторона партнера все еще пуста, и именно там мы должны назначить ПЛК_2. Если вы щелкните по раскрывающемуся списку, у вас будет два варианта для партнера. См. рисунок 10. рисунок 10. Партнерское соединение Партнер — это ПЛК, который будет получать данные; вы увидите, что у вас есть два варианта выбора: ПЛК_2 [CPU 1516-3 PN/DP] Не указано Поскольку оба ПЛК находятся в одном проекте, когда я выбираю вариант ПЛК_2, все параметры соединения будут автоматически заполнены. см. рисунок 11. рисунок 11. ПЛК_2 как партнер С другой стороны, если партнерский ПЛК из другого проекта, то я выберу опцию «Не указано», и в этом случае мне придется заполнить некоторые данные, такие как IP-адрес партнерского ПЛК. Смотрите рисунок 12. рисунок 12. Неуказанный партнер Как вы можете видеть, в этом случае мне нужно заполнить некоторые данные, такие как IP-адрес, а также добавить подсеть для ПЛК_1. Чтобы добавить подсеть для ПЛК_1, мы перейдем в свойства Profinet ПЛК_1 и выберем опцию добавления подсети. Смотрите рисунок 13. рисунок 13. Добавить подсеть. После этого будет выполнена настройка параметров подключения. См. рисунок 14. Имя соединения должно быть уникальным для каждой команды PUT, которую вы создаете, TIA Portal автоматически присвоит ему новое имя, но, возможно, вам лучше назначить более подходящее имя для соединения в вашем проекте. Мы оставили его таким, какой он есть. фото 14. Параметры соединения готовы Следующий шаг в настройке команды PUT — настройка параметров блока. В этих параметрах мы указываем триггер для команды PUT, то есть какой сигнал запустит действие команды PUT. А также какие данные будут помещены из ПЛК_1 и где они будут храниться в ПЛК_2. См. рисунок 15. фото 15. Настройка параметров блока Для сигнала Start Request (REQ) мы определили входной тег (SendData %I0.0). И как мы уже упоминали ранее, мы уже определили тег, который будет отправлен в ПЛК_2, и где он будет храниться внутри ПЛК. Завершение конфигурации параметров блока завершит конфигурацию команды PUT. Смотрите рисунок 16. рисунок 16. Вызов команды PUT Итак, вкратце, когда срабатывает сигнал REQ, данные в SD_1 будут отправлены в ADDR_1.
  10. В предыдущей статье мы говорили о команде PUT и о том, как мы используем ее для связи между двумя ПЛК, если они находятся в одном проекте или в двух разных проектах. В этой статье мы поговорим о команде GET, используемой для проекта связи Siemens ПЛК-to-ПЛК для обмена данными. Что такое команда GET? Так же, как и команда put, команда GET является встроенным функциональным блоком TIA Portal FB, который используется исключительно для ЦП семейства S7 для получения данных от удаленного партнерского ПЛК к локальному ПЛК. В отличие от команды PUT, вместо помещения данных из ПЛК_1 в ПЛК_2 команда GET будет получать данные из ПЛК_2 в ПЛК_1. При использовании команды GET у меня будет два ПЛК, где мне нужно будет получить данные из одного ПЛК, называемого партнером, в другой ПЛК, называемый локальным. Локальный ПЛК – это место, где будет запрограммирована команда GET. В дополнение к соединению Profinet между двумя ПЛК. Некоторые настройки должны быть выполнены для ПЛК-партнера, чтобы другой ПЛК мог получить к нему доступ. Мы создадим пример проекта, чтобы показать, как использовать команду GET. Проект связи между ПЛК Siemens Мы предположим пример проекта, в котором у нас есть два ПЛК в одном проекте, ПЛК_1, который будет действовать как локальный ПЛК, и ПЛК_2, который является ПЛК-партнером. Чтобы создать ситуацию, в которой нам нужно использовать команду GET, мы предположим, что мы хотим прочитать/получить целое число из ПЛК-партнера в локальный ПЛК_1. Сначала давайте создадим новый проект и добавим два ПЛК. См. рисунок 1. рисунок 1. Создайте новый проект и добавьте два ПЛК. Теперь нам нужно настроить ПЛК-партнер для включения доступа GET из ПЛК_1. Нам также нужно подготовить данные, которые будут перемещены из ПЛК_2 в ПЛК_1. Сначала нам нужно разрешить доступ команды GET к ПЛК_2, который будет предоставлять данные. Смотрите рисунок 2. рисунок 2. Разрешить доступ команды GET. Как вы видите на рисунке, мы разрешаем команде GET доступ к ПЛК_2 из свойств ПЛК_2, в опции «Защита и безопасность» нажмите на «Разрешить доступ с помощью связи PUT/GET от удаленного партнера» Теперь мне разрешено читать/получать данные из партнера ПЛК_2 с помощью команды GET. ДАЛЕЕ мы хотим создать данные, которые будут перемещены в ПЛК_1, мы предположили, что ПЛК_1 хочет получить целое число из ПЛК_2. Мы определим целочисленный тег с именем «SendDataToПЛК_1», этот целочисленный тег будет считан из ПЛК_2 в ПЛК_1. См. рисунок 3. рисунок 3. Определите данные для перемещения в ПЛК_1 И это все; это вся конфигурация, которую вам нужно подготовить со стороны ПЛК_2, чтобы иметь возможность получать данные через команду GET. ТЕПЕРЬ мы переходим к ПЛК_1, в ПЛК_1 мы хотим создать логику, в которой мы используем команду GET для чтения данных из ПЛК_2. Как мы делали в предыдущей статье, мы просто перетащим команду GET в наш главный OB1. См. рисунок 4. рисунок 4. Перетащите команду GET Обратите внимание, что команда GET находится в папке связи S7, так как это эксклюзивная функция для семейства ПЛК S7, поскольку она связана с проблемами безопасности. Помните, на рисунке 2, когда мы разрешили использовать команду GET, она была в атрибуте «Безопасность и защита» свойств ПЛК, поскольку она связана с безопасностью и защитой ПЛК. Когда вы перетаскиваете команду GET в свой, вам будет предложено создать экземпляр блока данных, поскольку команда GET по сути является функциональным блоком FB. Смотрите рисунок 5. рисунок 5. Создайте экземпляр данных для команды GET. Теперь, когда мы добавили команду GET в нашу логику, нам нужно начать настраивать блок GET, как мы делали это ранее с командой put. Чтобы открыть представления конфигурации команды GET, нажмите на маленький синий значок в верхней части блока. Смотрите рисунок 6. рисунок 6. Откройте представление конфигурации. У нас есть два основных параметра для настройки: параметр соединения и параметр блока. Смотрите рисунок 7. рисунок 7. Конфигурация блока GET. Как вы можете видеть на рисунке, локальный ПЛК — это ПЛК, где вызывается команда GET. В то время как партнерский ПЛК — это тот, который предоставит данные, он также тот, для которого мы разрешили доступ GET. В нашем проекте партнерский ПЛК — это ПЛК_2. Вы также можете видеть на рисунке, что партнер пуст, и нам нужно выбрать ПЛК. Смотрите рисунок 8. рисунок 8. Другой вариант в списке партнеров Как вы можете видеть, у нас есть два разных варианта для выбора партнерского ПЛК. Не указано, когда ПЛК принадлежат к разным проектам TIA Portal, а если ПЛК принадлежат к одному и тому же проекту TIA Portal, то вы найдете другой ПЛК в списке. При выборе опции ПЛК_2, поскольку наши ПЛК находятся в одном проекте, конфигурация соединения будет заполнена автоматически. См. рисунок 9. рисунок 9. ПЛК_2 как партнер Поскольку оба ПЛК находятся в одном проекте, при выборе опции ПЛК_2 все параметры соединения будут заполнены автоматически. С другой стороны, если партнерский ПЛК из другого проекта, то я выберу опцию Unspecified, и в этом случае мне придется заполнить некоторые данные, такие как IP-адрес партнерского ПЛК. См. рисунок 10. рисунок 10. Партнерский ПЛК как неуказанный. Как видите, когда партнер не указан, то вам нужно вручную добавить некоторую информацию, такую как IP-адрес партнерского ПЛК. Вы также можете увидеть, что нам нужно добавить подсеть к локальному ПЛК_1. Для этого просто перейдите в свойства Profinet ПЛК_1 и выберите добавление новой подсети. См. рисунок 11. Рисунок 11. Добавление подсети для ПЛК_1 После добавления новой подсети в ПЛК_1 настройка параметров соединения будет завершена. См. рисунок 12. рисунок 12. Параметры соединения завершены. Следующая конфигурация, о которой нам нужно позаботиться, — это параметр блока. В параметре блока мы определяем данные, которые будут перемещены между двумя ПЛК, а также сигнал запуска, который позволит начать выполнение блока GET. См. рисунок 13. рисунок 13. Параметр блока. Как вы можете видеть, нам нужно определить сигнал запуска для блока GET, а также определить, какие данные будут перемещены из ПЛК_2 (область чтения ADDR_1) и куда эти данные будут отправлены (область хранения RD_1). Мы уже определили ADDR_1, перед которым находится целочисленный тег SendDataToПЛК_1, который мы определили внутри ПЛК_2. ТЕПЕРЬ мы определим область хранения для этого целочисленного тега и сигнала запуска. Смотрите рисунок 14. рисунок 14. Определение сигнала запуска и области хранения После того, как мы определили сигнал запуска, ADDR_1 и RD_1, мы заполним эти параметры в конфигурации блока. Смотрите рисунок 15. Рисунок 15. Заполнение параметра блока Теперь конфигурация блока GET завершена, и вы можете видеть, что блок теперь готов к загрузке и запуску. См. рисунок 16. рисунок 16. Блок GET Блок GET теперь настроен, и как только сигнал триггера активен, блок считывает ADDR_1 из ПЛК_2 и записывает его в RD_1 в ПЛК_1.
  11. В предыдущих статьях мы начали обсуждать различные способы связи между двумя или более ПЛК, до сих пор мы говорили о функции I-device, а также о командах PUT и GET, которые были методами, эксклюзивными для ПЛК Siemens. Связь между ПЛК Siemens и другими ПЛК В этой статье мы обсудим другой способ соединения двух ПЛК вместе, этот способ имеет больше преимуществ, чем команды PUT и GET, которые мы обсуждали ранее, поскольку противоположны командам PUT/GET, которые были эксклюзивными для семейства S7. Этот новый метод представляет собой открытую пользовательскую коммуникацию, то есть мы можем использовать его для связи между ПЛК SIEMENS и любым другим брендом ПЛК, это даже не обязательно должны быть два ПЛК, этот метод может связываться между ПЛК и любым другим устройством, которое может понимать сетевой протокол TCP, таким как ПК, серверы, принтеры и т. д. В этой статье мы покажем, как настроить связь между двумя ПЛК с помощью блоков TCON и TDISCON, а в следующей статье мы покажем, как перемещать данные между ПЛК после настройки соединения. Открытые пользовательские коммуникационные блоки TCON и TDISCON Мы используем блок TCON для настройки и установления коммуникационного соединения между двумя ПЛК. После настройки и установки соединения оно автоматически поддерживается ПЛК. Оба партнера по коммуникации вызывают инструкцию TCON для настройки и установления коммуникационного соединения. Это означает, что мне нужно вызвать блок TCON в обоих ПЛК, и нам нужно настроить блок в обоих ПЛК, как мы увидим в примере проекта. Во время конфигурации блока мы укажем, какой партнер является активной конечной точкой связи, а какой — пассивной. Это означает, что какой ПЛК попытается подключиться, а какой откроет порт связи и будет ждать другой. Существующее соединение завершается, а установленное соединение удаляется, когда выполняется блок TDISCON или когда ЦП переходит в режим STOP. Чтобы настроить и установить соединение снова, вам нужно будет снова выполнить TCON. Пример проекта ПЛК с использованием TCON Как мы уже объясняли в предыдущих статьях, для настройки связи между двумя ПЛК нам нужно установить две вещи: Связь между ПЛК. Передача данных между двумя ПЛК. В этой статье мы настроим открытую пользовательскую связь с протоколом TCP между двумя ПЛК с использованием блока TCON. В следующей статье мы покажем, как перемещать данные после установки соединения. Сначала давайте создадим новый проект и добавим два наших ПЛК. Мы добавим CPU1516-3PN/DP ПЛК и назовем их ПЛК_1 и ПЛК_2, и цель состоит в том, чтобы установить соединение между ними. Смотрите рисунок 1. рисунок 1. Добавьте ПЛК_1 и ПЛК_2. Теперь мы просто добавим блок TCON в нашу логику ПЛК, как мы уже упоминали ранее, нам нужно вызвать TCON для обоих ПЛК, давайте начнем с ПЛК_1. Просто перетащите блок TCON, который вы найдете в открытой папке пользовательской связи. Смотрите рисунок 2. рисунок 2. Перетащите инструкцию TCON Блок TCON по сути является функциональным блоком, поэтому при добавлении его в мой основной OB1 нам будет предложено создать экземпляр блока данных для этого блока. Создайте экземпляр данных и дайте ему правильное имя. См. рисунок 3. рисунок 3. Создание экземпляра данных. Теперь блок TCON добавлен в вашу логику, нам нужно настроить параметр соединения для блока. Просто нажмите на маленький синий значок конфигурации над блоком. См. рисунок 4. рисунок 4. Открыть представление конфигурации При нажатии на синий значок вы откроете представление конфигурации для блока TCON, где мы можем настроить параметр соединения. Вы найдете его почти таким же, как параметр соединения команд PUT и GET. См. рисунок 5. рисунок 5. Параметр соединения TCON. Параметры партнерского ПЛК в блоке TCON имеют больше параметров, чем у команд PUT/GET, поскольку мы используем открытое взаимодействие пользователей. См. рисунок 6. рисунок 6. Параметры партнерского ПЛК Как вы можете видеть на рисунке, у нас есть 4 различных параметра, а именно: ПЛК_2: если оба ПЛК находятся в одном проекте, здесь будет показан ПЛК_2 Трансляция: это сделает соединение доступным для любого устройства в сети Многоадресная передача: это сделает соединение с выбранными устройствами, более чем одним устройством, но не всеми из них Не указано: если ПЛК находится в другом проекте TIA Portal. При выборе не указанного параметра нам будет предложено добавить IP-адрес ПЛК, а также нам нужно будет добавить новые данные о подключении. См. рисунок 7. рисунок 7. Добавить новые данные о подключении Как вы можете видеть на рисунке, чтобы создать новые данные о подключении, просто щелкните стрелку раскрывающегося списка и нажмите «Новый». Это создаст новый блок данных соединения, и он будет автоматически назначен блоку TCON, см. рисунок 8. рисунок 8. Блок данных соединения создан. Как вы видите, был создан блок данных о подключении, теперь мне нужно добавить IP-адрес партнерского ПЛК. Еще нам нужно выбрать, какой ПЛК будет активным устанавливающим соединение. Это определит, какой ПЛК будет отвечать за установление соединения, а другой в этом случае будет отвечать только за открытие порта подключения. Смотрите рисунок 9. рисунок 9. Назначьте ПЛК_1 активным устанавливающим соединение. Поскольку мы выбираем ПЛК_1 активным устанавливающим соединение, то ПЛК_2 будет отвечать за открытие порта подключения, и мне нужно выбрать значение для этого порта. Это может быть любое значение, но в TIA Portal оно автоматически назначается как 2000, поэтому мы оставим все как есть. Смотрите рисунок 10. Рисунок 10. Порт партнера. На предыдущем рисунке вы можете видеть, что параметр соединения стал зеленым, что означает, что все настройки выполнены и приняты. При использовании TCON для установки соединения между двумя ПЛК оба ПЛК должны вызвать инструкцию TCON для установки соединения, поэтому теперь нам нужно сделать то же самое с другим ПЛК_2. Добавьте блок TCON в главный OB1 ПЛК_2, см. рисунок 11. рисунок 11. Вызов TCON в ПЛК_2. После добавления блока TCON нам нужно настроить параметр соединения, как мы это делали с ПЛК_1. См. рисунок 12. Фото 12. Параметры соединения ПЛК_2 На рисунке видно, что мы по-прежнему выбираем ПЛК_1 в качестве активного установления соединения, и мы по-прежнему оставляем порт ПЛК_2 равным 2000. Активное установление соединения и порт должны быть одинаковыми для конфигурации обоих ПЛК, иначе соединение не будет установлено. Теперь настройка соединения для обоих ПЛК завершена, см. рисунок 13. фото 13. Блок TCON в обоих ПЛК. Как видно из рисунка, нам нужно еще одно, а именно определить REQ для обоих ПЛК. Мы создали AllowConnection для ПЛК_2 и StartConnection для ПЛК_1. См. рисунок 14. фото 14. Определите сигналы REQ. Соединение между двумя ПЛК теперь установлено, и оно выглядит следующим образом: ПЛК_1 попытается установить соединение с ПЛК_2, когда сигнал REQ активен, но он не сможет этого сделать, пока ПЛК_2 не включит возможность соединения, а это будет сделано, когда блок TCON ПЛК_1 получит сигнал REQ. Сигнал REQ активен для TCON ПЛК_2, чтобы включить соединение (это означает, что ПЛК_2 откроет порт 2000 в ожидании соединения) Сигнал REQ активен для TCON ПЛК_1, чтобы начать соединение (это позволит ПЛК_1 установить соединение с ПЛК_2 через порт 2000) МОДЕЛИРОВАНИЕ ПРОЕКТА Давайте скомпилируем наш проект и запустим моделирование, чтобы увидеть, как будет установлено соединение. Чтобы увидеть соединение любого ПЛК, а также между ПЛК, можно открыть сетевой вид и открыть вкладку соединений, чтобы увидеть все активные и установленные соединения. См. рисунок 15. фото 15. ПЛК_2 ожидает соединения. Когда REQ равен True, ПЛК_2 будет открыт для соединения, вы можете увидеть значение STATUS 7002 _ если вы проверите справку блока TCON, статус 7002 означает ожидание соединения_. Вы также можете увидеть на рисунке из сетевого представления, что ПЛК_2 ожидает соединения. Когда REQ блока ПЛК_1 TCON равен True, ПЛК_1 попытается установить соединение с ПЛК_2, и поскольку ПЛК_2 уже открыт и ожидает соединения, ПЛК_1 сможет найти и установить соединение с ПЛК_2. См. рисунок 16. Фото 16. ПЛК_1 устанавливает соединение. Обратите внимание, что все соединения в сетевом представлении теперь зеленые, что указывает на исправное и продолжающееся соединение между ПЛК_1 и ПЛК_2. Как мы уже упоминали ранее, после того, как соединение было настроено и установлено, оно автоматически поддерживается. Таким образом, даже когда сигналы REQ становятся ложными, соединение между двумя ПЛК останется. Смотрите рисунок 17. Рисунок 17. Соединение все еще продолжается. Но если включение сигналов REQ не отключает соединение, как я могу его отключить, если захочу? Блок отключения TDISCON Чтобы отключить соединение между двумя ПЛК, мы можем перевести ПЛК в режим STOP, что непрактично во время выполнения процесса. И мы также можем использовать блок отключения или TDISCON. Чтобы добавить блок TDISCON, просто перетащите его в свою логику, см. рисунок 18. фото 18. Добавьте блок TDISCON как вы видите, для добавления блока TDISCON потребуется экземпляр блока данных, как только блок будет добавлен в вашу логику, все, что вам нужно сделать, это назначить идентификатор соединения, которое вам нужно отключить, а также вам нужно назначить сигнал REQ, чтобы начать завершение соединения. См. рисунок 19. фото 19. Блок TDISCON. ТЕПЕРЬ давайте добавим блок TDISCON в другой ПЛК, чтобы у нас была возможность отключить соединение. См. рисунок 20. Для блока TDISCON ПЛК_1. фото 20. TDISCON в ПЛК_1 Давайте вернемся к моделированию и посмотрим, как использовать блоки TDISCON, см. рисунок 21. фото 21. Соединение все еще активно. Как вы можете видеть на рисунке, соединение между ПЛК все еще активно, а сигналы REQ TDISCON все еще ложны. Если REQ ПЛК_1 станет ИСТИНА, соединение будет разорвано, но вы заметите, что ПЛК_2 все еще ожидает соединения, см. рисунок 22. фото 22. REQ ПЛК_1 является истинным. Когда REQ для блока TDISCON ПЛК_2 является истинным, ПЛК_2 больше не будет ожидать соединения. См. рисунок 23. фото 23. Соединение разорвано. В этой статье мы показали, как установить соединение между двумя ПЛК с помощью блоков TCON и TDISCON.
  12. В предыдущей статье мы говорили о том, как настроить соединение между двумя ПЛК с помощью открытого пользовательского взаимодействия, и использовали протокол TCP для соединения между двумя ПЛК. В статье мы показали, как использовать такие инструкции, как TCON и TDISCON, для установления этого соединения. Перемещение данных между ПЛК В этой статье мы покажем, как можно начать перемещение ДАННЫХ между ПЛК, которые мы подключили в прошлой статье. Для этой цели мы будем использовать блоки TSEND и TRCV. Отправка данных в ПЛК_2 Мы будем основываться на проекте, который мы создали в прошлой статье, то есть в нашем проекте уже установлены блоки TCON и TDISCON. и мы продолжим наш проект, добавив блоки TSEND и TRCV, чтобы начать перемещение данных между двумя ПЛК. Чтобы отправить данные из ПЛК_1 в ПЛК_2, давайте начнем с создания блока данных, который будет содержать всю информацию, которую нам нужно отправить в ПЛК_2. См. рисунок 1. рисунок 1. Создайте новый блок данных. Как мы уже обсуждали, лучше всего давать блокам правильное название, так будет проще и интуитивно понятно, для чего предназначен каждый блок. Во-вторых, давайте добавим некоторые данные в блок данных, которые мы хотим отправить в ПЛК_2. Мы предположили, что нам нужно отправить три разных тега данных. См. рисунок 2. рисунок 2. Определите некоторые данные для отправки в ПЛК_2. Есть еще одна вещь, которую нам нужно сделать, чтобы иметь возможность отправить только что созданный нами блок данных в ПЛК_2, а именно убедиться, что оптимизированный доступ к блоку данных не выбран. Для этого нам нужно перейти в свойства блока данных и снять этот выбор. См. рисунки 3 и 4. рисунок 3. Перейдите в свойства блока данных. рисунок 4. Снимите отметку с параметра Оптимизированный доступ к блоку. Обязательно снимите отметку с этого параметра перед использованием блока TSEND, иначе он не сработает. Теперь, когда мы подготовили данные, которые хотим отправить в ПЛК_2, давайте попробуем их отправить. Мы сделаем это с помощью блока TSEND. Просто перетащите инструкцию в ваш основной OB1, чтобы добавить ее в вашу логику. См. рисунок 5. рисунок 5. Добавьте блок TSEND. При добавлении блока TSEND вам будет предложено создать экземпляр блока данных, поскольку это по сути функциональный блок, снова дайте ему правильное имя. См. рисунок 6. Рисунок 6. Создание экземпляра данных для TSEND. Когда блок TSEND будет добавлен в вашу логику, вы обнаружите, что нам нужно сделать некоторые важные конфигурации. См. рисунок 7. рисунок 7. Блок TSEND. Как вы можете видеть, нам нужно сделать некоторые настройки: Сигнал REQ, чтобы разрешить отправку данных. Что касается сигнала REQ, мы определим тег SendData, который будет использоваться для включения отправки данных. Идентификатор соединения, которое я буду использовать для отправки данных, поскольку у меня может быть более одного соединения, поэтому мне нужно назначить, какое соединение будет использоваться. В последней статье мы определили идентификатор 1 для соединения между ПЛК_1 и ПЛК_2, поэтому мы установим идентификатор на 1. ДАННЫЕ, которые мне нужно отправить. Мы уже создали блок данных со всей информацией, которую мне нужно отправить, мы можем просто перетащить блок данных в блок TSEND. Смотрите рисунок 8. рисунок 8. Настройте блок TSEND. Получение данных из ПЛК_1 После того, как мы настроим TSEND для отправки данных в ПЛК_2, нам нужно получить эти данные внутри ПЛК_2. Для этого мы будем использовать блок TRCV. Смотрите рисунок 9. рисунок 9. Добавьте блок TRCV. Как видите, просто перетащите блок TRCV, чтобы добавить его в свою логику. И вы знаете, что далее нам нужно будет создать экземпляр данных для этого блока. Смотрите рисунок 10. рисунок 10. Добавьте экземпляр данных в блок TRCV. После вызова блока TRCV в вашу логику нам нужно будет настроить некоторые параметры, как мы это делали с TSEND. Смотрите рисунок 11. рисунок 11. Блок TRCV. Как вы можете видеть, EN-R — это разрешающий сигнал, который должен быть истинным, чтобы позволить блоку TRCV начать получать данные. ID — это соединение, которое будет использоваться, а DATA — это место, где будут храниться полученные данные. Итак, нам нужно создать блок данных для получения данных внутри него. Не забудьте дать ему правильное имя. Смотрите рисунок 12. рисунок 12. Создайте блок данных для получения данных. Далее определите информационные теги, которые будут получены от ПЛК_1, лучше всего убедиться, что блок данных содержит ту же структуру данных, что и данные, которые будут получены. См. рисунок 13. рисунок 13. Определите теги данных. Для EN-R мы определим тег RecieveData, чтобы включить прием данных. А для идентификатора соединения это 1, как мы установили ранее. См. рисунок 14. рисунок 14. Сигнал EN-R. Затем перетащите созданный нами блок данных в наш блок TRCV, чтобы завершить все настройки. См. рисунок 15. рисунок 15. Добавьте свой блок данных в блок TRCV. Когда вы перетащите созданную нами базу данных, вы заметите, что TIA Portal выдает предупреждение и не принимает только что добавленный нами блок данных. И это потому, что мы не сняли отметку с «Оптимизированного доступа к блоку» блока данных, как мы сделали с TSEND. Смотрите рисунок 16. рисунок 16. Оптимизированный доступ к блоку. Как мы уже говорили, нам нужно снять отметку с этой опции, иначе TSEND и TRCV не будут работать. Смотрите рисунок 17. рисунок 17. Снимите отметку с опции оптимизированного доступа к блоку. Вы можете видеть, что после снятия отметки с «оптимизированного доступа к блоку» блок данных теперь принимается с помощью инструкции TRCV. Теперь, когда вызов и настройка блоков TSEND и TRCV завершены, давайте смоделируем наш проект и посмотрим, как будут отправляться и приниматься данные. Сначала мы создадим простую логику, которая гарантирует наличие значений данных для наших определенных тегов. Простая логика для автоматического создания значений данных Мы создадим простую логику для автоматического создания и обновления значений данных, чтобы было легче увидеть передачу данных между двумя ПЛК. Смотрите рисунок 18. рисунок 18. Простая логика. Эта простая логика будет использовать тактовый бит %M50.5 для автоматического изменения значений данных, хранящихся в блоке данных SendToПЛК_2. Моделирование проекта ПЛК Давайте скомпилируем наш проект и начнем моделирование. Первое, что нам нужно будет сделать, это установить соединение между двумя ПЛК с помощью блока TCON, который мы настроили в прошлой статье. Помните, что нам нужно будет включить возможность подключения из ПЛК_2 и установить соединение с ПЛК_1. См. рисунки 19, 20 и 21. рисунок 19. Нет связи между ПЛК рисунок 20. включите соединение. рисунок 21. Установите соединение. Теперь, когда мы установили соединение между двумя ПЛК, давайте переместим данные из ПЛК_1 в ПЛК_2, как мы его настроили. Сначала установите тег SendData в значение TRUE. См. рисунок 22. Рисунок 22. Сигнал REQ имеет значение true. Вы можете видеть, что, хотя SendData имеет значение TRUE, данные не были отправлены из ПЛК_1 в ПЛК_2. И это потому, что блок TRCV еще не включен для приема каких-либо данных. См. рисунок 23. picture23. Сигнал EN-R — ложь. Как видите, поскольку RecieveData еще не имеет значения TRUE, блок TRCV не может принимать какие-либо данные. Как только EN-R становится истинным, данные будут отправлены из блока данных в ПЛК_1 в блок данных ПЛК_2. См. рисунок 24. picture 24. Сигнал EN-R — Истина. Как только EN-R становится истинным, вы можете видеть, что данные перемещаются из ПЛК_1 в ПЛК_2. Если вы откроете проект и смоделируете его самостоятельно, вы обнаружите, что данные постоянно обновляются в ПЛК_1 и передаются в ПЛК_2. И вот как мы можем установить связь между двумя ПЛК и использовать блоки TSEND, TRCV.
  13. En artículos anteriores, analizamos los diferentes tipos de bloques en SIEMENS TIA Portal; hablamos sobre bloques de función FB, funciones FC y bloques de datos DB. En este artículo, abordaremos otro tipo de bloque en los PLC de SIEMENS, estos son los bloques de organización, y en este artículo, analizaremos el bloque de organización más importante de todos, que es el bloque de organización principal u OB1. Contenido: ¿Qué son los bloques de organización? Diferentes tipos de OB. ¿Qué es OB1? Monitoreo del tiempo de ciclo. Ejemplo de programa simple. Conclusión. ¿Qué es un bloque de organización (OB)? Los bloques de organización, puedes pensar en ellos como funciones FC o bloques de función FB. Pero la diferencia es que no los llamas, el sistema operativo del PLC llama a estos bloques de organización, ya sea que el sistema operativo llame al OB cíclicamente como OB1 o que se llame cuando ocurre un determinado evento, de cualquier manera, el sistema operativo se encarga de ello. Solo necesitas crear el bloque y agregar la lógica que quieras dentro del bloque. A veces ni siquiera necesitas agregar ningún código dentro del OB, solo crear el OB en sí puede brindar muchos beneficios, que veremos cuando analicemos algunos de esos OB. Los bloques de organización son la interfaz entre el sistema operativo del PLC y el programa de usuario. Cualquier PLC tendrá dos programas diferentes, el programa de tiempo de ejecución que es el sistema operativo del PLC y el programa de usuario que es la lógica o el código que el programador del PLC escribirá para controlar un determinado proceso. Estos dos programas diferentes necesitan comunicarse entre sí, y los bloques de organización OB son la forma de hacerlo. Los bloques de organización OB se utilizan para realizar muchas tareas, algunas de las cuales se enumeran a continuación: Características de inicio del sistema de automatización Procesamiento cíclico del programa Ejecución del programa impulsada por interrupciones Manejo de errores. Diferentes tipos de bloques de organización Los bloques de organización son básicamente las herramientas del sistema operativo para realizar muchas tareas. Diferentes tareas requieren diferentes OB, y es por eso que tiene muchos OB diferentes dentro de un PLC, la cantidad de OB diferentes dependerá del tipo de PLC que esté utilizando, pero aquí se muestran algunos de los OB más comunes que puede encontrar en casi todos los PLC SIEMENS: OB 1 cíclico principal. OB de interrupciones de tiempo. OB de hora del día. OB de errores de software. OB de errores de hardware Hay muchos más bloques de organización disponibles para usar con su lógica. Vea la imagen 1. Imagen 1: diferentes bloques de organización disponibles en TIA Portal En este artículo, analizaremos el bloque de organización más importante de todos, que es el OB1 de interrupción cíclica principal. OB1 de interrupción cíclica principal El OB1 cíclico principal es el bloque de organización que se encarga de ejecutar cíclicamente su lógica por parte del PLC. Siempre que cree un nuevo proyecto y agregue un PLC, el OB1 principal se creará automáticamente por el software. Estos son los bloques mínimos necesarios para un código de PLC. Ver imagen 2. Imagen 2: el OB1 principal se crea automáticamente Dentro de este OB1 principal, puede escribir todo su programa de PLC si se trata de un proyecto pequeño. Si su proyecto es bastante grande, entonces probablemente tenga algunas funciones FC o bloques de función FB que necesita ejecutar. En ese caso, utilizará el OB1 principal para llamarlos. Por supuesto, no tiene que llamar a cada FC o FB mediante el OB1, pero si su OB1 no es el primer bloque de sus llamadas anidadas, entonces no se ejecutará. Ver imagen 3. Imagen 3: Llamada a sus bloques mediante el OB1 La base esencial de su código de PLC es el comportamiento cíclico, lo que significa que necesita que su código se ejecute continuamente. Cuando se haya completado el procesamiento de su lógica, el sistema operativo comienza a procesarlo nuevamente. Esto se hace mediante el uso del OB1 principal, se coloca y se llama toda la lógica y el código dentro de este OB1 y el sistema operativo se asegurará de ejecutarlo continuamente. Debe saber que, incluso si no puede crear un bloque OB1, ya que se crea automáticamente al agregar un nuevo PLC, puede crear más de un bloque de interrupción cíclica. OB1 es una interrupción cíclica, que el sistema operativo llamará y ejecutará de manera automática y continua cualquier lógica que esté dentro. Sin embargo, para proyectos de PLC grandes donde tiene tantas funciones y bloques de funciones en su lógica de PLC, puede usar más de un OB de interrupción cíclica para estructurar mejor su código y hacerlo más fácil de leer y seguir. En ese caso, crearía otra interrupción cíclica, consulte la imagen 4. Imagen 4: Creación de más de un OB cíclico Cuando ha creado varios OB de ciclo de programa, estos se llaman uno después del otro en el orden de sus números de OB. El OB de ciclo de programa con el número de OB más bajo se llama primero. Véase la imagen 5. Imagen 5: ciclo de programa con más de un OB cíclico Una vez finalizado el programa cíclico, el sistema operativo actualiza las imágenes de proceso de la siguiente manera: Escribe los valores de la salida de la imagen de proceso en los módulos de salida. Lee las entradas en los módulos de entrada y las transfiere a la entrada de la imagen de proceso. Los dos pasos anteriores más la ejecución del programa del PLC se denominan ciclo de escaneo. Ver imagen 6. Imagen 6 – Ciclo de escaneo de un PLC Siemens Supervisión del tiempo de ciclo El tiempo de ciclo se refiere al tiempo de ejecución del programa cíclico, incluido el tiempo de ejecución de todas las partes del programa anidadas como FC, FB y OB de mayor prioridad. Si ha creado varios OB de ciclo de programa, cada OB de ciclo de programa contribuye al tiempo de ciclo. El sistema operativo supervisa si el tiempo de ciclo sigue siendo menor que el tiempo de ciclo máximo configurado. Si supera el tiempo de ciclo máximo, el PLC pasará al modo STOP o llamará al OB80 según su programación. Además de supervisar el tiempo de ciclo máximo, también es posible garantizar un tiempo de ciclo mínimo. Para ello, el sistema operativo retrasa el inicio de un nuevo ciclo hasta que se alcanza el tiempo de ciclo mínimo. Puede configurar el tiempo de ciclo mínimo y máximo en las propiedades de configuración de su PLC. Vea la imagen 7. Imagen 7: Configure el tiempo de ciclo mínimo y máximo Ejemplo de programa simple en PLC Imagen 8: Ejemplo de programa de PLC Para comprender mejor el ciclo del programa de PLC y la ejecución de OB1, creemos un programa simple. Este programa utilizará una instrucción de suma que acumulará un valor de 1 en un área de memoria cada 1 ciclo de escaneo. Vea la siguiente simulación. Como puede ver en la animación, la instrucción de suma se ejecuta muy rápido; así de rápido es el ciclo de escaneo. Dependerá de la potencia de su PLC. Pero principalmente el ciclo de escaneo está en el rango de milisegundos. Conclusión Los bloques de organización son la interfaz entre el sistema operativo del PLC y el programa de control. El sistema operativo ejecuta cíclicamente el OB cíclico principal 1. Ejecutará su lógica incluyéndola dentro de uno o más OB cíclicos. El tiempo de ciclo de escaneo es el tiempo que se utiliza para ejecutar su lógica 1 vez.
  14. En un artículo anterior, analizamos qué es un bloque de organización y hablamos de un bloque de organización muy importante, que es el OB1 principal. En este artículo, continuaremos analizando los diferentes OB y esta vez hablaremos de los bloques de organización de interrupción horaria u OB10. Contenido: ¿Qué es el OB10 de interrupción horaria? ¿Cómo crear y utilizar el OB10? Ejemplo de programa simple. Reglas importantes para las interrupciones horarias. Conclusiones. ¿Qué es una interrupción horaria (OB10)? Como sugiere el nombre, una interrupción horaria es un bloque de organización que interrumpirá la ejecución del ciclo principal de su programa de PLC en un momento determinado del día. Este momento de interrupción (fecha y hora) se puede especificar para que ocurra una vez a una hora específica o para que ocurra periódicamente en intervalos de tiempo específicos, por ejemplo, cada minuto, hora, día, semana y algunas otras opciones. Puede tener más de una interrupción horaria en el mismo programa, no es necesario que tengan la misma lógica o código, cada una puede tener su propia funcionalidad y también cada una puede configurarse por separado para que se produzca en un momento específico. ¿Cómo crear y utilizar el OB10? Para crear una interrupción horaria, siga los mismos pasos que seguiría si necesitara agregar un nuevo bloque a su lógica. Vea la imagen 1. Imagen 1: Agregar una interrupción horaria Presione la opción Agregar nuevo bloque en el árbol del proyecto a la izquierda, elija el bloque de organización y luego elija una interrupción horaria como se muestra en la imagen anterior. Ahora puede abrir el OB10 y agregar cualquier lógica de PLC que desee ejecutar cuando se llame a este bloque, por llamado queremos decir que se produjo el evento o la hora de interrupción y, por lo tanto, el sistema operativo interrumpirá el ciclo principal y ejecutará el OB10. Escribiremos un código muy simple en el OB10 para ayudarnos a comprender mejor cómo funciona este bloque OB10. En esta lógica, usamos la instrucción add para agregar un valor de 1 a un área de memoria que llamamos TimeOfDayInterruptCounter y luego colocamos el resultado de la suma nuevamente en la misma área. De esa manera, podemos tener un contador para la ejecución del OB10. Cada vez que se llame y ejecute el OB10, el valor de TimeOfDayInterruptCounter aumentará en 1. Vea la imagen 2. Imagen 2: agregue su lógica al OB10 Ahora que hemos creado el OB10 y hemos escrito algo de lógica dentro, necesitamos configurar el tiempo establecido del OB10 y cuántas veces queremos que interrumpa nuestro ciclo principal. Para configurar el tiempo y el intervalo del OB10, debemos ir a la página de propiedades del OB10. Consulte la imagen 3. Imagen 3: Propiedades del OB10 En las propiedades del OB10, encontrará una gran cantidad de configuraciones y atributos que puede configurar. Lo que necesitamos ahora es la página de interrupción de la hora del día para que podamos configurar cuándo se llamará al OB10 y cuántas veces. Consulte la imagen 4. Imagen 4: Configuración de la interrupción de la hora del día Como puede ver en la última imagen, puede configurar la ejecución del OB10, la fecha de inicio y la hora del día en la que se debe ejecutar el OB10. Para fines de simulación, hicimos que el intervalo de ejecución sea cada minuto para que el OB10 se llame y se ejecute cada minuto. Eso significa que a partir de la fecha del 23/3/2023 y la hora 09:25 AM, el valor de TimeOfDayInterruptCounter aumentará en 1 cada minuto. Tiene la opción de configurar la hora de acuerdo con la hora del sistema del PLC o la hora local, como puede ver en la última imagen. En un artículo anterior, hablamos sobre la hora del sistema y la hora local del PLC, qué significa cada hora y cómo configurarlas y usarlas. Como dijimos antes, la hora local es la hora que ve ahora en su PC. Por lo tanto, es la hora real de la región donde se utilizará el PLC. Debe configurar la hora local para el PLC, según dónde se utilizará. Vea la imagen 5. Imagen 5: Configuración de la hora local para el PLC Ejemplo de programa de PLC simple Agregamos una interrupción de hora del día OB10 a nuestro programa de PLC y la configuramos para que se ejecute cada minuto. También configuramos la hora local del PLC. Creamos una lógica simple de una instrucción ADD para acumular el valor de TimeOfDayInterruptCounter en 1 cada vez que se ejecuta el OB10. Agregaremos otra instrucción, pero en el OB1 principal, esta instrucción es RD_LOC_T o leer hora local, para que podamos ver cómo avanza la hora local y compararla con la ejecución del OB10. Ver imagen 6. Imagen 6: ejemplo de programa simple Compile su programa de PLC e inicie una nueva simulación. Observe que configuraremos la hora del día en que se produce la interrupción para que se pueda llamar y ejecutar el OB10 mientras estamos simulando la lógica del PLC. Vea la siguiente simulación. Como se puede ver en la animación, el valor de TimeOfDayInterruptCounter es cero al inicio y luego se incrementará en 1 cada minuto a partir de las 09:25 AM, lo que indica que el OB10 se ejecuta cada minuto. Reglas importantes para las interrupciones horarias Si configura una interrupción horaria de tal manera que el OB correspondiente se debe procesar una vez, la hora de inicio no debe ser anterior (en relación con el reloj de tiempo real de la CPU). Si configura una interrupción horaria de tal manera que el OB correspondiente se debe procesar periódicamente, pero la hora de inicio es anterior, entonces el OB de interrupción horaria se procesará la próxima vez que sea debido según la hora actual. La fecha de las interrupciones horarias periódicas debe corresponder a una fecha real. Por lo tanto, por ejemplo, la repetición mensual de un OB de interrupción horaria con una fecha de inicio del 31/1 no es posible. En este caso, un OB solo se inicia en los meses que tienen 31 días. Una interrupción de tiempo activada durante el inicio no se ejecuta hasta que el inicio se haya completado. Un inicio elimina todas las interrupciones de tiempo que se establecieron y activaron mediante una instrucción en el programa de usuario. Conclusión OB10 es un bloque de organización que se puede configurar para interrumpir el ciclo de su programa en un día y hora determinados. Esta interrupción puede ocurrir una vez o periódicamente cada cierto tiempo. No hay una razón específica por la que necesitaría un OB10, ya que depende de su proceso y su lógica. Y sí, puede lograr la misma funcionalidad utilizando su código personal, pero es una función incorporada disponible y fácil de usar. Y usted sabe cómo usarla.
  15. En artículos anteriores, analizamos qué es un bloque de organización y hablamos sobre la interrupción cíclica principal OB1 y la interrupción de hora del día OB10. En este artículo, continuaremos analizando los diferentes OB y, esta vez, hablaremos sobre el bloque de organización de interrupción de retardo de tiempo u OB20. Contenido: ¿Qué es OB20? ¿Cómo llamar a OB20? Parámetros de la instrucción SRT_DINT. Programa de ejemplo. Conclusión. ¿Qué es la interrupción de retardo de tiempo (OB20)? OB20 es un bloque de organización que es llamado y ejecutado por el sistema operativo, pero tenemos que decirle al sistema operativo cuándo llamar a este OB20. El sistema operativo obtiene la información del programa PLC del usuario para llamar a este OB20, esperará el tiempo de retardo configurado y luego llamará y ejecutará cualquier lógica que esté dentro del OB20. Creamos un bloque OB20 desde Agregar un nuevo bloque en el árbol del proyecto. Ver imagen 1. Imagen 1 – Crear un nuevo bloque OB20 Ahora que he creado una interrupción de retardo de tiempo, ¿cuándo se ejecutará? ¿Y cómo configurar el retardo de tiempo de la ejecución del bloque? Nuevamente, OB20 es un bloque de organización, lo que significa que no llamas al bloque para que se ejecute, sino que le dices al sistema operativo cuándo puede llamarlo y ejecutar cualquier funcionalidad que esté escrita dentro. ¿Cómo decirle al sistema operativo que llame al OB20? Para decirle al sistema operativo que queremos llamar al OB20, usamos SRT_DINT o la interrupción de retardo de tiempo de inicio, ver imagen 2. Imagen 2 – Instrucción de retardo de tiempo de inicio Parámetros de la instrucción SRT_DINT Como ves en la última imagen, puedes usar la instrucción SRT_DINT para llamar al OB20. pero es necesario configurar algunos parámetros para que la instrucción funcione. EN: la instrucción no se ejecutará hasta que se presente una señal de flanco negativo en la entrada EN. Eso significa que debe asignar una condición del conjunto de condiciones para habilitar la señal y la instrucción solo funcionará cuando esta condición sea verdadera y luego falsa nuevamente. OB_NR: asigna el número de la interrupción de retardo que necesita llamar, en nuestro caso 20 ya que creamos OB20, pero podemos crear más de una interrupción de retardo y luego tendremos que llamar a cada una con una instrucción SRT_DINT separada. DTIME: ese es el tiempo de retardo que desea esperar antes de ejecutar el OB20, estableceremos este tiempo en 5 segundos para fines de simulación. SIGN: Identificador que aparece cuando se llama al OB de interrupción de retardo de tiempo en la información del evento de inicio del OB. Programa de PLC de ejemplo Para comprender mejor el OB20, crearemos una lógica simple para ver cómo se puede llamar y ejecutar un OB20. Construiremos este ejemplo de PLC sobre la lógica que creamos para el OB1 y el OB10 en artículos anteriores. Dentro del OB20 crearemos una lógica que cuente cuántos ciclos del OB1 se han llamado y ejecutado dentro del tiempo de retardo de 5 segundos que hemos configurado para el OB20. Ver imagen 3. Imagen 3: lógica dentro del OB20 En la última imagen, puede ver que usamos la instrucción MOVE para enviar información sobre los recuentos de ciclos al inicio de la llamada al OB20 y después de que se haya ejecutado. Ver imagen 4 para el resto de la lógica. Imagen 4: calcular cuántos ciclos se cuentan en 5 segundos Después de eso, restaremos los dos valores de los recuentos de ciclos para obtener cuántos ciclos se han ejecutado dentro del retraso de cinco segundos. Ahora que hemos creado la lógica que queremos, ¿cómo podemos llamar al OB20? Como se explicó anteriormente, tenemos que utilizar la instrucción SRT_DINT. Utilizaremos esta instrucción dentro del OB10 que hemos configurado antes para que se ejecute cada minuto. Eso significa que el OB20 también se llamará y ejecutará cada minuto, pero con un tiempo de retardo de 5 segundos. En el artículo anterior, creamos una lógica que indica cuántas veces se llama y ejecuta el OB1, también creamos otra lógica que llamará al OB10 cada minuto. En este ejemplo, utilizaremos la llamada del OB10 para llamar al OB20. Ver imagen 5. Imagen 5: Llamada al OB20 a través del OB10 Dijimos antes que el SRT_DINT necesita una señal de flanco negativo en el EN para que comience la llamada. Es por eso que utilizamos la señal TimeOfDayInterruptEnabled que sabemos que será verdadera cuando se ejecute el OB10 y luego volverá a ser falsa, lo que nos dará la señal de flanco que necesitamos. Ahora que toda la lógica del PLC está completa, compilemos y ejecutemos una nueva simulación. Vea la siguiente simulación de nuestro proyecto. En la animación, al principio, los valores de los recuentos de ciclos son cero, pero cuando se llama al OB10 y la lógica TimeOfDayInterruptEnabled es verdadera, esperará 5 segundos y luego los valores de recuento se actualizarán con los recuentos de ciclos. Conclusión OB20 es un bloque de organización llamado y ejecutado por el sistema operativo. Podemos indicarle al sistema operativo que llame al OB20 con la instrucción SRT_DINT.
Apply for friendship links:WhatsApp or E-mail: admin@plchmis.com
×
×
  • Create New...