OPC与OPC UA

什么是OPC协议?

为了便于自动化行业不同厂家的设备和应用程序能相互交换数据,定义了一个统一的接口函数,就是OPC协议规范。有了OPC就可以使用统一的方式去访问不同设备厂商的产品数据。

OPC基金会前前后后规定了不同的接口定义,如下:

• OPC DA (Data Access, exchange of real-time values) 
• OPC A&E (Alarms & Events, exchange of alarms and events) 
• OPC HDA (Historical Data Access, exchange of historical values) 
• OPC XML DA (XML-based exchange of real-time values)

以上所有的接口定义,我们现在都统称为OPC。OPC是基于WINDOWS COM/DOM接口技术来规定的。

比如我们可以了解下OPCGroup的接口定义如下:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //*********************************************************  
  2. // IOPCGroup Interface  
  3. [  
  4. object,  
  5. dual,oleautomation,  
  6. uuid(28E68F96-8D75-11d1-8DC3-3C302A000000),  
  7. helpstring("OPC Group Object"),  
  8. pointer_default(unique)  
  9. ]  
  10. interface IOPCGroup : IDispatch  
  11. {  
  12. // Properties  
  13. [propget,helpstring("Returns the parent OPCServer")]  
  14. HRESULT Parent([out, retval] IOPCAutoServer ** ppParent );  
  15. [propget]  
  16. HRESULT Name([out, retval] BSTR * Name );  
  17. [propput]  
  18. HRESULT Name([in] BSTR Name );  
  19. [propget,helpstring("True if this group is public")]  
  20. HRESULT IsPublic([out, retval] VARIANT_BOOL * IsPublic );  
  21. [propget,helpstring("True if this group is active")]  
  22. HRESULT IsActive([out, retval] VARIANT_BOOL * IsActive );  
  23. [propput]  
  24. HRESULT IsActive([in] VARIANT_BOOL IsActive );  
  25. [propget,helpstring("True if this group will get  
  26. asynchronous data updates")]  
  27. HRESULT IsSubscribed([out, retval] VARIANT_BOOL * IsSubscribed );  
  28. [propput]  
  29. HRESULT IsSubscribed([in] VARIANT_BOOL IsSubscribed );  
  30. [propget]  
  31. HRESULT ClientHandle([out, retval] LONG * ClientHandle );  
  32. [propput]  
  33. HRESULT ClientHandle([in] LONG ClientHandle );  
  34. [propget]  
  35. HRESULT ServerHandle([out, retval] LONG * ServerHandle );  
  36. [propget]  
  37. HRESULT LocaleID([out, retval] LONG * LocaleID );  
  38. [propput]  
  39. HRESULT LocaleID([in] LONG LocaleID );  
  40. [propget]  
  41. HRESULT TimeBias([out, retval] LONG * TimeBias );  
  42. [propput]  
  43. HRESULT TimeBias([in] LONG TimeBias );  
  44. [propget]  
  45. HRESULT DeadBand([out, retval] FLOAT * DeadBand );  
  46. [propput]  
  47. HRESULT DeadBand([in] FLOAT DeadBand );  
  48. [propget,helpstring("Rate data can be returned to an  
  49. application (in mSec)")]  
  50. HRESULT UpdateRate([out, retval] LONG * UpdateRate );  
  51. [propput]  
  52. HRESULT UpdateRate([in] LONG UpdateRate );  
  53. [id(0),propget,helpstring("Returns the OPCItems  
  54. collection")]  
  55. HRESULT OPCItems([out, retval] OPCItems ** ppItems );  
  56. // Methods  
  57. HRESULT SyncRead(  
  58. [in] SHORT Source,  
  59. [in] LONG NumItems,  
  60. [in] SAFEARRAY(LONG) * ServerHandles,  
  61. [out] SAFEARRAY(VARIANT) * Values,  
  62. [out] SAFEARRAY(LONG) * Errors,  
  63. [out,optional] VARIANT * Qualities,  
  64. [out,optional] VARIANT * TimeStamps);  
  65. HRESULT SyncWrite(  
  66. [in] LONG NumItems,  
  67. [in] SAFEARRAY(LONG) * ServerHandles,  
  68. [in] SAFEARRAY(VARIANT) * Values,  
  69. [out] SAFEARRAY(LONG) * Errors);  
  70. HRESULT AsyncRead(  
  71. [in] LONG NumItems,  
  72. [in] SAFEARRAY(LONG) * ServerHandles,  
  73. [out] SAFEARRAY(LONG) * Errors,  
  74. [in] LONG TransactionID,  
  75. [out] LONG * CancelID);  
  76. HRESULT AsyncWrite(  
  77. [in] LONG NumItems,  
  78. [in] SAFEARRAY(LONG) * ServerHandles,  
  79. [in] SAFEARRAY(VARIANT) * Values,  
  80. [out] SAFEARRAY(LONG) * Errors,  
  81. [in] LONG TransactionID,  
  82. [out] LONG * CancelID);  
  83. HRESULT AsyncRefresh(  
  84. [in] SHORT Source,  
  85. [in] LONG TransactionID,  
  86. [out] LONG * CancelID);  
  87. HRESULT AsyncCancel(  
  88. [in] LONG CancelID);  
  89. };  


什么是OPC UA?

为了应对标准化和跨平台的趋势,为了更好的推广OPC,OPC基金会近些年在之前OPC成功应用的基础上推出了一个新的OPC标准-OPC UA。OPC UA接口协议包含了之前的 A&E, DA,OPC XML DA or HDA,只使用一个地址空间就能访问之前所有的对象,而且不受WINDOWS平台限制,因为它是从传输层Scoket以上来定义的,这点后面会提到,导致了灵活性和安全性比之前的OPC都提升了。


OPC UA的优势:

1.一个通用接口集成了之前所有OPC的特性和信息,A&E, DA,OPC XML DA or HDA

2.更加开放,平台无关性,WINDOWS,LINUX都能兼容

3.扩展了对象类型,支持更复杂的数据类型比如变量,方法和事件

4.在协议和应用层集成了安全功能,更加安全

5.易于配置和使用


核心的区别是因为OPC和OPC UA协议使用的TCP层不一样,如下:

OPC是基于DOM/COM上,应用层最顶层;OPC UA是基于TCP IP scoket 传输层.


其他一些区别:

OPC虽然通过配置COM/DOM来提供数据加密和签名功能,配置防火墙,用户权限来让数据访问变得更加安全,但是会增加额外的工作量,尤其是对非IT的工程师来说;对于OPC UA,数据加密和签名,防火墙等都是默认的功能。比如基于DOM的OPC使用的动态端口分配,端口不固定,让防火墙难以确定,而OPC UA的端口都是唯一的,比如SINUMERIK 840D是PORT 4840,SIMATIC S7是PORT 4845。DOM/COM也可以生成不同级别的事件日志,但日志内容不够详细,只会提供“谁连接上服务器”这种,而对于OPC UA来说都是默认的功能,生成的日志内容更全面。

后面会放上OPC UA的DEMO。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值