-
Похожий контент
-
- 2 ответа
- 547 просмотров
-
- 2 ответа
- 920 просмотров
-
- 5 ответов
- 1 778 просмотров
-
Как сделать управление в TWebBrowser под Win как на мобильных платформах
От Yarpda,
- twebbrowser
- windows
- (и ещё 1 )
- 15 ответов
- 1 411 просмотр
-
- 0 ответов
- 954 просмотра
-
- 40 ответов
- 2 615 просмотров
-
- 10 ответов
- 1 835 просмотров
-
- 1 ответ
- 1 554 просмотра
-
- 0 ответов
- 1 345 просмотров
-
- 0 ответов
- 1 480 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Alex7wrt
Пытаюсь считывать данные с ком порта (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;
Где может быть ошибка?
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.