|
Работа с СОМ портом, Win2000 |
|
|
|
Feb 3 2005, 09:12
|
Группа: Новичок
Сообщений: 7
Регистрация: 3-02-05
Пользователь №: 2 395

|
Здравствуйте, уважаемые! Если кто сталкивался, помогите плизз. Долбаюсь уже 2 недели, и ничего не получается. Ситуация следующая: Есть некий контроллер и общается он с компьютером через RS232, в Win98 все работает, а вот Операционка Win2000 блокирует прямое обращение к портам. Мне подсказали прогу WinDriver для обхода этой проблемы... но опять-же, для LPT порта там есть стандартная заготовка, которая прекрасно работает... а о СОМ порте ни слова. Сразу оговорюсь, я не являюсь системным программистом и с железом дел никогда не имел... а тут пришлось  Искренне надеюсь на Вашу помощь. Заранее спасибо. З.Ы. Я впервые на этом форуме, и вполне возможно что запостил тему не совсем в тот раздел куда следовало бы. ЗЗ.ЫЫ Работать с этой штукой через CreateFile/ReadFile/WriteFile тоже не получается, в ReadFile постоянно нули возвращаются, хотя команда сформирована верно и контроллером принята...
|
|
|
|
|
 |
Ответов
|
Feb 3 2005, 15:39
|
Группа: Новичок
Сообщений: 7
Регистрация: 3-02-05
Пользователь №: 2 395

|
Фуухх, я уже окончательно запутался.... выкладываю настройку DCB Код .... DriverHandle = CreateFile (Com_Name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (DriverHandle == INVALID_HANDLE_VALUE) { return (DriverHandle); } else {
SetupComm (DriverHandle, 1024, 1024);
GetCommState (DriverHandle, &Our_DCB);
Our_DCB.BaudRate = DCB_Baud_Rate; Our_DCB.fParity = 0; Our_DCB.fOutxCtsFlow = 0; Our_DCB.fOutxDsrFlow = 0; Our_DCB.fDtrControl = DTR_CONTROL_ENABLE; Our_DCB.fDsrSensitivity = NULL; Our_DCB.fTXContinueOnXoff = 0; Our_DCB.fOutX = 0; Our_DCB.fInX = 0; Our_DCB.fErrorChar = 0; Our_DCB.fNull = 0; Our_DCB.fRtsControl = RTS_CONTROL_DISABLE; Our_DCB.fAbortOnError = 0; Our_DCB.ByteSize = 8; Our_DCB.Parity = NOPARITY; Our_DCB.StopBits = ONESTOPBIT;
SetCommState (DriverHandle, &Our_DCB);
SetCommMask (DriverHandle, EV_TXEMPTY); } .... А потом вызываю WriteFile... Данные приходят на контроллер, причем правильно им "понимаются"... а при вызове ReadFile нет ни одного быйта в очереди... а вот что происходит в паскале... Код {проверка контроллера на СОМ1} {в первом байте -младший адрес, идентификатор} {во втором байте-старший адрес, идентификатор, тип модуля, интервал ответа} {третий байт (первый байт массива)-команда, идентификатор, интервал между ответами} {если нужно передать данные, то следующие байт(ы) массива-данные} {последний байт-контрольная сумма}
program com; uses crt,dos; var a,b,c,n,rs,P:byte; rs_old:pointer; r:registers; KS:word; I:byte; const MAX:byte = 1;{1-если нет данных} {команда---данные} BUF:array[1..10] of byte = ($e0, $8f,$8f,$8f,$8f,$8f,$8f,$8f,$8f,$8f);
label no_RX_,no_0,no_1,no_2,no_RX__,yes_key;
begin KS:=0; I:=0;
port[$3fb]:=$83;{без паритета}
port[$3f8]:=$06; port[$3f9]:=$00;{19200бод}
port[$3fb]:=$03; port[$3f9]:=$00;
port[$3fc]:=$03; {настроить преобразователь RS232/485 на передачу}
delay(500);
b:=0; KS:=0;
{--ФОРМИРОВАНИЕ МЛАДШЕГО АДРЕСА с битами идентификатора, типа модуля--} P:=$00; KS:=P; port[$3f8]:=P;{передать адрес младший}
no_0: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_0 else {goto yes_key;}
{-------------------------------------} {--ФОРМИРОВАНИЕ СТАРШЕГО АДРЕСА с битами идентификатора, типа модуля и интервала ответа--} P:=$70; KS:=KS+P; port[$3f8]:=P;{передать адрес старший}
no_1: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_1 else {goto yes_key;}
{----------------------------} {--СФОРМИРОВАТЬ КОМАНДУ с битом идентификатора и интервалом между байтами ответа--} {если необходимо передать данные- изменить индекс и уст. данные массива} while (I < MAX) do begin I:=I+1;
P:=BUF[I]; KS:=KS+P; port[$3f8]:=P;{передать команду И ДАННЫЕ}
no_2: rs:=port[$3fd]; rs:=rs and 64; if rs<>64 then goto no_2 else
end;
{goto yes_key;}
{----------------------------} {--СФОРМИРОВАТЬ К.С. с битом идентификатора--} KS:=KS and $00ff; P:=KS; P:=P or $80; port[$3f8]:=P;{передать КС}
port[$3fc]:=$02;{настроить преобразователь RS232/485 на прием}
write('com ');
{----------------------------} {--ПРИНЯТЬ ВСЕ ПОДРЯД--} no_RX_: if memw[0:$41a]<>memw[0:$41c] then goto yes_key; rs:=port[$3fd]; rs:=rs and 1; if rs<>1 then goto no_RX_ else
a:=port[$3f8];a:=a and 127; {стереть, для вывода на экран, бит идентификатор}
write(a,';');
goto no_RX_;
yes_key:
writeln(KS); end. end Может кто что подскажет....
|
|
|
|
|
Feb 4 2005, 06:16
|
Частый гость
 
Группа: Свой
Сообщений: 88
Регистрация: 15-10-04
Из: Новочеркасск
Пользователь №: 886

|
Цитата(uvw @ Feb 3 2005, 18:39) а вот что происходит в паскале... Код ... port[$3fc]:=$03; {настроить преобразователь RS232/485 на передачу} ... port[$3fc]:=$02;{настроить преобразователь RS232/485 на прием} ... Не в этом ли дело? Может, в Вашем примере для Win преобразователь RS232/485 все время на передачу работает? Я, правда, назначение портов UART не помню, поэтому сходу не скажу, как то же самое можно сделать в WinAPI. Если нужно, могу выслать исходники на Паскале (Delphi), где у меня реализована связь с контролером (правда, используется только TxD и RxD, управления преобразователем нет).
|
|
|
|
Сообщений в этой теме
uvw Работа с СОМ портом Feb 3 2005, 09:12 IgorKossak Попробуйте следуюшее в прикреплённом файле.
У меня... Feb 3 2005, 09:23 uvw Спасибо, но эту статью я недавно читал (на сайте w... Feb 3 2005, 10:11 IgorKossak Зачем такие сложности с прямым доступом если и чер... Feb 3 2005, 10:59 uvw Могу привести исходник на паскале, присланный разр... Feb 3 2005, 11:36 veter а вы попробуйте RxD и TxD закоротить, и отправить ... Feb 3 2005, 13:37 veter Our_DCB.fDtrControl = DTR_CONTROL_ENABLE;
этой на... Feb 3 2005, 17:13 uvw При установке DTR_CONTROL_DISABLE данные на контро... Feb 3 2005, 17:37 veter я бы отправил тебе свои исходники, да у меня как р... Feb 3 2005, 17:46 uvw veter, Давай, буду очень признателен
присылай на ... Feb 3 2005, 17:51 khach При порты в прикладной программе забудьте- это при... Feb 4 2005, 10:52 Shedon Здесь есть класс для работы с ком портом, у меня ч... Feb 4 2005, 10:17 Shedon [khach], естественно из прикладной программы с пор... Feb 4 2005, 11:20 khach Цитата(Shedon @ Feb 4 2005, 13:20)[khach], ес... Feb 4 2005, 11:38 andk >Вопрос- есть жизненно необходимая прога, управ... Feb 4 2005, 12:36 khach Цитата(andk @ Feb 4 2005, 14:36)Скорее всего ... Feb 4 2005, 13:47  -Tумблер- Цитата(khach @ Feb 4 2005, 16:47)98-дает, Мил... Feb 7 2005, 12:49 uvw пожалуй, DPL прав! скорее всего так и происход... Feb 4 2005, 21:09 andk Цитата(khach @ Feb 4 2005, 19:47)Цитата(andk ... Feb 5 2005, 04:40 one_man_show Попробуйте скачать отсюда Torry компонент для Дель... Feb 7 2005, 13:20 Dimonira Как я понял из всего сказанного, у человека порт к... Feb 9 2005, 06:15 _Sam_ ЦитатаПри установке DTR_CONTROL_DISABLE данные на ... Feb 9 2005, 07:22 SergM Здравствуйте.
Есть не плохая книга: П. Агуров ... Feb 9 2005, 11:58 makc GiveIo с некоторыми программами ведет себя очень с... Feb 9 2005, 12:36 andk Прикол всех этих псевдо драйверов в том, что они п... Feb 9 2005, 13:18 SergM Цитата(andk @ Feb 9 2005, 16:18)Прикол всех э... Feb 9 2005, 13:57 Dimonira Мужики, вы, похоже так и не поняли. Дело не в умен... Feb 15 2005, 08:33 SergM Цитата(Dimonira @ Feb 15 2005, 11:33)Мужики, ... Feb 15 2005, 08:58  khach Как автор подтопика о программаторе, уточню. Не ра... Feb 15 2005, 10:11   -Tумблер- Цитата(khach @ Feb 15 2005, 13:11)Не работает... Feb 17 2005, 18:40 Dimonira Я как-то пропустил слова о реверс-инжиниринге.
Тог... Feb 16 2005, 11:23 Serjio Мы пользуемся CPORT под все Windows Feb 17 2005, 08:01 Angel может кому пригодиться h__p://www.rs232.ru/ Mar 3 2005, 11:54 PowerF1 Подскажите, у меня такая проблема.
Когда собирал м... Mar 18 2005, 15:59 _VM Программируй на C++Builder - меньше заморачиваться... Mar 23 2005, 17:01  -Tумблер- Цитата(_VM @ Mar 23 2005, 20:01)заводишь пото... Mar 28 2005, 11:05   _VM Цитата(-Tумблер- @ Mar 28 2005, 14:... Mar 29 2005, 00:20    -Tумблер- Цитата(_VM @ Mar 29 2005, 03:20)А я что-то не... Mar 29 2005, 06:04    -Tумблер- Цитата(_VM @ Mar 29 2005, 03:20)А я что-то не... May 24 2005, 10:44 Lukomor Подскажите пожалуйста! Есть проблема работы с ... Mar 28 2005, 07:40 _VM Если протокол связи накладывает жесткие временные ... Mar 28 2005, 09:19  Lukomor Спасибо _VM за ответ.
Цитата(_VM @ Mar 28 200... Mar 29 2005, 05:36   -Tумблер- Цитата(Lukomor @ Mar 29 2005, 08:36)В протоко... Mar 29 2005, 07:35    Lukomor Цитата(-Tумблер- @ Mar 29 2005, 10:... Mar 29 2005, 09:22     -Tумблер- Цитата(Lukomor @ Mar 29 2005, 12:22)Настройка... Mar 30 2005, 11:52      Lukomor Цитата(-Tумблер- @ Mar 30 2005, 14:... Mar 31 2005, 06:38       -Tумблер- Цитата(Lukomor @ Mar 31 2005, 09:38)Цитата(... Apr 13 2005, 16:22        -Tумблер- Цитата(-Tумблер- @ Apr 13 2005, 19:... Apr 13 2005, 16:37         Lukomor Цитата(-Tумблер- @ Apr 13 2005, 19:... Apr 21 2005, 08:59          -Tумблер- Цитата(Lukomor @ Apr 21 2005, 11:59)Для работ... Apr 21 2005, 13:29           Lukomor Цитата(-Tумблер- @ Apr 21 2005, 16:... Apr 22 2005, 07:34            yuriyc [/quote]
Так REALTIME_PRIORITY_CLASS это вроде и... May 25 2005, 05:52             Lukomor Цитата(yuriyc @ May 25 2005, 08:52)Обратимся ... Jun 22 2005, 11:46              yuriyc [/quote]
2all:
Кто нибудь знает, каким образом мо... Jun 28 2005, 13:26               vm1 Мне кажется из под Win управлять RTS дело безнадеж... Jun 28 2005, 14:04               Lukomor Цитата(yuriyc @ Jun 28 2005, 16:26)Как вариан... Jun 29 2005, 07:03                vm1 а есть возможность передавайть последний байт тран... Jul 4 2005, 13:11   _VM 2Lukomor
Цитата(Lukomor @ Mar 29 2005, 08:36)... Mar 30 2005, 21:04    _VM 2-Tумблер-&PowerF1&Lukomor
Проблем с разны... Mar 30 2005, 21:45    Lukomor 2_VM
Цитата(_VM @ Mar 31 2005, 00:04)Пуск-... Mar 31 2005, 06:59     _VM Если владеешь C++ поищи Numega Driver Studio (софт... Mar 31 2005, 08:47 SergM А для отладки софта, работающего с СОМ под Windows... Mar 28 2005, 13:44 PowerF1 _WM, боьшое спасибо за ценную информацию!
Разо... Mar 29 2005, 14:41 -Tумблер- Цитата(PowerF1 @ Mar 29 2005, 17:41)Как распр... Mar 30 2005, 10:53 max123 Цитата(uvw @ Feb 3 2005, 14:12)Здравствуйте, ... Apr 5 2005, 05:42 Krom Вот примерчик для Borland C++ Builder из моей тест... Jul 7 2005, 06:54 fluent Помогите плиз.
Взялся за курсовик.Для начала надо ... Apr 2 2007, 00:55 haker_fox Цитата(fluent @ Apr 2 2007, 06:55) Помоги... Apr 2 2007, 09:21 Djimmy Запоздало, но тем не менее.. Jun 23 2007, 17:13 dimka76 Цитата(Djimmy @ Jun 23 2007, 21:13) Запоз... Aug 31 2009, 11:05 MaxPIC Я делал так в Visual Studio 2005:
Инициализация:
... Jul 1 2007, 11:15 MMP Подскажите как cport310 прицепить к Borland Aug 8 2007, 06:58 badik Судя по Вашей переписке - лето было боевое.
Есть о... Aug 28 2007, 13:25 Hmm Цитата... классный класс. Да неплохой. Использовал... Mar 28 2012, 19:34 dm37 в архиве cport310 есть файл readme.txt всё (правда... Sep 26 2016, 18:45
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|