首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PYthon 简易OPC数据采集写入Access

利用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)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171212G0WGU200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券