Delphi7.0开发OPC客户端程序(Siemens_Opc_client)
OPCClient客户端工具使用说明
OPCClient客户端测试工具使用说明
编写人胡强编写时间2004-10-8
修改人侯桂香修改时间2005-04-7
OPC Client 测试软件仅用于辅助测试OPC SERVER端是否正常传送数据。
1.注册
开始-> 程序选择“MACSII OPC SERVER V2.2”->“OPC 注册”,如下图:
点击“确定”,如下图:
点击“确定”,即完成注册。
2.运行
开始-> 程序选择“OPC Client 测试”->“OPC Client”,显示如下对话框:
选择“OPC”---“connect”连接OPC服务端
Server Node填写MACSOPC.exe所在服务器的机器名,出现Available servers后,选中,OK 如果Available Servers没有显示,请按Refresh List按钮,等待出现Available Servers显示。
选择“OPC”---“ADD ITEM”,出现如下对话框:
双击选中FAAMBCT0_A V,点击DONE, 出现如下对话框:
鼠标右键单击项名,选择“Write value…”
请特别注意:
OPCCLIENT连接服务器端的时候,客户端操作系统登录的用户名和密码必须和服务器端当前用户名,密码保持一致,才能实现远程连接。
DELPHI7.0及其串口通信
Delphi7.0及其串口通信2.1Delphi7.0简介2.1.1Delphi7.0基本界面Delphi是由Borland公司于1995年推出的快速应用软件开发工具RAD (Rapid Application Development)。
Delphi使用了当今世界上比较先进的很多程序开发思想,使用Delphi开发软件无疑会大大提高软件开发的效率。
本文以Delphi7.0作为平台,进行软件开发。
Delphi7.0打开的主界面如图2.1所示。
图2.1Delphi7.0主界面2.1.2Delphi7.0的特点和优点Delphi7.0是Windows系统下的具有功能强大、简便易用和代码执行速度快等优点的可视化集成开发工具,它提供了强大的可视化组件VCL(Visual Component Library)功能,使程序员可以快速高效的开发出Windows系统下的应用程序。
和其他软件开发工具相比,Delphi在网络编程、数据库编程、程序界面方面更胜一筹,而且增加了对Linux平台下应用程序开发的更强大支持。
而且它在构架企业信息系统方面也发挥着越来越重要的作用,因此许多程序员愿意选择Delphi作为开发工具编制各种应用程序[2]。
(1)可视化的集成开发环境Delphi提供了可视化的集成开发环境IDE(Integrated Development Environment)。
可视化环境是指用户在设计程序界面的时候,无须为程序界面编写代码,只需将相应的组件添加到窗体上,调节其大小和位置即可,Delphi会自动生成相应的代码。
Delphi的集成开发环境不仅可以非常方便的设计出用户的程序界面,而且程序的界面设计、属性设计、代码编写、程序调试、运行、生成可执行文件等操作都可以在这个集成开发环境中进行,使得软件设计变得非常的快捷、高效。
(2)真正的面向对象面向对象的程序设计OOP(Object Oriented Programming)是Delphi诞生的基础。
DELPHI OPC Client 例子
DELPHI OPC Client 例子(2008-09-25 20:23:52)分类:DELPHI 标签:delphi opc client opcserver remoteserver security group杂谈unit Unit1;interfaceusesWindows, Forms, ComObj, ActiveX, SysUtils, OPCtypes, OPCDA, OPCutils,StdCtrls, Classes, Controls, OPCenum;typeTForm1 = class(TForm)Button1: TButton;ListBox1: TListBox;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;constOneSecond = 1 / (24 * 60 * 60);// these are for use with the Matrikon sample serverServerProgID = 'OPC.SimaticNET';Item0Name = 'S7:[@LOCALSERVER]DB1,STRING8.10';Item1Name = 'S7:[@LOCALSERVER]DB1,STRING30.10';RPC_C_AUTHN_LEVEL_NONE = 1;RPC_C_IMP_LEVEL_IMPERSONATE = 3;EOAC_NONE = 0;varServerIf: IOPCServer;GroupIf: IOPCItemMgt;GroupHandle: OPCHANDLE;Item0Handle: OPCHANDLE;Item1Handle: OPCHANDLE;ItemType: TVarType;ItemValue: string;ItemQuality: Word;HR: HResult;AdviseSink: IAdviseSink;AsyncConnection: Longint;OPCDataCallback: IOPCDataCallback;StartTime: TDateTime;Form1: TForm1;OPCServerList: TOPCServerList;CATIDs: array of TGUID;ServerNames: TStringList;I: Integer;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);beginServerNames := TStringList.Create;trySetLength(CATIDs, 0);OPCServerList := TOPCServerList.Create('', True, CATIDs); tryOPCServerList.Update;ServerNames.AddStrings(OPCServerList.Items);finallyOPCServerList.Free;end;ListBox1.items.Add('OPC servers from registry: -');for I := 0 to ServerNames.Count - 1 dobeginListBox1.items.Add(ServerNames[I]);end;ServerNames.Clear;SetLength(CATIDs, 1);CATIDs[0] := CATID_OPCDAServer20;OPCServerList := TOPCServerList.Create('', False, CATIDs); tryOPCServerList.Update;ServerNames.AddStrings(OPCServerList.Items);finallyOPCServerList.Free;end;ListBox1.items.Add('OPC DA 2.0 servers from server browser: -');for I := 0 to ServerNames.Count - 1 dobeginListBox1.items.Add(ServerNames[I]);end;finallyServerNames.Free;end;end;procedure TForm1.Button2Click(Sender: TObject);BeginHR := CoInitializeSecurity(nil, // points to security descriptor-1, // count of entries in asAuthSvcnil, // array of names to registernil, // reserved for future useRPC_C_AUTHN_LEVEL_NONE, // the default authentication level for proxiesRPC_C_IMP_LEVEL_IMPERSONATE,// the default impersonation level for proxies nil, // used only on Windows 2000EOAC_NONE, // additional client or server-side capabilities nil // reserved for future use);if Failed(HR) thenbeginMessagebox(Self.Handle,'Failed to initialize DCOM security','提示',1);end;tryServerIf := CreateRemoteComObject('172.20.110.49',ProgIDToClassID(ServerPro gID)) as IOPCServer;exceptServerIf := nil;end;if ServerIf <> nil thenbeginMessagebox(Self.Handle,'Connected to OPC server','提示',1);endelse beginMessagebox(Self.Handle,'Unable to connect to OPC server','提示',1);Exit;end;// now add a groupHR := ServerAddGroup(ServerIf, 'MyGroup', True, 500, 0, GroupIf, GroupHandle); if Succeeded(HR) thenbeginMessagebox(Self.Handle,'Added group to server','提示',1);endelse beginMessagebox(Self.Handle,'Unable to add group to server','提示',1);Exit;end;// now add an item to the groupHR := GroupAddItem(GroupIf, Item0Name, 0, VT_EMPTY, Item0Handle,ItemType);if Succeeded(HR) thenbeginMessagebox(Self.Handle,'Added item 0 to group','提示',1);endelse beginMessagebox(Self.Handle,'Unable to add item 0 to group','提示',1);ServerIf.RemoveGroup(GroupHandle, False);Exit;end;// now add a second item to the groupHR := GroupAddItem(GroupIf, Item1Name, 1, VT_EMPTY, Item1Handle,ItemType);if Succeeded(HR) thenbeginMessagebox(Self.Handle,'Added item 1 to group','提示',1);endelse beginMessagebox(Self.Handle,'Unable to add item 1 to group','提示',1);ServerIf.RemoveGroup(GroupHandle, False);end;// now try to read the item value synchronouslyHR := ReadOPCGroupItemValue(GroupIf, Item0Handle, ItemValue, ItemQuality); if Succeeded(HR) thenbeginif (ItemQuality and OPC_QUALITY_MASK) = OPC_QUALITY_GOOD thenbeginMessagebox(Self.Handle,Pchar(ItemValue),'提示',1);endelse beginMessagebox(Self.Handle,'Item 0 value was read synchronously, but quality was not good','提示',1);end;endelse beginMessagebox(Self.Handle,'Failed to read item 0 value synchronously','提示', 1);end;// finally write the value just read from item 0 into item 1HR := WriteOPCGroupItemValue(GroupIf, Item1Handle, 'TDSSSS');if Succeeded(HR) thenbegin//Writeln('Item 1 value written synchronously');endelse beginMessagebox(Self.Handle,'Failed to write item 1 value synchronously','提示', 1);end;// and try to read it backHR := ReadOPCGroupItemValue(GroupIf, Item1Handle, ItemValue, ItemQuality); if Succeeded(HR) thenbeginif (ItemQuality and OPC_QUALITY_MASK) = OPC_QUALITY_GOOD thenbeginMessagebox(Self.Handle,Pchar(ItemValue),'提示',1);else beginMessagebox(Self.Handle,'Item 1 value was read synchronously, but quality was not good','提示',1);end;endelse beginMessagebox(Self.Handle,'Failed to read item 0 value synchronously','提示', 1);end;// now cleanupHR := ServerIf.RemoveGroup(GroupHandle, False);if Succeeded(HR) thenbeginMessagebox(Self.Handle,'Removed group','提示',1);endelse beginMessagebox(Self.Handle,'Unable to remove group','提示',1);end;end ;end.。
delphi用Automation接口编写OPC客户端
delphi 用Automation接口编写OPC客户端一,首先是OPCAutomation 的安装1)使用regsvr32 注册 OPCDAAuto.dll2)在 Delphi 的project菜单中,选导入类型库 OPC Automation 2.0。
二编写程序声明 OPC 的类与接口FOPCServer:TOPCServer;FOPCGroup :TOPCGroup;FOPCb :OPCBrowser;FOPCItems :OPCItems; // interfaceFOPCItem :OPCItem; // interface// 获取OPC Server 列表function TForm1.OPCServerList(): Boolean;var OPCServerList,OPCServerName:OleVariant;j,i:integer;beginResult := false;tryFOPCServer := TOPCServer.Create(Self);OPCServerList:=FOPCServer.GetOPCServers;i:=VarArrayHighBound(OPCServerList,1);for j:=1 to i dobeginOPCServerName:=VarArrayGet(OPCServerList,j);lboxServerName.Items.Add(OPCServerName);end;exceptResult := False;end;end;// 连接OPC Serverfunction TForm1.OPCServerConnect(sServerID:string): Boolean; beginResult := true;tryFOPCServer.Connect1(sServerID);exceptResult := False;end;end;// 断开与OPC 服务器的连接procedure TForm1.OPCServerDisconnect;beginif Assigned(FOPCServer) thenbeginif Assigned(FOPCGroup) thenbeginFOPCServer.OPCGroups.RemoveAll;FOPCGroup.Free;FOPCGroup := nil;end;FOPCItems := nil;FOPCItem := nil;FOPCServer.Disconnect;FOPCServer.Free;FOPCServer := nil;end;end;// 创建连接OPC Groupfunction TForm1.OPCGroupConnect(AGroupName: OleVariant): Boolean; beginResult := True;tryFOPCGroup := TOPCGroup.Create(Self);FOPCGroup.ConnectTo(FOPCServer.OPCGroups.Add(AGroupName));FOPCGroup.UpdateRate :=1000;FOPCGroup.IsActive := True;FOPCGroup.IsSubscribed := True; // 事件支持exceptResult := False;end;end;procedure TForm1.BrowseItem(curNode:TTreeNode);var i: Integer;sItemName:WideString;beginwith FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowBranches;for i:=1 to Count dobeginsItemName:=Item(i);TvItemView.Items.AddChild(curNode,sItemName);end;// TvItemView.Selected.Expand(true);end;end;procedure TForm1.ADDBrowserItem;vari,iOrg:integer;sItemName:WideString;beginFOPCb:=FOPCServer.CreateBrowser;iOrg:=FOPCb.Get_Organization;if iOrg=2 then //平坦式结构beginwith FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowLeafs(true);for i:=1 to Count dobeginsItemName:=Item(i);TvItemView.Items.AddChild(SerVerNameNode,sItemName);end;end;endelse begin //树状结构BrowseItem(SerVerNameNode);end;end;procedure TForm1.SetBrowsePosition(sPosition:string);begintryFOPCb.MoveToRoot;caption:=sPosition;FOPCb.MoveDown(sPosition);except;end;end;procedure ItemViewClick(Sender: TObject);var i: Integer;sItemName:WideString;beginListBox1.Clear;SetBrowsePosition(TvItemView.Selected.Text);with FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowLeafs(true);for i:=1 to Count dobeginsItemName:=Item(i);ListBox1.Items.Add (sItemName);end;end;end;procedure ItemViewExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);beginif not TvItemView.Selected.HasChildren thenbeginSetBrowsePosition(TvItemView.Selected.Text);BrowseItem(TvItemView.Selected);end;end;//添加一个项procedure TForm1.OPCItemAdd(sItemName:string);beginFOPCItems := FOPCGroup.OPCItems;FOPCItems.DefaultRequestedDataType:=0;FOPCItems.DefaultIsActive :=true;FOPCItem:=FOPCItems.AddItem(sItemName,ItemIndex);end;//读取指定项function TForm1.ReadData(ItemName:string):OleVariant;varValue, Quality, TimeStamp: OleVariant;beginFOPCitem :=FOPCItems.Item(ItemName);if not Assigned(FOPCItem) then Exit;FOPCItem.Read(OPCDevice, Value, Quality, TimeStamp);ReadData :=Value;end;。
一种基于OPC的Delphi程序与PLC通讯的实现方法
《工业控制计算机》2011 年第 24 卷第 11 期
47
开发,这种方法使用简单,通常能够满足多数用户的开发需求。 2.1 组件的引用
end; end; end;
2.5 OPC 变量的写入
当需要对变量进行控制时,例如需要对 PLC 中的 变 量 进 行
写操作时,可以调用 write 方法实现,部分代码如下:
procedure TForm1.Button4Click(Sender: TObject);
var
myvalue:OleVariant;
将工业现场的设备与
PC 工作站通 过 多 种 通
讯网络联系在一起,本文
使用的 OPC Server 为 SIMATIC NET OPC
图 1 系统结构图
Server,其 名 称 为 :OPC.simaticNET 。
1.1 S7 PLC 的组态
1)使用 SIMATIC Manager 配置一个 S7-300 的站点,双击
完成 '; except MessageBox(0, OPC 服务器连接时出现错误,请检查服务器名、节
点名及服务器状态 '', ' 系统错误 ', MB_OK + MB_ICONSTOP); end;
end; 2.3 连接 OPC 变量
根 据 ACCESS 数 据 库 中 预 定 义 的 变 量 名 称 连 接 相 应 的 变 量,即读取 ACCESS 数据库中的变量名称并根据相应的变量名 称连接变量,部分代码如下: procedure TForm1.N8Click(Sender: TObject); / / OPC 变量的连接 var i:integer;
DELPHI下OPC客户端开发入门
DELPHI下OPC客户端开发⼊门⼀、通信拓扑根据实际⼯作的内容,需要利⽤OPC作为媒介实现delphi程序与组态王软件的通信。
不同于通常的思路,将组态王作为数据的提供者,直接采集plc等控制器的数据,然后⽤delphi做显⽰,我这次的⼯作是刚好相反的,因为原有的⼀些⼯业控制现场已经采⽤delphi编写了各⾃的显⽰程序,但是现在需要将四个⼯业现场的数据传输到⼀个总控的地⽅作为⼀个总得显⽰端,⽽这个显⽰端要⽤组态王开发,因此,就相当于delphi为组态王提供数据。
因此,肯定需要频繁的使⽤delphi给组态王发送数据。
最初考虑的是利⽤delphi作为服务器端,组态王作为客户端,这样有利于数据的传输,但是,经过⼀段时间的研究,发现开发delphi的OPC服务器不是易事,需要花费很多的时间,为了快速的进⾏项⽬开发,我同样采⽤delphi作为客户端,组态王作为服务器来进⾏开发,同样实现了数据的双向传输。
具体的通信拓扑如图⼀所⽰。
图⼀⼀、资料准备实际开发过程中所⽤到的⼀些资料如下:1、 delphi 7 集成开发环境2、组态王软件3、 OPCDll4、 OPC客户化接⼝标准说明⽂档5、 Delphi opc接⼝实现程序包说明:OPCDll包含名为opc_aeps.dll,opccomn_ps.dll,OPCDAAuto.dll,opchda_ps.dll,opcproxy.dll的五个dll⽂件,在使⽤之间需要进⾏注册。
不过实际上,在安装完组态王软件以后,这⼏个⽂件就已经被注册了,因此我在开发的时候并没有单独进⾏注册,OPC客户化接⼝说明⽂档是进⾏客户化OPC开发必备的参考资料,由OPC基⾦会提供。
我打包了⼀下OPC客户化接⼝以及⾃动化接⼝的说明⽂档,有需要下载的请访问Delphi opc接⼝实现程序包是前⼈编写的,我整理了⼀下编写客户端需要的⼀些源⽂件,包括:OPC_AE.pasOPCCOMN.pasOPCDA.pasOPCerror.pasOPCHDA.pasOPCSEC.pasOPCtypes.pasOPCutils.pas其中,OPCutils.pas以上是对OPC提供的接⼝函数的声明,OPCutils.pas⽂件实现了编写客户端基本的⼀些函数,例如连接服务器,为服务器添加组,为组添加条⽬等等功能。
OPC服务器和客户端程序开发指南.doc
OPC服务器和客户端程序开发指南第一章OPC概述关键词:Comdcmopcda通信标准CLIENTSERVER GROUP ITEM自定义接口自动化接口同步异步回调随着计算机科学技术、工业控制等方面新技术的飞速发展,计算机监控系统从早期的集中式监控向全分布式方向发展,计算机监控系统软件随着面向对象技术的成熟,分布式对象计算、多级客户机/服务器技术也从早期的功能系统软件,发展成为以特定现场设备为特征的面向对象的监控系统软件。
与此同时,计算机监控系统的规模越来越大,不同厂家生产的现场设备种类也越来越多。
由于不同厂家提供的现场设备的通信机制不尽相同,需要由计算机监控系统软件开发的硬件设备通信驱动程序越来越多,导致硬件通信驱动程序需要不断开发的现象。
基于COM/DCOM技术的OPC技术提供了统一的通信标准,不同的厂商只要遵循OPC技术标准,就可以实现软硬件的互操作。
过程控制技术是专门为过程控制而设计的。
它是由一些世界领先的自动化系统和软硬件公司与微软公司密切合作建立的,并成立了一个专门的OPC 基金会来管理它。
OPC基金会负责OPC规范的制定和发布。
OPC提出了一套统一的标准,采用典型的客户机/服务器模式。
硬件设备的驱动程序由硬件制造商或专业公司完成,为服务器程序提供统一的OPC接口标准。
软件制造商只能通过根据OPC标准编写客户端程序来访问(读/写)服务器程序来实现与硬件设备的通信。
如图1.1所示,与传统的通信开发方法相比,OPC技术具有以下优点:硬件供应商熟悉他们自己的硬件设备,因此设备驱动程序更加可靠和高效。
软件制造商可以缩短复杂设备驱动程序的开发周期,只需要开发一套符合OPC标准的程序来实现与硬件设备的通信,这样就可以投入人力和物力来改善系统功能。
可以实现软件和硬件的互操作性。
OPC区分了软件和硬件制造商,大大提高了双方的工作效率。
图1.1应用前后的OPC技术对比因此,OPC技术的出现得到了众多软硬件制造商的支持,并且发展迅速。
OPCClient User Guide
OPCClient使用快速指南北京恒和大风软件技术有限公司目 录1. 安装 (1)2. 远程OPC连接配置 (1)3. 编辑I/O点对照表文件 (8)4. 运行OPCClient (10)5. 建立与OPCServer间的连接 (11)6. 导入对照表 (12)7. 保存连接信息及对照表信息 (14)8. 开关状态检查 (14)9. 程序退出 (16)10. 其他常用操作 (16)10.1 设置通讯时间间隔 (16)10.2 设置断线自动重连时间间隔 (17)10.3 设置画面刷新时间间隔 (18)10.4 事件信息显示区的操作 (18)10.5 OPCServer连接、组及对点项的删除 (19)1.安装运行安装程序OPCClient_Setup.exe,弹出安装界面,如图1所示。
选择目标文件夹为SimuEngine的安装路径,然后点击“安装”按钮即可。
图1 安装界面2.远程OPC连接配置如果OPCServer与OPCClient不在同一台计算机上,则需要对两台计算机进行连接配置。
如果OPCServer与OPCClient在同一台计算机上运行,则不需要做此配置。
远程OPC连接配置应按以下步骤进行(注意:两台计算机的都需要做以下配置):1)用户名和密码的设置两台计算机要使用相同的用户名和密码进行登录,并且密码不能为空。
2)在运行OPCClient的计算机上也需要运行OPCServer的注册程序(一般直接运行OPCServer的安装程序即可)。
3)DCOM配置打开Windows的运行窗口,输入dcomcnfg,如图2所示,然后点击“确定”按钮。
弹出组件服务设置窗口,如图3所示。
图2 运行DCOM配置图3 组件服务设置窗口选择“组件服务\计算机\我的电脑\DCOM配置”,在对象中找到要连接的OPCServer,例如ProConOS OPC-Server 2.0,如图4所示。
在其上点击鼠标右键,选择“属性”,则弹出其属性设置窗口,如图5所示。
用Delphi设计与开发基于定制接口的OPC数据访问应用程序
在基 于 Widw 操 作 平 台的 工业 应 用 程 nos 序 之 间提 供 高 效 的 信 息 集 成 与 交互 功 能 的组 件对 象 模 型 接 口标 准 。 正是 通 过 这
需要 的数据 , P O C客户负责处理 O C服 P
务 器 提 供 的 数 据 。 目前 得 到广 泛 应 用 的 是 O C数 据 访 问规 范 , 主 要 是 解 决 服 P 它
事 件 规 范 ( P E 、 史 数 据 存 取 规 范 O CA 1历 f P D )安 全 性 规 范 ( P eui 1 O CH A 、 O CSc rv、 t
批 量 过 程 规 范 ( P ac)X L数 据 访 o cB t , M h
19 9 5年 , 国 际 上 具 有 代 表 性 的几 由 家 工 业 制 造 自动 化 领 域 的公 司 如 It一 ne 1
顾 问微 软 公 司 共 同 发 起 成 立 了 O C 标 P
准化组织 ( P akFre , O CT s oc )协作制定了
专 用 于 工 业 过 程 自 动 化 的 接 口 标 准
0PC。
两套接 口: 定制接 口和 自动化接口。 其中
定 制 接 口可 以采 用 支持 虚 拟 函数 表 的编 程 环境 编 写 客 户 应 用 , CC +、 e h; 如 /+ D 1 i p 而 自动化 接 口则 支 持 更 上 层 的应 用 —— 自动 化 技 术 , 如 v 以及 V A、 e h B B Dl i p
nl y O t2 、 ok e o w r 及 技 术 oo 、 po2 R cw lS f ae g l t
( P D)数据 交换 规 范(P X 、 O CC 、 O C D 1命 令规范( P o a d及统一架构规范 O CC mm n )
Delphi开发OPC数据访问应用程序的研究
国 际 OP 基 金 会 ( C F u d t n 为 0P 标 准定 义 了 C OP o n ai ) o C
一
2 OP 数 据 项 连 接 C
组 动 态 链 接 库 ,如 :p _ e sdl p c mn p .lo c — o c a p .lo c o — sdl p h 、 、
关键 词 : C, ep i定 制 接 口 OP D lh。
Ab ta t sr c
Ths ap nr du s te e nc t da d n wo kng rn pl o i p erito ce h tch ialsan r a d r i p ici e foPc Da a Acc s in , s rb w o de el t e s cl tde c ies ho t v — e o oP p c ci t t c som it f c u de Delhi fer t l wi en h ut nera e n r p . Di en way o daa c s iclde s f t a ce s n u d s n r n sa y ch o ou ,u y ch o ou ,s n r n ss b— s it r nr du d n c cr i a e ito ce a d ompard n p on e i deai tl . Ke wo d : C. l i s o y r s OP Deph. t m Itrac Cu ne f e
维普资讯
4 2
ห้องสมุดไป่ตู้
D lh 开发 OP ep i C数据访问应用程序的研究
D lh开发 OP ep i C数据访问应用程序的研究
Re e r h o C t c s in v lp n s d o Dep s a c f OP Da a Ac e s Cl t De eo me tBa e n e lh
使用Delphi7进行OPC服务器的开发
使用Delphi7进行OPC服务器的开发
花新峰;贠卫国
【期刊名称】《工业控制计算机》
【年(卷),期】2005(18)9
【摘要】首先简要的介绍了OPC技术在企业信息集成中的优点,然后介绍了进行OPC服务器开发的相关背景知识.最后以贵铝热电厂的信息集成项目为背景较为详细的介绍了如何使用Delphi开发工具进行OPC数据访问服务器的开发.
【总页数】3页(P36-38)
【作者】花新峰;贠卫国
【作者单位】西安建筑科技大学计算机控制研究所,710055;西安建筑科技大学计算机控制研究所,710055
【正文语种】中文
【中图分类】TP3
【相关文献】
1.基于Delphi7的继电保护CAI模块开发 [J], 郑义兵;郝琳
2.基于Delphi7开发中医处方预警系统 [J], 王苹;姚子昂
3.使用MTA技术实现OPC服务器的异步数据传输 [J], 李晓虹;谭剑斌;邹益仁
4.Delphi7版实用智能任务助理的开发和应用 [J], 章荣杰;
5.利用Delphi7中的IntraWeb开发Web数据库 [J], 钱成
因版权原因,仅展示原文概要,查看原文内容请购买。
OPCClient工具使用说明
OPCClient工具使用说明OPC(OLE for Process Control)是一种用于实时数据通信的标准协议,它可以实现不同厂家、不同设备之间的数据交互和通信。
OPC Client工具是一种用于连接和监控OPC服务器的软件应用程序,它能够读取和写入OPC服务器中的数据,实现数据采集、传输和处理等功能。
以下是关于OPC Client工具的使用说明。
第一步:安装和配置OPC Client工具2. 打开OPC Client工具,进入配置页面,填写OPC服务器的IP地址和端口号等信息,并选择连接类型(如:TCP/IP)。
3.保存配置信息并进行连接测试,确保能够成功连接到OPC服务器。
第二步:浏览和选择OPC服务器中的项目2.可以通过过滤器或功能来快速定位和选择特定的项目。
3.选择需要监控和操作的项目,并将其添加到监控列表或操作列表中。
第三步:读取和显示OPC服务器中的数据1.在监控列表中选择需要读取的项目,并启动数据读取功能。
2. OPC Client工具会自动从OPC服务器中读取数据,并将其显示在监控列表中。
3.可以设置读取间隔和刷新频率,以实现实时数据显示。
第四步:写入和更新OPC服务器中的数据1.在操作列表中选择需要写入的项目,并在相应的输入框中输入新值。
2. 启动数据写入功能,OPC Client工具会将新值发送给OPC服务器,并更新相应的数据。
3.可以设置写入确认和错误处理功能,以确保数据的有效性和安全性。
第五步:设置和配置自动化任务和报警功能1. OPC Client工具通常支持自动化任务和报警功能。
可以设置定时任务,自动读取和写入OPC服务器中的数据。
2.可以设置报警条件和阈值,当满足条件时触发报警,并进行相应的处理和通知。
3.可以配置邮件、短信或声音等方式来实现报警通知。
第六步:导出和保存数据1. OPC Client工具通常支持数据的导出和保存功能,可以将监控列表中的数据导出为Excel、CSV或其他格式的文件。
基于Delphi7.0 的上位机与PLC 的通信
基于Delphi7.0 的上位机与PLC 的通信安宪军1 , 黄尔烈1 , 贾少锐1 , 张常全2(1.河北工程大学信息与电气工程学院, 河北邯郸056038 2.邯郸职业技术学院, 河北邯郸056001)摘要:本文介绍在将计算机与PLC 结合起来,组成高性能价格比的小型集散控制系统―热电厂循环水过程控制系统中,在基于Delphi7.0 上位机监控软件开发环境中如何实现上位机与S7-200 系列PLC 之间通信。
关键词:上位机; S7-200 PLC; 串行通信; Delphi7.0中图分类号:TP273 文献标识码: B1、引言随着微电子技术、计算机技术以及自动控制技术的迅猛发展,PLC(Programmable Logic Controller)作为新一代工业控制器,以其高性能价格比在工业测控系统中获得了广泛的应用。
在由PLC构成的小型集散控制系统中,PLC具有使用简单方便,故障率低,对现场环境要求不高等优点;但它也有一些缺点,即数据的计算处理与管理能力较弱,特别是不能提供良好的人机界面。
将计算机与PLC结合起来,可使两者优势互补,既可以充分利用PLC的高可靠性、开发周期短、编程容易等特点;又可充分利用计算机友好的人机界面,实现人机对话和监控功能,并可进行一定的辅助决策,组成高性能价格比的控制系统。
实现计算机与PLC结合的控制系统的关键之一是二者之间的通信。
本文以热电厂循环水过程控制的监控系统为基础,详细介绍了基于Delphi7.0的监控软件开发环境中上位机与S7-200系列PLC之间通信的实现。
2、S7-200系列PLC与PC的通信及通信协议2.1、S7-200系列PLC的通信协议S7-200系列PLC的通信协议有以下四种。
⑴、PPI(点到点接口)协议:该通信协议是一个主/从协议,是西门子公司专为S7-200 系列PLC开发的一个通信协议,用于PLC与其编程器或其它西门子公司的人机接口产品之间的通信,一般不对外公开。
基于Delphi的OPC客户端开发与应用
2 ) 通过调用 Cr e a t e C o mOb j e c t 函数来创建新 的 OP C服务
器对 象并 连接 OP C服 务器 , 并 得到 服务器 的 I Un k n o w n接 口对象 。 3 ) 创建组对象 , 设 置 刷 新 频 率 。使 用 OP C服务器对象 的l _
系统 中 , 实现 上 位 机 监 控 软 件 和 现 场 设 备 之 间的 自由通 信 , 结 果表 明 采 用 此 方 案 能 够 满足 系 统数 据 通 信 的 需 求。
关键词 : O P C, 数据 访问 , 客户端 , D e l p h i , 建 筑 能耗 监 控 系统
Ab st r a c t
《 工 业 控制 计 算 机 } 2 0 1 3年 第 2 6卷 第 3期
基于 D e l p h i 的 OP C客户端开发与应用
De v e l o p me n t a n d Ap pl i c a t i o n o f OP C Cl i e n t B a s e d o n De l p h
OPCClient客户端工具使用说明
OPCClient客户端工具使用说明
使用OPCClient客户端工具之前,首先需要确保已安装了OPC服务器软件,并且已经配置好了相应的OPC服务器。
下面是OPCClient客户端工具的使用说明:
2. 打开OPCClient客户端工具
双击桌面上的OPCClient图标,或者在开始菜单中找到OPCClient,并单击运行。
3.连接到OPC服务器
在OPCClient界面中,点击“连接”按钮,弹出连接对话框。
在对话框中输入OPC服务器的IP地址和端口号,并选择相应的连接协议(如OPC DA、OPC UA等)。
点击“确定”按钮连接到OPC服务器。
6.添加和配置报警规则
在OPCClient界面中,点击“报警”按钮,弹出报警配置对话框。
用户可以根据需要添加和配置报警规则,例如设置报警的上下限、报警延迟等参数。
配置完成后,点击“确定”按钮使报警规则生效。
7.保存和加载配置文件
在OPCClient界面中,点击“配置”菜单,可以选择保存当前配置、加载已保存的配置文件、或者创建新的配置文件。
保存配置文件可以方便用户在下次打开OPCClient时直接加载之前的配置。
8.断开与OPC服务器的连接
总结:。
关于OPCClient编写
关于OPCClient编写关于OPC Client 编写hapican 895 5热门 2014-02-23 20:14昨天又有人问我 OPC Client 编写,实际是他们不了解OPC 客户端的工作原理,要想写客户端程序,必须知道OPC对象,OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象都包括一系列接口。
OPC Server对象主要功能为:1、创建和管理OPC Group对象;2、管理服务器内部的状态信息;OPC Group对象主要功能为:1、管理OPC Group对象的内部状态信息;2、创建和管理Items对象。
3、OPC服务器内部的实时数据存取服务(同步与异步方式)。
OPC组中有以下几个主要属性:Name :组的名字;Active:组的激活状态标志;Update Rate OPC:服务器向客户程序提交数据变化的刷新速率;Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。
OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。
代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。
每个项都有以下主要属性:Active项的激活状态、Value项的数值、类型为VARIANT、Quality 项的品质,代表数值的可信度,类型为SHORT、TimeStamp时间戳,代表数据的存取时间。
你不管用什么开发语言只要了解上面几个对象,就会写程序了下面举个VC的例子HRESULT r1;CLSID clsid;LONG TimeBias = 0;FLOAT PercentDeadband = 0.0;DWORD RevisedUpdateRate;LPWSTR ErrorStr;char str[100];CString szErrorText;m_pItemResult = NULL;客户端程序必须对DCOM进行初始化设置,以保证OPC服务器端回调函数不会被堵塞。
delphi实现OPC通讯
delphi 用Automation接口编写OPC客户端2008-06-14 16:36:20| 分类:Delphi编程| 标签:|字号大中小订阅一,首先是OPCAutomation 的安装1)使用regsvr32 注册 OPCDAAuto.dll2)在 Delphi 的project菜单中,选导入类型库 OPC Automation 2.0。
二编写程序声明 OPC 的类与接口FOPCServer:TOPCServer;FOPCGroup :TOPCGroup;FOPCb :OPCBrowser;FOPCItems :OPCItems; // interfaceFOPCItem :OPCItem; // interface// 获取OPC Server 列表function TForm1.OPCServerList(): Boolean;var OPCServerList,OPCServerName:OleVariant;j,i:integer;beginResult := false;tryFOPCServer := TOPCServer.Create(Self);OPCServerList:=FOPCServer.GetOPCServers;i:=VarArrayHighBound(OPCServerList,1);for j:=1 to i dobeginOPCServerName:=VarArrayGet(OPCServerList,j);lboxServerName.Items.Add(OPCServerName);end;exceptResult := False;end;end;// 连接OPC Serverfunction TForm1.OPCServerConnect(sServerID:string): Boolean; beginResult := true;tryFOPCServer.Connect1(sServerID);exceptResult := False;end;end;// 断开与OPC 服务器的连接procedure TForm1.OPCServerDisconnect;beginif Assigned(FOPCServer) thenbeginif Assigned(FOPCGroup) thenbeginFOPCServer.OPCGroups.RemoveAll;FOPCGroup.Free;FOPCGroup := nil;end;FOPCItems := nil;FOPCItem := nil;FOPCServer.Disconnect;FOPCServer.Free;FOPCServer := nil;end;end;// 创建连接OPC Groupfunction TForm1.OPCGroupConnect(AGroupName: OleVariant): Boolean; beginResult := True;tryFOPCGroup := TOPCGroup.Create(Self);FOPCGroup.ConnectTo(FOPCServer.OPCGroups.Add(AGroupName));FOPCGroup.UpdateRate :=1000;FOPCGroup.IsActive := True;FOPCGroup.IsSubscribed := True; // 事件支持exceptResult := False;end;end;procedure TForm1.BrowseItem(curNode:TTreeNode);var i: Integer;sItemName:WideString;beginwith FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowBranches;for i:=1 to Count dobeginsItemName:=Item(i);TvItemView.Items.AddChild(curNode,sItemName);end;// TvItemView.Selected.Expand(true);end;end;procedure TForm1.ADDBrowserItem;vari,iOrg:integer;sItemName:WideString;beginFOPCb:=FOPCServer.CreateBrowser;iOrg:=FOPCb.Get_Organization;if iOrg=2 then //平坦式结构beginwith FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowLeafs(true);for i:=1 to Count dobeginsItemName:=Item(i);TvItemView.Items.AddChild(SerVerNameNode,sItemName);end;end;endelse begin //树状结构BrowseItem(SerVerNameNode);end;end;procedure TForm1.SetBrowsePosition(sPosition:string);begintryFOPCb.MoveToRoot;caption:=sPosition;FOPCb.MoveDown(sPosition);except;end;end;procedure ItemViewClick(Sender: TObject);var i: Integer;sItemName:WideString;beginListBox1.Clear;SetBrowsePosition(TvItemView.Selected.Text);with FOPCb dobeginFilter:='*';DataType:=0;AccessRights:=0;ShowLeafs(true);for i:=1 to Count dobeginsItemName:=Item(i);ListBox1.Items.Add (sItemName);end;end;end;procedure ItemViewExpanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);beginif not TvItemView.Selected.HasChildren thenbeginSetBrowsePosition(TvItemView.Selected.Text);BrowseItem(TvItemView.Selected);end;end;//添加一个项procedure TForm1.OPCItemAdd(sItemName:string);beginFOPCItems := FOPCGroup.OPCItems;FOPCItems.DefaultRequestedDataType:=0;FOPCItems.DefaultIsActive :=true;FOPCItem:=FOPCItems.AddItem(sItemName,ItemIndex);end;//读取指定项function TForm1.ReadData(ItemName:string):OleVariant;varValue, Quality, TimeStamp: OleVariant;beginFOPCitem :=FOPCItems.Item(ItemName);if not Assigned(FOPCItem) then Exit;FOPCItem.Read(OPCDevice, Value, Quality, TimeStamp);ReadData :=Value;end;。
基于Delphi7的智能仪表OPC DA服务器设计
基于Delphi7的智能仪表OPC DA服务器设计
任雯;梁岚珍
【期刊名称】《自动化仪表》
【年(卷),期】2007(028)009
【摘要】为了有效解决分布式异构系统的集成问题,采用了OPC客户/服务器体系结构的解决方案.通过对OPC技术和规范的深入研究,以Delphi7作为开发平台,Huafu OPC Tool Kit作为开发工具,研发了宇电AI808智能仪表OPC数据访问服务器的设计方法.最后,注册并测试了服务器的性能,同时与工控组态软件MCGS 实现了信息交互和集成.所述方法具有一定的可行性和有效性.
【总页数】3页(P57-59)
【作者】任雯;梁岚珍
【作者单位】新疆大学电气工程学院,乌鲁木齐,830008;北京联合大学自动化学院,北京,100101
【正文语种】中文
【中图分类】TP18
【相关文献】
1.基于SDK嵌入式OPC UA服务器设计与实现 [J], 赵艳领;闫晓风;刘丹
2.智能仪表OPC DA服务器的开发和研究 [J], 李志亮;宋成法;费文晓
3.基于国产软硬件平台的OPC UA服务器设计与实现 [J], 闵晓霜;杨鑫;;
4.基于国产软硬件平台的OPC UA服务器设计与实现 [J], 闵晓霜;杨鑫
5.基于OPC UA及OPC DA协议实现的ABB服务器与客户端的数据传输 [J], 连磊
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPC是OLE for Process Control的缩写,即把OLE应用于工业控制领域,OPC是建立在O LE规范之上,它为工业控制领域提供了一种标准的数据访问机制。
OPC服务器由三类对象组成:服务器(Server)、组(Group)、数据项(Item)。
服务器对象(Server)拥有服务器的所有信息,同时也是组对象(Group)的容器。
组对象(Group)拥有本组的所有信息,同时包容并逻辑组织OPC数据项(Item)。
在这里数据项(Item)就是指所有的PLC信号的输入与输出。
OPC组对象(Group)提供了客户组织数据的一种方法。
客户可对之进行读写,还可以设置客户端的数据更新速率。
当服务器缓冲区内的数据发生改变时,OPC将向客户发出通知,客户得到通知后再进行必要的处理。
而无须浪费大量的时间进行查询。
OPC规范定义了两种组对象:公共组和局部组(私有组)。
公共组由多个客户共有,局部组只隶属于一个OPC客户。
一般来说,客户和服务器的一对连接只需要定义一个组对象。
在每个组对象中,客户可以加入多个OPC数据项(Item)。
OPC数据项(Item)是服务器端定义的对象,通常指向设备的一个寄存器单元。
OPC客户对设备寄存器的操作都是通过其数据项来完成的,通过OPC数据项(Ite m),OPC规范尽可能地隐藏了设备的特殊信息,也使OPC服务器的通用性大大增强。
OPC 数据项(Item)并不提供对外接口,客户不能直接对之进行操作,所有的操作都是通过组对象进行的。
每个OPC数据项(Item)的数据结构包括三个成员变量:即数据值、数据质量和时间
戳。
数据值是以Variant形式表示的。
Delphi7.0加载Siemens动态库:
1.打开Delphi7.0,点击Project->Import Type Library
2.在Import Type Library里面找到Siemens OPC DAAutomation 2.0 (Version 1.0),在Clas s Nams里面可以看三个类方法(TOPCGroups,TOPCGroup,TOPCServer),默认的Palette Pag
e为ActiveX,单击Install…
Delphi7.0中编写客户端程序:
1.连接OPC服务器
在Form上面添加三个OPC控件:
OPCGroup1: TOPCGroup;
OPCGroups1: TOPCGroups;
OPCServer1: TOPCServer;
具体操作图文说明请到网盘下载
注:具体设备的OPC驱动虽然不一致,但是都有统一的标准,本文只是针对Siemens设备,如果有错误欢迎批评指教!。