This is topic Драйверы t11,t12 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/000146.html

Posted by Kollega (Участник № / Member № 4097) on :
 
Решил создать общую тему по этому вопросу. Имею первый вопрос:"Поддерживает ли МикроМРВ эти драйверы?" И хотелось бы одно небольшое уточнение.
Для МРВ я написал свою библиотеку для работы с любым устройством по любому протоколу. Функции библиотеки вызывается программой. Механизм опробован и работает. Поэтому никаких t11,t12 не требуется. Так вот МикроМРВ может программно вызывать функции dll, как МРВ? Понятно, что dll будет писаться на EmVC++.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Под Windows CE функция вызова внешних библиотек не поддерживается.

Подключение корректно написанных драйверов типа T11 и T12 возможно.

В Микро МРВ для XPEmbedded функции вызова внешних библиотек поддерживаются.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Тогда, подскажите еще одно. Можно ли с помощью драйверов t11, t12 опрашивать два (или больше) устройства с разными протоколами по одному сом-порту в МикроМРВ? Может вопросы дилетантские, но я хочу полностью представлять все возможности ТМ.
Собственно, я уже организовывал опрос двух устройств (газоанализатор и пылемер) с помощью универсального механизма и двух каналов CALL, включая и выключая их во времени. Но периодически возникают ситуации, когда опроса нет совсем, пока не перегрузишь систему или МикроМРВ.
 
Posted by Nico (Участник № / Member № 5342) on :
 
да
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Добрый день! Не могли бы Вы предоставить какой-то демо-проект по работе с драйверами?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Примеры драйверов (исходные тексты) приведены в соответствующем разделе справочной системы.

Все драйверы, поставляемые в составе Trace Mode 6, написаны в соответствии со спецификациями, приведенными в справочной системе.

Любой проект с подключением внешних устройств (см. видео-уроки на сайте) является таким демо-проектом.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Добрый день! Подскажите какие ключи использовать для мониторинга драйверов?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В ключе DEBUGON это биты
· бит 6 (0x40) – драйверы t12;
· бит 9 (0x200) – обмен по RS;
· бит 31 (0x80000000) – каналы, работающие по внешним протоколам (t12, Modbus и т.п.) (расширенная информация);

(см. документацию).
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Доброе время суток! Пытаюсь написать драйвер t11(TCOM5) для МикроМРВ под Win CE и пока не выходит. Мои действия:
1. Создаю в среде узел Embedded. В нем два канала, в источниках два канала t11. В Visual C++ написана
библиотека t11s27.dll. Находится в папке узла. Запускаю, проверяю, все работает прекрасно.
2. Переношу код библиотеки в EmVC, который настроен на данный контроллер(почти уверен, что правильно).
Создаю библиотеку, ложу в папку узла Embedded, переношу все в контроллер и ничего не работает. Можно грешить, что где-то в библиотеке нестыковка, но компилируется без ошибок.
Отсюда возникают вопросы:
1. Механизм общения с t11(TCOM5) у МикроМРВ такой же как у МРВ?
2.Как все-таки должен называться драйвер и где он должен располагаться в контроллере?
3. В принципе, код что под вин7, что под се одинаков, разница в платформах. Но может на что-то обратить внимание?
4.На пример не надеюсь, но все же))).
Не хочется опять применять универсальный механизм обмена, который иногда сбоит. Надеюсь на помощь.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
1. Для МикроМРВ под Windows CE надо писать драйвер по спецификации "TCOM6. Драйвер t11".

2. Механизм общения с t11(TCOM6) у МикроМРВ такой же как у МРВ.

3. Драйвер должен размещаться в папке МикроМРВ.

4. Имя драйвера зависит от используемого шаблона в слое "Источники/Приемники". Имя T11s27.dll предназначено для компонентов типа TYPE11/UniversalPLC_type1.

5. "1. Создаю в среде узел Embedded. В нем два канала, в источниках два канала t11. В Visual C++ написана библиотека t11s27.dll. Находится в папке узла. Запускаю, проверяю, все работает прекрасно.
"
Можно понять, что этот эксперимент проводился под Windows 7.
Если драйвер размещается в папке узла, а не в папке МРВ (профайлера), драйвер вызываться не будет.

6. Для диагностики обмена с помощью драйверов типа T11 надо использовать ключ DEBUGON=200.
В профайлерном протоколе должна быть информация по инициализации заданного COM-порта, вызову драйвера, список каналов. вызывающих драйвер, по транзакциям обмена.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Доброе утро!
Все сделал по вашим рекомендациям, но пока увы...
(7:21:36) INF_RS:init string is \\.\COM4: baud=9600 parity=N data=8 stop=1
(7:21:36) WRN_RS:found channels = 2
(7:21:36) INF_RS:t11.27 : set 00000000 02181030
(7:21:36) INF_RS:t11.27 : check 00000000 02181190
(7:21:36) INF_RS:t11.27 : get 00000000 02181110
(7:21:36) INF_RS:t11.27 : zCmp 00000000 021811A0
(7:21:36) INF_RS:t11.27 : zAny 02181190
.
.
.
(7:23:28) INF_RS:COM4 TRANSACTION=387 ERROR=0 TIME=112.735 BYTES=10062
Это лог файла узла при испытании на Win7. Все работает нормально.

А это лог контроллера:
(7:36:17) INF_RS:init string is COM4:: baud=9600 parity=N data=8 stop=1
(7:36:17) WRN_RS:found channels = 2
(7:36:17) INF_RS:t11.27 : set 00000000 01AE1028
(7:36:17) INF_RS:t11.27 : check 00000000 01AE1264
(7:36:17) INF_RS:t11.27 : get 00000000 01AE10E0
(7:36:17) INF_RS:t11.27 : zCmp 00000000 01AE126C
(7:36:17) INF_RS:t11.27 : zAny 01AE1020
(7:36:19) ERR_RS:COM4 err=9 ch=UniversalPLC_type1_1[1]
(7:36:20) ERR_RS:COM4 err=9 ch=UniversalPLC_type1_2[2]
(7:36:20) ERR_RS:COM4 err=9 ch=UniversalPLC_type1_1[1]
(7:36:20) ERR_RS:COM4 err=9 ch=UniversalPLC_type1_2[2]
.
.
.
(7:37:22) INF_RS:COM4 TRANSACTION=141 ERROR=141 TIME=64.778 BYTES=1833
Функции вроде корректно вызываются.
При запуске узла каналы выставляют недостоверность , т.е. не получают ответа. Но в порт тоже ничего не отсылается.
Помогите, пожалуйста разобраться пока контроллер на руках.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Непонятно, как вы проверяли, что в контроллере в COM-порт ничего не посылается.
"Не посылается в COM 4" или не передается из COM 4?

ERR_RS:COM4 err=9 ch=UniversalPLC_type1_1[1]
Это сообщение об отсутствии ответа на запрос в течение заданного таймаута.
Это означает, что запрос в COM 4 передан, а ответа нет.
Надо проверять COM-порт или интерфейсную шину.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Все заработало, большое спасибо за консультацию.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Добрый день, уважаемая техподдержка. Возник небольшой вопрос. Для работы с топливораздаточной колонкой написал драйвер T11 TCOM6. Драйвер работает нормально. Для его вызова использую канал CALL.ChGroupReq. Но в процессе работы надо передавать сколько литров надо отпустить. Сейчас использую атрибут 92,I2 удаленного адреса. Но это хорошо, что число одно. А как можно передавать в драйвер более одного числа? Например, посредством аргументов канала CALL(как при универсальном обмене по RS)?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Непонятно, зачем Вы использовали CALL.ChGroupReq.

Можно использовать настройку "Дополнительно", которая в интерфейсе TCOM6 формирует переменную void *ext_data.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Добрый день! Возник небольшой вопрос. На сом-порту компьютера сидят два устройства: модуль ввода-вывода I7055 и RFID-считыватель. Модуль опрашивается по встроеному протоколу через Источники-приемники-I7000-I7055, а для считывателя написан драйвер t11s27. Так вот считывать rfid-метки не получается, хотя по сканеру порта видно, что обмен происходит. Но в канал данные не попадают. Когда отвязываю канал IN модуля, то считывание происходит. При этом получается посылать значения в канал OUT модуля. Поэтому вопрос: может ли на одном порту находиться в данном случае модули I7000 и устройства, опрашиваемые посредством драйвера t11s27?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В общем случае гарантировать совместимость драйверов различных протоколов нельзя.
Надо анализировать регламенты обмена и коды команд для каждого протокола.
 
Posted by Kollega (Участник № / Member № 4097) on :
 
Добрый день! Возникла проблема с передачей в драйвер
параметров через void *ext_data. Драйвер собранный под Вин7 работает корректно, а вот под контроллер на Embedded C++ нет. Все остальные параметры передаются нормально. Фрагмент кода:
void Set_xxx(IA &ia, unsigned int &max_send, unsigned int &max_rec, int &q_rec, RSDATA *p, char *sbuf, void *ext_data)
{
if (ia.c[1] == 10)
{
const char* szExtString = *(char**)ext_data;//"261120161646 0 0 0 0 0 0 49.113 0 0 4.60336";//
size_t len;
len = strlen(szExtString);
}
}
Причем если задать строку явно, то функция strlen отрабатывается нормально. Из этого следует, что строка не передается из МикроМРВ. Поле "Дополнительно" не пустое, вижу прямо в контроллере. Подскажите в чем может быть дело?
Версия 6.10.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
У нас нет возможности консультировать программистов-разработчиков драйверов.

В разделе "Использование для разработки драйверов других компиляторов" указано на необходимость учета особенностей компиляторов и среды функционирования драйвера.

По опыту создания драйверов для контроллеров с OC Windows CE для соответствующей функции выражение

ext = *(char**)(ext_data);

работоспособно.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Попробуйте (ТОЛЬКО ДЛЯ CE!!!) вместо
const char* szExtString = *(char**)ext_data;

использовать
const char* szExtString = (char*)ext_data;
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2