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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Драйверы / Device Drivers » Программирование Ш711 (драйвер для работы с COM-портом)

   
Автор / Author Тема / Topic: Программирование Ш711 (драйвер для работы с COM-портом)
Styxx
Forum Member / Участник форума
Участник № / Member № 74


Icon 4 отправлено / posted      Профиль для / Profile for Styxx           Редактировать/удалить сообщение / Edit/Delete Post 
Все таки, при работе с драйвером Ш711/60 без программирования мы никак не можем обойтись.
Само программирование Ш711 не есть задачей реального времени, да и само программирование очень простое:
посылка 2 байт (начало программирования),
прием 1-4 байт (готов к приему),
посылка программы,
посылка конца программирования,
прием 1-4 байт (успешное программирования).

Все сводится к тому как с минимальными затратами это реализовать?
Мы видим, что модификация существующего - наилучший способ. Так ли это?
Кто может поделиться опытом в этой области?
consat@zp.urtel.net
Пойдет ли для отработки драйвера TM5 демо версии?


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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Я полагаю, что Вы можете использовать в качестве прототипа исходный текст драйвера для контроллера Ш-711, приведенный в документации Трейс Моуд (и справочной системе).
Однако, видимо, целесообразнее создать простой дополнительный драйвер для выполнения этой функции, т.к. она должна работать эпизодически, от случая к случаю.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
CONSAT
Forum Member / Участник форума
Участник № / Member № 51


Icon 11 отправлено / posted      Профиль для / Profile for CONSAT           Редактировать/удалить сообщение / Edit/Delete Post 
Если можно по подробнее?
Файл в примере - работает, но размеры этого в 2 раза меньше чем тот, что уже есть в ТМ - почему?

Непонятно как по значению канала выполнить действие в драйвере. (привязка значения канала к if)? ? ? Не понятно по тексту исходника.

Какова связь между этим драйвером (из примера + модификация) и протоколом Ш711 в форме связь по порту по протоколу...?

Как быть с тем что драйвер один а программировать необходимо какой-то из 8-ми Ш711 (неполностью видим связь между тем что в <file>.drv и проверки этого в драйвере по удаленному адресу)?


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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
В штатном драйвере для Ш-711 не использовались команды, не предполагалось использование каналов OUT.
Поэтому Вам надо в функции Set_xxx анализировать тип вызывающего канала, который зафиксирован в элементе структуры RSDATA p[0].F.fmt[3]=1 (см. алгоритм вызова драйвера в нашей документации).
И удаленный адрес, и значение вызывающего канала могут быть использованы для формирования команды, посылаемой контроллеру.
Контроллеры Ш-711 подключаются к разным RS-портам, поэтому один общий драйвер будет посылать команды в разные контроллеры, если в соответствующих командных каналах будут указаны разные номера COM-портов.

<Какова связь между этим драйвером (из примера + модификация) и протоколом Ш711 в форме связь по порту по протоколу...?>
Очевидно, речь идет о механизме автопостроения "Связь по последовательным интерфейсам".
При автоматической генерации каналов с помощью этого механизма Вы для каждого контроллера создаете один объект, в котором указываете, к какому COM-порту подключен данный контроллер и сколько каналов у него предполагается опрашивать. При этом номер устройства не используется (связь радиальная).
Например, если контроллеры поключены к портам COM1 и COM2, Вы для dev0 устанавливаете COM1, а для dev1 - COM2.
При этом будут сгенерированы только каналы опроса. Командные (программирующие) каналы надо создавать вручную.
Еще раз предлагаю рассмотреть возможность создания специального драйвера, только для программирования контроллеров. Для опроса использовать штатный драйвер.


Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
CONSAT
Forum Member / Участник форума
Участник № / Member № 51


Icon 11 отправлено / posted      Профиль для / Profile for CONSAT           Редактировать/удалить сообщение / Edit/Delete Post 
Попробовали по вашему совету(выше по тексту) анализировать тип вызывающего канала, который зафиксирован в элементе структуры RSDATA p[0].F.fmt[3]=1, - создали канал типа OUTPUT/HEX послали туда 0x70 (для пробы). получили p[0].F.fmt[3] везде нули. Ведется лог, ф-ция Get_xxx вообще ни разу не вызвалась.

Fri Nov 09 14:45:32 2001 --> i[0] F.fmt[0 0 0 0 0], V.i[cfe8 3beb 0], ia.c[0 0 0 0 0 0 0]
Fri Nov 09 14:45:32 2001 --> i[1] F.fmt[0 0 0 0 0], V.i[0 0 0], ia.c[0 0 0 0 0 0 0]
Fri Nov 09 14:45:32 2001 --> i[2] F.fmt[0 0 0 0 0], V.i[0 0 0], ia.c[0 0 0 0 0 0 0]

V.i[cfe8 3beb 0] - стало отличным от нуля после появления достоверность = 1 (INPUT), канал OUTPUT - достоверность осталась = 0. Значения всегда разные при новом старте, но не меняется до выхода из Трейс Моуд. Больше никаких изменений в структуре RSDATA и IA нет.

Предпологалось получить какие-либо данные о посланном значении примерно так:

void Set_xxx(...)
{
...

int i=0;
q_rec=64;

for (i=0;i<=q_rec;i++)
{
if (p[i].F.fmt[3] == 1) // канал типа OUTPUT
if (p[i].F.fmt[0] == 0x40) // данные типа HEX
if ( (p[0].V.i[0] == 0x70) // полученные данные
{
// режим программирования
return;
}
}
...

}

Просим дать пример как по событию (значения Х в канале) выполнить блок программы...
Проект и исходнике у Вас по почте.


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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Уважаемый CONSAT!
В присланном Вами материале отсутствуют 2 файла: файл описания настроек каналов *.drv Вашего драйвера и откорректированный Вами файл Type11.ini.
Мы не можем ни прочитать Ваш проект, ни запустить его.
Дошлите, пожалуйста, недостающие файлы.

Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
CONSAT
Forum Member / Участник форума
Участник № / Member № 51


Icon 10 отправлено / posted      Профиль для / Profile for CONSAT           Редактировать/удалить сообщение / Edit/Delete Post 
Да... извините.
В Файл Type11.ini - добавилась строка №13 - TestDrv (исходя из имени присланной Вам dll-файла),
----Type11.ini----
...
Danfoss
TestDrv <- Новая строка
@
9
----
и Файл TestDrv.drv полная копия Вашего Ш711-60.drv
-----TestDrv.drv----
TestDrv
2
№порта 1 0
№канала 3 2
-----

Надеюсь этого достаточно...


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


Icon 6 отправлено / posted      Профиль для / Profile for CONSAT           Редактировать/удалить сообщение / Edit/Delete Post 
Кроме этого в Вашем драйвере для Ш711-60 неправильный алгоритм работы:
Перед каждым запросом значений из каналов.
Всегда идет установка в режим работы "Тип ЭВМ", а эту команду необходимо послать только один раз перед работой...
И эта команда воспринимается Ш711 не так уж и быстро.... Вот и получается что устройство медленное.
Правы ли мы по поводу алгоритма?

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Увы!
Несмотря на полученные дополнения, у меня МРВ не воспринимает предложенный Вами драйвер (при попытке загрузить этот драйвер он возвращает системную ошибку 126 - что это значит, надо смотреть в ОС).
Сам интерфейс к драйверам в МРВ многократно проверен и нами, и нашими пользователями, поэтому сейчас речь могла бы идти лишь о ревизии Вашего кода.
У нас нет возможности анализировать Ваши исходные тексты, однако, на одну ошибку (с не очень ясными последствиями) необходимо указать: Вы обращаетесь к элементам удаленного адреса от ia.c[0] до ia.c[6], в то время как у нас удаленный адрес имеет размерность не более 6 байт.

По поводу "установки режима работы". Эта операция выполняется в нашем драйвере только 1 раз. Имеется массив int first[16], в котором анализируется и запоминается признак инициализации: при первом вызове драйвера с указанием на номер COM-порта (0-й символ удаленного адреса) производится инициализации соответствующего Ш-711 и в массиве устанавливается признак "1". При последующих обращениях к тому же контроллеру этот признак блокирует инициализацию.


Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Открыть тему / Open 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