| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖
标题:求高手一个串口通信的程序!
只看楼主 加入收藏
lcf1989
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-1
收藏
 问题点数:0 回复次数:2 
求高手一个串口通信的程序!
想用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上显示从称重上获得数据。
求高手赐教!!!!
搜索更多相关主题的帖子: 软件 
2011-05-01 12:16
lcf1989
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-1
收藏
得分:0 
这是其中实现的getstring函数
function GetString(str: string): string;
var
  mLength : integer;
  i : integer;
  str1 : string;
  loca : integer;
begin
    if str <> '' then
    begin
        mLength := length(str);
        loca := IndexOf(str,'k');
        if (loca > 0) and (loca < mLength) then
        begin
        for i := loca - 8 to loca - 1 do
        begin
          if (str[i] <> ' ') then
            str1 := str1 + str[i];
        end;
        if str1[1] = '+' then
          str1 := Copy(str1,2,20);
        end
        else
          str1 := '';
        result := str1;
    end;
end;

function IndexOf(const str: string; const s:string):Integer;
var
  loca : integer;
begin
  loca := 1;
  while (loca <= length(str)) and (CompareStr(copy(str,loca,length(s)), s) <> 0) do
    inc(loca);

  if loca > length(str) then
    result := 0;
  result := loca;
end;
2011-05-01 12:26
lcf1989
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-1
收藏
得分:0 
自己解决了,结贴!
2011-05-01 16:36
快速回复:求高手一个串口通信的程序!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024947 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved