Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ОТКРЫТЫЕ ФОРУМЫ / OPEN FORUMS » TRACE MODE 6 бесплатная версия / TRACE MODE 6 Free version » OPC HDA через канал CALL не сбрасывает массив аргументов

   
Автор / Author Тема / Topic: OPC HDA через канал CALL не сбрасывает массив аргументов
voldemr
Junior Member / Новичок
Участник № / Member № 7872


Icon 1 отправлено / posted      Профиль для / Profile for voldemr           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте.
Поясите, как работает канал Обмен по OPC HDA с помощью канала CALL .

Есть сервер OPC HDA.
1. В ТМ6 (демо-версия) в источниках/приемниках создаю компонент OPC HDA.
2. Создаю канал CALL привязанный к источнику из п.1. (по умолчанию, остановлен).
3. В канале CALL из. п.2 создаю 2 аргумента DATE_AND_TIME для задания интервала запроса.
4. Создаю 2 канала Time (From и To) и привязываю соответственно к аргументам интервалов канала CALL.
5. Запускаю профайлер.
Далее действия в профайлере.

Начинаю эксперимент:
6. Задаю интервал From и To (данные в сервере OPC HDA точно ОТСУТСТВУЮТ)
7. Запускаю канал CALL (в атрибут (3, C) Состояние записываю 0).
8. Данных соответственно нет, атрибут (124, ArgSize) НЕ меняет значение =2, атрибут (120, ACK) = 0, массив значений заполнен правильно.
Только 2 аргумента интервалов.
9. Останавливаю канал CALL (в атрибут (3, C) Состояние записываю 1).

10. Задаю интервал From и To (данные в сервере OPC HDA точно ЕСТЬ)
11. Запускаю канал CALL (в атрибут (3, C) Состояние записываю 0).
12. Данные вычитываются, атрибут (124, ArgSize) меняет значение, атрибут (120, ACK) = 1, массив значений заполнен правильно.
13. Останавливаю канал CALL (в атрибут (3, C) Состояние записываю 1).

14. Задаю ДРУГОЙ интервал From и To (данные в сервере OPC HDA точно ЕСТЬ)
15. Запускаю канал CALL (в атрибут (3, C) Состояние записываю 0).
16. Данные вычитываются, атрибут (124, ArgSize) меняет значение, атрибут (120, ACK) = 1, массив значений перезаполнен правильно.
17. Останавливаю канал CALL (в атрибут (3, C) Состояние записываю 1).

Пока все штатно и логично.

Теперь самое непонятное:
18. Задаю ДРУГОЙ интервал From и To (данные в сервере OPC HDA точно ОТСУТСТВУЮТ)
19. Запускаю канал CALL (в атрибут (3, C) Состояние записываю 0).
20. Данные НЕ вычитываются, но атрибут (124, ArgSize) НЕ меняет значение, атрибут (120, ACK) = 1, и массив значений НЕ ОБНУЛЯЕТСЯ.
21. Останавливаю канал CALL (в атрибут (3, C) Состояние записываю 1).

Т.е. получается, что при штатной работе канала, если в сервере OPC HDA будут отсутствовать данные на запрашиваемый интервал, канал CALL не обновит свои данные и ни как не сообщит об этом!!!

Что я сделал неправильно в данном эксперименте?
Каким образом обновить данные, т.е. узнать, что на запрашиваемый интервал данных в сервере OPC HDA нет?

Сообщения / Posts 10 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Целесообразно задать каналу CALL период обработки ОДНОКРАТНО.
Тогда после отработки запроса канал сам автоматически выключится и взведет ACK=1.

2. Когда каналу не удается отработать запрос, он остается включенным и продолжает посылать запросы до получения корректного ответа от OPC-сервера.
При этом его атрибуты и аргументы не изменяются.

3. Можно предложить следующий алгоритм диагностики и управления.
При включении канала одновременно сбрасывать ACK. После автоматического выключения канала (после его отработки) убедиться, что ACK=1.
Если после включения канала в течение достаточно длительного времени (например, 2-3 сек.) ACK=0, сигнализировать ОШИБКУ и ВЫКЛЮЧАТЬ канал CALL.

Сообщения / Posts 15674 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
voldemr
Junior Member / Новичок
Участник № / Member № 7872


Icon 1 отправлено / posted      Профиль для / Profile for voldemr           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо.
Примерно к подобному алгоритму я и пришел.
Анализирую из программы ACK. Если запрос удачный, останавливаю канал, сбрасываю ACK в 0 и начинаю обрабатывать полученный массив данных.
Далее, канал можно запускать на опрос с новыми интервалами.

Немного сторонний вопрос...
Можно ли из программы по ID канала (атрибут 118), получить имя канала?
К сожалению, специальные функции позволяю получить только DINT и REAL значения атрибутов.

Сообщения / Posts 10 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Нельзя.

Не очень понятно, когда это может понадобиться.

Сообщения / Posts 15674 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
voldemr
Junior Member / Новичок
Участник № / Member № 7872


Icon 1 отправлено / posted      Профиль для / Profile for voldemr           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ясно. Спасибо.
Будем думать и искать варианты)

"Не очень понятно, когда это может понадобиться.":

Есть запрос в БД, где имя канала - один из параметров. Также, имя канала(параметра) - это и таблица в БД.
Через привязку к аргументам и по команде запрос выполняется.

Была мысль, программно запросу передавать в аргументы имя таблицы и нужные поля, и программно запускать выполнение запроса.

Сообщения / Posts 10 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
voldemr
Junior Member / Новичок
Участник № / Member № 7872


Icon 1 отправлено / posted      Профиль для / Profile for voldemr           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте.
Прошу небольшие уточнения.
Организован OPC HDA через канал CALL.
1. В каком формате считываются и хранятся данные "значений" в массиве аргументов 142,144,146 и далее?
Этот вопрос возник, т.к. при чтении архива теряется точность представления данных.
Судя по виду, то формат REAL (float) – вещественное число (4 байта). Но идет округление значения в десятых, сотых значениях после запятой. Иногда и до единицы.

2. Сомнения в том, что я экспериментирую с данными DoubleFloat (8 байт), канал значения вычитывает относительно верно, с учетом замечания в п.1.
Но, т.к. специальные функции на чтение возвращают 4-х байтовые значения, то других вариантов, как использовать тип REAL, у меня не остается?

Сообщения / Posts 10 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
AdAstra Technical Support
Moderator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for AdAstra Technical Support           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Аргументы создаются с типом данных REAL (4-байтовые).
DoubleFloat принимаются, но преобразуются во FLOAT.
Округление при этом неизбежно, т.к. у переменных FLOAT точность не позволяет корректно отображать более 6 значащих цифр.
Например, переданное из OPC HDA-сервера число 193.89620 будет принято как 193.896.

При записи в архив Trace Mode 6 все переменные преобразуются в 4-байтовые форматы.

Сообщения / Posts 15674 | Из / From: Russia  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us

Rambler's Top100 Rambler's Top100



Powered by Infopop Corporation
UBB.classic™ 6.7.2