请DelPhi里手进来帮个忙,有关mscomm控件实现串口通讯问题(200分)

0

086

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi写的一段程序,它的主要作用是读取由电子汽车衡传输到计算机串行口的称重数据并在计算机上显示出来,利用的是mscomm控件实现串口通讯。电子汽车衡的称重仪表的串口通讯数据共有18个字符,具体的格式见下表:
字符序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
含 S 状 状 状 回 检
T 态 态 态 (5~10位)是 (11~16位)是皮重值 车 查
义 X 字 字 字 显 示 的 重 量 值 和
A B C
程序要求在一区域显示以上数据中的第5~第10位,即仪表的重量值,为实时采集并显示,利用计时器控件每500ms(或250ms)采集一次数据并显示。曾利用函数截取这段数据中第5~第10位数据并显示,但很不稳定,常会把其他位置的数据也显示,而丢掉应显示的重量数据

问题是:怎样才能稳定的显示重量值。

是帮我朋友问的,我不会Delphi:(
如能QQ联系我最好:8899997

unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, OleCtrls, MSCommLib_TLB, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
……
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
cominput:string; //定义接收串口数据变量
implementation
uses passdlg;
{$R *.dfm}
procedure TForm1.N41Click(Sender: TObject);
begin
mscomm1.PortOpen:=False; //关闭串口
Close; //关闭系统
end;
procedure TForm1.Timer1Timer(Sender: TObject); //定时器事件
begin
label2.Caption :=datetostr(date); //显示日期
label5.Caption :=timetostr(time); //显示时间
cominput:=MsComm1.Input; //将串口数据赋于变量
StaticText1.Caption :=cominput; //显示变量接收到的称重数据
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with MsComm1 do
begin //设定串口为com1
CommPort:=1;
Settings:='4800,e,7,2'; //串口通讯格式为波特率4800,校验,7位数据位,2位停止位
InputMode:=0; //接受数据格式为字符型
PortOpen:=true; //打开串口
end;
end;
 
我程序没什么问题,关键是异步通信协议的数字字符格式问题,导致了数据出错

 
顶部