Linux系统读取OPC数据后存入MySQL数据库

Linux系统读取OPC数据后存入MySQL数据库

`
第一章 Linux系统读取Windows下OPC服务器数据
第二章Windows下OpenOPC转发服务安装配置
第三章Linux系统读取OPC数据后存入MySQL数据库
第四章Dygraphs把MySQL数据库数据以曲线形式呈现出来

前言

通过前面两章已经可以从linux系统成功的读取Windows系统下OPC服务器数据了。但是前面的数据读取方式实在Python下交互式的读取模式,这种方式适合调试过程中使用,在实际使用过程中我们需要系统连续不断的更新数据并把数据实时的显示或是存储在数据库。本章将记录如何使用Python脚本自动更新读取的OPC数据并存储至MySQL数据库,方便以后的生成数据历史曲线。


一、MySQL数据库

MySQL数据库的安装配置在这里就不过多记录了,网上相关文章有很多,如果有机会以后专门记录下linux和Windows系统下MySQL安装配置。
这里主要记录下MySQL数据库下针对存储OPC数据时需要建立的数据表结构。
为了方便以后数据读取和减少数据表容量(行数),我们使用OPC点名作为数据表的列名(COLUMNS),同时增加列名HTime(时间),这里的时间我们自动获取本地时间并存储至数据库,这样以后同时操作多个点时存储和读取数据方便可行。创建完的数据库如下图:
在这里插入图片描述
id是数据包主键
HTIME是实时获取的本地时间
VALUE是对应的OPC数据点名
QUALITY是数据点品质(192是品质好,读取正常)
在这里插入图片描述
读取opc点存入数据库后的数据

二、Python脚本

Python脚本的实例需要在下面实例中详细讲解,这里主要强调下,脚本中读取OPC数据时要通过Group读取OPC数据,因为在测试过程中发现不使用Group读的话程序会中断异常退出(连续运行无法超过12小时,这在实际使用过程中是无法接受的),而使用Group读取测试时连续使用48小时都仍然正常。
按Group读取OPC数据代码:

......建立OPC连接
taglist = [u'taglist.aa']
GROUP_NAME = 'test'
opc.read(taglist, group=GROUP_NAME)#首次读取数据
opc_data = opc.read(group=GROUP_NAME)#之后直接使用定义的GROUP_NAME读取数据就可以了
......操作读取到的opc_data数据

三、实例

import time
import OpenOPC
import pymysql
from datetime import datetime
GROUP_NAME = 'test'
opc = OpenOPC.open_client('localhost')
opc.connect('Matrikon.OPC.Simulation.1', 'localhost')# 连接到本地 OPC模拟Server
taglist = [u'taglist.aa']# 点位列表
opc.read(taglist, group=GROUP_NAME)# 创建组对象
db = pymysql.connect(user=数据库用户名,password=数据库密码,host='localhost',db=数据表)
cursor = db.cursor()
try:
   # 循环周期读取
   while True:
       # 请求组
       #opc_data = opc.read(taglist)
       opc_data = opc.read(group=GROUP_NAME)
       for item in opc_data:
           name, valuer, quality, time_ = item
           if quality == 'Good':
               value = valuer
               quality = 192
               ttime=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
               sql = "insert into ceshi(HTIME,VALUE,QUALITY) values(%s,%s,%s)"
               cursor.execute(sql,(ttime,value,quality))
               db.commit()
           else:
               print('Error:  {}'.format(item))*斜体样式*
       time.sleep(2)
finally:
   # 释放资源
   opc.remove(opc.groups())
   db.close()
   opc.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值