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

 
 
> Работа с СОМ портом, 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
Ответов
Krom
сообщение Jul 7 2005, 06:54
Сообщение #2


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

Группа: Свой
Сообщений: 107
Регистрация: 27-06-05
Из: Россия
Пользователь №: 6 324



Вот примерчик для Borland C++ Builder из моей тестовой программки. hCOM, dcb, и sTO обьявлены глобально ( HANDLE hCOM, DCB dcb, COMMTIMEOUTS sTO), в классе MainForm, cbBaudRate - комбо-бокс на главной форме с выбором скорости обмена.

int __fastcall TMainForm::InitComm(int portno)
/////////////////////////////////////////////////////////////////////////////
//
// Инициализация COM-порта с номером portno. Если инициализация прошла
// успешно, то функция возвращает 0, в противном случае один из следующих
// кодов:
// -1 не удалось получить доступ к COM-порту
// -2 не удалось получить доступ к блоку dcb
// -3 не удалость перенастроить порт
// -4 ошибка при настройке тайм-аутов
//
/////////////////////////////////////////////////////////////////////////////
{
char portname[8];
int result;
DWORD val;

sprintf(portname,"COM%d",portno); //

hCOM = CreateFile(
portname, //
GENERIC_READ|GENERIC_WRITE, // Пробуем получить доступ
0, // к COM-порту
NULL, //
OPEN_EXISTING, //
FILE_ATTRIBUTE_NORMAL, //
NULL //
);

if( hCOM != INVALID_HANDLE_VALUE )
{//*1*-----------------------------------------------------------------
// Настройка параметров порта
//--------------------------------------------------------------------
if( GetCommState(hCOM,&dcb) )
{//*2*
switch( cbBaudRate->ItemIndex )
{
case 0: {
dcb.BaudRate=CBR_4800;
break;
}
case 1: {
dcb.BaudRate=CBR_9600;
break;
}
case 2: {
dcb.BaudRate=CBR_19200;
break;
}
case 3: {
dcb.BaudRate=CBR_38400;
break;
}
case 4: {
dcb.BaudRate=CBR_57600;
break;
}
case 5: {
dcb.BaudRate=CBR_115200;
break;
}
default: dcb.BaudRate=CBR_9600;
}// end of switch (cbxBaudRate)

dcb.ByteSize = 8; // в байте 8 битов
dcb.fBinary = True; // альтернативы как бы нет

dcb.fNull = False; //

dcb.fOutxCtsFlow = False; // disable TS output flow control
dcb.fOutxDsrFlow = False; // disable DSR output flow control
dcb.fErrorChar = False; // disable error replacement

dcb.fAbortOnError = True; // abort reads/writes on error

dcb.fDtrControl = DTR_CONTROL_DISABLE; // DTR flow control disable
dcb.fRtsControl = RTS_CONTROL_DISABLE; // RTS flow control
dcb.fDsrSensitivity = False; // DSR sensitivity disable

dcb.fOutX = False; // disable XON/XOFF out flow control
dcb.fInX = False; // disable XON/XOFF in flow control

dcb.XonLim = 256; // transmit XON threshold
dcb.XoffLim = 2048; // transmit XOFF threshold

dcb.XonChar = 0x7F; // Tx and Rx XON character
dcb.XoffChar = 0x7F; // Tx and Rx XOFF character

dcb.EvtChar = 0x02; // received event character
dcb.ErrorChar = 0x00; // error replacement character
dcb.EofChar = 0x03; // end of input character

dcb.fTXContinueOnXoff = False; // XOFF continues Tx (????)

if( !SetCommState(hCOM, &dcb) )
{
CloseHandle(hCOM);
hCOM = INVALID_HANDLE_VALUE;
return( -3);
}
}
else
{
CloseHandle(hCOM);
hCOM = INVALID_HANDLE_VALUE;
return( -2);
}//*2*

}//*1*
else return( -1);


//---------------------------------------------------------------------
// Настройка тайм-аутов
//---------------------------------------------------------------------

if( GetCommTimeouts(hCOM, &sTO) )
{
sTO.ReadTotalTimeoutConstant = 250;
sTO.ReadTotalTimeoutMultiplier = 3;
sTO.ReadIntervalTimeout = 2;
sTO.WriteTotalTimeoutConstant = 100;
sTO.WriteTotalTimeoutMultiplier = 5;

if( !SetCommTimeouts( hCOM, &sTO ) ) {
CloseHandle( hCOM );
hCOM = INVALID_HANDLE_VALUE;
return( -4);
}
}
else
{
CloseHandle(hCOM);
hCOM = INVALID_HANDLE_VALUE;
return( -4);
}

PurgeComm(hCOM,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
ClearCommError(hCOM,&val,NULL);

return( 0 );
}//<<< End of InitComm() >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


Ну а дальше через функции ReadFile и WriteFile.
1. Передача:

len = 5;
fSucs = WriteFile( hCOM, &txbuf[0], len, &len, NULL );

if( !fSucs )
{
Errors = CE_BREAK|CE_FRAME|CE_IOE|CE_MODE|CE_OVERRUN|CE_RXOVER|CE_RXPARITY|CE_TXFULL;
ClearCommError(hCOM, &Errors, NULL);
}

2. Прием:

len = 5;
fSucs = ReadFile( hCOM, &rxbuf[0], len, &len, NULL );

if( fSucs && (len==5) ) { принято } else { сбросить ошибки как при передаче}

Количество принятых байт проверять желательно, так как иногда функция возвращает вроде все ОК, хотя считано 0 байтов. Что это за глюк не разбирался.

По переключению RTS. Автоматический вариант проходит - сам когда-то писал утилитку для заливки в кассу базы товаров по 485 интерфейсу. Долго мучался, но в конце-концов разобрался - хитрость там какая-то с настройками com-порта, давно это было, попрбую найти в архивах примерчик.
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
- - uvw   Фуухх, я уже окончательно запутался.... выкладываю...   Feb 3 2005, 15:39
|- - DPL   Цитата(uvw @ Feb 3 2005, 18:39)а вот что прои...   Feb 4 2005, 06:16
- - 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
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 07:31
Рейтинг@Mail.ru


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