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

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

  1. #111
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию COM#24. Как настроить обмен между ПЛК, программируемыми в CODESYS V3.5?

    Вопрос: как настроить обмен данными между несколькими ПЛК, программируемыми в CODESYS V3.5?
    Очевидно, что это можно сделать с помощью протокола Modbus TCP, но этот вариант является довольно трудоемким (настройка мастера и слэйвов, размещение данных в регистрах и т.д.)
    Нет ли более простых способов?

    Ответ: такие способы есть.

    1. Если один ПЛК должен передавать одни и те же данные на несколько других ПЛК, то можно использовать сетевые переменные (Network Variables).
    См. документацию (п. 3) и видеопример.

    2. Если один ПЛК должен считывать/записывать разные данные с одного или нескольких ПЛК, то можно использовать Менеджер источников данных (Data Source Manager).
    См. видеопример, доп. информацию для ПЛК2хх и информацию в онлайн-справке CODESYS:
    https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
    https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
    https://help.codesys.com/webapp/_cds...rsion=3.5.17.0

    Вопрос: Как в коде контролировать наличие связи через Data Source Manager?

    Ответ: это можно сделать с помощью глобальных переменных диагностики:

    • g_Datasources.<имя_источника_данных>Error (тип - Datasources.DataSourceError)
    • g_Datasources.<имя_источника_данных>State (тип - Datasources.DataSourceMonitoringState)


    Имя источника данных можно увидеть в дереве проекта (по умолчанию для первого источника данных это имя - Datasource).

    2021-10-01_8-49-33.png

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

    2021-10-01_8-55-53.png


    Вопрос: Как в коде контролировать наличие связи при использовании сетевых переменных?

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

    Для диагностики на стороне отправителя:

    необходимо в свойствах списка сетевых переменных на вкладке Свойства сети установить галочку Подтверждение для ожидания подтверждений от получателя.

    2021-10-01_9-21-43.png

    В случае обрыва связи в структуре NetVarTxDiag_UDP поле sLastError примет значение NetVarUDPError_NOACKNOWLEDGEMENT, а поле nErrorCount будет постоянно увеличиваться.

    2021-10-01_9-14-37.png

    Для диагностики на стороне получателя:

    В случае обрыва связи в структуре NetVarRxDiag_UDP значение полей nReceiveCount и tLastReceive "застынут" и перестанут изменяться.

    2021-10-01_9-17-44.png

  2. #112
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию 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

  3. #113
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

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

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

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

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

  4. #114
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию 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

  5. #115
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

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

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

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

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

  6. #116

  7. #117
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию 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

  8. #118
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию 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.

  9. #119
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

    По умолчанию 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

  10. #120
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,145

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

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

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

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

Похожие темы

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

Ваши права

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