OPC与OPC UA
2016-02-03 15:53
316 查看
什么是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的接口定义如下:
//********************************************************* // IOPCGroup Interface [ object, dual,oleautomation, uuid(28E68F96-8D75-11d1-8DC3-3C302A000000), helpstring("OPC Group Object"), pointer_default(unique) ] interface IOPCGroup : IDispatch { // Properties [propget,helpstring("Returns the parent OPCServer")] HRESULT Parent([out, retval] IOPCAutoServer ** ppParent ); [propget] HRESULT Name([out, retval] BSTR * Name ); [propput] HRESULT Name([in] BSTR Name ); [propget,helpstring("True if this group is public")] HRESULT IsPublic([out, retval] VARIANT_BOOL * IsPublic ); [propget,helpstring("True if this group is active")] HRESULT IsActive([out, retval] VARIANT_BOOL * IsActive ); [propput] HRESULT IsActive([in] VARIANT_BOOL IsActive ); [propget,helpstring("True if this group will get asynchronous data updates")] HRESULT IsSubscribed([out, retval] VARIANT_BOOL * IsSubscribed ); [propput] HRESULT IsSubscribed([in] VARIANT_BOOL IsSubscribed ); [propget] HRESULT ClientHandle([out, retval] LONG * ClientHandle ); [propput] HRESULT ClientHandle([in] LONG ClientHandle ); [propget] HRESULT ServerHandle([out, retval] LONG * ServerHandle ); [propget] HRESULT LocaleID([out, retval] LONG * LocaleID ); [propput] HRESULT LocaleID([in] LONG LocaleID ); [propget] HRESULT TimeBias([out, retval] LONG * TimeBias ); [propput] HRESULT TimeBias([in] LONG TimeBias ); [propget] HRESULT DeadBand([out, retval] FLOAT * DeadBand ); [propput] HRESULT DeadBand([in] FLOAT DeadBand ); [propget,helpstring("Rate data can be returned to an application (in mSec)")] HRESULT UpdateRate([out, retval] LONG * UpdateRate ); [propput] HRESULT UpdateRate([in] LONG UpdateRate ); [id(0),propget,helpstring("Returns the OPCItems collection")] HRESULT OPCItems([out, retval] OPCItems ** ppItems ); // Methods HRESULT SyncRead( [in] SHORT Source, [in] LONG NumItems, [in] SAFEARRAY(LONG) * ServerHandles, [out] SAFEARRAY(VARIANT) * Values, [out] SAFEARRAY(LONG) * Errors, [out,optional] VARIANT * Qualities, [out,optional] VARIANT * TimeStamps); HRESULT SyncWrite( [in] LONG NumItems, [in] SAFEARRAY(LONG) * ServerHandles, [in] SAFEARRAY(VARIANT) * Values, [out] SAFEARRAY(LONG) * Errors); HRESULT AsyncRead( [in] LONG NumItems, [in] SAFEARRAY(LONG) * ServerHandles, [out] SAFEARRAY(LONG) * Errors, [in] LONG TransactionID, [out] LONG * CancelID); HRESULT AsyncWrite( [in] LONG NumItems, [in] SAFEARRAY(LONG) * ServerHandles, [in] SAFEARRAY(VARIANT) * Values, [out] SAFEARRAY(LONG) * Errors, [in] LONG TransactionID, [out] LONG * CancelID); HRESULT AsyncRefresh( [in] SHORT Source, [in] LONG TransactionID, [out] LONG * CancelID); HRESULT AsyncCancel( [in] LONG CancelID); };
什么是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 HDA2.更加开放,平台无关性,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也可以生成不同级别的事件日志,但日志内容不够详细,只会提供“谁连接上服务器”这种,而对于OPCUA来说都是默认的功能,生成的日志内容更全面。
后面会放上OPC UA的DEMO。
相关文章推荐
- 关于大型网站技术演进的思考(四):存储的瓶颈(4)
- php中获取网站访客来源的关键词方法
- Linux curl命令参数详解--转载
- Linux命令:rm
- 解决sitescope时间偏差问题
- linux下zip文件解压后乱码解决方案
- 配置Tomcat/部署工程/工程名及应用名修改/代理服务器
- linux系统上安装paramiko模块
- 关于高并发电子商务网站购物流程设计思路的回答
- J2EE开发 eclipse中将web工程部署到Tomcat的webApps目录下
- 关于大型网站技术演进的思考(三):存储的瓶颈(3)
- OCP考点实战演练02-日常维护篇
- Shell脚本中执行sql语句操作mysql
- Linux常用指令---ssh/scp
- 限时抢购秒杀系统架构分析与实战
- Using TurboVNC 0.6 and VirtualGL 2.1.4 to run OpenGL Application Remotely on CentOS
- Linux流量监控工具 - iftop (最全面的iftop教程)
- 解决sitescope打不开或空白问题
- 手把手教你创建自己的网站
- hadoop进程pid文件问题