![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Com-порт [D7, WinXP]
Keith Flint © (2003-09-01 08:57:00)
Помогите пожалуйста найти исходники или компаненты для Delphi по работе с com портами (нужно с Com 2), а именно интересует считывание/запись логических 0/1 на определённые выводы портов, хотелось бы знать ещё на какие конкретно. Заранее спасибо...
Urvin (2003-09-06 02:38:00) [1]
http://www.internals.com/utilities/winio.zip
Anatoly Podgoretsky (2003-09-05 20:04:00) [2]
А зря, мог бы и вчера узнать, если бы прочитал все сообщения, еще 4 сентября сказали.
Keith Flint (2003-09-05 19:53:00) [3]
Спасибо люди большое за советы! На самом деле функции GetCommModemStatus и EscapeCommFunction по-моему наиболее подходящие для этого дела! Вот только про ф-ю EscapeCommFunction я сёдня от друга узнал, а про GetCommModemStatus от Вас!
Товарищи, ну ещё один вопро тогда, попробовал я сделать так:
var FHandle: Thandle;
FHandle := CreateFile(PChar("COM2"),GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
EscapeCommFunction(FHandle,SETRTS);
Вроде бы должно на 20-м выводе на COM2 12 вольт появиться, ан нет! Может у меня COM2 не рабочий, а?! У меня сначала его разъёма не было, пришлось самому подключать, может напутал чё?!
Так вот если не трудно, для какого-нибудь контроля, может кто скажет где какие напряжения должны на нём между ногамии быть, - хочу вольтметром прозвонить...
Verg (2003-09-05 15:04:00) [4]
> Тогда это будет уже не Sleep.
ОК. Договорились :)
-=Vlad=- (2003-09-05 14:52:00) [5]
2Verg © (05.09.03 14:27) [45]
>Verg © (05.09.03 12:23) [35]
Тогда это будет уже не Sleep.
Verg (2003-09-05 14:27:00) [6]
> Что будет если во время sleepа пригрузить другой задачей
> проц, да так минуты на две, что будет у тебя импульс определенной
> длительности, сомневаюсь.
Verg © (05.09.03 12:23) [35]
-=Vlad=- (2003-09-05 14:16:00) [7]
>Verg © (05.09.03 13:34) [40]
согласен, не подумал, хотя это и очевидно.
>pasha_676 © (05.09.03 13:49) [43]
Я имел в виду, что реализовать протокол отличный от стандартного, где необходимо контролировать состояние всех ног порта невозможно или передать одновременно на все ноги единицу да еще и определенной длительности тоже мягко говоря затруднительно. Не говоря уже о том что программная реализация протокола очень не надежна. Что будет если во время sleepа пригрузить другой задачей проц, да так минуты на две, что будет у тебя импульс определенной длительности, сомневаюсь.
>автору ветки
Опиши плиз задачу более конкретно, а то мі тут уже начали спор не по существу...
pasha_676 (2003-09-05 13:49:00) [8]
2Vlad
> не реализуемо на ком порте
Примеры написали и практически это уже делали - а люди не верят и все. Ну попробуй сам. Работает это.
Verg (2003-09-05 13:38:00) [9]
EscapeCommFunction(HCfile, SETBREAK); // вариации на тему SETDTR, SETRTS
Sleep(500);
EscapeCommFunction(HCfile, CLRBREAK);
-=Vlad=- (2003-09-05 13:36:00) [10]
ЗЫЫ Автору ветки
Ком порт - последовательное устройство данные передаются последовательно по через одну ногу, принимаются с другой а стальные нужны для обеспечения протокола обмена. Так что
>а именно интересует считывание/запись логических 0/1 на >определённые выводы портов
не реализуемо на ком порте 8)
Verg (2003-09-05 13:34:00) [11]
Не, ну чес-слово, ну по 25-му кругу уже понесло....
> -=Vlad=- © (05.09.03 13:29) [38]
Ну может он выдать одиночный импульс, может:
SetCommBreak(HCFile);
Sleep(500);
ClearCommBreak(HCfile);
Заряди себе на тачку и увидишь импульс длительностью 500 мс на выводе Tx!
-=Vlad=- (2003-09-05 13:32:00) [12]
ЗЫ а EscapeCommFunction может выставить DTR и RTSные ноги в ноль или единицу и держать этот уровень до его отмены, так что ни про какую длительность не может быть и речи 8)
-=Vlad=- (2003-09-05 13:29:00) [13]
Народ если вам необходимо через компорт выдавать импульсы определенной длительности варируйте таким параметром как частота, именно она отвечает за длительность одного бита. Не забывайте, что UART не может работать с одиночными импульзами. Всегда будет стартовый бит, от 5 до 8 бит данных и минимум 1 стоповый. Бит четности можно отменить. И никак иначе потому как это устройство асинхроное и никакие протоколы и драйвера этого не изменят. Если задача серьезная поройте в документациях по синхронному обмену данных. Раньше были такие платы как SDLC, в руках не держал только гдето про нее читал. Вот так.
pasha_676 (2003-09-05 12:58:00) [14]
> Если же бит, например, - это импульс той или иной строго
> определенной длительности,
То его можно реализовать опять же с помощью EscapeCommFunction. С определенной точностью конечно. Ничто не мешает выставить сигнал на определенный период времени, а потом сбросить. Согласен - что все эти проблеммы упираются в разработку протокола. Но вопрос разрешимый без драйверов уровня ядра (ну может в ряде случаев, типа низкая длительность импульса, они конечно и понадобятся).
> 0 - (+3)-(+12В) 1 - (-3)-(-12В)
Что не совпадает с ТТЛ (Хотя когда то был случай - срабатывало, но это из области риска). Однако за пояснения пасибо.
jack128 (2003-09-05 12:38:00) [15]
> . Кстати +-12 В (причем 1 помоему -12 В - но это точно не
> помню), а не пять (хотя слышал, что есть и порты с ТТЛ уровнями,
> но это уже вроде отклонение от стандарта).
ИМХО стандарт говорил(лет 10 назад по крайней мере) 0 - (+3)-(+12В) 1 - (-3)-(-12В) Другое дело что на компах обычно действительно (-12)-(+12), но бывает и другие варианты..(Просто сам недавно наткнулся... 2 недели разбирался в чем дело..)
Verg (2003-09-05 12:23:00) [16]
> pasha_676 © (05.09.03 12:13) [34]
Э-э, не увлекайся.
Смотря что является битом в контексте конкретного протокола.
Если бит - это то или иное значение потенциала, то ты прав
Если же бит, например, - это импульс той или иной строго определенной длительности, возможность реализации такого еще под очень большим вопросом для простого смертного приложения в Win32. Может понадобится спец-драйвер уровня ядра.
pasha_676 (2003-09-05 12:13:00) [17]
> Ясен перец что неначто но как ты можешь перекиуть 1 бит
> ?
В данном конкретном случае о котором идет реч, на контакте ком-порта, еще раз, для тех кто окончательно не вылез из бронепоезда и так и не удосужился заглянуть в хелп на EscapeCommFunction и в статью пишу - EscapeCommFunction(CommHandle, SETDTR); Ножка DTR устанавливается в "1".
Для пересылания одного бита информации по обычному контакту передачи данных разрабытывается протокол передачи. Физически передается конечно минимум один байт, а согласно протоколу может и один бит (ну или 8). Это уж как сам протокол сделаешь.
Di.ma2002@mail.ru (2003-09-05 11:41:00) [18]
2Keith Flint и вообще если разговор о компанетах то лучше заглянуть сюда !! http://www.torry.net/modems.htm
Здесь можно многое найти, если ты конечно тут не был !!
ksa2002 (2003-09-05 11:41:00) [19]
> А на что это влияет если есть логические операции?
Ясен перец что неначто но как ты можешь перекиуть 1 бит ?
Чтоб вот именно a=1 и его переслать ?
Di.ma2002@mail.ru (2003-09-05 11:36:00) [20]
> что ты знаешь все компортах
Разве я это утверждал, вообще то я конкретно о своём случае рассказывал