Поиск сообщества
Показаны результаты для тегов 'com порт'.
Найдено: 1 результат
-
Пытаюсь считывать данные с ком порта (RS232). При считывании иногда происходит сдвиг строки на байт, из-за чего происходят ошибки при обработке поступающих данных: 2552525017500200333610166057255 25250175002001410166053255252 501750020034361016615725525250 1750020024101661532552525017 50020036361016635725525250175 002004410166353255252501750 02004036101651582552525017500 200841016515425525250175002 Тогда как правильно должно быть, чтобы каждая строка начиналась на 25. В сторонних прогах работы с ком портом всегда так и есть. В то же время, иногда после переключения ком порта считывание проиходит правильно, поэтому думаю, что ошибка может быть в настройках соединения с портом или задержках. Вот параметры работы ком порта, от изготовителя устройства: Вот как я настраиваю порт в программе: procedure TForm1.Button1Click(Sender: TObject); begin ComFile:=CreateFile('com2',GENERIC_READ,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY,0); if ComFile=INVALID_HANDLE_VALUE then begin ShowMessage('Не удалось открыть порт '); exit; end; SetupComm(ComFile,18,18); GetCommState(ComFile,DCB); with DCB do begin BaudRate:=57600; ByteSize:=8; Parity:=NoParity; StopBits:=OneStopBit; end; if not SetCommState(ComFile,DCB) then begin ShowMessage('Порт не настроен'); CloseHandle(ComFile); exit; end; StartComThread; end; procedure TCommThread.Execute; begin Repeat QueryPort; Sleep(100); Until Terminated; end; rocedure TCommThread.QueryPort; var MyBuff:array [0..17] of Char; i: byte; Begin all_buf:=''; FillChar(MyBuff,SizeOf(MyBuff),#0); ReadFile(ComFile,MyBuff,SizeOf(MyBuff),BytesRead,Nil); If BytesRead>0 Then Begin for i:=0 to length(Mybuff)-1 do begin all_buf:=all_buf+inttostr(ord(MyBuff[i])); end; // Form1.Memo1.Lines.Add(all_buf); End; end; Где может быть ошибка?