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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Драйверы / Device Drivers » Проблема с драйвером подтипа КОНТР_2

   
Автор / Author Тема / Topic: Проблема с драйвером подтипа КОНТР_2
Chikirev Dmitry
Junior Member / Новичок
Участник № / Member № 1121


Icon 9 отправлено / posted      Профиль для / Profile for Chikirev Dmitry           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте.

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

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

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

Заранее благодарен за помощь! [prey / молящийся]

Сообщения / Posts 4 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
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-й версии это действительно так - атрибут Подключение не влияет на вызовы функций драйвера.
Сообщения / Posts 17114 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / 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



Powered by Infopop Corporation
UBB.classic™ 6.7.2