基于Python 的设备动态智能监测系统开发
2021-03-23黄初敏
黄初敏
(东风柳州汽车有限公司,柳州 545000)
Python 作为人工智能领域的热门计算机编程语言,具有语言简洁易上手、可移植性强以及扩展库丰富等优势,被广泛应用于前端开发、后端开发、爬虫开发、人工智能、大数据以及物联网等领域。Python 具有丰富而强大的库,常被称为胶水语言,能够把用其他语言编写的各种模块(尤其是C/C++)轻松集成在一起。智能制造注重信息化与自动化的深度融合。Python 对工业控制的兼容性极强,但目前行业内将Python 应用于工业自动化控制领域的成熟应用案例较少[1]。本项目将基于Python 编程语言,配合智能传感元件和工业控制PLC,开发用于监测设备动态的智能监测系统。
1 功能设计
项目实施方案如图1 所示,具体方案及步骤包括以下5 个方面。第一,在重点设备上安装智能传感器(震动、温度、电流等),通过IO-LINK 模块或RS422/485 模块采集传感器数据。数据经过PLC 初步处理后,以浮点型(real)数据格式存储在PLC 的DB 数据块内。浮点型数据可存储带小数点的数据,数据准确性较高。第二,利用Python 调用第三方模块编写读取PLC DB 数据块的程序,再利用封装好的SQL 指令将数据转存至上位机内的MySQL 数据库内。数据以序号、数值以及采集时间的格式按序存储在表内,便于调取和追溯。第三,从MySQL 数据库读取数据,利用Matlab 模块绘制数据曲线,以不同颜色区分不同数据,可实现放大、缩小以及拖动等常规操作。第四,对历史数据进行大数据分析形成算法。利用数据分析的方法可以提炼收集的各种形式的数据,从数据中发现规律,进而利用发现的规律预测数据的走向,从而帮助人们进行生产经营或者其他决策[2]。第五,利用自学习算法实现设备重大故障预警和智能预测功能。
图1 项目实施方案示意图
2 程序设计
项目试点对象为东风柳州汽车有限公司商用车总装车间一线主线的主传动轴,需要监测主轴的震动、温度及变频器电流数据。在开展程序设计前,需要安装如表1 所示的软件及Python 程序。
表1 软件/组件需求表
2.1 传感器数据采集
由于主线采用西门子S315-2PN/DP PLC 作为主控单元,现场采用profinet 工业以太网通信,传感器连接在IOLINK模块上。传感器及模块安装完毕后,需要在step7 组态界面对IOLINK 模块进行组态。以震动数据为例,利用梯形图编程,将震动数据处理后存储在PLC DB1000.DBD6 内,数据格式为real,即浮点型数据。
2.2 读取PLC 数据
Python 支持开源第三方库程序的调用,利用snap7 工具可实现PC 直接通过TCP 网口连接PLC,无需额外的OPC 软件进行中转。
通过以下指令可测试PLC 连接及数据读取。
import snap7 #导入第三方模块
plc=snap7.client.Client()
plc.connect("192.168.8.1",0,2) #连接PLC
data=plc.read_area(0x84,1000,6,4)#读取DB1000.DBD6数据
……
其中,plc.connect("192.168.8.1",0,2) 代码中的IP 地址为PLC IP 地址;“0”代表PLC 机架号;“2”代表PLC插槽号。西门子S300 系列PLC 的机架号为0,插槽号为2。而data=plc.read_area(0x84,1000,6,4)代码中,“0x84”代表访问的对象是PLC 的DB 块(I 点为0x81,Q 点为0x82,M 点为0x83),“1000”为DB 块编号,“6”为DB 块起始地址,“4”代表读取数据长度(real 为4,word 为2,dword 为4,bit 则为1)。代码执行后若可正常读出数据,说明通信及数据读取正常。
2.3 创建数据库及数据表
传感器数据读取程序写在PLC 的OB35 系统块内,系统默认扫描周期为100ms,即每0.1s 反馈一个实时数据,数据量庞大。Python 的元祖、列表以及字典皆无法满足庞大的数据存储需求,故需要将读取的数据存储到MySQL 数据库中,并设置固定的数据格式,程序如下(部分)。
import pymysql#导入pymysql 模块
conn=pymysql.connect(……user=’root’,passwd=’xx xx’,db=’plc_data’) #连接数据库
cur=conn.cursor() #获取游标
cur.execute(‘drop table if exists plcdata") #创建plcdata 表
sql=”””CREATE TABLE IF NOT EXISTS`plcdata`……”””
cur.execute(sql)
通过上述代码可在MySQL 中创建名为“plc_data”的数据库,并创建名为“plcdata”,列名为“序号”“数值”“采集时间”的表。其中,“采集时间”可利用datetime 模块获取系统时间。数据库创建完毕后已具备数据写入条件,利用sql=”insert into plcdata values(%s,%s,%s)”指令可将从PLC 采集的数据用SQL 指令写入创建好的表内。
2.4 趋势图绘制
数据存储到MySQL 后,需要把数据以趋势图的方式展现出来,此时需要用到第三模块Matplotlib。Matplotlib 是Python 中最常用的可视化工具之一,可以非常方便地创建高质量的不同类型的2D 图表和一些基本的3D 图表[3]。通过读取数据库的数据,利用图谱工具绘制出运行曲线,所有代码最终执行结果如图2 所示(图2 中利用navicat 查看数据库信息)。
图2 项目最终效果
3 结语
本项目设计的一种基于Python 的设备动态智能监测系统,可实现车间重点设备的震动、温度以及电流等核心参数动态监测。监测数据实时存储在MySQL 数据库内,可实现历史数据追溯,借助Matplotlib 第三方模块可实现图谱分析,最后配合大数据算法实现设备故障预警功能,辅助企业最终实现智能制造。