📄 unit3.~pas
字号:
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, OleCtrls, MSCommLib_TLB, Mask,
ComCtrls;
type
TInit_Machine = class(TForm)
MSComm: TMSComm;
GroupBox1: TGroupBox;
Label6: TLabel;
Port_Name: TComboBox;
Baud_Rate: TComboBox;
Label7: TLabel;
Label8: TLabel;
Data_Bit: TComboBox;
Check_Bit: TComboBox;
Label9: TLabel;
Label10: TLabel;
Stop_Bit: TComboBox;
open_click: TBitBtn;
close_click: TBitBtn;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
HeaderControl1: THeaderControl;
GroupBox2: TGroupBox;
Label1: TLabel;
SETADDR: TEdit;
Button3: TButton;
Button4: TButton;
GroupBox3: TGroupBox;
Label2: TLabel;
IP1: TEdit;
IP2: TEdit;
IP3: TEdit;
IP4: TEdit;
Label4: TLabel;
PORTNUM: TEdit;
Button5: TButton;
Button6: TButton;
GroupBox4: TGroupBox;
Label13: TLabel;
APNSET: TEdit;
Button7: TButton;
Button8: TButton;
initok_click: TButton;
Label3: TLabel;
time_initer: TEdit;
Label5: TLabel;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
memo_text: TMemo;
DTU_CLICK: TButton;
RecMemo_txt: TMemo;
GroupBox7: TGroupBox;
GroupBox8: TGroupBox;
Label11: TLabel;
center_list: TComboBox;
setcent: TButton;
Label12: TLabel;
phon1: TEdit;
Label14: TLabel;
phon2: TEdit;
Label15: TLabel;
phon3: TEdit;
Label16: TLabel;
phon4: TEdit;
phon5: TEdit;
phon6: TEdit;
phon7: TEdit;
GroupBox9: TGroupBox;
GroupBox10: TGroupBox;
sms_content: TMemo;
send_sms: TButton;
Label17: TLabel;
sms_txt: TMemo;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
phon8: TEdit;
Label22: TLabel;
phone_set: TButton;
GroupBox11: TGroupBox;
Edit1: TEdit;
Label23: TLabel;
Label24: TLabel;
Edit2: TEdit;
Label25: TLabel;
Edit3: TEdit;
sup_set: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure Close(Sender: TObject; var Action: TCloseAction);
procedure open_clickClick(Sender: TObject);
procedure close_clickClick(Sender: TObject);
procedure serreci(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DTU_CLICKClick(Sender: TObject);
procedure send_smsClick(Sender: TObject);
procedure phone_setClick(Sender: TObject);
procedure setcentClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Init_Machine: TInit_Machine;
implementation
uses MyFunction;
{$R *.dfm}
procedure TInit_Machine.BitBtn1Click(Sender: TObject);
var
mByteAry: array of byte;
Send_len: byte;
begin
//构造上位机报文
Send_len:=0;
SetLength(mByteAry,100);
mByteAry[Send_len] := 36; //上下行标志
Send_len := Send_len+1;
mByteAry[Send_len] := 36; //命令字
mByteAry[Send_len] := $6; //上下行标志
Send_len := Send_len+1;
mByteAry[Send_len] := $32; //命令字
mByteAry[Send_len] := $36; //上下行标志
Send_len := Send_len+1;
mByteAry[Send_len] := $36; //命令字
mByteAry[Send_len] := $36; //上下行标志
Send_len := Send_len+1;
mByteAry[Send_len] := $36; //命令字
MSComm.Output :=mByteAry; //发送命令
end;
procedure TInit_Machine.Close(Sender: TObject; var Action: TCloseAction);
begin
if MSComm.PortOpen = True then
begin
MSComm.PortOpen := False;
open_click.Enabled:=True;
close_click.Enabled:= False;
end;
end;
procedure TInit_Machine.open_clickClick(Sender: TObject);
var
return_vale:byte;
begin
Port := Port_Name.Text;
Speed:=Baud_Rate.Text;
DataBit:=Data_Bit.Text;
CheckBit:=Check_Bit.Text;
StopBit:=Stop_Bit.Text;
//打开串口
if MSComm.PortOpen = False then
begin
try
MSComm.CommPort := ComStrToInt(Port);
MSComm.Settings := Speed + ','
+ CheckBit[1] + ','
+ DataBit + ','
+ StopBit;
MSComm.InputMode:= 1; //0为字符形式,1为二进制形式
MSComm.RThreshold:=1; //接收多少字符去响应接收
//MSComm.InBufferSize:=3;
MSComm.PortOpen := True;
close_click.Enabled:=True;
open_click.Enabled:= False;
except
return_vale:=MessageDlg('串口不能打开,请检查串口的配置',mtInformation,[mbOk,mbCancel],0);
if return_vale=1 then
// Init_Rfcard.Close(Sender);
ShowMessage('串口不能打开,请检查串口的配置!');
Exit;
end;
end;
end;
procedure TInit_Machine.close_clickClick(Sender: TObject);
begin
MSComm.PortOpen := False;
close_click.Enabled:=False;
open_click.Enabled:=True;
end;
procedure TInit_Machine.serreci(Sender: TObject);
var
recevi_str:array of byte;
temp_str:array of byte;
stringdata:string;
real_len,len:byte;
check_sum:byte;
Recive_len,i,checksum:byte;
data:OleVariant;
begin
sleep(120);
real_len:= MSComm.InBufferCount;
if real_len<5 then
exit;
data := MSComm.Input;
MSComm.Input;//请空接收缓冲区
SetLength(recevi_str,real_len+1);
for i:=0 to real_len-1 do
begin
try
recevi_str[i]:=TVarData(data[i]).VByte;
except
Exit;
end;
end;
checksum := CalCheck(recevi_str,real_len); //计算报文的校验位
if (checksum<>0) then
ShowMessage('校验和错误,请重新发送')
else
case recevi_str[3] of
$01: //设备地址
begin
end;
$02: //ip port
begin
if (recevi_str[4]) = $00 then
ShowMessage('设置成功')
else
ShowMessage('设置失败');
end;
$50: //接收到下位机应答
begin
if (recevi_str[4]) = $00 then
ShowMessage('传送成功')
else
ShowMessage('传送失败');
end;
$51: //接收到gprs数据
begin
len:= recevi_str[2]-5; //长度 -包头包尾5
SetLength(temp_str,len+1);
for i:= 0 to len-1 do
begin
temp_str[i]:=TVarData(data[i+4]).VByte;
stringdata:=stringdata + char(temp_str[i]);
end;
RecMemo_txt.Lines.add(stringdata);
end;
$A0: //设置接收短信手机号
begin
if (recevi_str[4]) = $00 then
ShowMessage('设置成功')
else
ShowMessage('设置失败');
end;
$A1: //设置短信中心
begin
if (recevi_str[4]) = $00 then
ShowMessage('设置成功')
else
ShowMessage('设置失败');
end;
$80: //短信发送应答
begin
if (recevi_str[4]) = $00 then
ShowMessage('发送成功')
else
ShowMessage('发送失败');
end;
$81: //收到短信
begin
len:= recevi_str[2]-5; //长度 -包头包尾5
SetLength(temp_str,len+1);
for i:= 0 to len-1 do
begin
temp_str[i]:=TVarData(data[i+4]).VByte;
stringdata:=stringdata + char(temp_str[i]);
end;
sms_txt.Lines.add(stringdata);
end;
$88:
begin
// ShowMessage('设备PPP链路成功');
Button3.Enabled:=True;
Button5.Enabled:=True;
DTU_CLICK.Enabled:=True;
end;
end;
end;
procedure TInit_Machine.Button3Click(Sender: TObject);
var
len,i:byte;
mByteAry: array of byte;
buffer:pchar;
Send_len:byte;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -