Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.11.2009, 11:07
maks26 maks26 вне форума
Прохожий
 
Регистрация: 19.11.2009
Сообщения: 2
Репутация: 10
По умолчанию Работа с COM1 на Delphi6. Please!

Объясните пожалуйста поподробнее, как с ним работать. На Паскале был модуль Async.tpu, но под Windows XP он не работает (Делал похожую прогу лет 10 назад -- приём/передача на у-во с 8-битным МП -- там-то всё гораздо проще на ASM'e!)

P/S/ Скачал пример одного "умника", где в порт посылается символ "$". В это время закачивал музыку на телефон. После разных сообщений об ошибках повисло всё, включая телефон. Вытащил-вставил аккумулятор, но он (телефон) перестал вообще производить звуки, менять темы и т.д. Слетела прошивка кажется. Отвёз в сервис-центр... Сам бы не поверил, если б со мной не случилось)

Последний раз редактировалось maks26, 19.11.2009 в 11:27.
Ответить с цитированием
  #2  
Старый 19.11.2009, 11:29
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Ну а как ты хотел...экспериментировать с оборудованием не шутки...
Вот кое что нашел...
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
unit Unit1;
 
  
 
interface
 
  
 
uses
 
Windows;
 
  
 
type
 
TComPort = class
 
private
 
   hFile: THandle;
 
public
 
   constructor Create;
 
   destructor Destroy; override;
 
   function InitCom(BaudRate, PortNo: Integer; Parity: Char;
 
     CommTimeOuts: TCommTimeouts): Boolean;
 
   procedure CloseCom;
 
   function ReceiveCom(var Buffer; Size: DWORD): Integer;
 
   function SendCom(var Buffer; Size: DWORD): Integer;
 
   function ClearInputCom: Boolean;
 
end;
 
  
 
implementation
 
  
 
uses
 
SysUtils;
 
  
 
constructor TComPort.Create;
 
begin
 
inherited;
 
CloseCom;
 
end;
 
  
 
destructor TComPort.Destroy;
 
begin
 
CloseCom;
 
inherited;
 
end;
 
  
 
function TComPort.InitCom(BaudRate, PortNo: Integer; Parity: Char;
 
CommTimeOuts: TCommTimeouts): Boolean;
 
var
 
FileName: string;
 
DCB: TDCB;
 
PortParam: string;
 
begin
 
result := FALSE;
 
FileName := 'Com' + IntToStr(PortNo); {имя файла}
 
hFile := CreateFile(PChar(FileName),
 
   GENERIC_READ or GENERIC_WRITE, 0, nil,
 
   OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 
if hFile = INVALID_HANDLE_VALUE then
 
   exit;
 
  
 
//установка требуемых параметров
 
GetCommState(hFile, DCB); //чтение текущих параметров порта
 
PortParam := 'baud=' + IntToStr(BaudRate) + ' parity=' + Parity +
 
   ' data=8 stop=1 ' +
 
   'octs=off';
 
if BuildCommDCB(PChar(PortParam), DCB) then
 
begin
 
   result := SetCommState(hFile, DCB) and
 
     SetCommTimeouts(hFile, CommTimeOuts);
 
end;
 
if not result then
 
   CloseCom;
 
end;
 
  
 
procedure TComPort.CloseCom;
 
begin
 
if hFile < > INVALID_HANDLE_VALUE then
 
   CloseHandle(hFile);
 
hFile := INVALID_HANDLE_VALUE;
 
end;
 
  
 
function TComPort.ReceiveCom(var Buffer; Size: DWORD): Integer;
 
var
 
Received: DWORD;
 
begin
 
if hFile = INVALID_HANDLE_VALUE then
 
   raise Exception.Create('Не открыта запись в Com порт');
 
if ReadFile(hFile, Buffer, Size, Received, nil) then
 
begin
 
   Result := Received;
 
end
 
else
 
   raise Exception.Create('Ошибка приема данных: ' + IntToStr(GetLastError));
 
end;
 
  
 
function TComPort.SendCom(var Buffer; Size: DWORD): Integer;
 
var
 
Sended: DWORD;
 
begin
 
if hFile = INVALID_HANDLE_VALUE then
 
   raise Exception.Create('Не открыта запись в Com порт');
 
if WriteFile(hFile, Buffer, Size, Sended, nil) then
 
begin
 
   Result := Sended;
 
end
 
else
 
   raise Exception.Create('Ошибка передачи данных: ' + IntToStr(GetLastError));
 
end;
 
  
 
function TComPort.ClearInputCom: Boolean;
 
begin
 
if hFile = INVALID_HANDLE_VALUE then
 
   raise Exception.Create('Не открыта запись в Com порт');
 
Result := PurgeComm(hFile, PURGE_RXCLEAR);
 
end;
 
end.
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 20.11.2009, 11:10
maks26 maks26 вне форума
Прохожий
 
Регистрация: 19.11.2009
Сообщения: 2
Репутация: 10
По умолчанию

О! То, что надо, спасибо. Единственное, что пока не понял, а как я узнаю когда именно пришёл байт, а когда нет... По не нулевому размеру считанного буффера?
Ответить с цитированием
  #4  
Старый 20.11.2009, 22:51
Lexa666 Lexa666 вне форума
Прохожий
 
Регистрация: 20.11.2009
Сообщения: 1
Репутация: 10
По умолчанию Подскажите

Извините за столь глопый вопрос,но что такое исходники?И что с ними делать???Заранее спасибо.
Ответить с цитированием
  #5  
Старый 20.11.2009, 22:59
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Чёёёёёё)))
Исходный текст программы...
Это тот код который набираешь в среде Delphi или Pascal...
А точнее те файлы в которых содержится этот код...
А вопрос действительно глупый)))
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025