This is topic Разработка драйвера in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Помогите, пожалуйста, начинающему. Нужно через com-порт связаться с модемом. При использовании стандартного API COM-порта мне подойдет драйвер t11. Простейший пользовательский драйвер t11s30я написала, а загрузить его не получется. В helpe сказано: При старте МРВ загружает драйверы исходя из наличия каналов с соответствующими дополнениями к подтипу. Что именно и где именно мне необходимо задать, чтобы загрузить драйвер?
Posted by M@V (Участник № / Member № 1800) on :
Добрый день. Необходимо выполнить следующие шаги: 1- В узле проекта создать группу COM-порты. 2- В группе COM-порты создать компонент COM-порт. 3- Вызвать компонент на редактирование и настроить его параметры. 4- В группе Источникаи/Приемники создать группу Пользовательские_драйверы. 5- В группе Пользовательские_драйверы создать группу TYPE11(для драйверов типа t11. 6- В группе TYPE11 создать компонент UniversalPLC_typeN где N-подтип вашего драйвера(для t11s30 -это 4). 7- компонент вызвать на редактирование и настроить параметры. Загрузку драйвера можно наблюдать в файле с расширением txt в скомпилированной директории Вашего узла. Далее тонкости обмена с устройством.... Успехов.
Posted by Anastasiya (Участник № / Member № 2136) on :
Спасибо, я так и делала. Но пока безуспешно. Я впервые столкнулась с такой задачей. Что-то не то с драйвером видимо написала. Пробую хотя бы получить в TraceMode данные из сom-порта1, вводя данные в Гипертерминале в com-порт2 (они соединены между собой). Но ничего получить не могу. Помогите дельным советом. Что должно быть указано в драйвере?
Posted by M@V (Участник № / Member № 1800) on :
Добрый день. Продолжим... Скорее всего необходимо обзавестись утилитой PortMonitor (для наблюдения, что-же творится в порту). Два важных момента: - все функции и процедуры dll драйвера должны быть с вызовом CDECL. - местоположение функций и процедур в dll драйвера строго индексировано: //zReadAny_xxx index 6 name 'zReadAny_xxx', zCompare_xxx index 5 name 'zCompare_xxx', Set_xxx index 4 name 'Set_xxx', Prepare_xxx index 3 name 'Prepare_xxx', Get_xxx index 2 name 'Get_xxx', Check_xxx index 1 name 'Check_xxx'; (ТМ вызывает их по порядковому номеру).
В dll драйвера можно организовать запись в лог-файл (ведь не так просто произвести отладку любой dll) и таким образом проследить последовательность вызова процедур и при необходимости параметры вызова. Довольно муторная работа для первого раза. Удачи.
Posted by Anastasiya (Участник № / Member № 2136) on :
Здравствуйте. Большое спасибо, ваши советы очень помогли. И PortMonitor - полезная программа. dll писала в Visual C++ и с помощью def-файла установила индексацию функций. Посылка в com-порт работает. Но возникла новая проблема: не могу передать значение канала в сom-порт. Как можно передать значение канала, которое мы задаем. Вот моя функция Set_xxx:
void Set_xxx(IA &ia, unsigned int &max_send, unsigned int &max_rec, int &q_rec, RSDATA *p,char *sbuf) { p[0].F.fmt[0]=0x40; p[0].F.fmt[3]=1; sbuf[0]=p[0].V.i[0]; max_send=2; max_rec=0; return; } Подскажите, что не так?
Posted by M@V (Участник № / Member № 1800) on :
Здравствуйте. Тут трудно ответить не видя всей картины. Адастра тоже не очень хочет отвечать владельцам бесплатной версии по проблемам с драйверами ТМ. Попробуйте к ним обратиться при помощи свистка(Report Post). Если они согласятся, то попросят Вас отослать проект на адрес hotline@adastra.ru. Кстати у них спецы по Visual C++. Удачи.
Posted by Anastasiya (Участник № / Member № 2136) on :
Добрый день. Некоторое время работала над другой задачей, а теперь снова возвращаюсь в теме. К Адастре так и не обращалась, самостоятельно разобралась с этим вопросом и другими возникающими. Но вот снова стою перед задачей: в Get_xxx задаю type_cnv=12(для записи блока данных в архив для одного канала). А в архив и в каналы Trace Mode вообще ничего не передается. По helpу в канал, инициировавший запрос, должно записываться значение q_rec. В Get_xxx у меня q_rec=6, а в канале значение =0 и не изменяется при посылке. Помогите, пожалуйста, дельным советом.
Posted by Anastasiya (Участник № / Member № 2136) on :
Всё, в архив записывается. Но вот в канал значение q_rec всё равно не передаётся. Там 0 как установиться при запуске профайлера, так и не измеяется. Разбираюсь. Может вы сталкивались с подобным: посылаю значения с временными метками из com-порта в канал; значения посылаю один раз, а записываются в архив они три раза с одним и тем же временем! Причем это не зависимо от количества каналов в Traсe Mode, в которые передаются значения. Заранее спасибо.
Posted by arido (Участник № / Member № 2961) on :
Здравствуйте, Anastasiya. Если не жалко, пожалуйста, вышлите исходник Вашего драйвера. Использовала все советы - но пока не работает. Адрес: radnf@tomskcable.ru.