Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 23.02.2009
Сообщений: 3

работа в delphi с СОМ-портом

23.02.2009, 19:57. Показов 7200. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,пишу программу на пипломник, суть программы: через COM-порт отправляет и принимает определенные команды (программа для работы с оборудованием мобильных операторов). Проблема: в процедуре formcreate когда доходит до подключения к порту и его настройки,процедура не выполняется,без ошибок и без вылетов все компилируется но к порту не подключается и не настраивает. КАК узнал: перед подключением и перед настройкой поставил вывод в label цифры,показало что перед подключением порта все встает и процедура дальше не выполняется. Подскажите есть ли какое нибуть решение,либо кто нибуть уже писал подобное,подскажите пожалуйста,вся работа встает из за этого.



код процедуры:
Delphi Скопировано
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
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ComCtrls, Menus, ExtCtrls, Buttons, Unit2;
 
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Label4: TLabel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Label3: TLabel;
Label5: TLabel;
Label7: TLabel;
UpDown1: TUpDown;
Edit1: TEdit;
UpDown2: TUpDown;
Edit2: TEdit;
Label8: TLabel;
Label6: TLabel;
MainMenu1: TMainMenu;
menu1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
FAQCU1: TMenuItem;
CU1: TMenuItem;
SaveDialog1: TSaveDialog;
Panel2: TPanel;
Memo1: TMemo;
RadioButton7: TRadioButton;
RadioButton8: TRadioButton;
RadioButton9: TRadioButton;
RadioButton10: TRadioButton;
RadioButton11: TRadioButton;
RadioButton12: TRadioButton;
Panel3: TPanel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
StatusBar1: TStatusBar;
Panel1: TPanel;
Timer1: TTimer;
PWRout: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure CU1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure clear1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
{ procedure Memo1Change(Sender: TObject);}
private
{ Private declarations }
public
{ Public declarations }
end;
 
var
Form1: TForm1;
hCom,Errors,Bytes:Cardinal;
DCB:TDCB;
TheStruct:TCOMSTAT;
buffer:string;
s,p,f,w,e:string;
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
Memo1.Lines.Clear;
Memo1.Lines.Add('БС № '+(
InputBox('Начало работы','Введите БС №:','')+
' '+DateToStr(Now)+' '+TimeToStr(Now)));
{:: открытие порта ::}
hCom:=CreateFile('COM1',GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_N ORMAL,0);
if hCom=INVALID_HANDLE_VALUE then begin
//не удалось открыть
exit;
end;
SetupComm(hCom,1600,1600);
GetCommState(hCom,DCB);
//настроить нужным образом
Dcb.BaudRate := CBR_9600;
Dcb.Parity := NOPARITY;
Dcb.ByteSize := 8;
Dcb.StopBits := ONESTOPBIT;
if not SetCommState(hCom,DCB) then ShowMessage('ошибка')
else form1.StatusBar1.Panels.Items[0].Text:='соединение установлено';
 
Form1.ActiveControl:=Button2;
 
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2009, 19:57
Ответы с готовыми решениями:

Работа с модемом и СОМ портом Допоможите
Люди допоможите хто чем может! А по существу есть такая проблема. Необходимо сделать звонилку которая будет перебирать номера с...

Работа с СОМ-портом через ЛВС
Здравствуйте господа. Мне предстоит следующая задача: в колхозе монтируются автомобильные весы на 60 т., подключенные на порт RS-232....

Работа с сом-портом
Есть прибор подключаемый через сом-порт и хотелось бы написать программу получения данных с помощью Labview. C помощью матлаба это...

2
0 / 0 / 0
Регистрация: 22.02.2009
Сообщений: 3
24.02.2009, 01:47
Есть компоненты для работы с COM портом. Писал и ручками, когда нужно было. Вот примерчик из одного проекта, правда писал это только когда начинал программить, но работало у меня как нужно, и с реальной железкой и виртуальными портами. Поизучай, если не разберёшься, то выкину пасник компонента, которым пользуюсь обычно. Этот пример просто легче понять.
Pascal Скопировано
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, TabNotBk;
 
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    CheckBox1: TCheckBox;
    TabbedNotebook1: TTabbedNotebook;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Label8: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
 
    function OpenCOMPort: Boolean;
    function SetupCOMPort: Boolean; //для настройки порта
    procedure Connect;
    procedure Disconnect;
 
  end;
 
var
  Form1: TForm1;
        ComFile: THandle; //Хэндл создаваемого нами файла
        ComString: string; //(COM1, COM2 или COM3)
        ComSpeed: Integer; //Скорость взаимодействия с COM-портом
        Status: Boolean; //подключен или не подключен (чтобы в дальнейшем проверять статус)
 
 
 
implementation
 
{$R *.dfm}
 
 
 
procedure TForm1.Connect;
begin
  ComString := 'COM2';
  ComSpeed := 19200;
  if OpenCOMPort = true then //Открываем порт…
    if SetupCOMPort = true then //…и конфигурируем его
      Memo1.Lines.Add('Подключились...');
  Sleep(1500); //засыпаем на полторы секунды чтобы дать время на соединение
end;
 
procedure TForm1.Disconnect;
begin
  CloseHandle(ComFile);
  Memo1.Lines.Add('Отключились.');
end;
 
 
function TForm1.OpenCOMPort: Boolean;
var DeviceName: array[0..80] of Char;
  Device: string;
begin
  Device := ComString;
  StrPCopy(DeviceName, Device);
  ComFile := CreateFile(DeviceName,
    GENERIC_READ or GENERIC_WRITE,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  if ComFile = INVALID_HANDLE_VALUE then
    begin
      Result := False;
      Status := Result;
    end
  else
    begin
      Result := True;
      Status := Result;
    end;
 
end;
 
function TForm1.SetupCOMPort: Boolean;
const RxBufferSize = 256;
      TxBufferSize = 256;
var   DCB: TDCB;
      Config: string;
      CommTimeouts: TCommTimeouts;
begin
  Result := True;
  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
    Result := False;
  if not GetCommState(ComFile, DCB) then
    Result := False;
 
  Config := 'baud=' + IntToStr(ComSpeed) + ' parity=n data=8 stop=1'; //Устанавливаем скорость
  if not BuildCommDCB(@Config[1], DCB) then
    Result := False;
  if not SetCommState(ComFile, DCB) then
    Result := False;
 
  with CommTimeouts do
    begin
      ReadIntervalTimeout := 0;
      ReadTotalTimeoutMultiplier := 0;
      ReadTotalTimeoutConstant := 1000;
      WriteTotalTimeoutMultiplier := 0;
      WriteTotalTimeoutConstant := 1000;
    end;
  if not SetCommTimeouts(ComFile, CommTimeouts) then
    Result := False;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
    BytesWritten: DWORD;
    s: string;
    d: array[1..1500] of Char;
    BytesRead: DWORD;
    i: Integer;
    Result: string;
 
begin
 
    s := 'Эти данные отправляем'; //Тут записываем нужные данны
    WriteFile(ComFile, s[1], Length(s), BytesWritten, nil); //…и посылаем их устройству
    Result := '';
 
  if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
    begin
      MessageDlg('Ошибка чтения!', mtError, [mbOK], 0);
        exit;
    end;
 
  s := '';
  for i := 1 to BytesRead do //Считываем ответ
    s := s + d[I];
  Result := s;
  Memo1.Lines.Add(Result); //Выводим ответ от устройства в Memo
 
end;
 
 
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    Connect
  else
    Disconnect;
end;
 
end.
0
0 / 0 / 0
Регистрация: 23.02.2009
Сообщений: 3
24.02.2009, 09:32  [ТС]
Спасибочки! Попробую отпишусь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2009, 09:32
Помогаю со студенческими работами здесь

Работа с СОМ-портом
Пишу программу для работы с устройством через COM-порт. Я отсылаю устройству запрос так: WriteFile(hComPort, buff, buffSize,...

Работа с СОМ портом
Для тех кто в танке то есть мой случай . Думаю можно отдельную тему вынести программирование СОМ порта. Поясните на как открыть ,...

Работа с сом-портом
Суть программы-обмен данными с некоторым микроконтроллером. Одна из особенностей- RX и TX соединяются вместе. Получается, когда я...

Работа с СОМ портом, переполнение буфера
Написал программу на билдере для проверки работы одного девайса через СОМ порт. Программа простейшая использует...

Работа с СОМ портом (прием и передача)
Подскажите, ПОЖАЛУЙСТА! Хочу написать небольшую программку, которая должна отправлять на СОМ порт определенное значение! Если после этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер