⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit3.pas

📁 西门子与计算机通讯程序包括源代码 程序说明 可以进行时时数据采集记录
💻 PAS
字号:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, ValEdit,Prodave;

type
  TForm3 = class(TForm)
    Panel1: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel2: TPanel;
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    RichEdit2: TRichEdit;
    Panel6: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button6: TButton;
    RadioGroup2: TRadioGroup;
    Edit4: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit5: TEdit;
    RichEdit1: TRichEdit;
    Edit6: TEdit;
    Label6: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

uses main;
var
 data1:array[0..255] of byte;//简单读写暂存区
 res:integer;
{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
var
tt:string;
aa,sss:integer;

begin

sss:=0;
SetLength (tt, 100);

if  commustatus<>1 then
 begin
   MessageBox(Handle, '通讯未打开', '错误', MB_OK + MB_ICONINFORMATION + MB_TOPMOST) ;
   exit;
 end;
if ((radiogroup1.ItemIndex <0) or (radiogroup1.ItemIndex> 5))then
  begin
  messagebox(null,'error','未选择内存类型',MB_OK	) ;
  exit;
  end  ;
if ((radiogroup2.ItemIndex <0 )or (radiogroup2.ItemIndex> 3))then
   begin
    messagebox(null,'error','未选择工作模式',MB_OK	) ;
    exit;
   end;


 //数据读取
case radiogroup1.ItemIndex of
  0:// 输入
  begin
    tt:='输入 byte' ;
    res:=e_Field_Read(strtoint(edit2.Text), strtoint(edit3.Text), data1) ;
  end ;
  1: //输出
    begin
     tt:='输出  byte ';
     res:=a_Field_Read(strtoint(edit2.Text), strtoint(edit3.Text), data1) ;
    end;
  2:   //M区
   begin
     tt:='M区  byte';
    res:=m_Field_Read(strtoint(edit2.Text), strtoint(edit3.Text), data1) ;
   end ;
  3: //  DB块
  begin
    aa:= strtoint(edit3.Text) ;

    tt:='DB块 word' ;
    res:=db_Read(strtoint(edit1.Text),strtoint(edit2.Text),aa,data1) ;
  end;
  4:  //定时器
  begin
  aa:= strtoint(edit5.Text) ;
     tt:='定时器 word';
     res:=t_Field_Read(strtoint(edit2.Text),strtoint(edit3.Text), data1) ;
  end;
  5: //计数器
  begin
    tt:='计数器 word';
    res:=z_Field_Read(strtoint(edit2.Text), strtoint(edit3.Text), data1) ;
  end;
else
  messagebox(null,'error','错误代号一',MB_OK	) ;
end;
 if res=0 then
 begin
  form1.statusbar1.Panels[2].Text:='ok';
  tt:=tt+'正常读取';
 end;
 //报警显示
if res<>0 then
     begin
       Prodave.Error_Message(res, ErrMess);
       form1. statusbar1.Panels[2].Text:=errmess;
       exit;
     end ;

//读取内容显示  ;
case radiogroup2.ItemIndex of
  0://  十进制
     begin
  RichEdit2.Text:=RichEdit2.Text+'十进制显示'+tt+#13#10;
 // RichEdit2.SelAttributes.Color:=  clRed;
  RichEdit2.Font.Color := clRed;

  if  checkbox1.Checked=false then
      while( (sss< strtoint(edit3.Text))and (sss < 200) ) do
          begin

            RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit3.Text)+sss)+'..'+ format('%.2d',[data1[sss]])+#13#10;
            sss:=sss+1;
          end
    else
     while( (sss< strtoint(edit3.Text)*2)and (sss < 100) ) do
          begin
               RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit3.Text)+sss div 2)+'..'+ format('%.2d',[data1[sss]]);
               sss:=sss+1;
               RichEdit2.Text:= RichEdit2.Text+format('%.2d',[data1[sss]])+#13#10;
               sss:=sss+1;
          end ;

    if checkbox2.Checked=true then
      SendMessage(RichEdit2.Handle,EM_SCROLL,SB_BOTTOM,0);
   end;
  1: //  十六进制
     begin

      RichEdit2.Text:=RichEdit2.Text+'十六进制显示 '+tt+#13#10;
      if  checkbox1.Checked=false then
        while( (sss< (strtoint(edit3.Text)))  and (sss < 200) ) do
            begin
              RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit2.Text)+sss)+'..'+ format('%.2x',[data1[sss]])+#13#10;
              sss:=sss+1;
            end
      else
         while( (sss< strtoint(edit3.Text)*2)and (sss < 100) ) do
            begin
             //   RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit6.Text)+sss)+'..'+ format('%4x',[(pinteger(@data1[sss*2]))^])+#13#10;
               RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit2.Text)+sss div 2)+'..'+ format('%.2x',[data1[sss]]);
               sss:=sss+1;
               RichEdit2.Text:= RichEdit2.Text+format('%.2x',[data1[sss]])+#13#10;
               sss:=sss+1;
            end;
    if checkbox2.Checked=true then
      SendMessage(RichEdit2.Handle,EM_SCROLL,SB_BOTTOM,0);
  end;
  2:// 二进制
  
    begin

      RichEdit2.Text:=RichEdit2.Text+'二进制显示 '+tt+#13#10;
      if  checkbox1.Checked=false then
        while( (sss< (strtoint(edit3.Text)))  and (sss < 200) ) do
            begin
                RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit2.Text)+sss)+'..'+ format('%.2x',[data1[sss]])+#13#10;
                sss:=sss+1;
            end
      else
         while( (sss< strtoint(edit3.Text)*2)and (sss < 100) ) do
            begin
            
               RichEdit2.Text:=RichEdit2.Text+inttostr(strtoint(edit2.Text)+sss div 2)+'..'+ format('%.2x',[data1[sss]]);
               sss:=sss+1;
               RichEdit2.Text:= RichEdit2.Text+format('%.2x',[data1[sss]])+#13#10;
               sss:=sss+1;
            end;
    if checkbox2.Checked=true then
      SendMessage(RichEdit2.Handle,EM_SCROLL,SB_BOTTOM,0);
  end;
  else
  messagebox(null,'error','错误代号二',MB_OK	) ;
end;


 
end;

procedure TForm3.Button6Click(Sender: TObject);
var
tt:string;

begin


SetLength (tt, 100);

if  commustatus<>1 then
 begin
   MessageBox(Handle, '通讯未打开', '错误', MB_OK + MB_ICONINFORMATION + MB_TOPMOST) ;
   exit;
 end;
if ((radiogroup1.ItemIndex <0) or (radiogroup1.ItemIndex> 5))then
  begin
  messagebox(null,'error','未选择内存类型',MB_OK	) ;
  exit;
  end  ;
if ((radiogroup2.ItemIndex <0 )or (radiogroup2.ItemIndex> 3))then
   begin
    messagebox(null,'error','未选择工作模式',MB_OK	) ;
    exit;
   end;
 
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
RichEdit2.Clear;
end;

procedure TForm3.Button3Click(Sender: TObject);
begin
if(savedialog1.Execute)then
begin
 RichEdit2.Lines.SaveToFile(savedialog1.FileName);
end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -