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部署腳本會自動執行以下步驟:
- 檢查並安裝 Python 3、pip、venv(如需要)
- 建立 Python 虛擬環境
- 安裝所需依賴套件
- 設定串列埠權限(將用戶加入 dialout 群組)
- 驗證安裝是否成功
- 檢查設定檔案
注意: 執行部署腳本需要 sudo 權限以設定串列埠權限和安裝系統套件。
# 建立虛擬環境(推薦)
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 或 venv\Scripts\activate # Windows
# 安裝依賴套件
pip install -r requirements.txtsudo usermod -a -G dialout $USER
# 重新登入或執行以下指令使權限生效
newgrp dialout重要: 執行此命令後,您需要:
- 登出並重新登入系統,或
- 執行
newgrp dialout使權限立即生效
# 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
Modbus設備通訊設定:
[ProWaveDAQ]
serialPort = /dev/ttyUSB0 # 串列埠路徑(Linux)或 COM1(Windows)
baudRate = 3000000 # 鮑率(bps)
sampleRate = 7812 # 取樣率 (Hz)
slaveID = 1 # Modbus從站ID數據儲存設定:
[SaveUnit]
second = 5 # 數據儲存間隔(秒)# 啟動虛擬環境(如使用)
source venv/bin/activate
# 執行主程式
python main.py- 載入設定:程式會自動載入
API/Master.ini和API/ProWaveDAQ.ini設定檔 - 初始化設備:建立Modbus連線並設定參數
- 輸入標籤:為此次數據採集輸入標籤名稱
- 開始採集:程式開始持續讀取振動數據
- 數據儲存:根據設定的時間間隔自動儲存CSV檔案
- 退出程式:按 'Q' 鍵退出程式
- 輸入標籤:為數據檔案命名,建議使用描述性名稱(例如:測試1、正常運轉、異常檢測等)
- 退出程式:在數據採集過程中按 'Q' 鍵安全退出
- 中斷程式:使用 Ctrl+C 強制中斷(不建議,可能導致數據遺失)
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 格式
- 標籤: 用戶輸入的標籤名稱
- 序號: 自動遞增的檔案序號(每達到儲存間隔時建立新檔案)
__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設備
__init__(channels, output_dir, label): 初始化CSV寫入器channels: 通道數量(通常為3)output_dir: 輸出目錄路徑label: 標籤名稱
add_data_block(data): 新增數據區塊到CSV檔案update_filename(): 更新檔案名稱(建立新檔案)close(): 關閉CSV檔案
錯誤訊息:
錯誤:無法找到相容的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錯誤訊息:
Permission denied: '/dev/ttyUSB0'
解決方法:
# 檢查設備是否存在
ls -l /dev/ttyUSB*
# 檢查用戶是否在 dialout 群組中
groups
# 如果不在,加入 dialout 群組
sudo usermod -a -G dialout $USER
newgrp dialout # 立即生效
# 檢查權限
ls -l /dev/ttyUSB0錯誤訊息:
[Error] 無法建立Modbus連線!
[Error] Modbus 連線錯誤: [Connection] Failed to connect
解決方法:
- 檢查USB連接是否穩定
- 確認設備電源正常
- 檢查
API/ProWaveDAQ.ini中的設定:- 串列埠路徑是否正確
- 鮑率是否與設備匹配(通常為 3000000)
- 從站ID是否正確(通常為 1)
- 確認設備未被其他程式佔用
- 檢查設備驅動程式是否正確安裝
可能原因:
- 取樣率設定不正確
- 設備回應異常
- 電源供應不穩定
- 連線中斷(程式會自動嘗試重新連線)
解決方法:
- 檢查
API/ProWaveDAQ.ini中的sampleRate設定 - 確認設備正常運作
- 檢查電源供應
- 查看程式輸出的錯誤訊息
錯誤訊息:
PermissionError: [Errno 13] Permission denied
解決方法:
- 檢查輸出目錄權限
- 確認磁碟空間充足
- 檢查檔案是否被其他程式佔用
- 確認用戶有寫入權限
程式已內建自動重新連線機制,但連續失敗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++ 目錄