This is topic Как получить 4-х байтовый результат in forum Драйверы / Device Drivers at Форум TRACE MODE: техническая поддержка.


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

Posted by tyrex (Участник № / Member № 59) on :
 
Ситуация такая: контроллер в ответ на запрос присылает ответ размером в 4 байта. Каким образом можно передать эти 4 байта в качестве результата, если структура RSDATA ограничивает поле V только двумя байтами? И еще. Не могли бы вы выслать более подробное описание полей структур IA, RSDATA и FOUR_BYTE? Например, в вашей документации нигде не написано, что структура IA применяется для передачи данных из редактора базы каналом (c[0] - первый параметр(обычно порт), с[1]-второй и т.д.). Например, узнать, что в структуре RSDATA fmt[3] обозначает режим INPUT/OUTPUT можно только внимательно изучая примеры
изучая. Про структуру FOUR_BYTE я вообще нигде не нашел ни единого упоминания.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Уважаемый tyrex!

1. В базе каналов Трейс Моуд 5.0 используются только 2 формата: 2-байтовый HEX и 4-байтовый FLOAT. Работать с 4-байтовыми целыми числами в Трейс Моуд нельзя.
В соответствии с описанными в документации алгоритмами обработки запросов
"3. Для найденного канала анализируется элемент p[ind].F.fmt[1] структуры RSDATA. Значение этого элемента определяет следующие действия:
0 – присвоить входу канала значение элемента p[ind].V.v структуры RSDATA;
1 – сформировать для канала признак аппаратной недостоверности.".
Отсюда следует, что принимаемое от драйвера значение интерпретируется как float и в зависимости от типа принимающего канала в базе результат записывается в канал в соответствующем формате.

Если получаемый от контроллера 4-байтовый ответ содержит упакованные дискретные сигналы, его следует просто разложить на 2 канала HEX.
Если это 4-байтовое число в формате float, надо объявить тип приемного канала F и записать принятое число в него без преобразований.
Если это 4-байтовое целое, то Вам придется все равно разбивать его на 2 канала, а затем преобразовывать его уже математическими средствами Трейс Моуд в число формата float (одинарный), возможно,не без потери точности. Если точность должна быть сохранена, придется работать с двумя числами - "старшие разряды" и "младшие разряды".

2. В описании алгоритма вызова драйвера (а не в примерах) указано:
"Если канал типа OUTPUT, то p[0].F.fmt[3]=1;.... Если канал типа INPUT, то p[0].F.fmt[3]=0."

3. В разделе "НАСТРАИВАЕМОЕ ПОДКЛЮЧЕНИЕ ДРАЙВЕРОВ/Описание настроек канала для связи с контроллером" указано:
"При обработке канала подтипа КОНТР_1 или КОНТР_2 МРВ вызывает драйвер, соответствующий их дополнению к подтипу. При этом драйверу передается удаленный адрес. В нем указываются данные, которые надо запросить у контроллера, или переменная контроллера, в которую надо переслать значение канала.
Удаленный адрес включает в себя шесть байт. Его можно разбить на несколько полей (до шести). Каждое поле может включать в себя один или два байта (для каналов подтипа КОНТР_1 первая настройка является номером последовательного порта и может быть только однобайтовой). Формирование значений полей удаленного адреса осуществляется с помощью настроек канала. У каналов подтипов КОНТР_1 и КОНТР_2 с помощью канала подтипа Объект с дополнением Изм. базу можно менять значение двух младших байтов удаленного адреса."
Возможно, Вы работаете со старой редакцией документации и там это отражено неполно.

4. Более подробного описания структур RSDATA и FOUR_BYTE, чем приведено в документации в разделе "ДРАЙВЕР ОБМЕНА ПО ПОСЛЕДОВАТЕЛЬНОМУ ИНТЕРФЕЙСУ/Стандартный заголовок", у нас нет. Это описание исчерпывающе.
Не упомянутые в описании драйвера структуры, приведенные в СТАНДАРТНОМ ЗАГОЛОВКЕ, могут применяться пользователями по их усмотрению.
 




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



Powered by Infopop Corporation
UBB.classic™ 6.7.2