1、OPC Server是用的simens net V8.2搭建的,已经能够和S7-314正常读写通讯。
2、delphi与OPC通讯参考的本论坛的帖子http://bbs.csdn.net/topics/330170980/
     在delhpi7.0环境中,添加了simens OPC DA automation 2.0,Active页面中有了三个控件:OPC server,OPCgroup,OPCgroups。在窗体中添加这三个控件,另外加了一个按钮,准备测试连接OPC server。现在只做了个按钮测试连接到OPC,运行时,按下按钮就报错。
       
全部代码如下:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OPCSiemensDAAutomation_TLB, OleServer;type
  TForm1 = class(TForm)
    OPCServer1: TOPCServer;
    OPCGroups1: TOPCGroups;
    OPCGroup1: TOPCGroup;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  Group:OPCGroup;
  testItem:OPCItem; 
  OPCItems:string; 
  OPCItemsValues:string; implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  //连接OPC
  OPCServer1.Connect1('xingyun-PC','');
  //xingyun-PC是我的计算机名称,也是OPC server的名称。
  OPCServer1.OPCGroups.DefaultGroupUpdateRate:=500;
  Group:=OPCServer1.OPCGroups.Add('MyGroup'); 
  testItem:=Group.OPCItems.AddItem('SCADA.YPA1_SILO_CHARGEWEIGHTACT.F_CV',1);end;
end.有哪位做个这类通讯,麻烦指导一下,不胜感激!!

解决方案 »

  1.   

    一种基于OPC的Delphi程序与PLC通讯的实现方法希望对你有帮助
    http://wenku.baidu.com/link?url=uZ0XmuS8VHpkfEcnrA2vs3vs7paEWVMzZ2SEJqY3i3kf4NIr04AdPfMs27lpR4fJRvM7oSaItJoPvnnFNrpBunVonfDTSqyPbSs5jEUjq-i
      

  2.   

    先关注一下 ,目前我在做PC和Omron PLC的,Siemens PLC的等Omron的有进制了,再去做。
    你用的是314哪个CPU的?现在最新的314C-2PN/DP和ET200S系列支持Open TCP/IP,应该不需要用OPC就可以的。另外,问一下,你在做什么样的系统?
      

  3.   

    看了一下这个程序,试了一下,这个不是错误,因为作者的只是个例程,介绍的连接方法,你的连接的变量都没有定义,如:OPCServer1.Connect1('xingyun-PC',''),还有这个'SCADA.YPA1_SILO_CHARGEWEIGHTACT.F_CV'是变量,应该在PLC里定义的。做这个,必须有西门子的PLC,实际连接一下,再看看Siemens的OPC资料,初步看了一下,Siemens的PC连接比较繁琐,但多试,一定可以的。
      

  4.   

    我遇到的问题是 枚举不到 西门子opc服务器。
    function TForm1.OPCServerList(): Boolean;
    var OPCServerList,OPCServerName:OleVariant;
        j,i:integer;
    begin
      Result := false;
      try
         //FOPCServer := TOPCServer.Create(Self);
         OPCServerList:=OPCServer1.GetOPCServers;
         i:=VarArrayHighBound(OPCServerList,1);
         for j:=1 to i do
         begin
           OPCServerName:=VarArrayGet(OPCServerList,j);
           lboxServerName.Items.Add(OPCServerName);
           Result :=true;
         end;
      except
         Result := False;
      end;
    end;
    但是 再我本机  可以枚举到 测试服务器 (非西门子)  
    莫非是 OPCDAAuto.dll 版本问题吗  ?  
      

  5.   

    DELPHI属于高级语言了,还用OPC干嘛,直接用官方的DLL不是更方便,这里有详细说明和源代码下载:
    http://blog.sina.com.cn/s/blog_16d7d3ecb0102x1z5.html