Вложений: 1
DEBUG#01. Как переключить режим отображения переменных? (DEC/HEX)
Вопрос: как переключить режим отображения переменных? (DEC/HEX)
Ответ: меню Отладка - Режим отображения.
Эта функция меняет режим отображения для всех типов числовых переменных (кроме REAL и LREAL).
В некоторых случаях представляется удобным единовременно использовать разные режимы для различных переменных.
Для этого следует при объявлении переменных использовать директиву displaymode:
Код:
{attribute 'displaymode':='bin'}
byVar: BYTE := 2#0011_1100;
{attribute 'displaymode':='dec'}
uiVar: UINT := 123;
{attribute 'displaymode':='hex'}
wVar: WORD := 16#ABCD;
Вложение 35563
Вложений: 1
IDE#03. Как изменить версию библиотеки в проекте?
Вопрос: как изменить версию библиотеки в проекте?
Ответ: в Менеджере библиотек нажмите кнопку Плейсхолдеры. В появившимся списке однократным нажатием ЛКМ выберите нужную библиотеку (соответствующая строка выделится синим).
Нажмите ЛКМ на текущую версию библиотеки - появится окно со списком всех установленных системе версий данной библиотеки. Выберите нужную.
Вложение 35603
OTHER#02. Как синхронизировать системное время контроллера с NTP-сервером?
Вопрос: как синхронизировать системное время контроллера с NTP-сервером?
Примечание: для контроллеров, программируемых в CODESYS V3.5 SP11 Patch 5 или выше, этот функционал доступен в конфигураторе и узле OwenRTC таргет-файла.
Примечание: для контроллеров, программируемых в CODESYS V3.5 SP14 Patch 3 или выше, этот функционал доступен в web-конфигураторе.
Ответ: см. примеры для SP7 Patch 4 и SP16 Patch 3.
Вложений: 2
DEBUG#09. Как при отладке увидеть промежуточные значения переменных?
Вопрос: в режиме отладки рядом с переменной отображается значение, которое она имела на момент окончания предыдущего цикла. Как увидеть промежуточные значения переменной в пределах цикла?
Ответ: меню Отладка - команда Контроль выполнения. В результате рядом с переменной будет отображаться значение, которое оно получило в результате конкретной операции в пределах цикла (см. скриншот).
Кроме того, выполняемые ветки кода будут отображаться зеленым, а не выполняемые - белым.
Вложение 35622 Вложение 35623
Примечания: при использовании данного режима:
1. возрастает время выполнения цикла;
2. невозможно использование точек останова;
3. ввод значений переменных возможен только в поле объявления (но не напрямую в редакторе).
PRG#03. Можно ли считать тексты из компонента Список текстов в переменные программы?
Вопрос: можно ли считать тексты из компонента Список текстов в переменные программы? Можно ли отредактировать список текстов в процессе работы программы?
Ответ: да, это возможно. См. этот документ.
Вложений: 2
IDE#04. Как определить неиспользуемые в проекте переменные?
Вопрос: как определить неиспользуемые в проекте переменные?
Ответ: в меню Проект выберите пункт Установки проекта, и в появившемся окне найдите вкладку Статический анализ. Установите нужные галочки.
Вложение 35680
После этого при выполнении команды Генерация кода (меню Компиляция) на панели сообщений будет выводится соответствующая информация:
Вложение 35681
Вложений: 1
IDE#05. Как установить и добавить библиотеку?
Вопрос: как установить и добавить библиотеку?
Ответ: в целом, есть три способа способа распространения библиотек:
1.В виде архива репозитория. Архив содержит все версии системных библиотек, начиная с самых ранних релизов CODESYS V3 и заканчивая 3.5 SP4. Он необходим для работы с контроллерами Овен.
Скачать архив репозитория можно здесь. Архив представляет собой файл формата .msi, который необходимо запустить для начала установки.
2. В виде пакета (формата .package). В виде пакетов распространяются компоненты и библиотеки ОВЕН, а также, например, библиотеки OSCAT. Для установки пакета следует на вкладке Инструменты выбрать пункт Менеджер пакетов и нажать кнопку Установить.
3. В виде отдельного файла (формата .library, .compiled-library). Для установки библиотеки следует на вкладке Инструменты выбрать пункт Репозиторий библиотек в и нажать кнопку Установить.
Вложение 35752
Все установленные библиотеки по умолчанию размещаются в папке C:\ProgramData\CODESYS\Managed Libraries
Важно отметить, что версии библиотек устанавливаются независимо (в отличие от Codesys 2.3, где каждая новая версия перезаписывала предыдущую).
При этом автоматического обновления библиотеки в проекте не происходит - при необходимости следует произвести эту операцию вручную в Менеджере библиотек (см. подробности здесь).
Вложений: 3
PRG#04. Как преобразовывать данные? (2 WORD в REAL и т.п.)
Вопрос: в процессе разработки программы часто возникают задачи преобразования данных. В некоторых случаях достаточно стандартных операторов конверсии (например, REAL_TO_INT). Но иногда возникают вопросы другого рода, например - как разбить переменную DWORD на 4 отдельных байта, как преобразовать 2 переменные типа WORD в REAL и т.д. Очевидно, что можно сделать это с помощью указателей. Но есть ли более простые способы?
Ответ: такие способы есть. Рассмотрим три библиотеки:
1. Библиотека Util содержит функции, позволяющие:
- собирать переменные типов BYTE/WORD/DWORD из отдельных битов и разделять их на отдельные биты (удобно для графических языков);
- выделять/устанавливать конкретный бит переменных типа BYTE/WORD/DWORD;
- преобразовывать данные из десятичного формата в двоично-десятичный и обратно.
а также:
- функции конверсии для кода Грея;
- функции преобразования HEX-значений в ASCII-коды и обратно (пример: 16#30--->16#3330, где 16#33 - ASCII-код символа '3', а 16#30 - ASCII-код символа '0').
Вложение 35757
2. Библиотека CAA Memory содержит функции, позволяющие:
- выделять младшие и старшие байты/слова из переменных типа WORD/DWORD;
- собирать переменные типов BYTE/WORD/DWORD из отдельных битов/байт/слов и разделять их на отдельные биты/байты/слова;
- изменять порядок бит/байт/слов в переменных типа BYTE/WORD/DWORD.
Вложение 35758
Приведем также пример конвертации 2 WORD в REAL с помощью данной библиотеки:
Код:
VAR
wLow: WORD := 16#851F;
wHigh: WORD := 16#4133;
dwVar: DWORD;
rVar: REAL;
END_VAR
dwVar := MEM.PackWordsToDword(wHigh, wLow);
MEM.MemMove(ADR(dwVar), ADR(rVar), SIZEOF(rVar));
// rVar теперь имеет значение 11.22
3. Библиотека OwenCommunication содержит функции и ФБ, позволяющие:
- преобразовать REAL в 2 WORD и наоборот с возможностью изменения порядка байт;
- преобразовать DWORD в 2 WORD и наоборот с возможностью изменения порядка байт;
- преобразовать любой тип данных в любой.
Вложение 47274
Код:
VAR
wLow: WORD := 16#851F;
wHigh: WORD := 16#4133;
rVar: REAL;
END_VAR
rVar := OCL.WORD2_TO_REAL(wHigh, wLow, FALSE);
// rVar теперь имеет значение 11.22
Вложений: 1
IDE#06. Как изменить имя переменной во всех местах проекта, где она используется?
Вопрос: как изменить имя переменной во всех местах проекта, где она используется?
Ответ: найдите строку объявления переменной и поставьте курсор в любую позицию ее имени (или просто выделите имя). Нажмите ПКМ и выберите команду Рефакторинг. Укажите новое имя переменной и нажмите ОК. Имя переменной изменится во всех местах проекта, где она была использована - в коде, в визуализации, в узлах Modbus и т.д.
Вложение 35760
Вложений: 1
PRG#05. Почему при конверсии кириллицы из STRING в WSTRING получаются "крокозябры"?
Вопрос: почему при конверсии кириллицы из STRING в WSTRING (и наоборот) получаются "крокозябры"?
Ответ: напомним, что переменные типа STRING используются для представления символов кодировки из семейства ASCII (каждый символ - байт), а WSTRING - для кодировки UCS2 из семейства Unicode (каждый символ - два байта, т.е. WORD).
При конверсии STRING в WSTRING (и наоборот) происходит не интерпретация данных, а обычное перемещение байт. Проще всего пояснить это на примере, разместив строки в объединениях (UNION), чтобы иметь возможность просматривать содержимое их отдельных байтов:
Вложение 35761
Для конверсии с интерпретацией данных ('тест'--->"тест") используйте функции CP1251_TO_UNICODE и UNICODE_TO_CP1251 из библиотеки OwenStringUtils.
Примечание: не забудьте установить галочку Использовать строки Unicode в Менеджере визуализации для отображения кириллицы в WSTRING в визуализации проекта.