Работа с COM-портом

  • Автор темы XIII
  • Дата начала
Статус
Закрыто для дальнейших ответов.
X

XIII

Гость
#1
Мне необходимо передать букву 'A' в порт COM1 со скоростью 50 или 150 бод.

Буду благодарен всем, кто откликнется.
 
?

????

Гость
#2
Код:
HANDLE CreateFile
( 
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile 
);
, где lpFileName = "COM1" - открытие порта
Код:
BOOL GetCommState
(
HANDLE hFile,
LPDCB lpDCB
);
- получение параметров порта, и изменение необходимых
Код:
BOOL SetCommState
(
HANDLE hFile,
LPDCB lpDCB
);
- установка новых(нужных) параметров порта
Код:
BOOL WriteFile
(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
- вывод в порт
 
G

Guest

Гость
#3
<!--QuoteBegin-????+7:03:2005, 23:17 -->
<span class="vbquote">(???? @ 7:03:2005, 23:17 )</span><!--QuoteEBegin-->
Код:
HANDLE CreateFile
( 
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDistribution,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile 
);
, где lpFileName = "COM1" - открытие порта
Код:
BOOL GetCommState
(
HANDLE hFile,
LPDCB lpDCB
);
- получение параметров порта, и изменение необходимых
Код:
BOOL SetCommState
(
HANDLE hFile,
LPDCB lpDCB
);
- установка новых(нужных) параметров порта
Код:
BOOL WriteFile
(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
- вывод в порт[/quote]
И это не будет работать под XP(NT). Винда скажет что мало привелегий. Выход один: написать свой драйвер или скачать готовый.
 
Z

zubr

Гость
#4
Guest
И это не будет работать под XP(NT). Винда скажет что мало привелегий. Выход один: написать свой драйвер или скачать готовый.
Откуда ты взял, что не будет работать в NT? Все работает, тут же доступ к Com порту через API, а не напрямую.
 
X

XIII

Гость
#5
Благодарю. :D

Передавать данные в порт у меня получилось, а вот изменять скорость - нет . Есть ли какой-нибудь другой способ изменения скорости передачи данных?
 
Z

zubr

Гость
#6
Вот примерный код:
Код:
void WritePort()
{
HANDLE FHandle;
FHandle=CreateFile("COM1", GENERIC_READ || GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 
 FILE_ATTRIBUTE_NORMAL || FILE_FLAG_OVERLAPPED, 0);
DCB dcb;
GetCommState(FHandle, &dcb);
dcb.BaudRate=57600;//скорость порта
SetCommState(FHandle, &dcb);
char buf[1]="A";
DWORD n;
WriteFile(FHandle, &buf, 1, &n, NULL);
CloseHandle(FHandle);
}
 
X

XIII

Гость
#7
Спасибо за помощь! ;)
Теперь я могу и скорость изменять.
 
S

Suslik

Гость
#8
Это. классно конечно. А не напишет кто-нибудь очень добрый. Как прочитать из порта строку или символ. Пожалуйста. оч. надо. Заранее спасибо.
 
G

Guest

Гость
#10
че з аденьги никто не хочет ??? :D

как жаль... :D
 
?

????

Гость
#11
<!--QuoteBegin-Guest+13:09:2005, 08:52 -->
<span class="vbquote">(Guest @ 13:09:2005, 08:52 )</span><!--QuoteEBegin-->че з аденьги никто не хочет ??? :D

как жаль... :D
[snapback]24743" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не за деньги есть наводка сверху - поищи в help'е и подумай. Могу и бесплатно написать, но если оплатишь курсы по основам работы с портами (8-и часовой курс, 10$ час + оплата проезда, питание, проживание).
 
Z

zubr

Гость
#12
че з аденьги никто не хочет ???

как жаль...
Купи книгу Агурова "Последовательные интерфейсы ПК", книга недорогая и все доступно, с примерами. А писать тебе тут код для чтения слишком гиморно, причем может быть множество вариантов, в зависимости от протокола обмена и других условий.
 
B

bel_nikita

Гость
#13
Сходите на www.codeproject.com. Там уйма библиотек для работы с com портами. Ничего придумывать не нужно - уже все придумано за нас :D
 
G

Guest

Гость
#14
все что там придумано, все делалось под конкретные задачи!

zubr правильно сказал все зависит в основном от протокола обмена..
под modbus я сам писал весь обмен по ком-порту.... опыт уже есть поэтому и предлагаю з аденьги :)

а стеб почетного секретчика не овсем понимаю :D
 
Z

zubr

Гость
#15
Гости, вы хотя бы под ником каким нить посты делайте, а то не понятно кто просит, а кто предлагает.
При использовании готовых библиотек все равно надо иметь понятие как работать с последовательными интерфейсами.
 
Z

zzzup

Гость
#16
все что под гостем написано - мое :)

следовательно я гостЬ !

впрочем уже нет


zubr точно, понятие надо иметь всегда, а потом уже спрашивать в принципе в форуме че не понятно, а не спрашивать предварительно ничего не читая.

ты понял, XIII ?

почитай ты хоть немного и не ленись поиском заняться, потом попробуй и если не получается то в форуме покажи код и мы найдем где не получается

см. форум на www.sources.ru (только воспользуйся там поиском!!!)

и нам поясни зачем тебе надо посылать/принимать байты, по какому протоколу и т.д.
 
Статус
Закрыто для дальнейших ответов.