首页 上一页 1 2 下一页 尾页

OPC Server开发的几大境界 点击:9294 | 回复:31



唐进

    
  • 精华:20帖
  • 求助:0帖
  • 帖子:301帖 | 1339回
  • 年度积分:0
  • 历史总积分:106
  • 注册:2004年9月02日
发表于:2007-07-16 16:01:00
楼主
[nobr]OPC server的开发相对OPC client 更加困难,OPC server 的开发主要应用COM技术,主要应用书籍为潘爱民写的《COM入门和应用》,大量的技术有很大的可重用性,在开发完一个程序后,基本上所有的东东都可以被重用,并且重新发布。
开发方式有三种:
1。简单的:就是应用已经有的如DDE to OPC 或串口 to OPC,modbus to OPC等软件把您的设备变成相关的OPC服务器。方法简单实用,费用合理快速,让你马上搭上OPC的快车。主要缺陷:你的设备必需是标准设备或更标准设备相容。这种方式比较适合产品多的厂家快速的转型,或提供OPC相关产品。
2.。一般的:应用第三方的开发包开发,这种方式相对来说减少了开发的难度,而且第三方有相应的技术支持,开发商专业做这种产品,产品有一定的稳定性。这种方式对开发包有依赖性,并且OPC服务器的稳定性依赖第三方的开发水平。本方法适于老板要求你马上开发出OPC产品是^_^,或者入门者使用。国内相关的开发包有华富慧通的和拓林的开发包。
国外的可参考:http://www.opcconnect.com/source.php上面的还可以,不过现在发现也有死链接,不过他的提示确实不错。
3。有难度的:应用COM开发。这种开发方式是最可以学习到东西的。但需要有一定的基础,而且需要对英文有一定的认识度。主要涉及的知识有一下几点。
有一定的C/C++编程经验----代码是一定要写的
能应用VC开发环境------没有屠龙刀怎么能行了
掌握一定的COM知识-----进阶的东东
阅读相关OPC开发文档-----葵花宝典
开发-------------自己杀的猪肉才好吃
Hash表相关内容,主要用于大量节点时查询-----杀人于无形
基本就按照这个学习思路,对于前两项有太多的介绍了,在此不说了。
COM技术学习可参考VChelp http://www.vckbase.com/的COM内容,其他网站都是随便说说而已 。书籍可以看潘爱民的《COM原理和应用》,《COM本质论》等书籍。
OPC文档可以看Data Access Custom Interface 和 OPC Common Definitions and Interfaces。
源码可以参考lightopc 和 GE的源码,如果没有后面那个可以给我发email,好像网上不提供下载了。
GE的程序写得很好,结构清晰,但就是太老了,好在我们尊老爱幼。
lightOPC的程序相对太多了,感觉结构不是太好,有点乱,也可能是我没有深入把。
hash的东东我还没接触,不过数据结构都学过,快速定位。现在的内存这么大,实现大一点hash表,就可以了,当然一个不错的hash函数是不可少的。这是开发过程中要考虑的。
 至于开发是不是一定要用MFC和ATL就看你自己了,不用也可以,用也可以。感觉差别不是太大,如果不会就不用在学了,因为这两项并非那么容易掌握的。但COM必需要了解的。
对于这三种方法没有优劣之分,只有看你的需求如何。你付出的时间越多,相应的付出的Money越少,越灵活,学到的内容越多,这就是社会规律。在工控领域就是选择最适合的。[/nobr]
OPC主要适用于过程控制和制造自动化等应用领域。 OPC是以OLE/COM机制作为应用程序的通讯标准。OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点。OPC规范了接口函数,不管现场设备以何种形式存在,客户都以统一的方式去访问,从而保证软件对客户的透明性,使得用户完全从低层的开发中脱离出来
  然后我们再来看看OPC Server的组成
   一个设备的OPC Server主要有两部组成,一是OPC标准接口的实现;二是与硬件设备的通信模块。
   实现OPC 标准接口
  
<center> </center>
  [图1]
  在这些接口中,IOPCServer 是OPC Server的主接口,通过它实现OPC Server在操作系统中的安装和注册。此接口是必须要实现的,其所有方法也必须实现。其它的接口都是可选的我们就不做介绍了,下面主要来介绍如何实现IOPCServer接口。
  在IOPCServer接口中共有六个法:
  1、 IOPCServer::AddGroup 
  HRESULT AddGroup( [in, string] LPCWSTR szName,
   [in] BOOL bActive, 
  [in] DWORD dwRequestedUpdateRate, 
  [in] OPCHANDLE hClientGroup, 
  [unique, in] LONG *pTimeBias, 
  [in] FLOAT * pPercentDeadband, 
  [in] DWORD dwLCID, 
  [out] OPCHANDLE * phServerGroup, 
  [out] DWORD *pRevisedUpdateRate, 
  [in] REFIID riid, 
  [out, iid_is(riid)] LPUNKNOWN * ppUnk );
   此方法是在OPC Server上建立一个组。下在我们来实现这个方法:
  ….
  ….
  首先要对组名(szName)进行检查,看是否有效或是否已经有这个组。
  if (szName != NULL)
  {
   RequestedName = szName;
   if (RequestedName == "")
   RequestedName = pSvrObject->DefaultGroupName();
   }
   else
   RequestedName = pSvrObject->DefaultGroupName();
   
   for (i=0; i<psvrobject- />NumbrGroups(); i++)
   {
   pGroup = pSvrObject->GetGroup(i);
   if (RequestedName == pGroup->Name)
   return (OPC_E_DUPLICATENAME);
   }
   这需要在内存中维护OPC Group(组)的列表(还要有OPC 项的列表)。
   如果szName(组名)正确并且没有建立过该组,就开始根据传过来的参数进行组的建立,建立好后将该组加到自己的组列表中以备后用。
   if ((dwRequestedUpdateRate == 0) || (dwRequestedUpdateRate < pApp->ServerTickRate))
   ActualRate = pApp->ServerTickRate;
   else
   {
   ActualRate = dwRequestedUpdateRate;
   MinRate = pApp->ServerTickRate;
   ActualRate += (MinRate/2);
   ActualRate /= MinRate;
   A



yangshu

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:60
  • 注册:2005年11月05日
发表于:2007-07-16 21:41:00
1楼
有点天数的感觉,不过这些东东要学的,要不然以后没饭吃。

龙志明

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 91回
  • 年度积分:0
  • 历史总积分:381
  • 注册:2006年5月03日
发表于:2007-07-17 13:39:00
2楼
唉,看不懂

cade_zk

  • 精华:0帖
  • 求助:0帖
  • 帖子:34帖 | 216回
  • 年度积分:0
  • 历史总积分:503
  • 注册:2005年9月16日
发表于:2007-07-18 07:22:00
3楼
要学习啊,会用的语言太少了

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2007-07-18 18:28:00
4楼
呵呵,这些好象是我以前写的笔记。
其实不是各位想象的那么复杂。
一般能用开发包作就OK了,必竞各位不是专业的程序开发员。
作工控,只要会用,能用,有问题能解决就好

TTT_Rock

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 62回
  • 年度积分:0
  • 历史总积分:416
  • 注册:2005年1月04日
发表于:2007-07-19 15:10:00
5楼
使用VC 做这种开发需要多长时间啊!!
一般再我看来象楼主这样的水平应该是高手了,我们部门的主管就是VC高手,据他说IQ110~120的选手想灵活的运用VC要2~5年时间不等(主要靠韧性),我是那种IQ小于100的,所以我猜我得5年能学会,那时候我都30了!开始哭~~~~~~~~~~~!!!
楼主厉害~~~~~~~~~~~~~顶!!

死亡骑士

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 1774回
  • 年度积分:0
  • 历史总积分:2630
  • 注册:2006年7月17日
发表于:2007-07-20 10:58:00
6楼
你们主管是个外行

小肥妞

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 47回
  • 年度积分:0
  • 历史总积分:139
  • 注册:2004年4月07日
发表于:2007-07-20 14:12:00
7楼
30能会就不错了,我看也象天书,不过这是发展趋势,最好要会的,除非转行去干销售。。。

deng_lp

  • 精华:5帖
  • 求助:0帖
  • 帖子:65帖 | 2669回
  • 年度积分:0
  • 历史总积分:2876
  • 注册:2001年6月19日
发表于:2007-07-21 14:03:00
8楼
呵呵,有这么复杂呀
现在的新版本VS2005,又大大简化了VC的开发工作,许多的函数都有,且很方便,
1年就可以写程序了

痴狂

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2003年3月16日
发表于:2007-07-25 11:30:00
9楼
厉害

kking

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 116回
  • 年度积分:0
  • 历史总积分:134
  • 注册:2002年7月09日
发表于:2007-07-27 16:51:00
10楼
COM未必是趋势吧,OPC UA已经改过自新了,不过还是不彻底。

happyoicq

  • 精华:0帖
  • 求助:0帖
  • 帖子:49帖 | 1382回
  • 年度积分:0
  • 历史总积分:3120
  • 注册:2005年10月16日
发表于:2007-07-28 14:15:00
11楼
学习学习

cade_zk

  • 精华:0帖
  • 求助:0帖
  • 帖子:34帖 | 216回
  • 年度积分:0
  • 历史总积分:503
  • 注册:2005年9月16日
发表于:2007-07-29 18:27:00
12楼
过路

momus

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2007年8月01日
发表于:2007-08-01 17:11:00
13楼
兄弟,麻烦吧GE的那个源码发我好吗,现在急需学习哦
taro_mong@hotmail.com

ll2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 7回
  • 年度积分:0
  • 历史总积分:313
  • 注册:2005年8月16日
发表于:2007-09-10 12:10:00
14楼
GE的谢谢!!
duahua126@126.com

eruter

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2007年7月27日
发表于:2007-09-24 11:58:00
15楼
?不管你用什么方法只要把数据从硬件设备中读取上来并与OPC 项进行关联
可以说得再详细点吗?
我的问题是:例如客户端AddItems(1,m_Items,...),Items是以ItemID唯一标识的吗?客户端增加的OPC项OPC Server中是否得一定存在。OPC Server中是应该要维护一张类似“OPC项的表”的东西,然后“数据从硬件设备中读取上来并与OPC 项进行关联”,而且Server负责更新。
这样理解正确否。
tangshu162@126.com

ninuo

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 135回
  • 年度积分:0
  • 历史总积分:430
  • 注册:2007年4月14日
发表于:2007-09-27 20:21:00
16楼
    学习学习

lyq9980

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 9回
  • 年度积分:0
  • 历史总积分:29
  • 注册:2007年12月24日
发表于:2008-05-09 08:51:35
17楼

不太懂,但要努力学习,会有用的

三四五

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2006年9月18日
发表于:2008-10-12 16:34:34
18楼

天书啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

hebutwh

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2008年11月20日
发表于:2008-11-20 09:56:24
19楼

麻烦给我发一份GE的源码好吗?正在努力学习,谢谢 hebutwh@sina.com

yangqiang0305

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 5回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2008年11月28日
发表于:2008-12-12 14:20:41
20楼
请各位帮帮忙:这个问题想问他家:(大约每10天)对一台便携式计算机通常上载这些数据。 我们想要记录四(4)累加计数器(ie的结果。 4数字或计数,总共),PLC有没有这样的功能

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页