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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Драйвер t11 - формирование блоковых запросов

   
Автор / Author Тема / Topic: Драйвер t11 - формирование блоковых запросов
DEA
Forum Member / Участник форума
Участник № / Member № 1572


Icon 9 отправлено / posted      Профиль для / Profile for DEA           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день!
Не могу понять, как формируются блоковые запросы!
В редакторе создал 4 группы каналов соответственно тип подтип и ia[0], ia[1] у каждой группы свои. Число каналов в группе допустим по 4. Запускаю МРВ с драйвером t11s30.dll на этапе формирования блоковых запросов функцией zCompare_xxx сравниваю ia[0], ia[1] с ia1[0], ia1[1] при первом проходе весё нормально count - счетчик каналов равен числу каналов. Но дальше идут чудеса функция zCompare_xxx вызывается повторно для этой группы каналов при этом откидывается первый канал, который попал в блоковый запрос, он становится инициатором запроса дальше второй и так до последнего соответственно в функции Set_xxx в структуру ia передаются параметры всех каналов.
Вопрос как правильно сформировать блоковые запросы?

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


Icon 1 отправлено / posted      Профиль для / Profile for ASUeng           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый! Я тоже столкнулся с этой "задачкой". Решение простое: в функции zSET нужно проверить номер канала (ia.i[0]) и, если он равен номеру канала-инициатора (т.е. первого в группе), параметры max_send и max_rec задать такие, какие нужно, если же номер канала другой, задать их равными нулю, а кроме того и q_rec обнулить.
Сообщения / Posts 3 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
M@V
Forum Professor / Завсегдатай форума
Участник № / Member № 1800


Icon 1 отправлено / posted      Профиль для / Profile for M@V           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый! Я тоже столкнулся с этой "задачкой" но поступил по другому, просто при блоковом запросе рубил инициативу дочерних каналов в функции zCompare_xxx:

function zCompare_xxx(var iad1,iad2: IA; var count: SmallInt): SmallInt; cdecl;
begin
Result:=1;
if (block_query=0) and (iad1.word2<>0)
then //рубим инициативу дочерних каналов
Result:=0;
end;

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


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте! Не могли бы вы по-подробнее разъяснить: Как именно и что именно необходимо писать в Set_xxx либо в zCompare? Какой именно номер канала находиться в ia.i[0]?
Когда я хоть каким-то образом в z_Compare трогаю ia0, то профайлер вообще отказывается запускаться и выдает ошибку. Пробовала в Set_xxx задавать условие (третьему байту канала-инициатора в TraseMode присваивала 1):
if (ia.c[2]!=1)
{ max_send=0;
max_rec=0;
q_rec=0; }
else
max_rec=12; и т.д.
В этом случае инициатором запроса другие каналы не становятся, но значения всех последующих каналов кроме инициатора сразу же после передачи изменяются на другие, совершенно непонятно откуда выходящие. Эти значения и остаются в канале.
Подскажите, как можно решить проблему с блоковыми запросами.

Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Anastasiya
Junior Member / Новичок
Участник № / Member № 2136


Icon 9 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день. Неужели никто не поможет [Недоумение / Confused] ! Я всё ещё надеюсь на ваш совет.
Заранее благодарна.

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Мы не можем расширять расшифровку спецификации функций вызова драйверов. Это формальное описание.
Опыт многолетнего использования этого описания пользователями Trace Mode при написании собственных драйверов показывает, что оно является достаточным.
Кроме того, в соответствующей главе имеются примеры исходников работающих драйверов.
Что касается Ваших попыток изиенения передаваемых параметров в функциях Compare и SET, то обращаю Ваше внимание на следующий фрагмент из описания функции SET:
ia – удаленный адрес канала (передается в драйвер); [clever / умный]
max_send – количество байтов для посылки (формируется в драйвере);
max_rec – количество байтов в ответе (формируется в драйвере);
q_rec – число посылаемых или запрашиваемых значений (передается в драйвер); [clever / умный]

Ни в Compare, ни в SET изменение удаленного адреса и q_rec не является корректным.

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


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо. Однако замечу, что ни в Compare, ни в Set удаленный адрес я не изменяла. Я его использовала лишь в условии. С q_rec - это моё допущение,спасибо, исправила, но всё равно на результат это не повлияло.
Что же касательно примеров исходников работающих драйверов, то я пробовала писать в Compare абсолютно тот же код, что и в примере драйвера для контроллера OMRON по протоколу HOSTLINK. Результат такой же, как я указывала выше - профайлер при запуске сразу выдает ошибку и закрывается.
А мне нужно отсечь инициативу других каналов, чтобы только первый канал был инициатором запроса. В противном случае при передаче значений в канал эти значения при первой посылке присваиваются сразу с 1-го по n каналу(как и должно быть),при следующей посылке значения присваиваются каналам со 2-го по n и т.д. Никак не получается выйти из такой ситуации.

Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Anastasiya
Junior Member / Новичок
Участник № / Member № 2136


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Уважаемые, помогите, пожалуйста! Вы же сталкивались с подобным. Как проверить этот удаленный адрес первого канала-инициатора?
Я пробовала на других компьютерах запускать свой проект, результат - тот же. Профайлер выдает ошибку и не запускается, если в zCompare в условии использую ia0.i[0] или ia0.i[1], например
if (ia0.i[1]!=0)
{
return (0);
}
else
return (1);

Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DEA
Forum Member / Участник форума
Участник № / Member № 1572


Icon 1 отправлено / posted      Профиль для / Profile for DEA           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день!
А правильно ли вы определили параметры функции ia? Обращение как на ссылку

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


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Какая функция? ia - это же аргумент функции, удаленный адрес канала.
Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Anastasiya
Junior Member / Новичок
Участник № / Member № 2136


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Какая функция? ia - это же аргумент функции, удаленный адрес канала.
Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DEA
Forum Member / Участник форума
Участник № / Member № 1572


Icon 1 отправлено / posted      Профиль для / Profile for DEA           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Я имею ввиду правильно ли объявлен параметр ia в функции. Например IA &ia или IA ia. Это очень большая разница может, поэтому и зависает DLL при обращении к структуре ia.
Сообщения / Posts 37 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Anastasiya
Junior Member / Новичок
Участник № / Member № 2136


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Конечно, IA &ia. Это же указано в стандартном заголовке текста драйвера. Вот мой заголовок:
int zCompare_xxx(IA &ia,IA &ia1,int &count)

Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Anastasiya
Junior Member / Новичок
Участник № / Member № 2136


Icon 1 отправлено / posted      Профиль для / Profile for Anastasiya           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Конечно, IA &ia. Это же указано в стандартном заголовке текста драйвера. Вот мой заголовок:
int zCompare_xxx(IA &ia,IA &ia1,int &count)

Сообщения / Posts 20 | Из / From: Беларусь  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DEA
Forum Member / Участник форума
Участник № / Member № 1572


Icon 1 отправлено / posted      Профиль для / Profile for DEA           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
На чем вы пишите DLL?
Сообщения / Posts 37 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DEA
Forum Member / Участник форума
Участник № / Member № 1572


Icon 1 отправлено / posted      Профиль для / Profile for DEA           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вообще рекомендую написать тестовую программу, что бы протестировать на непогрешимость вашу DLL. По крайне мере я так делал, очень помогает.
Сообщения / Posts 37 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
M@V
Forum Professor / Завсегдатай форума
Участник № / Member № 1800


Icon 1 отправлено / posted      Профиль для / Profile for M@V           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день, Анастасия. Есть еще довольно мощьное средство для тестирования драйверов, это короткий LOOPBACK. Берете от старой мышки 9-ти контактный разъем и закорачиваете в нем 2-й и 3-й контакты (RxD и TxD). Вставляете эту штуку в COM порт. Далее в драйвере передаете в порт блок данных(Set_xxx) и в том же драйвере его-же и принимаете(Get_xxx). Для наглядности смотрите процесс в Portmon.
Успехов.

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


Icon 1 отправлено / posted      Профиль для / Profile for andreas           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Доброе утро! И еще вопрос по драйверам.
Есть такой Моксовский NPort5430, который создает виртуальные RealCOM порты, через которые Trace Mode может общаться с удаленными устройствами, т.е. фактически работает через драйвер. Так вот, будет ли работать таким образом написанный нами драйвер устройства?
Задача следующая: прочитать с удаленного обьекта три устройства:
водосчетчик Эргомера-120
тепловодосчетчик Эргомера-125
счетчик электроэнергии Каскад
Протоколы есть. Естественно все разные... [Неодобрение / Frown]
ИМХО надо писать три драйвера и они одновременно должны работать с виртуальными портами NPort, т.е. тоже через драйвер.
Вопрос: работать то будет сие творение?

Сообщения / Posts 7 | Из / From: Украина  |  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



Powered by Infopop Corporation
UBB.classic™ 6.7.2