This is topic Проблема с драйвером подтипа КОНТР_2 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/000077.html

Posted by Chikirev Dmitry (Участник № / Member № 1121) on :
 
Здравствуйте.

Я создал драйвер для обмена с контроллером по произвольному носителю. Возникли две проблемы.

1. При обработке групповых данных (по 8 каналам в одном ответе) в драйвере в функции Set_yyy осуществляется запрос к нулевому каналу. Полученные данные этого канала функцией Get_yyy передаются МРВ. Данные остальных каналов сохраняются в памяти. При обработке любого ненулевого канала того же адреса функцией Set_yyy (max_rec=max_send=0) в значение канала МРВ передаются ранее сохраненные данные. Остальные функции при этом не вызываются.
При нормальном обмене проблем нет, но если при получении из порта данных нулевого канала функцией ReadMedia возникла ошибка, то после каждого обращения к функции Set_yyy любого другого канала происходит вызов ReadMedia, хотя ни посылать в порт, ни читать из порта ничего не нужно. Как настроить драйвер, чтобы этого не происходило?

2. При атрибуте "Подключение"=1 все равно происходит вызов всех функций драйвера. Только при атрибуте "Состояние"=1 прекращается обращение к драйверу. Что я мог сделать в драйвере, что такое произошло и как это можно исправить?

Заранее благодарен за помощь! [prey / молящийся]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1) Если запрашивается не нулевой канал, то max_rec=max_send=0, Media должна это понимать. Вам необходимо добавить проверку: если обе длины нулевые - ничего не делаеть и просто выходит.
Примерно так:
code:
// запись
int WriteMedia(long &hndl, char *sbuf, int out_count, int &actual_count)
{
if (out_count == 0)
{
actual_count = 0;
return 0;
}
}

// чтение
int ReadMedia(long &hndl, char *rbuf, int in_count, int &actual_count)
{
if (in_count == 0)
{
actual_count = 0;
return 0;
}
}

А проще - вообще media не использовать, обработка порта пусть будет в t12, а media - пустая заглушка:
пример:
code:
Read(Write) Media(...)
{
actual_count = in_count; // out_count
return 0;
}

2) Мы попробуем проверить, но скорее всего в рамках 5-й версии это действительно так - атрибут Подключение не влияет на вызовы функций драйвера.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2