This is topic Разработка драйвера in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


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

Posted by Anastasiya (Участник № / Member № 2136) on :
 
Помогите, пожалуйста, начинающему. Нужно через 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.

Заранее спасибо.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2