Последний раз редактировалось Евгений Кислов; 23.09.2022 в 06:58.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: в алгоритме программы используется значение системного времени контроллера.
Периодически (с бессистемной периодичностью, но не менее одного раза за 10 минут работы) происходит кратковременный (продолжительностью не более нескольких сотен миллисекунд) "выброс" системного времени.
Во время "выброса" значение системного времени отображается (и обрабатывается в коде программы) без учета часового пояса (в узле OwenRTC в канале UTC Offset в этот момент отображается 0 - несмотря на то, что фактически в настройках контроллера часовой пояс задан отличным от нуля).
Как можно устранить эти "выбросы"?
11.png
Комментарий: эта ситуация обычно наблюдается в проектах с использованием OwenArchiver и в сложных проектах с большим количеством ФБ.
В данный момент у нас нет точной информации о причинах возникновении этой проблемы. Во время исследования нескольких пользовательских проектов, в которых проблема проявлялась - она исчезала при удалении из проекта части функционала (в одном из случаев таким функционалом была библиотека, разработанная пользователем).
Ответ: в качестве варианта решения этой проблемы мы разработали ФБ RTC_FILTER, который позволяет отфильтровывать "выбросы" cистемного времени.
Ниже приведена ссылка на пример использования этого ФБ.
Общий принцип работы блока: пока вход xEnableFilter имеет значение TRUE, то блок находится в работе и на выходе dtFilteredDateAndTime отображается значение входа dtDateAndTime с отфильтрованными "выбросами".
Т.е. даже во время "выброса" на выходе ФБ будет корректное значение системного времени с учетом часового пояса.
Скачать пример: https://ftp.owen.ru/CoDeSys3/99_Foru...projectarchive
На скриншоте - синим выделено значение канала Hour узла OwenRTC с "выбросами" системного времени, зеленым - выход блока RTC_FILTER с отфильтрованнным значением системного времени.
2021-03-23_11-09-59.png
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 12:29.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: диалоги KeypadOwen и KeypadOwenBig из библиотеки OwenVisuDialogs по умолчанию открываются с англоязычной раскладкой и нижним регистром.
Как сделать так, чтобы диалог открывался с русскоязычной раскладкой и верхним регистром?
Ответ: откройте Менеджер библитек и задайте значения переменных в списке параметров KeypadDefaultLanguage:
2021-04-05_8-35-21.png
- LANG.ENG_LC - англоязычная раскладка, нижний регистр
- LANG.ENG_UC - англоязычная раскладка, верхний регистр
- LANG.RUS_LC - русскоязычная раскладка, нижний регистр
- LANG.RUS_UC - русскоязычная раскладка, верхний регистр
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 11:53.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: как сделать скриншот web-страницы и отобразить его в визуализации?
Ответ: контроллер не имеет встроенных средств для снятия скриншотов web-страниц.
Но если он подключен к сети с доступом в Интернет - то можно воспользоваться одним из интернет-сервисов для снятия скриншотов.
См. пример, основанный на использовании сервиса ScreenshotMachine.
Для использования API сервиса требуется пройти регистрацию: https://www.screenshotmachine.com/re...php?button=api
2021-04-20_8-10-47.png
Примечание: сервис не может использоваться для снятия скриншотов web-визуализации самого контроллера.
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 11:53.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: как получить в ПЛК информацию о текущей погоде?
Ответ: см. пример. В примере демонстрируется получение информации о погоде с помощью сервиса https://openweathermap.org/
(соответственно, контроллер должен быть подключен к интернету).
2025-04-21_12-11-13.png
См. также пример получения информации о погоде и астрономических данных с помощью сервиса Weather API:
weatherapi_01.png weatherapi_02.png weatherapi_03.png
Последний раз редактировалось Евгений Кислов; 09.06.2025 в 06:35.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: необходимо в коде программы определить, по нажатию на какую кнопку (OK или CANCEL) был закрыт диалог Numpad или Keypad.
Это требуется, например, чтобы при вводе нового значения (с помощью нажатия на кнопку OK) однократно произвести его валидацию.
Каким образом это можно сделать?
Ответ: для диалогов библиотеки OwenVisuDialogs (NumpadOwen, NumpadOwenBig, KeypadOwen, KeypadOwenBig) начиная с версии 3.5.14.3 добавлена возможность получения информации о результате закрытия диалогов.
Для этого используется переменная g_stClosedDialogInfo из списка глобальных переменных DialogsSettings.
Переменная является структурой типа OwenDialogClosingInfo и включает следующие поля, содержащие информацию о последнем закрытом диалоге:
2021-06-02_9-54-16.png
- xIsDialogClosed (BOOL) - флаг закрытия диалога. Принимает значение TRUE при закрытии любого из упомянутых выше диалогов.
Сбрасывается в FALSE автоматически при открытии любого из упомянутых диалогов или вручную из программы пользователя.- wsDialogTitle (WSTRING) - заголовок закрытого диалога
- eDialogType (перечисление OwenDialog_TYPE) - тип закрытого диалога (NUMPAD или KEYPAD)
- eDialogClosingResult (перечисление OwenDialogClosed_RESULT) - результат закрытия диалога (т.е. кнопка диалога, по нажатию на которую он был закрыт - OK или CANCEL)
Библиотека и пример использования доступны по ссылке:
https://owen.ru/forum/showthread.php...l=1#post348262
См. также другой пример, в котором демонстрируется более сложный, но универсальный вариант получения результата закрытия любого диалога.
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 11:53.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: в проекте используется управление пользователями визуализации (Менеджер визуализации - Управление пользователями).
Необходимо считать информацию о созданных пользователях в переменные программы (например, чтобы потом управлять ими из кода).
Как это можно сделать?
Ответ: см. пример.
2021-06-10_8-02-13.png
Если вы используете CODESYS V3.5 SP17 Patch 3 с плагином визуализации 4.3.0.0 или выше - то см. этот пример и информацию из п. 2.7 данного документа.
Последний раз редактировалось Евгений Кислов; 02.05.2023 в 13:00.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Вопрос: есть ли какие-нибудь ограничения по длине строковых переменных, отображаемых в визуализации?
В нашем проекте переменная типа WSTRING обрезается на 1249 символах. Можно ли как-то обойти это ограничение?
Ответ: для отображения строк в визуализации используется буфер для форматирования текста.
По умолчанию размер буфера составляет 2500 байт - этого хватает для вывода переменных типа STRING длиной до 2499 символов и переменных типа WSTRING длиной до 1249 символов.
Для увеличения размера буфера нужно создать программу со следующим кодом:
2021-06-11_6-26-06.pngКод:PROGRAM VisuSetStringBuffer VAR END_VAR // Выделяем буфер для форматирования строк визуализации на 10000 байт (можно указать своё значение) // его хватит для STRING(9999) или WSTRING(4998) VisuElems.VisuFctConfigureTextBufferSize(10000);
В Менеджере визуализации привяжите эту программу во вкладке Вызов после запуска визуализации (привязывать ее к какой-либо задаче не надо):
2021-06-11_6-26-26.png
Примечание: из-за бага CODESYS в визуализации в данный момент возможен только ввод строк, длина которых не превышает 255 символов.
2026-01-26_8-43-23.png
Последний раз редактировалось Евгений Кислов; 26.01.2026 в 08:43.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
При обработке данных, реализации протоколов и в других задачах часто требуются манипуляции с памятью.
Базовые функции для работы с памятью доступны в библиотеке CAA Memory.
2021-06-11_9-16-45.png
В частности, в ней расположены две крайне часто используемые функции - MemMove (копирование данных, аналог memmove из С) и MemFill (заполнение области памяти, аналог memset из С).
Ниже приведены примеры вызова функций для работы с экземпляром структуры SOME_DATA.
Код:TYPE SOME_DATA : STRUCT iVar: INT; rVar: REAL; byVar: BYTE; lwVar: LWORD; END_STRUCT END_TYPEФункция MemMove копирует uiNumberOfBytes байт из области памяти, размещенной по указателю pSource, в область памяти, размещенную по указателю pDestination.Код:PROGRAM PLC_PRG VAR stSomeData: SOME_DATA := (iVar := 11, rVar := 22.33, byVar := 42, lwVar := 16#DEADCAFEDEADCAFE); abyBuffer: ARRAY [0..255] OF BYTE; xCopy: BOOL; xClear: BOOL; END_VAR
Области памяти могут перекрываться.
2021-06-11_8-32-47.pngКод:IF xCopy THEN MEM.MemMove(pSource := ADR(stSomeData), pDestination := ADR(abyBuffer), uiNumberOfBytes := SIZEOF(stSomeData) ); xCopy := FALSE; END_IF
Обратите внимание на "разрывы" в массиве. Они связаны с тем, что переменные в структурах располагаются с учетом выравнивания памяти.
Для контроля выравнивания можно использовать атрибут pack_mode:
https://help.codesys.com/webapp/_cds...rsion=3.5.17.0
Функция MemFill "заполняет" область памяти размером uiLength байт по указателю pMemoryBlock значением byFillValue.
2021-06-11_9-12-47.pngКод:IF xClear THEN MEM.MemFill(pMemoryBlock := ADR(stSomeData), uiLength := SIZEOF(stSomeData), byFillValue := 0); xClear := FALSE; END_IF
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 11:28.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect
Формально привязка переменных к каналам компонентов в дереве проекта может быть произведена двумя способами:
1. Привязкой к каналу уже существующей переменной (маппированием) - с помощью ввода имени этой переменной или ее выбором через ассистент ввода (для этого надо нажать на кнопку "...").
2021-06-24_8-46-47.png
2. Вводом имени еще несуществующей переменной - тогда в проекте будет автоматически объявлена неявная глобальная переменная с этим именем.
В зависимости от выбранного способа в столбце Соотнесение будет отображаться соответствующая иконка: для способа 1 - "стрелка", для способа 2 - "лампочка".
В подавляющем большинстве случаев рекомендуется использовать только способ 1.
Из-за автообъявления переменных в каналах компонентов при загрузке проекта могут периодически (без систематики) возникать ошибки - из-за того, что карта адресов таких переменных может быть сформирована некорректно.
Особенно часто это наблюдается при автообъявлении переменных типа BIT и ARRAY.
Примеры ошибок:
image1.png image2.png
Поэтому настоятельно рекомендуется использовать только способ 1 - то есть привязывать к каналам уже заранее объявленные переменные.
2021-06-24_8-38-00.png
Последний раз редактировалось Евгений Кислов; 25.06.2021 в 11:28.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | личка на форуме - не подходит
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | PRO32 Connect