Skip to content

JW-Albert/ProWaveDAQ-Python-Package-Unit

Repository files navigation

ProWaveDAQ Python版本

概述

ProWaveDAQ Python版本是一個振動數據採集系統,使用Modbus RTU通訊協議與振動感測器進行通訊。此版本完全保留了原始C++版本的所有功能,並提供了更簡潔的Python介面。

功能特色

  • Modbus RTU通訊:支援串列埠通訊,可設定鮑率、從站ID等參數
  • 多通道數據採集:支援3通道振動數據同時採集
  • 即時數據處理:背景執行緒持續讀取數據,確保數據不遺失
  • 自動重新連線:當連線中斷時自動嘗試重新連線
  • CSV數據儲存:自動將數據儲存為CSV格式,支援時間戳記
  • 可配置參數:透過INI檔案設定通訊參數和儲存間隔
  • 設備掃描:自動掃描可用的Modbus設備
  • 跨平台支援:支援Windows和Linux系統

系統需求

  • Python 3.10 或更高版本
  • 支援的作業系統:Windows 10/11, Linux (Ubuntu, CentOS, Raspberry Pi OS等)
  • 串列埠設備(USB轉串列埠轉換器)
  • 至少 100MB 可用磁碟空間(用於數據儲存)

快速開始

自動部署(推薦)

使用提供的自動部署腳本進行一鍵安裝:

chmod +x deploy.sh
sudo ./deploy.sh

部署腳本會自動執行以下步驟:

  1. 檢查並安裝 Python 3、pip、venv(如需要)
  2. 建立 Python 虛擬環境
  3. 安裝所需依賴套件
  4. 設定串列埠權限(將用戶加入 dialout 群組)
  5. 驗證安裝是否成功
  6. 檢查設定檔案

注意: 執行部署腳本需要 sudo 權限以設定串列埠權限和安裝系統套件。

手動安裝

1. 安裝Python依賴套件

# 建立虛擬環境(推薦)
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# 或 venv\Scripts\activate  # Windows

# 安裝依賴套件
pip install -r requirements.txt

2. 設定串列埠權限(Linux系統)

sudo usermod -a -G dialout $USER
# 重新登入或執行以下指令使權限生效
newgrp dialout

重要: 執行此命令後,您需要:

  • 登出並重新登入系統,或
  • 執行 newgrp dialout 使權限立即生效

3. 檢查串列埠設備

# Linux系統
ls /dev/ttyUSB*

# Windows系統
# 在裝置管理員中查看COM埠

檔案結構

ProWaveDAQ_Python_Package_Unit/
├── prowavedaq.py          # ProWaveDAQ主要類別
├── csv_writer.py          # CSV寫入器類別
├── main.py                # 主程式
├── requirements.txt       # Python依賴套件清單
├── deploy.sh              # 自動部署腳本
├── README.md              # 本說明檔案
├── API/
│   ├── ProWaveDAQ.ini     # ProWaveDAQ設定檔
│   └── Master.ini         # 主設定檔
└── output/                # 數據輸出目錄
    └── ProWaveDAQ/        # 振動數據檔案
        └── {時間戳記}_{標籤}/
            └── {時間戳記}_{標籤}_{序號}.csv

設定檔案說明

ProWaveDAQ.ini

Modbus設備通訊設定:

[ProWaveDAQ]
serialPort = /dev/ttyUSB0    # 串列埠路徑(Linux)或 COM1(Windows)
baudRate = 3000000          # 鮑率(bps)
sampleRate = 7812           # 取樣率 (Hz)
slaveID = 1                 # Modbus從站ID

Master.ini

數據儲存設定:

[SaveUnit]
second = 5                  # 數據儲存間隔(秒)

使用方法

1. 基本使用

# 啟動虛擬環境(如使用)
source venv/bin/activate

# 執行主程式
python main.py

2. 程式執行流程

  1. 載入設定:程式會自動載入 API/Master.iniAPI/ProWaveDAQ.ini 設定檔
  2. 初始化設備:建立Modbus連線並設定參數
  3. 輸入標籤:為此次數據採集輸入標籤名稱
  4. 開始採集:程式開始持續讀取振動數據
  5. 數據儲存:根據設定的時間間隔自動儲存CSV檔案
  6. 退出程式:按 'Q' 鍵退出程式

3. 程式操作

  • 輸入標籤:為數據檔案命名,建議使用描述性名稱(例如:測試1、正常運轉、異常檢測等)
  • 退出程式:在數據採集過程中按 'Q' 鍵安全退出
  • 中斷程式:使用 Ctrl+C 強制中斷(不建議,可能導致數據遺失)

輸出檔案格式

CSV檔案格式

Timestamp,Channel_1,Channel_2,Channel_3
2024-01-15T10:30:00.123456,0.1234,-0.5678,0.9012
2024-01-15T10:30:00.123567,0.2345,-0.6789,0.0123
...
  • Timestamp: ISO 8601 格式的時間戳記(微秒精度)
  • Channel_1, Channel_2, Channel_3: 三個通道的振動數據(浮點數)

檔案命名規則

{時間戳記}_{標籤}_{序號}.csv

範例:
20240115103000_測試數據_001.csv
20240115103000_測試數據_002.csv
  • 時間戳記: YYYYMMDDHHMMSS 格式
  • 標籤: 用戶輸入的標籤名稱
  • 序號: 自動遞增的檔案序號(每達到儲存間隔時建立新檔案)

API參考

ProWaveDAQ類別

主要方法

  • __init__(): 初始化ProWaveDAQ物件
  • scan_devices(): 掃描可用的Modbus設備(/dev/ttyUSB*)
  • init_devices(filename): 從INI檔案初始化設備並建立連線
  • start_reading(): 開始讀取振動數據(在背景執行緒中執行)
  • stop_reading(): 停止讀取振動數據並關閉連線
  • get_data(): 取得最新的振動數據(非阻塞,從佇列中取出)
  • get_data_blocking(timeout): 阻塞式取得振動數據(等待最多timeout秒)
  • get_counter(): 取得數據讀取次數
  • reset_counter(): 重置計數器
  • get_sample_rate(): 取得取樣率

主要屬性

  • serial_port: 串列埠路徑
  • baud_rate: 鮑率
  • sample_rate: 取樣率(Hz)
  • slave_id: Modbus從站ID

內部方法

  • _read_loop(): 背景讀取迴圈(自動處理連線中斷和重新連線)
  • _reconnect(): 重新連線到Modbus設備

CSVWriter類別

方法

  • __init__(channels, output_dir, label): 初始化CSV寫入器
    • channels: 通道數量(通常為3)
    • output_dir: 輸出目錄路徑
    • label: 標籤名稱
  • add_data_block(data): 新增數據區塊到CSV檔案
  • update_filename(): 更新檔案名稱(建立新檔案)
  • close(): 關閉CSV檔案

故障排除

常見問題

1. pymodbus import錯誤

錯誤訊息:

錯誤:無法找到相容的pymodbus版本
請確認已安裝pymodbus: pip install pymodbus

解決方法:

# 確保在虛擬環境中
source venv/bin/activate

# 安裝或升級 pymodbus
pip install --upgrade pymodbus>=3.6.0

# 如果仍有問題,嘗試重新安裝
pip uninstall pymodbus
pip install pymodbus>=3.6.0

2. 無法找到串列埠設備

錯誤訊息:

Permission denied: '/dev/ttyUSB0'

解決方法:

# 檢查設備是否存在
ls -l /dev/ttyUSB*

# 檢查用戶是否在 dialout 群組中
groups

# 如果不在,加入 dialout 群組
sudo usermod -a -G dialout $USER
newgrp dialout  # 立即生效

# 檢查權限
ls -l /dev/ttyUSB0

3. Modbus連線失敗

錯誤訊息:

[Error] 無法建立Modbus連線!
[Error] Modbus 連線錯誤: [Connection] Failed to connect

解決方法:

  • 檢查USB連接是否穩定
  • 確認設備電源正常
  • 檢查 API/ProWaveDAQ.ini 中的設定:
    • 串列埠路徑是否正確
    • 鮑率是否與設備匹配(通常為 3000000)
    • 從站ID是否正確(通常為 1)
  • 確認設備未被其他程式佔用
  • 檢查設備驅動程式是否正確安裝

4. 數據讀取異常

可能原因:

  • 取樣率設定不正確
  • 設備回應異常
  • 電源供應不穩定
  • 連線中斷(程式會自動嘗試重新連線)

解決方法:

  • 檢查 API/ProWaveDAQ.ini 中的 sampleRate 設定
  • 確認設備正常運作
  • 檢查電源供應
  • 查看程式輸出的錯誤訊息

5. CSV檔案無法寫入

錯誤訊息:

PermissionError: [Errno 13] Permission denied

解決方法:

  • 檢查輸出目錄權限
  • 確認磁碟空間充足
  • 檢查檔案是否被其他程式佔用
  • 確認用戶有寫入權限

6. 連線中斷後無法自動恢復

程式已內建自動重新連線機制,但連續失敗5次後會停止讀取。

解決方法:

  • 檢查設備連接
  • 確認設備電源
  • 重新啟動程式
  • 檢查串列埠是否被其他程式佔用

除錯模式

在程式中加入除錯資訊:

import logging
logging.basicConfig(level=logging.DEBUG)

或在執行時設定環境變數:

PYTHONPATH=. python main.py

依賴套件版本

本專案使用以下主要依賴套件:

  • pymodbus: >=3.6.0 - Modbus RTU 通訊協議實作
  • pyserial: >=3.5.1 - 串列埠通訊支援

詳細套件清單請參考 requirements.txt

效能優化建議

  • 使用SSD硬碟:提高CSV檔案寫入速度
  • 適當調整取樣率:平衡數據品質和儲存需求
  • 定期清理舊數據:避免磁碟空間不足
  • 使用虛擬環境:避免套件衝突
  • 監控系統資源:確保有足夠的記憶體和CPU資源

版本歷史

  • v1.0.0 (2024): 初始Python版本,完整移植C++功能
    • 基本Modbus RTU通訊
    • 3通道數據採集
    • CSV數據儲存
    • 自動重新連線機制
    • 自動部署腳本

授權條款

本專案採用與原始C++版本相同的授權條款。

聯絡資訊

如有問題或建議,請聯絡開發團隊。

相關資源

  • Modbus RTU 通訊說明文件:548081255582007572_Vibration_RS485_ModbusRTU通訊說明_20230418.pdf
  • 原始C++版本:請參考專案中的 C++ 目錄

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks