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

📄 umail.pas

📁 台达PLC通信用
💻 PAS
字号:
unit Umail;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons, iComponent, iVCLComponent,
  iCustomComponent, iLed, iLedRound,Math,uPublic;

type
  TfrmMain = class(TForm)
    TimerPLCRdStat: TTimer;
    Panel1: TPanel;
    Panel2: TPanel;
    shpIn1: TShape;
    shpIn2: TShape;
    shpIn3: TShape;
    shpIn4: TShape;
    shpIn5: TShape;
    shpIn6: TShape;
    shpIn7: TShape;
    shpIn8: TShape;
    shpIn9: TShape;
    shpIn10: TShape;
    shpIn11: TShape;
    shpIn12: TShape;
    shpIn13: TShape;
    shpIn14: TShape;
    shpIn15: TShape;
    shpIn16: TShape;
    Label1: TLabel;
    btnOut1: TSpeedButton;
    btnOut2: TSpeedButton;
    btnOut3: TSpeedButton;
    btnOut4: TSpeedButton;
    btnOut5: TSpeedButton;
    btnOut6: TSpeedButton;
    btnOut7: TSpeedButton;
    btnOut8: TSpeedButton;
    ledOut1: TiLedRound;
    ledOut2: TiLedRound;
    ledOut3: TiLedRound;
    ledOut4: TiLedRound;
    ledOut5: TiLedRound;
    ledOut6: TiLedRound;
    ledOut7: TiLedRound;
    ledOut8: TiLedRound;
    Label2: TLabel;
    Label3: TLabel;
    edtAdr: TEdit;
    Label4: TLabel;
    SpeedButton1: TSpeedButton;
    edtValue: TEdit;
    Label5: TLabel;
    btnRun: TSpeedButton;
    btnStop: TSpeedButton;
    SpeedButton2: TSpeedButton;
    Memo1: TMemo;
    SpeedButton3: TSpeedButton;
    btnReadM: TSpeedButton;
    edtDAddr: TEdit;
    SpeedButton4: TSpeedButton;
    edtDValue: TEdit;
    D: TLabel;
    procedure FormShow(Sender: TObject);
    procedure btnOut1Click(Sender: TObject);
    procedure TimerPLCRdStatTimer(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure btnRunClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure btnReadMClick(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure InputStat();
    procedure OutputStat();
  end;

var
    frmMain: TfrmMain;
    G_rPort:TPortInfo;

implementation

uses  UDeltaPLC;

{$R *.dfm}

procedure TfrmMain.FormShow(Sender: TObject);

begin
    G_rPort.iPort:=1;
    G_rPort.iBaud:=9600;
    G_rPort.iDataBit:=7;
    G_rPort.iStopBit:=1;
    G_rPort.sParity:='偶校验';
    OpenPort(G_rPort);
    kmtPLC:=TKMTPLC.Create(G_rPort.iPort);
//    kmtPLC.InitPLC();
//    TimerPLCRdStat.Enabled:=true;
end;

procedure TfrmMain.btnOut1Click(Sender: TObject);
var
   sCmd:String;
begin
   kmtPlc.SetOutputStat((sender as TSpeedButton).Tag,not kmtPlc.bOutputStat[(sender as TSpeedButton).Tag]);
end;

Function mypower(n,m:Integer):Integer;
var
    i,iRes:Integer;
Begin
    iRes:=1;
    for i:=1 to m do
        iRes:=iRes*n;
    Result:=iRes;
End;
procedure TfrmMain.OutputStat();
var
    ledOut:array [1..8] of TiLedRound;
    i:Integer;
Begin
    ledOut[1]:=ledOut1;
    ledOut[2]:=ledOut2;
    ledOut[3]:=ledOut3;
    ledOut[4]:=ledOut4;
    ledOut[5]:=ledOut5;
    ledOut[6]:=ledOut6;
    ledOut[7]:=ledOut7;
    ledOut[8]:=ledOut8;
    for i:=1 to 8 do
    Begin
        ledOut[i].Active:=kmtPlc.bOutputStat[i];
    end;
End;
procedure TfrmMain.InputStat();
var
    ShpIn:array [1..16] of TShape;
    i:Integer;
Begin
    ShpIn[1]:=ShpIn1;
    ShpIn[2]:=ShpIn2;
    ShpIn[3]:=ShpIn3;
    ShpIn[4]:=ShpIn4;
    ShpIn[5]:=ShpIn5;
    ShpIn[6]:=ShpIn6;
    ShpIn[7]:=ShpIn7;
    ShpIn[8]:=ShpIn8;
    ShpIn[9]:=ShpIn9;
    ShpIn[10]:=ShpIn10;
    ShpIn[11]:=ShpIn11;
    ShpIn[12]:=ShpIn12;
    ShpIn[13]:=ShpIn13;
    ShpIn[14]:=ShpIn14;
    ShpIn[15]:=ShpIn15;
    ShpIn[16]:=ShpIn16;
    for i:=1 to 16 do
    Begin
        if kmtPlc.bInputStat[i] then
        Begin
            ShpIn[i].Brush.Color:=clRed
        End
        else
        Begin
            ShpIn[i].Brush.Color:=clWhite;
        End;
    end;


End;


procedure TfrmMain.TimerPLCRdStatTimer(Sender: TObject);
begin
     InputStat();
     OutputStat();
end;

procedure TfrmMain.SpeedButton1Click(Sender: TObject);
var
    sStr:String;
begin
    kmtPLC.SendData(edtAdr.Text);   //取输出状态
    sStr:=kmtPLC.ReadResFromPort();
    if sStr<>'' then
    Begin
        edtValue.Text:=sStr;
    End;
end;

procedure TfrmMain.btnRunClick(Sender: TObject);
var
    sStr:String;
begin
    kmtPLC.SendData('01050C30FF00');   //取输出状态
    sStr:=kmtPLC.ReadResFromPort();
end;

procedure TfrmMain.btnStopClick(Sender: TObject);
var
    sStr:String;
begin
    kmtPLC.SendData('01050C300000');   //取输出状态
    sStr:=kmtPLC.ReadResFromPort();
end;

procedure TfrmMain.SpeedButton2Click(Sender: TObject);
begin
    kmtPLC.tmReadStat.Enabled:=not kmtPLC.tmReadStat.Enabled;
end;

procedure TfrmMain.SpeedButton3Click(Sender: TObject);
var
    sStr:String;
    i:Integer;
begin
    for i:= 0 to 1311 do
    Begin
      kmtPLC.SendData('0103'+IntToHex(i+$1000,4)+'0001');   //取输出状态
      sStr:=kmtPLC.ReadResFromPort();
      if sStr<>'' then
      Begin
        memo1.Lines.Add('D'+IntToHex(i,4)+'-'+FormatFloat('0000',i)+'-'+Copy(sStr,1,Length(sStr)-2));
      End;
    End;
end;

procedure TfrmMain.btnReadMClick(Sender: TObject);
var
    sStr:String;
    i:Integer;
begin
    for i:= 0 to 1279 do
    Begin
      kmtPLC.SendData('0102'+IntToHex(i+$800,4)+'0001');   //取输出状态
      sStr:=kmtPLC.ReadResFromPort();
      if sStr<>'' then
      Begin
        memo1.Lines.Add('M'+IntToHex(i,4)+'-'+FormatFloat('0000',i)+'-'+Copy(sStr,1,Length(sStr)-2));
      End;
    End;
end;

procedure TfrmMain.SpeedButton4Click(Sender: TObject);
var
    sStr:String;
begin
  kmtPLC.SendData('0103'+IntToHex(StrToInt(edtDAddr.Text)+$1000,4)+'0001');
  sStr:=kmtPLC.ReadResFromPort();
  if sStr<>'' then
  Begin
      edtDValue.Text:=sStr;
  End;
end;

end.

⌨️ 快捷键说明

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