Показать сообщение отдельно
  #7  
Старый 16.04.2015, 14:58
sforce sforce вне форума
Прохожий
 
Регистрация: 30.03.2015
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, вроде отсылает. Теперь следующая проблема)
Устройство, с которым связан компьютер через COM отправляет ответ. И программа его принимает, правда почему-то стабильно через раз (то принимает - то не принимает). НО я так понимаю не может корректно отобразить. Потому что количество принятых байт увеличивается, а memo пополняется лишь одним пробелом. С другим устройством, где передавались данные обычной строкой и без запросов, все работало нормально.
Код такой:
Код:
Procedure TCommThread.Execute;
Begin
Repeat
QueryPort;//процедура опроса порта будет производиться пока поток не будет прекращен
Until Terminated;
End;

Procedure TCommThread.QueryPort;
Var
MyBuff:Array[0..1023] Of Char;//буфер для чтения данных
ByteReaded:cardinal; //количество считанных байт
Str:String;         //вспомогательная строка
Status:DWord;       //статус устройства (модема)
Begin
//получим статус COM-порта устройства (модема)
If Not GetCommModemStatus(hPort,Status) Then
Begin {ошибка при получении статуса модема}
SysErrorMessage(GetLastError);
Exit;
End;

//читаем буфер из Com-порта

FillChar(MyBuff,SizeOf(MyBuff),#0);
If Not ReadFile(hPort,MyBuff,SizeOf(MyBuff),ByteReaded,Nil) Then
Begin
SysErrorMessage(GetLastError);
Exit;
End;

If ByteReaded>0 Then
Begin

ReciveBytes:=ReciveBytes+ByteReaded;
Str:=String(MyBuff);
fmMain.Memo1.Text:=fmMain.Memo1.Text+ Str;
fmMain.lbRecv.Caption:='Принято: '+IntToStr(ReciveBytes)+' байт...';
End;
End;
В работе с байтами не очень силен, да и с портами в целом тоже. Так что очень нуждаюсь в помощи.
Возможно данная информация поможет:
Цитата:
Ответ устройства имеет переменную длину и содержит контрольную сумму. Контрольная сумма считается как сумма всех последующих за ней байт по модулю 32768, включая символ EOF, и передается полубайтами (с прибавлением к каждому полубайту 0x30, чтобы получился ASCII-символ), начиная с младшего полубайта.
Ответить с цитированием