This is topic Драйвер Т11 СРОЧНО in forum Драйверы / Device Drivers at Форум TRACE MODE: техническая поддержка.


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

Posted by arido (Участник № / Member № 2961) on :
 
Здравствуйте.
Задача проста.
Считать значения с COM-порта.
Драйвер упростила по максимуму - но не работает. (Не хватает опыта написания драйверов).
Подскажите, что не так?
ПОЖАЛУЙСТА. [prey / молящийся] Время поджимает. [Неодобрение / Frown] [Неодобрение / Frown]
code:
  int EXPORT Check_xxx(IA &ia,unsigned int &count_rec,unsigned int &max_rec,unsigned int &max_send,char *rbuf)
{ return(0);}
int EXPORT Get_xxx(IA &ia,unsigned int &count_rec,int &q_rec,RSDATA *p,char *rbuf,int &type_cnv)
{ int i;
for (i=0;i<count_rec;i++)
p[i].V.v = rbuf[i];
type_cnv = 0;
return(200);}
int EXPORT Prepare_xxx(int type,char *str,int &type_cnv,int &q_out)
{ strcpy(str,"Test scaner");
type_cnv = 0;
return(0);}
void EXPORT Set_xxx(IA &ia,unsigned int &max_send,unsigned int &max_rec,int &q_rec,RSDATA *p,char *sbuf)
{ sbuf[0] = 0x02;
return;}
int EXPORT zCompare_xxx(IA &ia0,IA &ia1,int &count)
{ return(ia1.i[1]+1);}
int EXPORT zReadAny_xxx(IA &ia, unsigned int &more_rec, unsigned int &all_rec, char *rbuf)
{ return(0);}


 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Переменные &max_send и &max_rec необходимо задать. Иначе у Вас запрашивается и записывается 0 байт.
 
Posted by arido (Участник № / Member № 2961) on :
 
Попробовала так

void EXPORT Set_xxx(IA &ia,unsigned int &max_send,unsigned int &max_rec,int &q_rec,RSDATA *p,char *sbuf)
{ sbuf[0] = 0x02;
max_send = 2;
max_rec = 2;
return;}

Не сработало.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
У нас нет возможности отлаживать Ваш драйвер по шагам. Попробуйте создать контрольные точки и выяснить причину ошибки.
 
Posted by Leonid_Polenov (Участник № / Member № 3447) on :
 
Добрый день!
Если нужна помощь - подскажем, только опишите, какая задача и протокол. Сами очень долго мучались и разбирались)))

[ 13.08.2009, 16:07: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by Сидоров Александр Александрович (Участник № / Member № 3279) on :
 
Есть такой вопрос по использованию драйвера t11 TCOM5: написал драйвер на одном ПК, проект TraceMode запускается и работает. При переносе этого драйвера на другой ПК, при запуске проекта в лог файл пишеться: ERR_RS: protocol is 27 not found 14001.
Драйвер написан в MSVC 2008.
 
Posted by Romсheg (Участник № / Member № 3792) on :
 
Скорее всего когда компилировали DLL, то включили в нее библиотеки (например, поддержку MFC), которых на другом ПК нет. Посмотрите через утилиту из состава MSVC какие еще DLL вызывает ваш драйвер и просто скопируйте их на другой ПК к драйверу или перекомпилируйте драйвер без их поддержки.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Это означает, что он не может найти драйвер. Драйвер должен располагаться в той же папке, что и exe-файл, кторый Вы запускаете.
 
Posted by Romсheg (Участник № / Member № 3792) on :
 
2Technical Support
Если на одном ПК (скорее всего на том, на котором драйвер писали в MSVC) он работает, а на другом нет (уж сильно сомневаюсь, что они его не туда положили на другом ПК), то это именно то, что сказал я, МРВ тут ни при чем. [Улыбка / Smile]
Я сам с подобным сталкивался уже "ндцать" раз. Вот также сидел и думал: почему МРВ его не видит, если вот же он лежит там где надо?! [А-а! / Eek!]
А когда начинаешь проверять какие драйверу еще DLL нужны для работы - становится понятно, почему его МРВ не видит... [Спокойствие / Cool]
 
Posted by Sergei (Участник № / Member № 161) on :
 
Если не возражаете, продолжу ветку.
Пишу драйвер протокола t11. Не могу добиться, чтобы ТМ вызвал процедуру расшифровки ответа. Portmon-ом вижу, что rtc.exe успешно прочитал ответ, вызвал Check_xxx, в которой я возвращаю 0, а дальше все останавливается. Никакого обмена по порту. Куда копать?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
После функции Check должна идти функция Get, если она у Вас есть, то значит Вы ее как-то неправильно вызываете.

Что означает все останавливается?
 
Posted by Sergei (Участник № / Member № 161) on :
 
Функция Get у меня есть и вызывать ее должен не я, а ТМ. Порядковые номера функций совпадают с указанными в справке (по крайней мере так утверждает утилита fileinfo, входящая в состав Total Commander).
Все останавливается означает, что больше никаких запросов не формируется (проект из одного канала) и никаких функций из библиотеки не вызывается.
 
Posted by Sergei (Участник № / Member № 161) on :
 
Еще заметил, что функция Get_xxx вызывается в момент закрытия профайлера.
И еще: в какой лог профайлер должен записать строку переданную в Prepare_xxx? Если в директории проекта ИмяПроекта_0.txt то там ее почему то нет [Недоумение / Confused]

О, нашел ошибку в аргументах printf (лог). Поправил - пошел обмен.
Всё, есть данные. [Вращающиеся глаза / Roll Eyes]
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2