OPENOPC python 力控数据存入 mysql

Python 和 组态力控 OPENOPC的 例子很少 大多还都是英文

python 链接OPC有两种方式  一种是 链接本地 一种是链接远程需要OPC客户端 (支持链接多点)

环境 

win7 64操作系统

VS2013 

Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)] on win32

mysql-connector==2.1.6
pypiwin32==223  (这个package 一定要装 要不运行报错 具体我也不知道干啥用的)
Pyro==3.16

pywin32==223(这个好像是多余的 先前安装pypiwin32 少打了个pi然后还真有这个库就安上了 )

力控ForceControl V7.0

我这个力控软件占用80端口 记得把80端口开放

OPENOPC python 力控数据存入 mysql_第1张图片

右下角那个服务 记得一定要启动 安装力控的时候记得安装


好了 上代码


import OpenOPC
import Pyro.core
import mysql.connector
from datetime import datetime
import os
import time
import xlrd
import xlwt
import xml.etree.ElementTree as Etree
 




import sys
reload(sys)
sys.setdefaultencoding('utf8')      # 与MYSQL交互 需要用统一的UTF-8






def gettime():   #获取当前时间函数
    now=datetime.now()
    return now.strftime('%Y-%m-%d %H:%M:%S')




def writelog(str):  #日志函数 保存到程序运行目录下
   with open(os.getcwd()+'\\log.txt','a') as writelog:
            writelog.write(gettime()+str+'\n')




def getneedcolumn(sheetnum):
    data = xlrd.open_workbook(os.getcwd()+'/config.xls')  # 打开Excel文件读取数据
    table = data.sheet_by_index(sheetnum)  # 通过索引顺序获取


    # 获取行数和列数 
    nrows = table.nrows
    ncols = table.ncols
    tag=[]
    tablename=''
    for row in range(1, nrows):  
        tag.append(table.cell(row,0).value)
    tablename=table.cell(0,1).value
    print(tag)
    return tag,tablename


def mainfunction(sheetnum):   #主函数需要执行的函数
    print(u'开始执行')
    print(gettime())
    print(u'#####查询需要更新数据的字段(congfig.xls) fun_getneedcolumn  #######')
    tag=[]
    tablename=''
   
    tag,tablename=getneedcolumn(sheetnum)
  
   
    ##########cursor.execute("select COLUMN_NAME,' ' from information_schema.COLUMNS  where table_name='user' and TABLE_SCHEMA='world'")
    ##########    values = cursor.fetchall()  #[(),(),()]  list tuple
    ##########    for row in values:
    ##########        print(row[0])
    ##########        writelog('需要插入的MYSQL中的字段'+row[0])
    ##########        tag.append(row[0])
    
    print(u'###连接OPENOPC###')
    opc = OpenOPC.client()   #这里还有一种方法    OpenOPC.open_client  这个需要OPC客户端  我在本机试了一下 不好使
    print(u'###查看当前OPCServer信息###')
    print(opc.servers())
    writelog('OPC服务名'+str(opc.servers()))
    


    res = opc.connect('PCAuto.OPCServer') #从opc server清单中选择需要连接的服务
    print(u'####开始读取数据  tag_list  #####')
    tmp = opc.read(tag)      
    


    str_insert_name=''
    str_insert_value=''
    for name,value,result,time in tmp:
        print(name)
        print(value)
        writelog('OPC读取的name:'+str(name)+'value:'+str(value))
        print(result)
        print(time)
        str_insert_name=str_insert_name+name+','
        str_insert_value=str_insert_value+"'"+str(value)+"'"+','


    #new_str_insert_name=  str_insert_name[0:-1]
    new_str_insert_value= str_insert_value[0:-1]
    #print(new_str_insert_name)
    print(new_str_insert_value)


   
    config = {
            'host': '127.0.0.1',
            'user': 'root',
            'password': 'zhaojinlong9922',
            'port': 3306,
            'database': 'world',
            'charset': 'utf8'
                }


    
    print(u'######链接MYSQL数据库#########')
    
    conn = mysql.connector.connect(**config)
    print(conn)
    cursor = conn.cursor()
    insert_sql='insert into %s values(%s) ' %  (tablename,new_str_insert_value)
    print(insert_sql)


    cursor.execute(insert_sql)
    print(cursor.rowcount)
    
    print(u'值 1: 表示成功 其他失败请查看日志')
    
    writelog(insert_sql)


    conn.commit()
    conn.close()
    opc.close()
    if cursor.rowcount==1:
        return True
    else:
        return False
    


if __name__ == '__main__':

   while mainfunction(1) :    #根据EXCEL  sheet 下标 可以配置多个表  如果有表2 那就建个sheet2 格式和这个一样  加一个 

& mainfunction(2)  

        time.sleep(30)
  OPENOPC python 力控数据存入 mysql_第2张图片



你可能感兴趣的:(Python)