Python OpenOPC与NI LabVIEW网络变量通信

介绍

OPC(Object Linking and Embedding(OLE) for Process Control)是基于微软的 DCOM 的通信,用于过程控制和制造业自动化系统。

  • OPC DA(Data Access 协议,是最基本的 OPC 协议)
  • OPC HDA(Historical Data Access 协议,有数据库)
  • OPC UA(OPC UA: Unified Architecture 统一架构协议)

NI

NI LabVIEW 内的网络变量部署后,会在“NI 分布式系统管理器”中出现,这是基于 OPC 通信的,可以使用 OPC 读取与写入。

image

Python(OpenOPC)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import OpenOPC
import time

gateway='127.0.0.1'
opchost='127.0.0.1'
opcserv='National Instruments.Variable Engine.1'
taglist=['test.Variable1']
#taglist=['12.OPC1.Simulation Examples.Functions.Sine1',
#'12.OPC1.Simulation Examples.Functions.Sine2']
opc=OpenOPC.open_client(gateway)
opc.connect(opcserv,opchost)

while True:
v=opc.read(taglist)
print v[0]
print v[1]
print '-------------------------------------------------------'
time.sleep(1)


opc.close()

测试本地

  • 无需 OpenOPC 网关服务
  • Python2.7 OpenOPC
1
2
3
4
5
>>> import OpenOPC
>>> opc = OpenOPC.client()
>>> opc.connect('National Instruments.Variable Engine.1')
>>> print opc.read('test.var')
(3.0, 'Good', '10/31/19 00:53:20')

测试远程

  • OPC 客户端

    1. win10 系统
    2. Python2.7 OpenOPC
  • OPC 服务端

    1. winxp
    2. 安装 OpenOPC 网关服务
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\OpenOPC\bin> OpenOPCService.exe -install
    Installing service OpenOpcService
    Service installed
    Starting the service

    C:\OpenOPC\bin> net start zzzOpenOpcService
    Stopping the service

    C:\OpenOPC\bin> net stop zzzOpenOpcService
  • 测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Python 2.7.17 (v2.7.17:c2f86d86e6, Oct 19 2019, 20:49:36) [MSC v.1500 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import OpenOPC
    >>> opc = OpenOPC.open_client('192.168.2.220')
    >>> opc
    <DynamicProxy for PYRO://192.168.2.220:7766/c0a802dc076c1cbada8377276cdfc7f0>
    >>> opc.connect('National Instruments.Variable Engine.1','192.168.2.220')
    >>> print opc.read('test.var')
    (3.0, 'Good', '10/31/19 00:53:20')
    >>> opc.write(('test.var2',5.0))
    'Success'
    >>> print opc.read('test.var2')
    (5.0, 'Good', '10/31/19 00:54:44')

    注意点

  1. 使用 OpenOPC 安装包,安装网关服务
  2. 网卡顺序会导致返回 IP 错误(print OpenOPC.open_client(gateway))修改网卡的跃点数来修改次序
  3. 防火墙关闭或者将 7766 端口加入防火墙设置(OpenOPC)
坚持原创技术分享,您的支持将鼓励我继续创作!