关于在C#中添加引用 OPC Automation
组件导致添加组时出错的问题
使用的OPC服务器是 Simatic NET安装的
操作系统:Win2K
编程环境:Microsoft Visual C#.Net 2003
采用方法:前期引用绑定
出现问题:
private OPCAutomation.OPCServerClass OPCServer;
private OPCAutomation.OPCGroup OPCGroup;
private OPCAutomation.OPCItem OPCItem;
OPCServer = new OPCAutomation.OPCServerClass();
this.OPCServer.Connect('XXXXXXX',0);
OPCAutomation.OPCGroupsClass temp=new
OPCAutomation.OPCGroupsClass();
this.OPCServer.OPCGroups.Add('Grp1');
this.OPCItem= this.OPCGroup.OPCItems.AddItem('XXXXXXX',0);
安装软件带的 VB、VC++等的例子能运行成功,读取正确。
但是将VC++的工程升级到 .Net后也会引起错误。
解决方案:
(1)用C++写了一个Com
然后用C#调用这个COM
(2)用Vb6写了一个DLL
然后用C#调用这个DLL
用BCB和DELPHI开发OPC监控程序
标题:用BCB和DELPHI开发OPC监控程序作者: 出处:源码仓库 更新时间: 2005年03月22日
用BCB和DELPHI开发OPC监控程序
看到论坛里面有人问BCB和DELPHI开发opc的问题,本人先前已做过摸索,这是本人的原创文章,希望给想做OPC客户端的朋友引个路。如果你想转载,麻烦注明作者wyddr。
1、本文介绍的方法,适用于快速开发小型的监控程序,主要使用了opc
da,包括opc的读写。该方法已在我做过的几个工程中得到应用;
2、本文涉及的软件和控件,如果你用于商业用途,请购买正版;
3、你最好掌握OPC的基本概念,掌握bcb和delphi的基本使用,包括控件的编写、安装与程序的调试,相关内容参阅有关书籍;
4、如果感兴趣的人多,我还考虑写用Delphi开发OPC Server,你有兴趣么?
一、一切得益于面向控件的开发
使用BCB和DELPHI可以快速开发出OPC客户端程序,用于小型的监控系统。我们需要以下控件包:
iocomp For Delphi BCB 当前的版本为
3.0.2。它有多余60个控件,包括各种样式的文字,实时曲线控件,流向棒图,风闸状态图,opc数据写入等等。它可以设置所有控件的界面主题(类似与windows
xp的主题桌面)
如何用VB编写OPC客户端程序(2005-12-06 15:00)
如何用VB编写OPC客户端程序
一、引言
在工业自动化领域,计算机早已成为必不可少的工具,计算机技术的不断发展,大大加速了工业自动化技术的进步,而各种各样的工业控制应用软件正是具体实现这一进程的最重要的工具。
以往,应用软件开发商要为每一种硬件开发驱动程序,由于硬件的种类繁多,特征各异,软件开发商的负担异常繁重,尤其是如果硬件特征发生了变化,整个应用软件相应的驱动程序也要相应地修改,这对软件开发商,对整个工程都是很不利的。而且由于驱动程序的不统一,不同应用程序访问同一硬件设备时常常发生冲突。OPC(OLE
for Process
Control)技术标准正是在这种情况下产生的。OPC基于微软的OLE、COM和DCOM技术,而且它本身就是一种特殊的COM,也正因为有微软的参与,以及以已经成熟的技术为基础,它比一般的工业标准制定的效率更高,它从开始制定到第一个可运行的规范开始运行,只用了不到一年的时间。
二、OPC原理及应用
OPC技术为工业自动化软件面向对象的开发提供了统一的标准。它大大减轻了软件开发商的负担,软件开发商不必再为每一硬件单独编写驱动程序,只要硬件的特征符合统一的OP
用VB编写OPC客户端访问WINCC(2005-12-06 15:00)
用VB编写OPC客户端访问WINCC
用VB编写OPC客户端访问WINCC
OPC是一个工业标准,它是由一些世界上著名的自动化系统和硬件、软件公司和Microsoft(微软)紧密合作而建立的。〔O代表OLE(对象链接和嵌入),P
(process过程),C (control控制)。OLE已从面向对象重新定义为基于对象并更名为Active X〕。
WinCC是西门子公司在自动化领域采用最先进的技术与微软公司在共同开发的居于世界领先地位的工控软件。WinCC即WINDOWS
CONTROL
CENTER(视窗控制中心)。WinCC是一个功能强大的全面开放的监控系统,既可以用来完成小规模的简单的过程监控应用,也可以用来完成复杂的应用。在任何情况下WinCC都可以生成漂亮而便捷的人机对话接口,使操作员能够清晰地管理和优化生产过程。它集成的OPC(OLE
for process control)服务器使得过程数据可由其它
OPC客户程序(VB篇——异步)(2005-12-06 14:59)
OPC客户程序(VB篇——异步)
Option Explicit
Option Base 1
Const WRITEASYNC_ID = 1
Const READASYNC_ID = 2
Const REFRESHASYNC_ID = 3
''----------------------------------------------------------------------------
'' Interface Objects
''----------------------------------------------------------------------------
Public WithEvents ServerObj As OPCServer
Public WithEvents GroupObj As OPCGroup
Dim ItemObj1 As OPCItem
Dim ItemObj2 As OPCItem
Dim Serverhandle(2) As Long
Private Sub chkGroupActive_Click()
If chkGroupActive = 1 Then
GroupObj.IsActive = 1
Else
GroupObj.IsActive = 0
End If
End Sub
Private Sub Command_Start_Click()
Dim OutText As String
On Error GoTo ErrorHandler
Command_Start.Enabled = False
Command_Read.Enabled = True
Command_Write.Enabled = True
Command_Exit.Enabled = True
chkGroupActive.Enabled = True
OutText = '连接OPC服务器'
Set ServerObj =
OPC BROWSER
ITEM程序(VB篇)
OPC技术论坛 http://www.opc-china.com OPC服务器,客户程序技术讨论
一、VB新建窗体如下
详见相册OPC技术。
二、引用如下
详见相册OPC技术。
三、代码如下
Dim WithEvents g_Server As OPCServer
Dim g_Browser As OPCBrowser
Dim BrowseFilter As Long
Dim Vt_Filter As Integer
Dim nodX As Node
Dim Value As Variant
Dim FullName As String
Dim Relative As String
Dim i As Integer
Private Sub cmbAccessRights_Click()
Select Case cmbAccessRights.Text
Case 'OPC_ACCESS_WRITE'
g_Browser.AccessRights =
OPCWritable
Case Else
g_Browser.AccessRights =
OPCReadable
End Select
End Sub
Private Sub cmbBrowseFilter_Click()
Select Case cmbBrowseFilter.Text
Case 'OPC_FLAT'
&
OPC客户程序(VB篇——同步)(2005-12-06 14:58)
OPC客户程序(VB篇——同步)
代码如下:
Option Explicit
Dim WithEvents ServerObj As OPCServer
Dim WithEvents GroupObj As OPCGroup
Dim ItemObj As OPCItem
Private Sub Command_Start_Click()
Dim OutText As String
On Error GoTo ErrorHandler
Command_Start.Enabled = False
Command_Read.Enabled = True
Command_Write.Enabled = True
Command_Exit.Enabled = True
OutText = '连接OPC服务器'
Set ServerObj = New OPCServer
ServerObj.Connect ('XXXSERVER')'XXXSERVER为某OPC服务器名称
OutText = '添加组'
Set GroupObj = ServerObj.OPCGroups.Add('Group')
OutText = 'Adding an Item to the group'
Set ItemObj = GroupObj.OPCItems.AddItem('XXXITEM', 1)
'XXXITEM为添加的ITEM名称
Exit Sub
ErrorHandler: '如果出现异常,则报出错误。
MsgBox Err.Description + Chr(13) + _
OutText, vbCritical, 'ERROR'
End Sub
Private Sub Command_Read_Click()'同步读
Dim OutText As String
Dim myValue As Variant
Dim myQuality As Vari
研究C#程序与基于COM的OPC数据存取服务器交换数据
作者: 激情如火 ,2005-9-23 10:52:00 发表于:《OPC论坛》 共有3人回复,509次点击 加为好友 发送留言
研究C#程序与基于COM的OPC数据存取服务器交换数据
摘要:研究了OPC NET COM自动化包装器所封装的COM编排技术和OPC
NET应用程序接口内的设计模式。在其基础上使用C#语言编写了一个基于.NET的OPC客户程序,与基于COM的OPC数据存取服务器交换数据。有效地实现了将遵循OPC规范的代码从COM平台移植到.NET平台。
关键词:C#;COM编排;数据存取服务器;设计模式
Study C# program to exchange data with COM based OPC data access
server
He Hai-jiang
( Department of Computer Science of Hunan Economic Management
College ,Hunan Changsha 410004 )
Abstract: The marshal technique from OPC NET COM Wrapper and
design patterns from OPC NET API are researched. An OPC client
software based on .NET is built on the basis of these technique
with C# language,it is employeed to exchange data with O
客户程序怎么样能够知道机器上注册的opc
server
1. 使用OPC服务器浏览器对象
下面一段代码显示了利用IOPCServerList接口浏览本地或远程计算机中已安装的OPC数据访问服务器的方法,省略处理错误返回代码步骤
MULTI_QI mqi;
COSERVERINFO sin, *sinptr;
DWORD clsctx;
unsigned long c;
CLSID clsid;
IEnumGUID *pEnumGUID;
CLSID catid = CATID_OPCDAServer20;
//OPC数据访问服务器
2.0组件目录
IOPCServerList *gpOPC = NULL;
clsid = CLSID_OPCServerList;
// set up server info sinptr = &sin;
sin.dwReserved1 = sin.dwReserved2 = 0;
sin.pwszName = szNodeName;
// szNodeName为本地或远程计算机名
sin.pAuthInfo = 0;
clsctx = CLSCTX_REMOTE_SERVER;
// set up mqi
mqi.pIID = &IID_IOPCServerList;
mqi.hr = 0;
mqi.pItf = 0;
HRESULT hr = CoCreateInstanceEx(clsid, NULL, clsctx, sinptr, 1,
&mqi);
// 创建OPC服务器的浏览器对象
gpOPC =(IOPCServerList*)mqi.pItf;
//获得IOPCServerL
VBVC开发OPC客户程序必读(2005-12-06 14:55)
VBVC开发OPC客户程序必读!
Step.1
如果程序要调用COM 库的某一个函数必须先登录COM 函数CoInitialize()可
以完成此功能从函数CoGetMalloc()可以得到一个指向COM 内存管理接口的指
针
HRESULT rl;
rl=CoInitialize(NULL);
rl=CoGetMalloc(MEMCTX_TASK,&g_pIMalloc);
Step.2
每个COM 服务器有一个ProgID 通过它可以得到一个全球唯一的CLSID 用
CLSIDFromProgID()函数可以实现这个变换ProgID 用变量szName 进行参数传
递在示例程序中它的值是L”OPC.SimaticNET”
m_Popc
rl=CLSIDFromProgID(szName,&clsid);
Step.3
CoCreateInstance()函数创建一个类实例其CLSID 值设定如下:
r2=CocreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IUnkown,
(void**)&Punk);
这段程序的结果是一个指向服务器对象IUnknown 接口的指针变量pUNK
Step.4
从IUnkown 接口通过QueryInterface()方法可以得到其它接口的指针
HRESULT r3;
r3=pUNK->QueryInterface(IID_IOPCServer , (void **