Страница 12 из 17 ПерваяПервая ... 21011121314 ... ПоследняяПоследняя
Показано с 111 по 120 из 168

Тема: CODESYS V3.5. Онлайн-FAQ

  1. #111

    По умолчанию PRG#28. Как инициализировать структуру в коде программы?

    Вопрос: как иницилизировать структуру в коде программы?

    Предположим, что объявлена такая структура:

    Код:
    TYPE TEST_DATA :
    STRUCT
    	iVar:	INT;
    	rVar:	REAL;
    END_STRUCT
    END_TYPE
    Понятно, что в коде программы можно инициализировать ее таким образом:

    Код:
    PROGRAM PLC_PRG
    VAR
    	stData:	TEST_DATA;
    	xInit:	BOOL;
    END_VAR
    
    
    IF xInit THEN
    	
    	stData.iVar := 11;
    	stData.rVar := 22.33;
           ...
    	
    	xInit := FALSE;
    
    END_IF
    Но нет ли более простого способа?

    Ответ: можно инициализировать структуру с помощью специального оператора STRUCT (не описанного в данный момент в справке CODESYS).

    Код:
    PROGRAM PLC_PRG
    VAR
    	stData:	TEST_DATA;
    	xInit:	BOOL;
    END_VAR
    
    
    IF xInit THEN
    	
    	stData := STRUCT(iVar := 11, rVar := 22.33);
    	
    	xInit := FALSE;
    
    END_IF
    Этот способ также позволяет инициализировать структуры, объявленные в области VAR_INPUT CONSTANT в редакторе языка CFC:

    2021-10-20_8-16-36.png

  2. #112

    По умолчанию OTHER#11. Как исполнить на ПЛК "имперский марш"?

    Вопрос: как исполнить на зуммере ПЛК "имперский марш"?

    Комментарий: данный функционал поддерживается в прошивках с CODESYS V3.5 SP16 Patch 3 и выше - в них в узле Buzzer добавлена возможность управления частотой зуммера.

    Ответ: см. пример и видео.

  3. #113

    По умолчанию PRG#29. Локальные перечисления

    Вопрос: в наших проектах мы регулярно используем перечисления для повышения читабельности кода.
    Некоторые перечисления используются только в конкретном функциональном блоке, и при переносе этого блока в другие проекты приходится не забывать о копировании таких перечислений, что составляет определенное неудобство.
    Очевидным вариантом является выделение этого функционального блока и его перечислений в библиотеку, но это тоже является неудобным, так как в разных проектах часто приходится редактировать исходники этого ФБ, адаптируя его под конкретное применение.
    Если ли какие-либо варианты для упрощения нашей ситуации?
    Можно ли как-то "встроить" перечисление в ФБ?

    Ответ: в CODESYS V3.5 (начиная с версии SP7) поддерживаются так называемые "локальные" перечисления. Эти перечисления создаются не при добавлении объекта типа DUT, а прямо в области объявления переменных.

    Пример:

    Код:
    VAR
    	eState: (OPEN := 0, READ := 10, WRITE := 20, CLOSE := 30) INT;
    END_VAR
    Объявление локальных перечислений поддерживается в POU (функциях, ФБ и программах) и списках локальных переменных.
    Объявление локальных перечислений не поддерживается в методах.

    Источник информации:

    1. https://alltwincat.com/2021/11/16/local-enumerations/
    2. Баг-трекер CODESYS:

    2021-11-29_8-11-54.png

    Примечание: локальные перечисления также поддерживаются в CoDeSys V2.3

  4. #114

    По умолчанию PRG#30. Как выполнить действие при активации тревоги?

    Вопрос: в проекте настроена Конфигурация тревог. Требуется при активации (или деактивации, подтверждении и т.д.) тревог выполнять какие-то действия - например, отправлять cмс, e-mail, сообщение через telegram-бота и т.п. Как это сделать?

    Ответ: см. пример.
    В примере демонстрируется, как при изменении состояния тревоги отправить e-mail. По аналогии можно реализовать выполнение других операций.

    2022-01-19_12-13-59.png

  5. #115

    По умолчанию COM#25. Как записать данные из ПЛК в таблицу Google Spreadsheet?

    Вопрос: как записать данные из ПЛК в таблицу Google Spreadsheet?

    Ответ: см. пример.

    2022-01-24_13-37-31.png

  6. #116

    По умолчанию DEBUG#10. В проекте для СПК возникает 40 ошибок типа Screen.VisuElems...

    Вопрос: при создании проекта для СПК в среде CODESYS V3.5 SP16 Patch 3 и выше возникают такие ошибки:

    2022-01-28_7-54-45.png

    Как их исправить?

    Ответ: нажмите ПКМ на узел Screen, выберите команду Обновить устройство и обновите компонент до последней доступной версии.

    2022-01-28_7-54-56.png

    Ошибки связаны с изменениями во внутренних библиотеках CODESYS, которые произошли в свежих версиях.
    Рекомендуем создавать проект для СПК на основе шаблона - в этом случае ошибок не будет:

    2022-01-28_10-02-15.png

  7. #117

    По умолчанию COM#26. В версии SP16 Patch 3 не удается опросить Modbus TCP Slave Device - ошибка 10

    Вопрос: ПЛК настроен как Modbus TCP Slave Device через дерево проекта.
    При его опросе возвращается ошибка 10 (0x0A): GATEWAY PATH UNAVAILABLE.

    1643112360275.JPEG

    Ошибка проявилась в версии CODESYS V3.5 SP16 Patch 3, в прошлых версиях CODESYS с тем же проектом все работало нормально.
    В чем может быть проблема?

    Ответ: начиная с версии CODESYS V3.5 SP16 контроллер, настроенный как Modbus TCP Slave Device, отвечает только на запросы с Unit ID = 0 и Unit ID = 255.

    2022-01-28_10-13-07.png

    Остальные адреса обрабатываются только в режиме SerialGateway.

    В версии V3.5 SP17 будет восстановлено старое поведение - ПЛК будет отвечать на запросы с любым Unit ID.

  8. #118

    По умолчанию PRG#31. Как инициализировать массивы и структуры?

    Вопрос: как задать начальные значения для переменных типа массив (ARRAY) и структура (STRUCT)?

    Ответ: см. видеопример или текстовое описание ниже.

    Начальные значения элементов массива задаются в квадратных скобках:
    Код:
    aiData: ARRAY [1..6] OF INT := [1, 2, 3, 4, 5, 6];
    Если некоторым последовательно размещенным элементам надо задать одно и то же значение - то можно сделать так:
    Код:
    // aiData[3] и aiData[4] получат значение 0
    aiData: ARRAY [1..6] OF INT := [1, 2, 2(0), 5, 6];
    Для многомерных массивов синтаксис аналогичен:
    Код:
    aiData: ARRAY [1..2, 1..3] OF INT := [1, 2, 3, 11, 22, 33];
    2022-02-08_11-18-22.png

    Начальные значения элементов структуры можно задать прямо при ее создании.
    Все экземпляры данной структуры по умолчанию будут инициализированы этими значениями.
    Код:
    TYPE TEST_DATA :
    STRUCT
    	iVar:	INT  := 11;
    	rVar:	REAL := 22.33;
    END_STRUCT
    END_TYPE
    Если требуется при объявлении конкретного экземпляра структуры задать индивидуальные значения элементов - то это можно сделать в круглых скобках c указанием их имен:
    Код:
    stData: TEST_DATA := (iVar := 123, rVar := 11.22);
    Пример инициализации массива структур:
    Код:
    astData:	ARRAY [1..3] OF TEST_DATA := [ (iVar := 111, rVar := 11.22), (iVar := 222, rVar := 22.33), (iVar := 333, rVar := 33.44) ];
    Кроме того, задать начальные значения можно в редакторе автообъявления:

    2022-02-08_11-28-43.png

  9. #119

    По умолчанию PRG#32. Как сделать счетчики ПЛК2хх RETAIN и как сбросить их из кода программы?

    Вопрос: используем ПЛК210. Требуется, чтобы счетчики дискретных входов и энкодеров сохраняли свои значения после перезагрузки контроллера и чтобы была возможность сбросить их из кода программы.
    Привязанные к счетчикам переменные объявлены в области VAR RETAIN, но они не сохраняют свои значения после перезагрузки контроллера.
    В узле Leftside на вкладке Конфигурация есть параметр Сброс счетчиков входов и энкодеров, но он применяется только при загрузке проекта.
    Как обеспечить энергонезависимость счетчиков и как сбросить их прямо в процессе работы ПЛК при выполнии нужного условия?

    Ответ: явного механизма обеспечения энергонезависимости и сброса счетчиков и энкодеров нет.
    Вместо этого следует копировать их значения в промежуточные переменные, которыми уже можно будет манипулировать в коде программы.
    См. пример.

    Показанный в пример принцип универсален, и подходит в т. ч. для ПЛК210-0x и ПЛК200.

    Для ПЛК210-1x сброс счетчиков можно организовать с помощью соответствующих каналов в узле LeftSide:

    2025-03-28_8-42-25.png

  10. #120

    По умолчанию PRG#33. Что такое методы, свойства, действия и переходы?

    Вопрос: если нажать ПКМ на POU и выбрать команду Добавление объекта, то появляется возможность добавить в POU Действие, Метод, Переход и Свойство.
    Что это и зачем это нужно? Это имеет отношение к объектно-ориентированному подходу (ООП)?

    Ответ:

    1.1 Действие позволяет выделить фрагмент POU в обособленный объект с собственным названием.
    В других языках программирования аналогичные объекты называются процедурами (при этом действие является процедурой без параметров).
    Преимущества использования процедур описаны в этой статье:
    https://ru.wikipedia.org/wiki/%D0%9F...82%D0%B2%D0%B0

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

    2022-05-17_8-15-56.png

    Теперь во всех фрагментах POU вы можете заменить повторяющие строки кода вызовом действия:

    Код:
    // ...
    SwitchToIdle();
    // ...
    Если вам потребуется изменить этот код - то достаточно будет поменять его в действии, а не искать по всей программе.

    Кроме того, действия являются неотъемлемой частью языка SFC - они используются для описания выполняемых на конкретном шаге команд:

    2022-05-17_8-28-48.png

    Действие не является элементом ООП.

    За исключением языка SFC - всегда предпочтительнее использовать метод, а не действие (его функциональность перекрывает функциональность действия).

    Статьи из справки CODESYS:
    https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
    https://help.codesys.com/webapp/_cds...rsion=3.5.17.0

    1.2. Переход является аналогом действия, используемым в языке SFC для описания условий переходов между шагами (см. скриншот выше).
    Это удобно для описания сложных условий, состоящих из нескольких строк кода - они бы загромождали блок-схему.
    На блок-схеме переход отмечается заливкой правого верхнего угла соответствующего ему прямоугольника.

    Справедливый вопрос - почему переход можно добавить к POU, который реализован не на языке SFC?
    Ответ есть в баг-трекере CODESYS - это необходимо в тех случаях, когда ФБ на языке SFC, наследуемый от ФБ на другом языке, должен иметь доступ к условиям перехода своего базового ФБ.

    2022-05-17_8-38-47.png

    Переход не является элементом ООП.

    Статья из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0

    1.3. Метод представляет собой функцию, встраиваемую в ФБ и имеющую доступ к его переменным.
    В отличие от действия - метод может иметь собственные входные, выходные и локальные переменные (а также константы).

    Возвращаясь к примеру из п. 1.1 - предположим, после очистки ресурсов в зависимости от выполнения тех или иных условий нам требуется перейти на конкретный шаг машины состояний.

    Код:
    // как и функция - метод может иметь аргументы и возвращать значения
    xIsStateSwitched := SwitchToState(eNewState := STATE.READ);
    Метод может входить в состав интерфейса.

    Метод является элементом ООП, но может успешно использоваться и в структурном программировании.

    Статья из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0

    1.4. Свойство представляет собой переменную, для которой автоматически создаются методы чтения (Get) и записи (Set).
    Это позволяет при чтении или записи переменной автоматически выполнить какой-либо фрагмент кода (например, провалидировать значение или отмасштабировать его).

    Пример: пусть у нас есть ФБ TEST_FB с локальной переменной iSetpoint. В рамках нашей задачи представим, что ее значение должно принадлежать диапазону -10...10.

    2022-05-17_13-33-14.png

    Добавим свойство Setpoint и в методе записи обеспечим ограничение значений переменной с помощью оператора LIMIT.

    2022-05-17_13-32-48.png

    Таким образом, при записи значения в свойство из кода программы произойдет автоматический вызов метода Set и обработанное (ограниченное оператором LIMIT) значение свойства будет записано в переменную iSetpoint.

    Доступ к свойству не требует вызова экземпляра ФБ:

    2022-05-17_13-32-11.png

    Cвойство является элементом ООП.

    Статьи из справки CODESYS: https://help.codesys.com/webapp/_cds...rsion=3.5.17.0

Страница 12 из 17 ПерваяПервая ... 21011121314 ... ПоследняяПоследняя

Похожие темы

  1. Ответов: 1
    Последнее сообщение: 29.06.2017, 11:21

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •