本人做的第一个程序,多亏CSDN上面各位高手的帮助,虽然程序内容很简单,但是我很满足
unit COMM;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm, ExtCtrls, Buttons, ComCtrls, Menus;
type
TForm1 = class(TForm)
Com1: TComm;
Button4: TButton;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button5: TButton;
memo1: TMemo;
edRx: TEdit;
Memo2: TMemo;
Timer1: TTimer;
Label4: TLabel;
Label8: TLabel;
Button11: TButton;
Button10: TButton;
Button12: TButton;
Edit2: TEdit;
Button13: TButton;
Edit3: TEdit;
Button14: TButton;
Button15: TButton;
GroupBox2: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
ComboBox4: TComboBox;
ComboBox5: TComboBox;
edTx: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Label18: TLabel;
Button16: TButton;
Button7: TButton;
GroupBox3: TGroupBox;
Label14: TLabel;
Label15: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label16: TLabel;
Label17: TLabel;
Label19: TLabel;
Label20: TLabel;
Button8: TButton;
Button9: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Com1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word);
procedure Button3Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
procedure ComboBox3Change(Sender: TObject);
procedure ComboBox4Change(Sender: TObject);
procedure ComboBox5Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Edit5Change(Sender: TObject);
procedure Edit6Change(Sender: TObject);
procedure Edit7Change(Sender: TObject);
procedure Edit8Change(Sender: TObject);
procedure Edit9Change(Sender: TObject);
procedure Edit10Change(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
private
{ Private declarations }
FShowText:Boolean;
FRXNum:Integer;
FTXNum:Integer;
procedure ShowRX;
procedure ShowTX;
procedure SendString(const str:string);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
viewstring:string;
test: string;
i:integer;
rbuf,sbuf:array[0..16] of byte;
implementation
uses StrUtils;
const
minWidth=627;
minHeight=444;
idAbout =$F200;
{$R *.dfm}
//打开串口
procedure TForm1.Button1Click(Sender: TObject);
begin
Com1.StopComm;
Com1.StartComm;
Button1.Enabled :=False;
Button2.Enabled :=True;
end;
//关闭串口
procedure TForm1.Button2Click(Sender: TObject);
begin
Com1.StopComm;
Button2.Enabled := False;
Button1.Enabled := True;
end;
//自定义发送数据过程
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 9 do
begin
if not form1.com1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+' '+inttohex(sbuf[i],2)+'';
end;
viewstring:=viewstring;
form1.memo2.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then messagedlg('设备尚未就绪,请您检查设备是否连接或者串口是否打开!' ,mterror,[mbyes],0);
end;
procedure senddata4;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 8 do
begin
if not form1.com1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+' '+inttohex(sbuf[i],2)+'';
end;
viewstring:=viewstring;
form1.memo2.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then messagedlg('设备尚未就绪,请您检查设备是否连接或者串口是否打开!' ,mterror,[mbyes],0);
end;
//打开阀门
procedure TForm1.Button4Click(Sender: TObject);
Var
U:integer;
begin
test := '打开阀门';
if label15.caption='' then
begin
showmessage('请先抄表获取表号') ;
exit;
end
else
Form1.Memo1.Clear;
Form1.Memo2.Clear;
U:= strtoint('$'+trim( label15.caption)) + ($A6);
edit2.text:=IntToHex(U,2);
sbuf[1]:=byte($EA ); {帧头}
sbuf[2]:=byte($EA );
sbuf[3]:=byte($07 );
sbuf[4]:=Byte(StrToInt('$'+trim( label15.caption)) ); {命令号}
sbuf[5]:=byte($4F );
sbuf[6]:=byte($50 );
sbuf[7]:=byte($00 );
sbuf[8]:=byte(StrToInt('$'+trim( Edit2.text)) ); {校验和} // StrToInt('$'+String(U))
sbuf[9]:=byte($16 );
senddata;{调用发送函数}
form1.Button9.Click;
end;
procedure TForm1.Button10Click(Sender: TObject);
begin
Form1.Memo1.Clear;
Form1.Memo2.Clear;
sbuf[1]:=byte($EA); {帧头}
sbuf[2]:=byte($EA);
sbuf[3]:=byte($07);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($50);
sbuf[6]:=byte($46);
sbuf[7]:=byte($ff);
sbuf[8]:=byte($9d);
sbuf[9]:=byte($16);
senddata;{调用发送函数}
form1.Button9.Click;
end;
procedure TForm1.Button12Click(Sender: TObject);
Var
U:integer;
begin
if label15.caption= '' then
begin
showmessage('请先抄收水表表号') ;
exit;
end
else
test := '查询余额与阀门状态';
Form1.Memo1.Clear;
Form1.Memo2.Clear;
U:= strtoint('$'+trim( label15.caption)) + ($a2);
edit2.text:=IntToHex(U,2);
sbuf[1]:=byte($EA); {帧头}
sbuf[2]:=byte($EA);
sbuf[3]:=byte($07);
sbuf[4]:=Byte(StrToInt('$'+trim( label15.caption))); {命令号}
sbuf[5]:=byte($43);
sbuf[6]:=byte($58);
sbuf[7]:=byte($00);
sbuf[8]:=byte(StrToInt('$'+trim( Edit2.text)));
sbuf[9]:=byte($16);
senddata;{调用发送函数}
form1.Button9.Click;
end;
procedure TForm1.ShowRX;
begin
edRX.Text:='Rx:'+IntTostr(FRXNum);
end;
procedure TForm1.ShowTX;
begin
edTx.Text:='Tx:'+IntTostr(FTXNum);
end;
//定义 senddata3
procedure senddata3;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 15 do
begin
if not form1.com1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+' '+inttohex(sbuf[i],2)+'';
end;
viewstring:=viewstring;
form1.memo2.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then messagedlg('发送失败!' ,mterror,[mbyes],0);
end;
//设置时间命令
procedure TForm1.Button3Click(Sender: TObject);
var
U:integer;
begin
test := '设置时间命令';
Form1.Memo1.Clear;
Form1.Memo2.Clear;
U:= strtoint('$'+trim( Edit5.text))+strtoint('$'+trim( Edit6.text))+strtoint('$'+trim( Edit7.text)) + strtoint('$'+trim( Edit8.text))+strtoint('$'+trim( Edit9.text))+strtoint('$'+trim( label15.caption)) + strtoint('$'+trim( Edit10.text))+strtoint('$'+trim( Edit11.text))+($b8);
edit2.text:=IntToHex(U,2);
sbuf[1]:=byte($EA); {帧头}
sbuf[2]:=byte($EA);
sbuf[3]:=byte($0d);
sbuf[4]:=Byte(StrToInt('$'+trim( label15.caption))); {命令号}
sbuf[5]:=byte($58);
sbuf[6]:=byte($53);
sbuf[7]:=byte(StrToInt('$'+trim( Edit5.text)));//年
sbuf[8]:=byte(StrToInt('$'+trim( Edit6.text)));//月
sbuf[9]:=byte(StrToInt('$'+trim( Edit7.text))); //星期
sbuf[10]:=byte(StrToInt('$'+trim( Edit8.text))); //日期
sbuf[11]:=byte(StrToInt('$'+trim( Edit9.text))); //时
sbuf[12]:=byte(StrToInt('$'+trim( Edit10.text))); //分
sbuf[13]:=byte(StrToInt('$'+trim( Edit11.text))); //秒
sbuf[14]:=byte(StrToInt('$'+trim( Edit2.text))); //校验和
sbuf[15]:=byte($16);
senddata3;{调用发送函数}
Form1.Button9.Click;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Com1.StopComm;
Com1.CommName:=ComboBox1.Text;
Com1.StartComm;
end;
[解决办法]
恭喜,接分~
ps:代码太乱了,好好规整下~
[解决办法]
年青人有前途!!!
[解决办法]
加油加油..
[解决办法]
多去找些感兴趣程序的源码来看看,长进更快.
[解决办法]
最好重新排版一下
[解决办法]
要不要把所有的代码都贴上来啊。
好长哦。。
[解决办法]
看着好累...