求高手一个串口通信的程序!
想用Delphi做一个串口通信程序,用来称重系统的软件。已经把 打开接收串口、开始接收串口数据、关闭接收串口、接收串口数据的线程执行体的程序实现了,
就是在用MaskEdit显示时只是一闪而过,每次都是这样,很苦恼!
上图
procedure TfrmMain.WMCOMMNOTIFY(var Message: TMessage);// 数据接收消息处理函数
var
CommState: ComStat;
dwNumberOfBytesRead: Dword;
ErrorFlag: Dword;
InputBuffer: array[0..1024] of Char;
i: Integer;
iPos: Integer;
s: string;
begin
if not ClearCommError(hRecv, ErrorFlag, @CommState) then
begin
MessageBox(0, 'ClearCommError !', 'Notice', MB_OK);
PurgeComm(hRecv, Purge_Rxabort or Purge_Rxclear);
Exit;
end;
if (CommState.cbInQue > 0) then
begin
fillchar(InputBuffer, CommState.cbInQue, #0);
// 接收通讯数据
if (not ReadFile(hRecv, InputBuffer, CommState.cbInQue,
dwNumberOfBytesRead, @Read_os)) then
begin
ErrorFlag := GetLastError();
if (ErrorFlag <> 0) and (ErrorFlag <> ERROR_IO_PENDING) then
begin
Receive := False;
raise Exception.Create('读串口数据出错!');
end
else
begin
WaitForSingleObject(hRecv, INFINITE); // 等待操作完成
GetOverlappedResult(hRecv, Read_os,
dwNumberOfBytesRead, False);
end;
end;
if dwNumberOfBytesRead > 0 then
begin
Read_Os.Offset := Read_Os.Offset + dwNumberOfBytesRead;
// 处理接收的数据
InputBuffer[dwNumberOfBytesRead]:=#0;
iPos:= dwNumberOfBytesRead;
mmoRecv.Lines.Add('接收到:'+intToStr(dwNumberOfBytesRead)+'个字节的数据');
mmoRecv.Lines.Add('字符显示方式:'+strPas(inputBuffer));
s:='';
for i:= 0 to iPos-1 do
begin
s:=s+' '+ inttoHex(ord(inputBuffer[i]),2);
end;
mmoRecv.Lines.Add( '十六进制显示方式:'+s+#13#10);
recvString:=Copy(inputBuffer,1,CommState.cbInQue);
MaskEdit_G.Text:=Getstring(recvString);
end;
end;
// 允许发送下一个WM_COMMNOTIFY消息
SetEvent(Post_Event);
end;
红色的部分是我用来在MaskEdit_G上显示从称重上获得数据。
求高手赐教!!!!