Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/317: Рейтинг темы: голосов - 317, средняя оценка - 4.52
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1

Чтение и запись СОМ-порта

09.01.2011, 15:14. Показов 64968. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет ребят, нужна небольшая помощь от вас, начал работать с СОМ портом, и немного не догоняю тут в одном месте, нашел пример работы с СОМ портом а пример не описан как следует, возможно вы мне объясните или поясните
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
function TForm1.ReadPort(var Buf; Size: Word): Integer;
var i: Cardinal;
    ovr: TOverlapped;
begin
  FillChar(Buf, Size, 0);
  FillChar(ovr, SizeOf(ovr), 0);
  i := 0;
  Result := -1;
  if not Windows.ReadFile(Com, Buf, Size, i, @ovr) then exit;
  Result := i;
end;
 
function TForm1.WritePort(var Buf; Size: Word): Integer;
var p: Pointer;
    i: Cardinal;
begin
  p := @Buf;
  Result := 0;
  while Size > 0 do
    begin
      if not WriteFile(Com, p^, 1, i, nil) then exit;
      Inc(Result, i);
      Inc(Integer(p));
      Dec(Size);
      Application.ProcessMessages;
    end;
end;
как работать с этими 2 функциями? А именно что именно должно быть входными параметрами, что вписывать в Buf и в Size
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2011, 15:14
Ответы с готовыми решениями:

Сохранить параметры СОМ-порта!
Здравствуйте! Помогите плиз! Я себе сделал диалоговое окно с параметрами Сом-порта (см.рис.). Скажите пожалуйста как эти параметры...

Как найти имя СОМ порта в реестре
Win7 RAD10.1 64x Гугл не помогает, а своя голова уже болит. Надо мне добраться до FriendlyName и найти там СОМ порт, чтобы узнать имя...

Перехват и изменение передаваемой с СОМ порта во внешнюю программу информации
Добрый день! Возникла необходимость написать прогу для того, чтобы изменять данные посылаемые внешней программе с СОМ порта. Так сказать...

25
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 2
11.05.2015, 10:42
Студворк — интернет-сервис помощи студентам
Спасибо за содержательное и аргументированное мнение.

С уважением, "непродвинутый троешник"
0
 Аватар для Игорь2001
20 / 20 / 10
Регистрация: 19.05.2015
Сообщений: 704
22.11.2015, 18:09
Ой, чет не очень все это просто. Не подскажите как принимать через ком-порт один символ?
0
4097 / 2702 / 590
Регистрация: 11.09.2009
Сообщений: 9,632
23.11.2015, 10:18
Цитата Сообщение от Игорь2001 Посмотреть сообщение
как принимать через ком-порт один символ?
Так же, как и больше одного. Прямо в этой ветке приведено решение.
0
 Аватар для Игорь2001
20 / 20 / 10
Регистрация: 19.05.2015
Сообщений: 704
23.11.2015, 10:54
Кхм... Я конечно, все понимаю, но как расшифровать это???
x硸胸砀磸硸磸碀碀胸耀碀x
x硸胸砀磸硸磸碀碀胸耀碀x胸
x硸胸砀磸硸磸碀碀胸耀碀x胸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x胸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x胸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x胸 硸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x胸 硸
x硸胸砀磸硸磸碀碀胸耀碀x胸硸胸碀碀胸耀碀x胸 硸胸
Добавлено через 2 минуты
Должно быть такое
Connected
SOS
SOS
SOS

Сигнал передаю с Ардуино, программируемого микроконтроллера. Монитор порта, встроеный в ту среду, показывает нормально, а та программа, которую выкладывали выше - вот так

Добавлено через 2 минуты
Брал это, уменьшил размер буфера, если как есть оставить, пустое поле, если 1..1 размер указать, вышеописанное выдает...
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
type
  TCommThread = class(TThread)//Объявляем поток
  private
    { Private declarations }
    Procedure QueryPort;//Прерывание порта
  public
    { Public declarations }
protected
     Procedure Execute; override;// Процедура запуска потока 
  end;
 
var
  Form1: TForm1;
  ComFile:THandle;
  CommTimeouts: TCommTimeouts;
  CommThread:TCommThread;
  BytesRead: DWORD;
  b:char;
  all_buf:string;
  DCB:TDCB;
 
implementation
 
{$R *.dfm}
Procedure StartComThread;
Begin
CommThread:=TCommThread.Create(False);//Создаем поток
CommThread.Priority:=tpHighest;
If CommThread = Nil Then
Begin
SysErrorMessage(GetLastError);
Exit;
End;
End;
 
Procedure TCommThread.QueryPort;// Прослушивание порта на наличие данных точнее заполнен ли 
//буфер
Var MyBuff:array [1..26] of Char;
Begin
FillChar(MyBuff,SizeOf(MyBuff),#0);
ReadFile(ComFile,MyBuff,SizeOf(MyBuff),BytesRead,Nil);
If Not ReadFile(ComFile,MyBuff,SizeOf(MyBuff),BytesRead,Nil) Then
Begin
SysErrorMessage(GetLastError);
CloseHandle(ComFile);
Exit;/End;
If BytesRead>0 Then
Begin
all_buf:=all_buf+(MyBuff);
Form1.Memo1.Lines.Add(all_buf);
exit;
End;
End;
 
procedure TCommThread.Execute;
begin
 Repeat
  QueryPort;
 Until Terminated;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
ComFile:=CreateFile('com4',GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,0);
if ComFile=INVALID_HANDLE_VALUE then begin
    ShowMessage('Не удалось открыть порт ');
 exit;
end;
SetupComm(ComFile,4096,4096);
GetCommState(ComFile,DCB);
with DCB do begin
    BaudRate:=38400;
    ByteSize:=8;
    Parity:=NoParity;
    StopBits:=OneStopBit;
end;
if not SetCommState(ComFile,DCB) then begin
    ShowMessage('Порт не настроен');
    CloseHandle(ComFile);
    exit;
end;
StartComThread;
end;
Добавлено через 24 секунды
Компорт, конечно свой ввел.
0
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
06.10.2023, 11:31
Помоги, пожалуйста.
Есть сторонние приложение к которому я должна подключится по COM-Port со своего приложения и получить данные. Соединение произошло(по null-modem emulator. Дополнительно проверяла в командной строке) и следующий этап - получение данных. Но для того,чтобы я получила данные, мне надо дать HEX команду.
В интернете уже есть подомные программы и реализуя их поэтапно не получается передать пакет.

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
procedure TForm1.Button2Click(Sender: TObject);
var
OutputBuffer: array [0..1] of Char;  // выходной буфер
ErrorCode: integer; 
begin
  OutputBuffer[0]:='A'; 
  OutputBuffer[1]:='1'; 
  ErrorCode:=Writeport(OutputBuffer,Length(OutputBuffer));  // передача пакета
  if ErrorCode > 0 then MessageDlg('Пакет передан', MtConfirmation, [mbOK], 0)
  else MessageDlg('Ошибка передачи пакета', MtWarning, [mbOK], 0);
end;
 
----------------------------------------------------------------------------
function TForm1.WritePort(var Buf; Size: Word): Integer;
var
  p: Pointer;
  i: Cardinal;
begin
  p:=@Buf;
  Result:= 0;
  while Size > 0 do
  begin
      if not WriteFile(Comfile, p^, 1, i, nil) then
        exit;
        Inc(Result, i);
        Inc(Integer(p));
        Dec(Size);
        Application.ProcessMessages;
  end;
end;
-------------------------------------------------------

Выходит "Ошибка передачи пакета". Мне кажется не работает из-за того, что при переходе в функцию WritePort по дебагу Buf не имеет значения.

Вопрос. Что я делаю не так? Почему вычисляется размер, а сам массив не передается???
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
06.10.2023, 12:00
Цитата Сообщение от OdinNastya Посмотреть сообщение
Вопрос. Что я делаю не так? Почему вычисляется размер, а сам массив не передается???
Отвечу здесь.
Цитата Сообщение от OdinNastya Посмотреть сообщение
Pascal
1
if not WriteFile(Comfile, p^, 1, i, nil) then
Здесь всегда передается только первый байт буфера вне зависимости от Size.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2023, 12:00

Графика для сом-порта
Ребят помогите накидать красивую графику для сом-порта, можно самую обычную) пожалуйста

Как бы вы сделали обмен между потоками для СОМ порта
Добрый день Всем. Собственно сам вопрос как лучше сделать синхронизацию/обмен между потоками одного приложения. Знаю что можно через...

Чтение и обработка данных из СОМ порта
Добрый день! Есть программа для работы с внешним устройством через СОМ порт. Данные у меня она отправляет на ура, а вот с чтением у меня...

Чтение/запись с COM - порта
Всем доброго времени суток. Занимаюсь практикой от предприятия в институте. Задание по реализации симметричного шифрования при передаче...

Чтение/запись ком-порта
По нажатию кнопки открываю и настраиваю порт, также создаю поток для чтения void CterminalDlg::OnBnClickedConnect() { int error; ...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru