Вложений: 4
COM#33. Подключение к OwenCloud - известные проблемы
Вопрос 1: в символьной конфигурации был включен экспорт комментариев - чтобы они отображались в OwenCloud в качестве названий параметров.
После этого контроллер перестал подключаться к облаку. В чем может быть проблема?
Ответ: при отправке комментариев в OwenCloud их длина обрезается до 31 символа.
В результате такие "обрезанные" комментарии для разных переменных могут стать одинаковыми.
Пример:
Код:
xVolume1_SensorFailed: BOOL; // ФС Отказ датчика уровня воды Емкость 1
xVolume2_SensorFailed: BOOL; // ФС Отказ датчика уровня воды Емкость 2
Для обеих переменных комментарии при их отправке в OwenCloud будут обрезаны до ФС Отказ датчика уровня воды Ем и станут одинаковыми.
При разборе символьной конфигурации в OwenCloud в ряде конкретных случаев из-за таких повторяющихся имен могут возникнуть ошибки, из-за которых импорт конфигурации будет прерван, и связь контроллера с облаком не будет установлена. При этом всё зависит от сочетания переменных в символьной конфигурации - например, если в символьной конфигурации будут только две переменные, показанные выше (с совпадающим "обрезанным" именем) - то связь установится, но если в символьной конфигурации будут другие переменные, то при их определенном сочетании связь установлена не будет.
Поэтому разработчик должен проанализировать комментарии к переменным, выбранным в символьной конфигурации, и исключить возможность того, что комментарии разных переменных будут совпадать (в том числе, при их обрезании до 31 символа).
Вопрос 2: в проект была добавлена символьная конфигурация. Через некоторое время (измеряемое часами) начинают проявляться проблемы.
Примеры таких проблем:
- не удается подключиться к контроллеру из CODESYS
- не отображается веб-визуализация
- перестает работать обмен
- на экране СПК пропадают изображения
С чем это может быть связано?
Ответ: в текущей реализации библиотеки OwenStorage (отвечающей за связь с OwenCloud) есть ошибка: если в символьной конфигурации нет ни одной переменной "элементарного" типа (BOOL, INT и т. д.) - то начинается утечка дескрипторов, приводящая к описанному поведению.
Характерный признак утечки дескрипторов - отображение в логе контроллера сообщения "Could not open /dev/random: Too many open files".
Вложение 75602
Обычно это проявляется у клиентов, добавляющих в символьную конфигурацию только экземпляры структур. Для решения проблемы достаточно добавить в символьную конфигурацию хотя бы одну переменную "элементарного" типа.
Ошибка будет исправлена в следующей версии библиотеки, после чего данный ответ будет обновлен.
Upd. - проблема устранена в прошивке 3.7.0228.1046 (СПК210) и 3.7.0331.0614 (ПЛК210).
Ошибка исправлена в обновлении компонента OwenCloud (3.5.17.3003) в дереве проекта и библиотеки OwenStorage (3.5.17.32).
Вопрос 3: для добавления контроллера в OwenCloud требуется указать его серийный номер.
У моего контроллера в веб-конфигураторе серийный номер не отображается:
Вложение 75406
Почему так случилось и что можно сделать?
Ответ: такое может случиться из-за некорректно проведенной процедуры перепрошивки.
Вам требуется отправить прибор в сервисный центр.
Вопрос 4: для связи с OwenCloud контроллер должен быть подключен к сети, которая имеет доступ в интернет.
Должны ли быть в ней открыты какие-то порты?
Ответ: для связи с OwenCloud контроллер устанавливает клиентское соединение с ресурсом gate.owencloud.ru по порту 26502.
Соответственно, никакие настройки сети не должны мешать ему это делать.
Самый простой способ проверки - выполнить пинг до gate.owencloud.ru в веб-конфигураторе контроллера на вкладке Сеть/Диагностика:
Вложение 75407
Если пинга нет - то проверьте корректность сетевых настроек контроллера на вкладке Сеть/Интерфейсы.
В большинстве случаев проблема связана с тем, что не указан (или некорректно указан) IP-адрес шлюза.
Вложение 75409
Если вы не знаете, какой адрес шлюза в вашей локальной сети - обратитесь к ее системному администратору.
Вложений: 1
COM#34. Как увеличить максимальное число подключений для ФБ MB_TcpSlave?
Вопрос: для настройки контроллера в режиме Modbus TCP Slave используем ФБ MB_TcpSlave из библиотеки OwenCommunication.
Первый Modbus TCP клиент успешно опрашивает контроллер, но вот второй не может установить с ним соединение.
Если отключаем первый клиент, то второй успешно подключается и опрашивает ПЛК.
В чем может быть проблема?
Ответ: по умолчанию ФБ MB_TcpSlave может обрабатывать только одно клиентское подключение.
Чтобы увеличить максимальное число одновременно обрабатываемых клиентов - в менеджере библиотек выберите библиотеку OwenCommunication, найдите узел Settings и задайте параметру g_c_usiMaxCountClients нужное значение (в диапазоне 1...16).
Вложение 76315
Вложений: 3
COM#35. Modbus TCP - опрос резервированных slave-устройств
Начиная с версии плагина Modbus 4.4.0.0 стандартный компонент Modbus TCP Client поддерживает механизм Modbus Network Redundancy.
Для его использования необходимо:
1. Установить плагин Modbus версии 4.4.0.0 (ссылка) или выше.
2. Установить модифицированный файл описания компонента (ссылка для версии плагина 4.4.0.0, ссылка для плагина версии 4.5.0.0) с помощью команды Инструменты - Репозиторий устройств - Установить.
3. В проекте CODESYS настроить обмен в режиме Modbus TCP Master через стандартные компоненты: Ethernet --> Modbus TCP Client ---> Modbus TCP Server.
Требуемая версия компонента Modbus TCP Client: 4.4.0.0 или 4.5.0.0
Требуемая версия компонента Modbus TCP Server: 4.4.0.1 или 4.5.0.1
В прошлых версиях плагина эти компоненты назывались Modbus TCP Master и Modbus TCP Slave соответственно.
4. В компоненте Modbus TCP Server на вкладке Конфигурация установить для параметра fallback IP значение TRUE, а в параметре SecondIPAddress - IP-адрес резервного slave-устройства.
Вложение 79245
В случае потери связи с slave-устройством, имеющим "основной" IP-адрес (заданный на вкладке Общее), произойдет попытка подключения к slave-устройству с "резервным" IP-адресом (SecondIPAddress) и начнется его опрос.
Попытка обратного переключения (для опроса "основного" slave-устройства) произойдет только в случае потери связи с "резервным" slave-устройством.
Для определения IP-адреса текущего опрашиваемого устройства используйте переменную <имя_компонента_в_дереве_проекта>.ComSettings.ipAd dress (тип - ARRAY [0..3] OF BYTE).
Вложение 79534
В версии 4.5.0.0 появилось два новых параметра:
- Preffered Line - предпочитаемое slave-устройство (Line1, Line2 или None);
- Keep both lines connected - установить два параллельных TCP-соединения с обоими slave-устройствами. Для использования этого функционала в контроллере должна присутствовать дополнительная лицензия для Modbus TCP Master.
Вложение 85271
Если параметр Preffered Line имеет значение Line1 или Line2, то в случае возобновления связи с соответствующим slave-устройством контроллер переключится на его опрос.
В случае установки галочки Keep both lines connected - контроллер будет параллельно опрашивать оба slave-устройства, но данные в каналы будут считываться/записываться только для "предпочитаемого".
Для определения текущей активной "preffered line" используйте переменную <имя_компонента_в_дереве_проекта>.usiActiveLine (тип - USINT).
Для определения кода последней ошибки связи с "резервным" slave-устройством используйте переменную <имя_компонента_в_дереве_проекта>.ComStateBackup (тип - перечисление MODBUSTCPCOMSTATE).
Примечание: при использовании компонента Modbus TCP Client версии 4.4.0.0 или выше наблюдаются ошибки в работе шаблонов модулей Mx210:
- канал Флаг ошибки всегда имеет значение TRUE (даже при наличии связи с модулем и успешного обмена);
- для модулей МВ210-101/102: каналы Код статуса всегда имеют значение Нет связи с модулем (даже при наличии связи с модулем и успешного обмена).
Вложений: 1
OTHER#17. СПК1хх [М01] и отключение подсветки экрана
Вопрос: в СПК1хх [М01] с прошивкой 2.4.xxxx.xxxx не удается полностью отключить подсветку экрана.
Даже при установке яркости подсветки в значение 0 на экране продолжают отображаться элементы, просто очень тускло.
Можно ли это как-то исправить?
Ответ: к сожалению, нет. Эта проблема устранена в СПК210.
В СПК1хх [М01] с прошивкой 2.4.xxxx.xxxx можно использовать следующее обходное решение, которое частично исправит визуальную часть проблемы:
создайте экран визуализации с "полностью черным" фоном и укажите его в узле Screen для параметра конфигурации Off visu name:
Вложение 82296
DEBUG#15. СПК210-07, прошивка 3.7.0228.1046 - нельзя зайти в экранный конфигуратор
Вопрос: после перепрошивки СПК210-07 на прошивку 3.7.0228.1046 не получается зайти в экранный конфигуратор - потому что при запуске не отображается прогресс-бар загрузки контроллера и нет надписи Режим загрузки.
Как это исправить?
Ответ:
Для устранения проблемы необходимо:
- подключиться к СПК210-07 по USB или Ethernet;
- перейти в web-конфигуратор;
- открыть вкладку Система/Обновление прошивки;
- нажать кнопку Обзор и выбрать файл swu-hotfix-spk210_07-psplash.swu из архива с прошивкой 3.7.0228.1046;
- нажать кнопку Обновить;
- процесс установки хотфикса завершится автоматической перезагрузкой контроллера, после которой описанные выше проблемы перестанут проявляться.
Вложений: 3
PRG#41. Как считать системное время виртуального контроллера?
Вопрос: для получения системного времени контроллеров ОВЕН в коде программы мы используем узел OwenRTC в дереве проекта.
Но для виртуального контроллера CODESYS Control Win V3 (и для контроллеров других производителей) данный узел недоступен.
Как получить системное время в этом случае?
Ответ: можно воспользоваться библиотекой SysTimeRtc. Ее потребуется добавить в Менеджер библиотек вашего проекта:
Вложение 82987
- функция SysTimeRtcGet позволяет получить системное время контроллера;
- функция SysTimeRtcGetTimezone позволяет получить информацию о его часовом поясе (поддерживается не во всех контроллеров; для CODESYS Control Win V3 - поддерживается).
Пример функции-обертки для получения системного времени, которую вы можете создать в своем проекте:
Код:
// Функция для получения системного времени
FUNCTION GetSystemDT : DT
VAR_INPUT
// Установите TRUE, если ваш контроллер не поддерживает функцию SysTimeRtcGetTimezone...
xUseManuaTimeZonelOffset: BOOL := FALSE;
// ...и задайте смещение для вашего часового пояса сами ( в минутах); например: 180 для UTC+3
iTimeZoneOffsetInMinutes: INT(INT#-12*60..INT#14*60) := 0;
END_VAR
VAR
stTimeZone: SysTimeRtc.TimezoneInformation;
dwErrorCode: DWORD;
END_VAR
IF NOT(xUseManuaTimeZonelOffset) THEN
dwErrorCode := SysTimeRtc.SysTimeRtcGetTimezone(stTimeZone);
iTimeZoneOffsetInMinutes := -1 * stTimeZone.iBias;
END_IF
{warning disable C0196}
GetSystemDT := TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) + (iTimeZoneOffsetInMinutes * 60) );
{warning restore C0196}
Вложение 82988 Вложение 82989
Вложений: 1
VISU#36. Как запретить нажатие на кнопку для клиентов web-визуализации?
Вопрос: мы используем для управления техпроцессом панельный контроллер СПК. Требуется, чтобы элементы управления (кнопки, поля ввода и т. д.) были активны только в таргет-визулизации (с экрана СПК), но неактивны для клиентов web-визуализации. Как это можно реализовать?
Ответ: в параметре Переменные состояний/Отключение ввода для всех нужных элементов введите выражение
Код:
VisuElems.CurrentClientType = VisuElems.Visu_ClientType.WebVisualization
Вопрос: но что, если для конкретного web-клиента (с известным IP-адресом) требуется разрешить управление?
Ответ: создайте в проекте функцию:
Код:
FUNCTION DisableVisuElement : BOOL
VAR
pClientData: POINTER TO VisuElems.VisuStructClientData;
fbHelper: VisuElems.VisuFbClientTagDataHelper;
sCurrentClientIp: STRING;
i: DINT;
END_VAR
VAR CONSTANT
// Массив IP-адресов клиентов, которым разрешено управление
// Отредактируйте его под свою задачу
c_asAllowIp: ARRAY [1..2] OF STRING := ['212.16.18.23', '212.16.18.24'];
END_VAR
// Код функции
pClientData := VisuElems.CurrentVisuClient;
IF pClientData <> 0 THEN
fbHelper(pClientData := pClientData, stIPv4 => sCurrentClientIp);
FOR i := 1 TO UPPER_BOUND(c_asAllowIp, 1) DO
IF sCurrentClientIp = c_asAllowIp[i] THEN
DisableVisuElement := FALSE;
RETURN;
ELSE
DisableVisuElement := TRUE;
END_IF
END_FOR
END_IF
Привяжите вызов это функции к параметру Переменные состояний/Отключение ввода всех нужных элементов:
Вложение 85043
Вложений: 4
PRG#42. Как считать температуру процессора СПК210?
Вопрос: у ПЛК210 в дереве проекта в узле PLC210_xx есть канал Температура CPU.
Как получить такое же значение для СПК210?
Вложение 85064
Ответ: см. пример.
Вложение 85063
Комментарий: строго говоря, у ПЛК210 в узле PLC210_xx отображается не температура CPU, а температуры платы контроллера, которая измеряется отдельным термодатчиком.
Начиная с версии прошивки 3.7.0923.1107 в СПК210 и ПЛК210-1x добавлен параметр Температура CPU:
- в узел Debug;
- в web-конфигуратор на вкладку Состояние/Обзор.
Вложение 86437 Вложение 86436
Вложений: 1
COM#36. Как считать из контроллера файлы по протоколу HTTP(S)?
Вопрос: мы используем систему верхнего уровня, которая работает как HTTP(S)-клиент и должна считывать с контроллера файлы архивов по этому протоколу.
Как это реализовать?
Ответ: в состав прошивки контроллера входит HTTP(S)-сервер uhttpd, который используется для организации доступа к web-конфигуратору.
Для решения описанной задачи разумно запустить еще один экземпляр сервера:
1. Загрузите утилиту WinSCP
2. Подключитесь с помощью нее к контроллеру, указав его IP-адрес и протокол SCP.
Имя пользователя - root, пароль - тот, что используется для доступа к конфигуратору (по умолчанию - owen)
3. Перейдите в директорию /etc/config и откройте файл uhttpd
4. Добавьте в конец файла секцию, описывающую еще один экземпляр сервера. Сохраните файл.
Например, секция может выглядеть так:
Код:
config uhttpd 'custom'
list listen_http '0.0.0.0:8081'
list listen_https '0.0.0.0:444'
option home '/home/server_files'
option rfc1918_filter '1'
option index_page 'index.html'
option enable_index_cache '1'
option cert '/etc/uhttpd.crt'
option key '/etc/uhttpd.key'
Вложение 85702
В рамках примера:
- сервер будет доступен по порту 8081 (HTTP) и 444 (HTTPS);
- в качестве рабочей директории сервера будет использоваться /home/server_files;
- в качестве сертификатов HTTPS будут использоваться сертификаты веб-конфигуратора.
Вы можете задать и другие настройки, ориентируясь на требования вашей задачи.
Описание возможных настроек доступно по ссылке:
https://openwrt.org/docs/guide-user/...bserver/uhttpd
5. Перейдите в директорию /home и создайте в ней директорию server_files.
Разместите в этой созданной директории нужные вам файлы (например, для теста скопируйте в нее файл test.csv).
В приложении контроллера вам потребуется организовать сохранение в этой директории нужных вам файлов - например, с помощью библиотеки CAA File или SysFile (см. документ CODESYS V3.5. Архивация).
6. Перезагрузите контроллер, чтобы изменения в файле /etc/config/uhttpd вступили в силу.
Если вы подключены к контроллеру по SSH - то вместо этого можно выполнить команду reload_config
7. Для тестирования введите в браузере строку
Код:
http://<ip вашего контроллера>:8081/test.csv
или
Код:
https://<ip вашего контроллера>:444/test.csv
Во втором случае может возникнуть сообщение с текстом типа "Предупреждение! Вероятная угроза безопасности".
Это связано с тем, что по умолчанию в контроллере используются самоподписанные сертификаты, которые не вызывают доверия у браузера.
Потребуется подтвердить загрузку файла ("Принять риск и продолжить").
Вы можете использовать собственные сертификаты (см. параметры cert и key в конфиг-файле).
Система верхнего уровня должна отправить HTTP-запрос с методом GET (при необходимости предварительно приняв сертификат) для загрузки этого файла.
Вложений: 1
OTHER#18. СПК210 раз в час экран промаргивает на одну секунду
Вопрос: мы используем СПК210 с прошивкой 3.7.0228.1046. Раз в час экран гаснет на одну-две секунды, после чего включается обратно. С чем это связано?
Ответ: если в течение длительного времени на дисплее отображается один и тот же экран визуализации - то может возникнуть остаточное изображение (ореол), которое "отпечатается" и будет сохраняться при переходе на другие экраны.
Это особенность LCD-дисплеев.
Для редуцирования этой проблемы начиная с версии прошивки 3.7.0228.1046 реализован механизм автообновления экрана - вы наблюдаете последствия его работы.
Настройки расположены в проекте CODESYS в узле Screen.
Алгоритм работы: если Enable screen refresh = TRUE, то с интервалом, определяемым параметром On mode refresh period, Dim mode refresh period или Off mode refresh period (в зависимости от режима), дисплей заливается черным (0xFFFFFF) цветом на интервал времени T1, а затем белым (0x000000) цветом на интервал времени T2.
По умолчанию автоообновление включено; для нормального режима работы (On mode) его период составляет 3600 секунд (час), а для режимов "Притушено" и "Погашено" - 600 секунд (10 минут)
Вложение 86097