发布于 2011-08-20 13:20:37
5楼
Prodave:用于你在自己的VB等软件中来读取PLC的数据(DLL方式);很方便的.我试过用PC机连接S7-318读连续250个字节的时间几乎为几个ms.
方法:
先安装好该软件,将在系统下产生一个DLL文件.然后在你的程序中调用即可.下例为DELPHI中使用的一个实例(测试用的)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ProdaveConnect;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Button5: TButton;
Edit11: TEdit;
Edit12: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Type plcadrtype = record
adr :Byte;
SEGMENTID:Byte;
SLOTNO : Byte ;
RACKNO : Byte ;
End ;
var
plcadr :array[0..5] of plcadrtype;
res,amount: longint;
buffer : array[0..255] of byte;
plc_adr_table : array [0..15] of byte;
function Load_tool( no:Byte; name: PChar ; adr: PChar): longint;stdcall;
external 'W95_s7.dll' name 'load_tool';
function db_read( dbno:Integer;dwno:Integer;var amount: Integer;
var buffer):Integer;stdcall;external 'W95_s7.dll' name 'db_read';
function Unload_tool:Integer;stdcall;external 'W95_s7.dll' name 'unload_tool';
function as200_m_field_read (no:Integer;anzahl:Integer;var buffer):Integer;stdcall;
external 'W95_s7.dll' name 'as200_m_field_read';
function as200_ag_info (var buffer):Integer;stdcall;
external 'W95_s7.dll' name 'as200_ag_info';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
mname:array[0..255] of char;
i:integer;
c:char;
begin
plc_adr_table[0] := 2; {address}
plc_adr_table[1] := 0; {segment id}
plc_adr_table[2] := 2; {slotno}
plc_adr_table[3] := 0; {racktno}
plc_adr_table[4] := 0;
strcopy(mname,'S7ONLINE');
res := Load_tool( 1,addr(mname),addr(plc_adr_table[0]));
edit7.Text :=inttostr(res);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
res := Unload_tool;
edit7.Text :=inttostr(res);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
amount:=255;
res := db_read(1,0,amount,buffer);
edit5.Text :=inttostr(buffer[0]);
edit6.Text :=inttostr(buffer[1]);
edit8.Text :=inttostr(buffer[2]);
edit9.Text :=inttostr(buffer[3]);
edit7.Text :=inttohex(res,4);
end;
procedure TForm1.Button4Click(Sender: TObject);
var
c:char;
i:integer;
begin
res:=as200_m_field_read(0,2,buffer);
edit5.Text :=inttostr(buffer[0]);
edit6.Text :=inttostr(buffer[0]*256+buffer[1]);
edit8.Text :=inttostr(buffer[2]);
edit9.Text :=inttostr(buffer[3]);
edit7.Text :=inttohex(res,4);
edit9.Text :='';
edit11.Text :='';
edit12.Text :=inttostr(length(buffer)-1)+'/'+ inttostr(sizeof(buffer)-1);
for i :=0 to sizeof(buffer)-1 do
begin
edit11.Text :=edit11.Text +inttohex(buffer[i],2)+' ';
c:=char(buffer[i]);
edit9.Text :=edit9.text+c;
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
c:char;
i:integer;
begin
res:=as200_ag_info (buffer);
edit7.Text :=inttohex(res,4);
edit9.Text :=inttostr(res);
edit11.Text :='';
edit12.Text :=inttostr(length(buffer)-1)+'/'+ inttostr(sizeof(buffer)-1);
for i :=0 to length(buffer)-1 do
begin
edit11.Text :=edit11.Text +inttostr(buffer[i])+' ';
c:=char(buffer[i]);
edit9.Text :=edit9.text+c;
end;
//edit9.Text :=StrPas(addr(buffer[3]));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
res := Unload_tool;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
// Button1Click(sender);
end;
end.
广州立之力机械设备有限公司