zoukankan      html  css  js  c++  java
  • python工业互联网监控项目实战4—python opcua

      前面章节我们采用OPC作为设备到上位的信息交互的协议,本章我们介绍跨平台的OPC UA。OPC作为早期的工业通信规范,是基于COM/DCOM的技术实现的,用于设备和软件之间交换数据,最初,OPC标准仅限于Windows操作系统。OPCOLE for Process Control的缩写(中文意思:用于过程控制的OLE)。

    OPC规范包括了3大部分:

    1. OPC DA:OPC实时数据访问规范,定义了包括数据值,更新时间与数据品质信息的相关标准。前面实战2我们使用openOPC获取的tag位号值就属于OPC DA,通过OPC DA读取底层设备的状态、工业参数等位号的实时数据。
    2. OPC HDA:OPC历史数据访问规范,定义了查询、分析历史数据和含有时标的数据的方法。
    3. OPC AE:OPC报警事件访问规范,定义了报警与时间类型的消息类信息,以及状态变化管理等相关标准。

    由于基于COM/DCOM的技术有着不能跨平台的根本缺点,随着技术的发展,OPC基金会在2008年发布了新的规范:OPC UA OPC Unified ArchitectureOPC 统一框架。

    1. OPC UA是什么 

      2008年发布的OPC统一架构(UA)将各个OPC Classic规范的所有功能集成到一个可扩展的框架中,独立于平台并且面向服务。OPC UA规范不再是基于COM/DCOM技术,因此OPC UA不仅能在Windows平台上实现,更可以在Linux,以及其它的嵌入式平台中实现。 

    这种多层方法实现了最初设计UA规范时的目标: 

    1. 功能对等性:所有COM OPC Classic规范都映射到UA
    2. 平台独立性:从嵌入式微控制器到基于云的基础设施
    3. 安全性:信息加密、身份验证和审核
    4. 可扩展性:添加新功能而不影响现有应用程序的能力
    5. 综合信息建模:用于定义复杂信息

    2. OPC UA相对于传统OPC的变化 

    功能对等性 

    OPC UA不仅支持传统OPC的所有功能,更支持更多新的功能: 

    1. 发现:在本地PC和/或网络上查找可用的OPC服务器
    2. 地址空间:所有数据都是分层表示的(例如文件和文件夹),允许OPC客户端发现、利用简单和复杂的数据结构
    3. 按需:基于访问权限读取和写入数据/信息
    4. 订阅:监视数据/信息,并且当值变化超出客户端的设定时报告异常
    5. 事件:基于客户端的设定通知重要信息
    6. 方法:客户端可以基于在服务器上定义的方法来执行程序等
    7. OPC UA产品和OPC Classic产品之间的集成可以通过COM/Proxy Wrappers轻松实现。

    平台独立性

      鉴于市场上有各种各样的硬件平台和操作系统,平台独立性就显得至关重要。OPC UA包含但不限于以下平台及系统:

      硬件平台:传统PC硬件、云服务器、PLC、微控制器(ARM等)

      操作系统:Microsoft WindowsApple OSXAndroid或任何Linux发行版本等

      OPC UA为企业之间的互操作性提供必要的M2MM2E及两者之间的基础架构。

    安全性

      最大的变化是OPC UA可以通过任何单一端口(经管理员开放后)进行通信,这使得OPC通信不再会由于防火墙受到大量的限制,实现Internet 通讯。

    综合信息建模

      OPC UA信息建模框架将数据转换为信息。通过完全面向对象的功能,即使是最复杂的多级结构也可以建模和扩展。数据类型和结构在配置文件中定义。 例如,现有的OPC Classic规范被建模为UA配置文件,也可以由其他组织扩展:

        更详细的内容请参阅OPC基金会官网:http://opcfoundation.cn/ 

     3. 安装python-opcua组件 

      pip安装:pip install opcua  

      组件按照完毕后,我们可以在python环境执行uadiscover命令查看效果: 

       由于运行电脑上没有运行的opcua服务端,命令没有发现任何opcua服务。下面通过运行opcua上最新的服务端代码再来看看效果。

    1. C:PythonPython36-32Scripts下创建examples目录;
    2. Copy opcua源码下的server-minimal.pyC:PythonPython36-32Scriptsexamples
    3. C:PythonPython36-32目录下运行命令,如下图:
    4. python C:PythonPython36-32Scriptsexamplesserver-minimal.py 

      重新运行uadiscover命令,结果如下:

        现在连接到 OPCUA Sever 的模拟器提供的 OPC UA 服务了。

    4. 创建一个4C9反应罐的OPCUA Server模拟器

    4.1. Solution上添加一个Python Application Project  Tank4C9Svr

     

       打开Tank4C9Svr.py文件,修改Example里的server-minimal.py文件里代码,模拟4C9反应罐如下: 

    import sys
    sys.path.insert(0, "..")
    import time
    import random
    
    from opcua import ua, Server
    
    
    if __name__ == "__main__":
    
        # setup our server
        server = Server()
        server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")
    
        # setup our own namespace, not really necessary but should as spec
        uri = "http://examples.freeopcua.github.io"
        idx = server.register_namespace(uri)
    
        # get Objects node, this is where we should put our nodes
        objects = server.get_objects_node()
    
        # populating our address space
        myobj = objects.add_object(idx, "Tank4C9")
        status = myobj.add_variable(idx, "Status", 0)
        overheadFlow = myobj.add_variable(idx, "OverheadFlow", 0)
        buttomsFlow = myobj.add_variable(idx, "ButtomsFlow", 0)
        power = myobj.add_variable(idx, "Power", 0)
    
        #myVar.set_writable()    # Set MyVariable to be writable by clients
    
    
        # starting!
        server.start()
        
        try:
            count = 0
            while True:
                time.sleep(5)
                count = count + 1
                print(count%4)
                if count%4>0:
                    status.set_value(1)
                else:
                    status.set_value(0)
    
                a= random.randint(100,500)
                print("OverheadFlow:"+str(a))
                overheadFlow.set_value(a)
                buttomsFlow.set_value(random.randint(50,500))
                power.set_value(random.randint(1000,5000))
        finally:
            #close connection, remove subcsriptions, etc
            server.stop()

       我们把Tank4C9Svr设置成solution默认启动项目后,F5调试运行Tank4C9Svr,如下图:

     5. opcua-client浏览4C9 opcua服务器

      安装:pip install opcua-client

      cmd窗口C:PythonPython36-32Scripts目录下执行opcua-client.exe命令,如下图: 

     

     

        地址栏输入 opc.tcp://localhost:4840 点击连接按钮,就能看见我们构建的Tank4C9设备和对于的tag变量了,如下图:

      我们可以在变量上右键来订阅数据变化的读取最新的数据值。

     

      6. 小结

      本小节主要介绍了OPC DAOPC UA之间的关系,更多详细的信息参考OPC基金会官网。首先,我们使用 python-opcua 组件模拟构建一个Tank4C9的反应罐OPC UA服务器,然后,演示OPC UAObjects是如何构建的。最后,展示opcua-client连接这个OPCUA服务器并订阅数据变化是如何的显示效果。下一节我们将用演示监控如何迁移到OPC UA数据通信协议。

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/haozi0804/p/12751127.html
Copyright © 2011-2022 走看看