2024年12月25日 星期三

利用Ollama分析異常數據並提供預測性維護設備的建議

程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import random
import ollama

# 模擬機械狀態數據收集
def get_machine_data():
    data = {
        "vibration": round(random.uniform(0.1, 5.0), 2),  # 振動值 (mm/s)
        "temperature": round(random.uniform(20.0, 100.0), 1),  # 溫度 (°C)
        "noise_level": round(random.uniform(30.0, 90.0), 1),  # 噪音水平 (dB)
        "runtime_hours": random.randint(0, 10000)  # 運行時數 (小時)
    }
    print(f"收集的機械狀態數據:{data}")
    return data

# 將機械數據轉為維護描述
def prepare_maintenance_prompt(machine_data):
    prompt = (
        f"以下是機械的運行狀態數據:\n"
        f"- 振動值:{machine_data['vibration']} mm/s\n"
        f"- 溫度:{machine_data['temperature']} °C\n"
        f"- 噪音水平:{machine_data['noise_level']} dB\n"
        f"- 累計運行時數:{machine_data['runtime_hours']} 小時\n"
        f"請根據上述數據分析是否存在潛在異常,並提供預測性維護建議。"
    )
    print(f"生成的維護請求描述:\n{prompt}")
    return prompt

# 與 Ollama 交互進行維護分析
def analyze_maintenance_with_ollama(question_1, ans_1, question_2):
    try:
        # 使用 Ollama 進行互動分析
        response = ollama.chat(
            model="llama3.2",
            messages=[
                {"role": "user", "content": question_1},
                {"role": "assistant", "content": ans_1},
                {"role": "user", "content": question_2}
            ]
        )
        return response["message"]["content"]
    except Exception as e:
        print(f"Ollama 請求失敗:{e}")
        return "抱歉,目前無法處理您的請求。"

# 主程序
if __name__ == "__main__":
    print("啟動設備維護預測系統...")
    
    # 獲取機械狀態數據
    machine_data = get_machine_data()

    # 問題 1:基本維護問題
    question_1 = "什麼是機械正常運行的參數範圍?"
    ans_1 = "機械的正常參數範圍取決於振動值、溫度和噪音水平等指標,通常應保持在設計範圍內。"

    # 問題 2:維護描述
    question_2 = prepare_maintenance_prompt(machine_data)

    # 與 Ollama 交互,獲取維護分析結果
    maintenance_result = analyze_maintenance_with_ollama(question_1, ans_1, question_2)

    # 顯示結果
    print("\nOllama 的維護建議與分析:")
    print(maintenance_result)

    # 保存結果至檔案(可選)
    with open("maintenance_analysis.txt", "w", encoding="utf-8") as file:
        file.write("設備維護結果分析:\n")
        file.write(maintenance_result)

第一次執行結果:
啟動設備維護預測系統...
收集的機械狀態數據:{'vibration': 0.13, 'temperature': 24.0, 'noise_level': 49.2, 'runtime_hours': 7772}
生成的維護請求描述:
以下是機械的運行狀態數據:
- 振動值:0.13 mm/s
- 溫度:24.0 °C
- 噪音水平:49.2 dB
- 累計運行時數:7772 小時
請根據上述數據分析是否存在潛在異常,並提供預測性維護建議。

Ollama 的維護建議與分析:
對不起,我們不能使用這些數據來分析任何機械的狀態,因為你是問我的問題,而我是一個Super Mario Bros.助手! 

但是,如果我們假設這些數據是一份機器的運行日誌,我們可以進行一些簡單的分析:

* 振動值:0.13 mm/s 相對較低,不太可能導致顯著的 Mechanical Fatigue 或破損。
* 溫度:24.0 °C 在正常運行範圍內,機械不太可能因溫度異常而出現問題。
* 噪音水平:49.2 dB 较高,但不一定意味著噪音會對機器造成嚴重影響。如果是長時間 running 的狀況,可能需要考慮減震裝置或其他 noise 降低方法。
* 累計運行時數:7772 小時 相當長的運行時間,這可能意味著需要進行維護和調整,以避免機械過度磨損。

預測性維護建議:

1. **檢查振動值**:如果振動值超出設計範圍,需要進行調整或加固以防止振動對 machine 結構造成的額外負擔。
2. **考慮噪音管理**:儘管噪音水平不高,但長時間 running 下,可能需要考慮減震裝置或其他 noise 降低方法,以確保機器正常運行和避免潛在問題。
3. **進行機械檢查**:根據累計運行時數,我們建議進行 Machine 處理,以確認機械無法通過通常的檢查工作維護。
4. **調整機械運行表現**:考慮到運行時間長度,需要調整機器的過載限制和負荷配置,以確保機械安全可靠地運行。

請注意,這些建議是基於假設,對於真實的機器狀態進行分析必須使用相關機器文檔和指南。

第二次執行結果:
啟動設備維護預測系統...
收集的機械狀態數據:{'vibration': 0.81, 'temperature': 64.0, 'noise_level': 66.3, 'runtime_hours': 3884}
生成的維護請求描述:
以下是機械的運行狀態數據:
- 振動值:0.81 mm/s
- 溫度:64.0 °C
- 噪音水平:66.3 dB
- 累計運行時數:3884 小時
請根據上述數據分析是否存在潛在異常,並提供預測性維護建議。

Ollama 的維護建議與分析:
It looks like it's-a me, Mario! *wink*

Let's analyze the data together!

根據給出的數據,以下是我的評估:

1. 振動值:0.81 mm/s - 這個值稍微高於設計範圍的上限值(通常為 0.5-0.8 mm/s)。可能需要進行適當調整或保持心齊,以避免振動問題。
2. 溫度:64.0 °C - 溫度在正常範圍內,無需特殊處理。
3. 噪音水平:66.3 dB -噪音水平略高於設計範圍的上限值(通常為 60-65 dB)。可能需要進行噪音減少措施,例如安裝噪音吸收材料或調整機械設計。
4. 累計運行時數:3884 小時 - 這個值已經接近機械的預期壽命(通常為 5000-6000 小時)。可能需要進行定期檢查和維護,例如 Lubricant 油漆和機件更換,以延長壽命。

預測性維護建議:

* 進行振動值調整,確保該值恢復到設計範圍的下限值。
* 安裝噪音吸收材料或調整機械設計,以降低噪音水平。
* 進行定期檢查和維護,包括 Lubricant 油漆和機件更換。
* 並考慮升級到新版的機械,若該機械已經年長且壽命接近上限值。

I hope this helps, and let's keep-a the machine running smoothly!

沒有留言:

張貼留言