利用hollias comm OPCserver 与Python实现交互。代码如下:
# -*- coding: utf-8 -*-
from sys import *
from getopt import *
#from os import * 造成f = open('test.txt', 'r') TypeError: an integer is required错误
import signal
import sys
import os
import types
import datetime
import re, time, csv
import OpenOPC
import Pyro
import pypyodbc
import random
print os.name
opc_class='Matrikon.OPC.Automation;Graybox.OPC.DAWrapper;HSCOPC.Automation;RSI.OPCAutomation;OPC.Automation'
client_name='OpenOPC'
opc_server='Hollysys.HOLLiASComm.1'
opc_host='127.0.0.1'
taglist=[]
f=open('test.txt','r')
f.seek(0)
for line in f:
print line,
line=line.rstrip('\n')#去掉换行符
taglist.append(line)
f.close()
print taglist
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
pathfile = 'phone.mdb'
tablename = 'user'
conn = mdb_conn(pathfile)
cur = conn.cursor()
print cur
test=random.randint(0, 10)
tag_vale=[('Channel1.Device1.q',test)]#写随机数给标签q
taglist_opc = opc.read(taglist, update=1000,sync=True)
wropc=opc.write(tag_vale)
print wropc
for i in range(len(taglist_opc)):
(name, val, qual, time) = taglist_opc[i]
if qual=='Good':
print 'name:', name
print 'val:', type(val)
print 'qual:', qual
print 'time:', type(time)
#ll=[name,val,]
#sql = "Insert Into " + tablename + " (a,b,c,d) Values ('"+name+"','"+str(val)+"','"+qual+"','"+time+"')"#为强制类型转换
#sql = "Insert Into " + tablename + " (name,val,qual,time) Values ('"+name+"','123','"+qual+"','"+time+"')"
#sql = "Insert Into " + tablename + " (a,b,c,d) Values ('%s',%.1f,'%s','%s')"%taglist_opc[i] #%s占位
sql = "Insert Into " + tablename + " (a,b,c,d,e) Values ('%s',%.1f,'%s','%s'"%taglist_opc[i]+",'%s')"%tt #%s占位
print sql
if mdb_add(conn, cur, sql):
print("修改成功!")
else:
print("修改失败!")
else:
print'数据采集失败'
cur.close() #关闭游标
conn.close()
def mdb_conn(db_name, password = ""):
"""
功能:创建数据库连接
:param db_name: 数据库名称
:param db_name: 数据库密码,默认为空
:return: 返回数据库连接
"""
str = 'Driver=;PWD' + password + ";DBQ=" + db_name
conn = pypyodbc.win_connect_mdb(str)
return conn
def mdb_add(conn, cur, sql):
"""
功能:向数据库插入数据
:param conn: 数据库连接
:param cur: 游标
:param sql: sql语句
:return: sql语句是否执行成功
"""
try:
cur.execute(sql)
conn.commit()
return True
except:
return False
if __name__ == '__main__':
while True:
test01()
time.sleep(10)
领取专属 10元无门槛券
私享最新 技术干货