📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, TComm1;
type
TForm1 = class(TForm)
rdCOM: TRadioGroup;
Button4: TButton;
Button2: TButton;
Button3: TButton;
Comm1: TComm;
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
txtSpeed: TEdit;
txtUnit: TEdit;
txtType: TEdit;
txtBat: TEdit;
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button4Click(Sender: TObject);
begin
//确定使用的通信端口号码
if rdCOM.ItemIndex =0 then
Comm1.CommPort := pnCOM1
else
Comm1.CommPort := pnCOM2;
//打开通信端口
Comm1.PortOpen := True;
Button3.Enabled := True;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled ;
if Timer1.Enabled then
Button3.Caption := '停止取值'
else
Button3.Caption := '读取数值';
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
DataByte:array of Byte;
Count,i:Integer;
DataPT:PByte;
Diver:LongInt;
Speed:Single;
begin
Count := Comm1.ReadInputByte(DataPT);
SetLength(DataByte,Count);
Dec(DataPT);
for i:=0 to Count-1 do
begin
Inc(DataPT);
DataByte[i] := DataPT^;
end;
//以下开始检查各字节的状态
for i:=0 to Count-1 do
if Ord(DataByte[i])=13 then
begin
//第二个Byte决定小数点位置
if Ord(DataByte[i+1])=0 then Diver := 1;
if Ord(DataByte[i+1])=1 then Diver := 10;
if Ord(DataByte[i+1])=2 then Diver := 100;
if Ord(DataByte[i+1])=4 then Diver := 1000;
//接着检查电池状态
if (DataByte[i+2] And $1)=$1 then
txtBat.Text := 'LOW'
else
txtBat.Text := 'OK';
//以下检查单位
if (DataByte[i+3] And $1)=$1 then
txtUnit.Text := 'RPM';
if (DataByte[i+3] And $2)=$2 then
txtUnit.Text := 'm/min';
if (DataByte[i+3] And $4)=$4 then
txtUnit.Text := 'ft/min';
if (DataByte[i+3] And $8)=$8 then
txtUnit.Text := 'yd/min';
if (DataByte[i+3] And $10)=$10 then
txtUnit.Text := 'RPS';
//以下检查方法
if (DataByte[i+4] And $1)=$1 then
txtType.Text := 'Normal';
if (DataByte[i+4] And $2)=$2 then
txtType.Text := 'MAX';
if (DataByte[i+4] And $4)=$4 then
txtType.Text := 'MIN';
if (DataByte[i+4] And $8)=$8 then
txtType.Text := 'AVERAGE';
//以下计算转速
Speed := Ord(DataByte[i+6]) + 256*Ord(DataByte[i+7])
+ 256*256*Ord(DataByte[i+8]) + 256*256*256*Ord(DataByte[i+9]);
Speed := Speed/Diver; //除上分母
txtSpeed.Text := FormatFloat('0',Speed);
exit;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//关闭程序
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -