реклама на сайте
подробности

 
 
> Работа с СОМ портом, Win2000
uvw
сообщение Feb 3 2005, 09:12
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 3-02-05
Пользователь №: 2 395



Здравствуйте, уважаемые!
Если кто сталкивался, помогите плизз. Долбаюсь уже 2 недели, и ничего не получается. Ситуация следующая: Есть некий контроллер и общается он с компьютером через RS232, в Win98 все работает, а вот Операционка Win2000
блокирует прямое обращение к портам. Мне подсказали прогу WinDriver для обхода этой проблемы... но опять-же, для LPT порта там есть стандартная заготовка, которая прекрасно работает... а о СОМ порте ни слова. Сразу оговорюсь, я не являюсь системным программистом и с железом дел никогда не имел... а тут пришлось wink.gif Искренне надеюсь на Вашу помощь. Заранее спасибо.
З.Ы.
Я впервые на этом форуме, и вполне возможно что запостил тему не совсем в тот раздел куда следовало бы.
ЗЗ.ЫЫ
Работать с этой штукой через CreateFile/ReadFile/WriteFile тоже не получается,
в ReadFile постоянно нули возвращаются, хотя команда сформирована верно и контроллером принята...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uvw
сообщение Feb 3 2005, 15:39
Сообщение #2





Группа: Новичок
Сообщений: 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

Может кто что подскажет....
Go to the top of the page
 
+Quote Post
DPL
сообщение Feb 4 2005, 06:16
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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, управления преобразователем нет).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016