运行环境
- python3.8-32位!32位!32位!
- win10
- KEPServerEX.6.4
其他
-
opc 模拟服务器下载
-
https://www.matrikonopc.com/downloads/178/index.aspx
-
https://pan.baidu.com/s/1R4bC-NKLEl4s4FqRfhAIwQ
提取码:07yy
-
环境以及依赖配置
OpenOPC 配置
-
将 OpenOPC 安装目录下 src 文件夹下的
OpenOPC.py
(其他3个py文件随意)复制到 python3.8 安装目录下的Lib\site-packages
目录下,或者你的项目目录下(能import 就行)。 -
使用2to3工具
安装python会自动安装2to3工具,能够将python2 的代码一键转为python3的,支持批量修改
- 查看使用帮助,执行:
2to3 --help
- 这里我们直接把原来的python2 代码替换掉,从此以后只用python3,执行:
2to3 -w -n OpenOPC.py
-n 参数表示不备份原代码
- 修改包名
将 OpenOPC.py 中的 Pyro 全部替换为Pyro4
(升级到 Pyro5的请参考:兼容性转换)
- 修改环境变量
环境变量从哪改就不说了吧
OPC_MODE = open
pip 包依赖
pip install Pywin32
pip install OpenOPC-Python3x
pip install Pyro4 # 此处为 Pyro4(已经有Pyro5)
api 使用
参考上一篇 python2 的openOPC用法,注意开始创建客户端的方法不一样了:
import time
from openopc import OpenOPC
GROUP_NAME = 'test'
opc = OpenOPC.client()
# 查询可用服务
print(opc.servers(opc_host='localhost'))
opc.connect('Kepware.KEPServerEX.V6', 'localhost')
print(opc.list('通道 1.设备 1', recursive=True))
# 点位列表
taglist = [u'通道 1.设备 1.标记 1', u'通道 1.设备 1.标记 2', u'通道 1.设备 1.TAG1']
# 创建组对象
opc.read(taglist, group=GROUP_NAME)
try:
# 循环周期读取
while True:
# 请求组
opc_data = opc.read(group=GROUP_NAME)
# 保存字典
send_values = {}
for item in opc_data:
name, value, quality, time_ = item
if quality == 'Good':
send_values[name] = value
else:
print('Error: {}'.format(item))
print(send_values)
time.sleep(5)
finally:
# 释放资源
opc.remove(opc.groups())
opc.close()
详细用法请参考 官方 API