机床生产状态监测系统 (Python语言)

需求

系统采用 BS 架构,具备以下功能:

  • 机床管理: 数据在前端的增删改查可以反应到数据库里。
  • 实时机床状态显示: 显示机床的实时温度、电流、震动等数据。
  • 历史数据查询: 查询机床的历史监测数据。
  • 数据可视化:
    • 饼图: 例如:机床监测数据指标(温度,电流,震动)异常时间所占比例和正常时间所占比例。
    • 折线图: 例如:机床的各个监测指标随时间的变化。
  • 登录模块: 用户登录系统进行操作。
  • 故障预警: 当监测数据超过一定阈值时,会发出报警。

数据库设计

由于题目中没有明确给出每张表的具体需求,以下是一个可能的表设计,仅供参考:

  1. 用户表 user

    • id: 用户ID,主键
    • username: 用户名
    • password: 密码
    • role: 用户角色(管理员或普通用户)
  2. 机床表 machine

    • id: 机床ID,主键
    • name: 机床名称
    • type: 机床类型
    • location: 机床位置
  3. 监测数据表 data

    • id: 数据ID,主键
    • machine_id: 机床ID,外键
    • time: 监测时间
    • temperature: 温度
    • current: 电流
    • vibration: 震动
  4. 报警记录表 alarm

    • id: 报警ID,主键
    • machine_id: 机床ID,外键
    • time: 报警时间
    • type: 报警类型(温度、电流或震动)
    • value: 报警数值
  5. 日志表 log

    • id: 日志ID,主键
    • user_id: 用户ID,外键
    • time: 操作时间
    • operation: 操作内容

代码实现

# 导入相关模块
from flask import Flask, render_template, request, redirect, url_for
from flask_mysqldb import MySQL
import matplotlib.pyplot as plt

# 创建 Flask 应用
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'machine_monitor'
mysql = MySQL(app)

# 登录页面
@app.route('/')
def login():
    return render_template('login.html')

# 登录验证
@app.route('/submit_login', methods=['POST'])
def submit_login():
    username = request.form['username']
    password = request.form['password']
    cur = mysql.connection.cursor()
    cur.execute("SELECT id, role FROM user WHERE username=%s AND password=%s", (username, password))
    user = cur.fetchone()
    if user:
        if user['role'] == 'admin':
            return redirect(url_for('admin_home'))
        else:
            return redirect(url_for('user_home'))
    else:
        return redirect(url_for('login'))

# 管理员首页
@app.route('/admin_home')
def admin_home():
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM machine")
    machines = cur.fetchall()
    return render_template('admin_home.html', machines=machines)

# 添加机床页面
@app.route('/add_machine')
def add_machine():
    return render_template('add_machine.html')

# 添加机床
@app.route('/submit_machine', methods=['POST'])
def submit_machine():
    name = request.form['name']
    type = request.form['type']
    location = request.form['location']
    cur = mysql.connection.cursor()
    cur.execute("INSERT INTO machine (name, type, location) VALUES (%s, %s, %s)", (name, type, location))
    mysql.connection.commit()
    return redirect(url_for('admin_home'))

# 编辑机床页面
@app.route('/edit_machine/<int:machine_id>')
def edit_machine(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM machine WHERE id=%s", (machine_id,))
    machine = cur.fetchone()
    return render_template('edit_machine.html', machine=machine)

# 编辑机床
@app.route('/submit_edit_machine/<int:machine_id>', methods=['POST'])
def submit_edit_machine(machine_id):
    name = request.form['name']
    type = request.form['type']
    location = request.form['location']
    cur = mysql.connection.cursor()
    cur.execute("UPDATE machine SET name=%s, type=%s, location=%s WHERE id=%s", (name, type, location, machine_id))
    mysql.connection.commit()
    return redirect(url_for('admin_home'))

# 删除机床
@app.route('/delete_machine/<int:machine_id>')
def delete_machine(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("DELETE FROM machine WHERE id=%s", (machine_id,))
    mysql.connection.commit()
    return redirect(url_for('admin_home'))

# 用户首页
@app.route('/user_home')
def user_home():
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM machine")
    machines = cur.fetchall()
    return render_template('user_home.html', machines=machines)

# 实时监测页面
@app.route('/monitor/<int:machine_id>')
def monitor(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM machine WHERE id=%s", (machine_id,))
    machine = cur.fetchone()
    cur.execute("SELECT * FROM data WHERE machine_id=%s ORDER BY time DESC LIMIT 1", (machine_id,))
    latest_data = cur.fetchone()
    return render_template('monitor.html', machine=machine, latest_data=latest_data)

# 历史数据页面
@app.route('/data/<int:machine_id>')
def data(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("SELECT * FROM machine WHERE id=%s", (machine_id,))
    machine = cur.fetchone()
    cur.execute("SELECT * FROM data WHERE machine_id=%s ORDER BY time DESC", (machine_id,))
    data = cur.fetchall()
    return render_template('data.html', machine=machine, data=data)

# 饼图页面
@app.route('/pie_chart/<int:machine_id>')
def pie_chart(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("SELECT COUNT(*) AS count FROM data WHERE machine_id=%s AND (temperature>50 OR current>10 OR vibration>5)", (machine_id,))
    abnormal_count = cur.fetchone()['count']
    cur.execute("SELECT COUNT(*) AS count FROM data WHERE machine_id=%s AND (temperature<=50 AND current<=10 AND vibration<=5)", (machine_id,))
    normal_count = cur.fetchone()['count']
    plt.pie([abnormal_count, normal_count], labels=['异常时间', '正常时间'])
    plt.title('机床监测数据指标异常时间所占比例')
    plt.savefig('static/pie_chart.png')
    return render_template('pie_chart.html')

# 折线图页面
@app.route('/line_chart/<int:machine_id>')
def line_chart(machine_id):
    cur = mysql.connection.cursor()
    cur.execute("SELECT time, temperature, current, vibration FROM data WHERE machine_id=%s ORDER BY time", (machine_id,))
    data = cur.fetchall()
    time = [d['time'] for d in data]
    temperature = [d['temperature'] for d in data]
    current = [d['current'] for d in data]
    vibration = [d['vibration'] for d in data]
    plt.plot(time, temperature, label='温度')
    plt.plot(time, current, label='电流')
    plt.plot(time, vibration, label='震动')
    plt.legend()
    plt.title('机床监测数据指标随时间的变化')
    plt.savefig('static/line_chart.png')
    return render_template('line_chart.html')

if __name__ == '__main__':
    app.run()

注意:

  • 以上代码只是一个示例,实际实现中可能需要根据具体需求进行调整。
  • 代码中的 static/pie_chart.pngstatic/line_chart.png 文件路径需要根据实际情况进行修改。
  • 系统中还需添加前端页面,具体内容可以根据实际需求进行设计。
  • 为了方便测试,代码中使用了默认的用户名和密码,实际使用中需要进行修改。
  • 代码中的阈值 50, 10, 5 是示例值,需要根据实际情况进行调整。
机床生产状态监测系统 (Python语言) - 实时监控、数据可视化和故障预警

原文地址: https://www.cveoy.top/t/topic/nxOO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录