מקצה לקצה – מסימולציה ועד מערכת Real-Time מקצועית המשלבת Industry 4.0
המטרה: הבנת האקו-סיסטם של מפעל מודרני מבוסס נתונים.
המטרה: יצירת "תאום דיגיטלי" (Digital Twin) המייצר נתונים פיזיקליים ריאליים.
timestamp, temperature, pressure, vibration
# ==============================================
# סימולטור חיישנים תעשייתיים
# קובץ: sensor_simulator.py
# ==============================================
import random
import csv
from datetime import datetime, timedelta
def generate_sensor_data(num_samples=100):
"""יוצר נתוני חיישנים מדומים עם רעש אקראי רציף"""
data = []
start_time = datetime.now()
for i in range(num_samples):
timestamp = start_time + timedelta(seconds=i)
# טמפרטורה: בסיס 50°C עם רעש גאוסיאני
temperature = round(50 + random.gauss(0, 10), 2)
temperature = max(20, min(80, temperature))
# לחץ: בסיס 5.5 bar
pressure = round(5.5 + random.gauss(0, 1.5), 2)
pressure = max(1, min(10, pressure))
# רטט: בסיס 2.5 mm/s
vibration = round(2.5 + random.gauss(0, 0.8), 2)
vibration = max(0, min(5, vibration))
data.append({
'timestamp': timestamp.strftime('%Y-%m-%d %H:%M:%S'),
'temperature': temperature,
'pressure': pressure,
'vibration': vibration
})
return data
def save_to_csv(data, filename='sensor_data.csv'):
with open(filename, 'w', newline='', encoding='utf-8') as file:
fieldnames = ['timestamp', 'temperature', 'pressure', 'vibration']
writer = csv.DictWriter(file, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(data)
print(f"✅ נשמרו {len(data)} דגימות לקובץ {filename}")
if __name__ == "__main__":
sensor_data = generate_sensor_data(100)
save_to_csv(sensor_data)
sensor_data.csv מוכן
לניתוח.
המטרה: הפעלת "בינה" על הנתונים הגולמיים וזיהוי חריגות (Anomaly Detection).
# ==============================================
# ניתוח נתוני חיישנים
# קובץ: data_analysis.py
# ==============================================
import pandas as pd
def analyze_sensor_data(filename='sensor_data.csv'):
df = pd.read_csv(filename)
print("\n� סטטיסטיקות מערכת:")
print("-" * 30)
for col in ['temperature', 'pressure', 'vibration']:
print(f"{col.capitalize()}: Mean={df[col].mean():.2f}, Max={df[col].max():.2f}")
# זיהוי חריגות
critical_temp = df[df['temperature'] > 70]
print(f"\n⚠️ התראות קריטיות: {len(critical_temp)} דגימות מעל 70°C")
return df
if __name__ == "__main__":
analyze_sensor_data()
המטרה: יצירת יחידת HMI (Human Machine Interface) להנגשת נתונים למקבלי החלטות.
# ==============================================
# דשבורד חיישנים - Streamlit
# קובץ: dashboard.py
# ==============================================
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
st.set_page_config(page_title="🏭 Industrial Dashboard", layout="wide")
st.title("🏭 ניטור חיישנים תעשייתי")
df = pd.read_csv('sensor_data.csv')
df['timestamp'] = pd.to_datetime(df['timestamp'])
# KPIs
cols = st.columns(3)
cols[0].metric("🌡️ טמפרטורה", f"{df['temperature'].mean():.1f}°C")
cols[1].metric("🔧 לחץ", f"{df['pressure'].mean():.1f} bar")
cols[2].metric("📳 רטט", f"{df['vibration'].mean():.2f} mm/s")
# Charts
fig = make_subplots(rows=3, cols=1, shared_xaxes=True)
fig.add_trace(go.Scatter(x=df['timestamp'], y=df['temperature'], name="Temp"), row=1, col=1)
fig.add_trace(go.Scatter(x=df['timestamp'], y=df['pressure'], name="Pressure"), row=2, col=1)
fig.add_trace(go.Scatter(x=df['timestamp'], y=df['vibration'], name="Vibration"), row=3, col=1)
st.plotly_chart(fig, use_container_width=True)
שאלות קיומיות למערכת:
המטרה: יצירת פרוטוקול תקשורת מודרני מבוסס HTTP לאיסוף נתונים מיחידות הקצה (PLC/Edge).
from fastapi import FastAPI
from pydantic import BaseModel
import csv, os, datetime
app = FastAPI(title="Industrial Edge API")
@app.post("/sensor")
def receive_data(r: Reading):
ts = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('realtime_data.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow([ts, r.temperature, r.pressure, r.vibration])
return {"status": "received", "timestamp": ts, "data": r.dict()}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
דימוי של בקר מתוכנת השולח פקודות ונתונים לשרת ה-API באופן אוטונומי.
import requests, time, random
def send_data():
while True:
data = {
"temperature": round(random.uniform(20, 100), 2),
"pressure": round(random.uniform(0, 15), 2),
"vibration": round(random.uniform(0, 5), 2)
}
try:
r = requests.post("http://localhost:8000/sensor", json=data)
print(f"Sent: {data} | Status: {r.status_code}")
except:
print("Connection failed...")
time.sleep(1)
if __name__ == "__main__":
send_data()
השלב הסופי והמרשים ביותר! יצירת ממשק ויזואלי המציג את נתוני המפעל בגרפים אינטראקטיביים.
import streamlit as st
import pandas as pd
import plotly.express as px
import time
st.set_page_config(page_title="Industrial Dashboard", layout="wide")
st.title("🏭 Real-Time Factory Monitor")
def load_data():
return pd.read_csv('realtime_data.csv', names=['time', 'temp', 'pres', 'vib'])
placeholder = st.empty()
while True:
try:
df = load_data()
with placeholder.container():
kpi1, kpi2, kpi3 = st.columns(3)
kpi1.metric("Temperature", f"{df['temp'].iloc[-1]}°C")
kpi2.metric("Pressure", f"{df['pres'].iloc[-1]} bar")
kpi3.metric("Vibration", f"{df['vib'].iloc[-1]} mm/s")
fig = px.line(df.tail(20), x='time', y=['temp', 'pres', 'vib'], title="Sensor Trends")
st.plotly_chart(fig, use_container_width=True)
except:
st.info("Waiting for sensor data...")
time.sleep(1)
איך מה שלמדנו בכיתה מתרגם למפעל חכם אמיתי?
| רכיב בקורס | מקביל במפעל | תפקיד במערכת |
|---|---|---|
| 🔌 sensor_simulator.py | חיישן פיזי (RTD, Pressure Transducer) | מדידת ערכים פיזיים בשטח והמרתם לאותות דיגיטליים. |
| 🐍 Python Scripts | Edge Computer / IoT Gateway | עיבוד נתונים קרוב למקור, סינון ודחיסה לפני שליחה לענן. |
| 📄 CSV Files | Industrial Historian (OSIsoft, InfluxDB) | אחסון ארוך טווח של נתוני תהליך לצורך אופטימיזציה וניתוח. |
| 📊 Dashboard | SCADA / HMI (WinCC, Ignition) | ממשק פיקוח ובקרה המאפשר למפעיל לקבל החלטות בזמן אמת. |
למי שרוצה לקחת את המערכת לשלב הבא של מקצועיות.
שליחת הודעות אוטומטיות לנייד כאשר מזוהה חריגה מסוכנת באחד החיישנים.
שימוש במודלים של Machine Learning כדי לזהות תקלות עוד לפני שהן קורות (Predictive Maintenance).
מעבר מעבודה עם קבצי CSV למסד נתונים מקצועי כמו SQLite או PostgreSQL לניהול נתונים מאובטח.