Python OpenOPC的学习观感

最近由于公司项目让我研究工业标准协议OPC,开始的设计是在Linux环境用C/C++进行编写。但是经过几天的努力也没有发现可用的免费开发包,网上的收费开发包如:Softing公司的Toolkit和Matrikon公司的SDK是可以进行Linux环境下的开发。由于公司为了节省成本,又转向其他方向----需求免费开源的开发工具。网上免费开放的开发都是基于Windows下的VB、VC和C#,因为opc需要调用windows下的DCOM组件,由于这个原因成为了Linux环境下开发的主要障碍。最后我找到了OpenOPC:

OpenOPC for Python is a free, open source OPC (OLE for Process Control) toolkit designed for use with the popular Python programming language. The unique features that set

it apart from the many commercially available OPC toolkits include...

This project utilizes the de facto OPC-DA (Win32 COM-based) industrial automation standard.

If you are looking for an OPC XML-DA library for Python, then please visit thePyOPCproject.

下面我就介绍一下OpenOPC开发工具的使用,因为我发现网上这方面的资料太少了(当然你也可以看OpenOPC的官网说明http://openopc.sourceforge.net/about.html,不过内容很少)。

首先,我们来谈谈OpenOPC-1.3.1.win32-py2.7.exe:

当你安装完毕OpenOPC-1.3.1.win32-py2.7.exe时,在你的安装路径可以看到如下目录:

bin目录下有两个文件:opc.exe和OpenOPCService.exe,这两个文件是src目录下的opc.py和OpenOPCService.py生成的,他们是可以在命令提示符下直接运行的,具体操作可以查看README.txt文件;

doc目录下是OpenOPC的说明文件,通过它你可以了解到OpenOPC的具体使用方法,主要是测试工具opc.py或opc.exe文件的使用;

lib目录下主要是OpenOPC所要调用的库文件gbda_aut.dll;

src目录下包括opc.py、OpenOPCService.py、OpenOPC.py、SystemHealth.py;

其次,我们来谈谈测试OPC

server-----MatrikonOPCSimulation

点击MatrikonOPCSimulation.exe文件对其进行安装,安装完毕后需要将其服务器的名字设置到环境变量中:OPC_SERVER=matrikon.OPC.simulation

启动MatrikonOPC

server of simulation软件设置其属性就OK了,具体操作请查看软件文档;

我们再来谈谈OpenOPC的原理:

从测试demo---opc.py中我们可以看到它的启动方式有两种:docm和open。dcom方式是直接调用本机上的DCOM组件,而open方式是通过zzzopenopcservice(OpenOPC

Gateway Service on Windows)来调用windows上的DCOM组件,因此你在调用时要认真区分;

zzzopenopcservice的启动,详情请查看OpenOPC/doc/OpenOPC.pdf文档;

你还可以通过opc.py上的不同命令测试拉取MatrikonOPC

server of simulation上的数据信息;

最后,我们谈谈MACSV系统OPC

Server通信软件的使用和测试代码的应用实例:

安装MACSV系统OPC

Server通信软件,并将其服务器的名字设置到环境变量中:OPC_SERVER=Hollysys.MACSV5OPCServer;

启动MACSV5OPCServer,设置其属性;

测试代码opctest1.py如下:

from sys import *

from getopt import *

from os import *

import signal

import sys

import os

import types

import datetime

import re, time, csv

import OpenOPC

import Pyro

opc_class='Matrikon.OPC.Automation;Graybox.OPC.DAWrapper;HSCOPC.Automation;RSI.OPCAutomation;OPC.Automation'

client_name='OpenOPC'

opc_server='Hollysys.MACSV5OPCServer'

opc_host='127.0.0.1'

taglist=['Server1.Group0.opc_01','Server1.Group0.opc_02','Server1.Group1.rule1','Server1.Group1.rule2','Server2.Group0.sg1','Server2.Group0.sg2','Server2.Group1.sg2','Server2.Group1.sg1']

class SigHandler:

def __init__(self):

self.signaled = 0

self.sn = None

def __call__(self, sn, sf):

self.sn = sn

self.signaled += 1

# Establish signal handler for keyboard interrupts

def signalhandle():

sh = SigHandler()

signal.signal(signal.SIGINT,sh)

if os.name == 'nt':

signal.signal(signal.SIGBREAK,sh)

signal.signal(signal.SIGTERM,sh)

return sh

def test01():

opc = OpenOPC.client(opc_class, client_name)

print "### create opc!"

opc.connect(opc_server, opc_host)

print "### connect opc server:", opc_server

test02(opc)

taglist_opc = opc.read(taglist)

info_opc = opc.info()

servers_opc = opc.servers(opc_host)

tags = []

data = opc.list(tags, flat=True)

list_opc = opc.list

list_data = list_opc(tags)

opc.close()

print "### close opc!"

for i in range(len(taglist_opc)):

(name, val, qual, time) = taglist_opc[i]

print 'name:', name

print 'val:', val

print 'qual:', qual

print 'time:', time

print

print "value:", str(list(taglist_opc))

print "info:", str(list(info_opc))

print "servers:", str(list(servers_opc))

print "data:", str(list(data))

print "list:", str(list(list_data))

def test02(opc):

count0 = 0

sh = signalhandle()

while not sh.signaled:

print "test02... ", count0

data_opc = opc.read(tags=['Server1.Group0.opc_01'],

#group='test',

#size=group_size,

#pause=tx_pause,

#source=data_source,

update=1000,

#timeout=timeout,

#sync=sync,

#include_error=include_err_msg)

)

print "[test02] data:", str(list(data_opc))

try:

time.sleep(1)

except IOError:

break

count0 += 1

def main():

test01()

if __name__ == '__main__':

main()

具体开发包和测试代码可以到http://download.csdn.net/detail/cl185303590/8821585进行下载。

python网课观后感_Python OpenOPC的学习观后感相关推荐

  1. 知道python网课答案_Python程序设计答案

    [简答题]编程实现在复数范围下一元二次方程的求解问题. [简答题]你目前熟知的Python语言编辑工具有哪些?请列举出来. [简答题]Python语言中import语句和from语句在执行导入模块操作 ...

  2. python网课什么平台好-python网课什么平台好

    学习计算机方面的网络课程当然要听听行业标杆谷歌怎么说.谷歌公司为了指导新鲜的程序猿们快速入行,开了一份网络课程学习清单Google Technical Development Guide.这份课程清单 ...

  3. python网课一般多少钱-Python培训网课一般学费多少?毕业生能承担吗?

    Python培训网课一般学费多少?Python培训网课学费一般在2万元以内,学费超过2万以上的不要考虑了.所学的课程内容大致相同,低价的培训机构缺乏优质的师资团队和实战项目.按照课程大纲.师资团队.学 ...

  4. python网课推荐-python网课什么平台好

    学习计算机方面的网络课程当然要听听行业标杆谷歌怎么说.谷歌公司为了指导新鲜的程序猿们快速入行,开了一份网络课程学习清单Google Technical Development Guide.这份课程清单 ...

  5. 风变编程python18_如何看待风变编程的 Python 网课?

    刚刚结束了风变python网课的基础语法和精进爬虫模块的学习,首先要感谢各位助教的陪伴和鼓励. 我大学的专业是经济学和金融,需要处理很多数据,在大学期间有学习一些经济学专用的软件来处理数据,但是毕业之 ...

  6. python程序只能使用源代码进行运行、不能打包_中国大学MOOC计算机程序设计语言(Python)网课答案...

    中国大学MOOC计算机程序设计语言(Python)网课答案 表达式[3] in [1, 2, 3, 4]的值为________________. python 3.x语句 print(1, 2, 3, ...

  7. python编程零基础免费网课-Python网课推荐——免费学习Python编程

    对于想要学习python的初学者,面对网上大量的学习素材无从下手.今天小编就整理了一份详细的python教学视频合集,希望能为初学者提供一些学习的方向. 1.python入门 课程推荐:零基础入门学习 ...

  8. python免费网课-Python网课推荐——免费学习Python编程

    对于想要学习python的初学者,面对网上大量的学习素材无从下手.今天小编就整理了一份详细的python教学视频合集,希望能为初学者提供一些学习的方向. 1.python入门 课程推荐:零基础入门学习 ...

  9. python免费网课-python网课资源

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 对于有志学习python的开发者来说,python吸引人的地方不仅是有一个优秀的社 ...

最新文章

  1. JavaScript创建或填充任意长度的数组
  2. 搭建SSM框架之Spring
  3. Linux采用服务器网址,Linux实现https方式访问站点
  4. Python风格总结:Python3 标准库概览
  5. Java定义一维数组从键盘赋值
  6. linux检查nfs服务,Linux-nfs服务
  7. css中引入下载字体的方法
  8. python_使用需要的气象台站提取气象数据
  9. c语言中要求五个数一行,c 语言中如何一行输出五个数
  10. python抓取网站访客手机号_网站获取访客QQ系统
  11. Python web客户端编程简单示例
  12. Galaxy数据统计平台(二)
  13. Python 实现查找1000以内的质数
  14. 《信用管理》--信用评分方法
  15. 微pe添加网络组件_对第三方PE加以定制的基本方法
  16. Cstyle的UEFI导读: UEFI的N种实现及差别
  17. 昭阳K2450笔记本安装Linux,可能是最难拆的笔记本:lenovo 联想 昭阳K2450 升级固态硬盘的艰难历程...
  18. python 时间序列预测——NARX循环神经网络
  19. JDK1.8下载与安装
  20. 防抖和节流以及应用场景

热门文章

  1. cdn属于一种技术吗
  2. IP地址、子网掩码、网关的概念—Vecloud微云
  3. windows下编译支持https的curl
  4. request,logging,ConfigParser——接口框架
  5. 暴君第一季/全集Tyrant迅雷下载
  6. ORACLE查询删除重复记录
  7. 请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)...
  8. uva 11020 - Efficient Solutions
  9. AS3.0的int uint Number的使用原则
  10. Transact_SQL小手册