This is topic Копирование архива не с МРВ in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/18/t/000193.html

Posted by Vladimir (Участник № / Member № 1029) on :
 
Я пытаюсь прикрутить к механизму архивирования TM такую схему:
есть счетчик, который сам ведет архивы (часовой, месячный, годовой). Этот счетчик подключен к контроллеру. На контроллере крутится самописная программа, которая снимает архив и текущие показания. Контроллер обменивается данными с управляющим компьютером под управлением ТМ по протоколу MODBUS. Можно ли настроить ТМ так, чтобы по MODBUS'у с контроллера в ТМ (по запросу ТМ) передавался требуемый архив (по выбору) и записывался в СПАД архив в ТМ? Если нельзя по MODBUS'у, тогда как это можно сделать?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Только через внешний драйвер пользователя TYPE_11.
 
Posted by Vladimir (Участник № / Member № 1029) on :
 
У меня есть вопрос по разработке такого драйвера:
предположим я хочу записать а СПАД архив значения 10 каналов (из месячного архива в счетчике). При этом драйвер формирует блоковый запрос к контроллеру. Контроллер возвращает месячный архив для 10 каналов. Архив для каждого канала содержит 36 значений.
Затем, в Функции Get_xxx драйвера, я устанавлюваю type_сnv = 12.
Вопросы:
1. type_сnv = 12 соответсвует записи в архив только одного канала, можно ли его использовать для записи в архив нескольких каналов, как в моем случае? Или нужно использовать другое значение, тогда какое?
2. Откуда МРВ, при type_сnv = 12, в момент вызова Get_XXX в драйвере, знает сколько драйвер заполнит значений RSDATA? Насколько я понял q_rec соответвует количеству каналов в блоковом запросе, но количество значений для записи в архив ни где не указывается?
3. Контролирует ли МРВ, при записи в СПАД архив, метки времени, т.е. если я считаю с контроллера архив
за один и тот же месяц 2 раза, то сколько записей будет в СПАД архиве - две или одна?
 
Posted by Vladimir (Участник № / Member № 1029) on :
 
Ответьте, пожалуйста, на мои вопросы
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. В имеющейся спецификации функций вызова драйверов нет возможности в одном групповом запросе поднять архивные блоки для нескольких каналов.

2. Из нашей документации:
"Если в массиве p содержатся метки времени (type_cnv больше 3) значение q_rec необходимо увеличить в два раза, так как для передачи каждого значения канала и метки времени для архива нужно два элемента массива структур RSDATA (q_rec = 2 * (ia.c[5]+1)).

Если получено значение type_cnv, равное 12 или 13, МРВ просматривает все каналы базы, совпадающие с каналом, инициировавшим запрос, по типу, подтипу и дополнению к подтипу и вызывает драйвер с функцией zCompare_xxx с count = -1. На первом же канале, по которому драйвер ответил положительно, из буфера RSDATA считываются записи В КОЛИЧЕСТВЕ Q_REC (выдано функцией Get_xxx) и записываются в архив с индексом этого канала. Объем настроек, используемых при этом функцией zCompare_xxx (включая номер RS и адрес устройства) определяется драйвером. В канале, инициировавшем запрос, записывается значение q_rec."

3. Если в подобной ситуации метки времени совпадут, то запись будет одна - последняя, если не совпадут, то - две.
 
Posted by Vladimir (Участник № / Member № 1029) on :
 
Появились еще вопросы:
1. Получается, если я хочу записывать значения канала в архив, то в этом случае, понятие блокового запроса неприменимо, и в функции Prepare_xxx type_cnv > 0, так?
2. Когда МРВ вызывает Get_xxx, кто выделяет память под массив RSDATA - МРВ или драйвер? Если МРВ, то мне непонятно, откуда МРВ знает сколько в массиве будет значений - в каком месте драйвера ей это указывается, ведь на момент вызова Get_xxx, type_cnv еще не определено? Я перечитал документацию, но не нашел там таких строк
"Если в массиве p содержатся метки времени (type_cnv больше 3) значение q_rec необходимо увеличить в два раза, так как для передачи каждого значения канала и метки времени для архива нужно два элемента массива структур RSDATA (q_rec = 2 * (ia.c[5]+1))."
Это относится к какой функции?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Из документации.
"Алгоритм обработки данных DATA11
Данный алгоритм следует использовать при ЕДИНИЧНЫХ запросах или при блоковых, если заранее известен порядок размещения значений, которые будут переданы устройством в ответе.

При разборе ответа от контроллера по данному алгоритму МРВ выполняет следующие операции:

1. Осуществляет проход по базе с ее начала. (Повторный проход выполняется с места окончания предыдущего блокового запроса). При этом выбираются каналы с тем же подтипом, дополнением к подтипу и двумя младшими байтами удаленного адреса (ia.i[0] == ia1.i[0]). КОЛИЧЕСТВО ВЫЗЫВАЕМЫХ КАНАЛОВ ОПРЕДЕЛЯЕТСЯ ЗНАЧЕНИЕМ ПАРАМЕТРА Q_REG, ВОЗВРАЩАЕМЫМ GET_xxx."
Выдача GET_xxx type_cnv=12 автоматически отменяет разбор запроса, как группового.

2. Из документации.
"Первое обращение к драйверу. Prepare_xxx
Эта функция вызывается при инициализации работы МРВ с драйвером. ...

int Prepare_xxx(int type, char *str, int &type_cnv, int &q_out);
где
....
....
q_out – ограничение на величину буферов для приема и передачи данных в контроллер (передается в драйвер, но может быть изменено). Максимальное значение – 2048 байт."

Процитированное в п.2 вопроса предложение относится к функции GET_xxx.

Видимо, Вы недостаточно внимательно перечитали документацию.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2