Skip to content

Latest commit

 

History

History
340 lines (308 loc) · 16.7 KB

File metadata and controls

340 lines (308 loc) · 16.7 KB

更新日誌

多語言版本 / Multi-language Version
English Version (CHANGELOG_EN.md) | 中文版本 (CHANGELOG.md)

Version 9.0.0 (2026-01-06)

重大更新:日誌系統重構

  • 遷移至 loguru:完全移除自訂的 logger.py 模組,改用 loguru 作為統一日誌系統
    • 所有模組直接使用 logurulogger 物件
    • 提供更強大的日誌功能和更好的性能
    • 支援 TRACE、DEBUG、INFO、WARNING、ERROR 五個日誌級別
  • 統一日誌標籤:所有日誌訊息統一使用 [模組名稱] 格式標籤
    • [main] - 主程式相關日誌
    • [prowavedaq] - DAQ 設備通訊日誌
    • [csv_writer] - CSV 寫入器日誌
    • [sql_uploader] - SQL 上傳器日誌
    • 便於過濾和追蹤特定模組的日誌
  • 日誌配置優化
    • 控制台輸出:INFO、DEBUG、WARNING、TRACE 到 stdout,ERROR 到 stderr
    • 檔案輸出:所有級別(TRACE 及以上)記錄到 logs/loguru.log
    • 自動日誌輪轉:10 MB 大小限制,保留 7 天
    • 統一時間格式:[YYYY-MM-DD HH:MM:SS] [LEVEL] [模組名稱] 訊息內容

日誌增強

  • 新增 TRACE 級別日誌:用於追蹤函數入口/出口和詳細的數據處理流程
  • 新增 DEBUG 級別日誌:用於記錄配置讀取、連接狀態、性能指標等調試資訊
  • 日誌級別調整:將重要性較低的 INFO 訊息調整為 DEBUG 或 TRACE
    • 配置讀取成功 → DEBUG
    • 目錄創建 → DEBUG
    • 線程啟動 → DEBUG
    • 文件下載 → DEBUG
    • 臨時文件操作 → DEBUG
  • 保留重要 INFO 訊息
    • 系統啟動/關閉
    • 開始/停止資料收集
    • DAQ 設備狀態變化
    • 重要錯誤

程式碼改進

  • 完善註解:為所有函數添加清晰的 docstring 和必要的註解
  • 日誌覆蓋:所有關鍵函數和數據處理流程都添加了適當級別的日誌
  • 錯誤處理:改進錯誤訊息的日誌記錄,包含更多上下文資訊

依賴更新

  • 新增 loguru>=0.7.3 依賴套件
  • 移除自訂的 logger.py 模組

向後相容性

  • 日誌格式保持一致的風格,便於閱讀和過濾
  • 所有功能保持不變,僅改進日誌系統

Version 8.1.0 (2025-12-22)

ProWaveDAQ 模組極速優化(High Performance / Zero Latency)

  • 實作智慧讀取邏輯:利用 Data Header 更新剩餘數量,不再每次詢問 Size
    • 新增 cached_buffer_size 本地快取機制,減少 50% 的 Modbus 通訊流量
    • 讀取回來的 Header 會自動更新本地計數,只有當計數為 0 時才詢問硬體
    • 大幅提升通訊效率,減少延遲
  • 新增開機自動清空功能(Hardware Buffer Flush)
    • 啟動時自動排空感測器積壓的舊資料(最多清空 500 個封包,約 6 萬筆資料)
    • 避免因感測器內積壓大量資料而造成的延遲問題
    • 確保系統啟動後立即進入即時模式
  • 移除所有不必要的 sleep,榨乾 RS485 頻寬
    • 僅在緩衝區為空時使用 0.001 秒的短暫休息,避免 CPU 100%
    • 極速模式:全力讀取,不浪費時間
  • 佇列容量擴增:從 5000 增加到 50000,減少資料遺失風險
  • 錯誤處理改進:讀取失敗時重置本地計數,確保資料一致性

CSV Writer 模組高效能優化(Performance & Integrity Fix)

  • 解決 IO 瓶頸:移除每筆資料都 flush 的機制,改為定期刷新
    • 新增時間基礎刷新機制(Time-based Flush):每 1 秒才強制刷新一次硬碟
    • 大幅減少硬碟寫入次數,提升寫入效能
  • 啟用檔案緩衝:設定 128KB 緩衝區(buffering=131072
    • 減少系統呼叫次數,提升整體 IO 效能
  • 批次寫入優化:使用 writerows() 取代迴圈中的 writerow()
    • 一次寫入多行資料,比逐行寫入快得多
  • 時間精度改進:保留微秒級時間戳記
    • 時間戳記格式改為 '%Y-%m-%d %H:%M:%S.%f',包含微秒精度
  • 資料完整性保證:在 update_filename()close() 中使用 os.fsync()
    • 確保資料確實寫入物理硬碟,避免資料遺失

效能提升

  • Modbus 通訊效率提升約 50%(智慧讀取邏輯)
  • CSV 寫入效能大幅提升(減少 flush 次數和系統呼叫)
  • 系統啟動後立即進入即時模式(自動清空舊資料)
  • 減少資料遺失風險(佇列容量擴增)

Version 8.0.2 (2025-12-22)

  • 修正: SQL資料庫時間戳未顯示到毫秒
    • 修改 sql_uploader.py 程式碼建立資料表部分。

Version 8.0.1 (2025-12-22)

  • 優化:資料夾建立邏輯改進
    • 只有在啟用 CSV 或 SQL 時才建立輸出資料夾
    • 避免在不需要儲存檔案時建立空資料夾
    • 如果 SQL 啟用但 CSV 未啟用,也會建立資料夾以存放 SQL 暫存檔

Version 8.0.0 (2025-12-22) - ProWaveDAQ 模組

  • 重大更新:遵循原廠手冊規範
    • 基於原廠手冊 RS485_ModbusRTU通訊說明_PwDAQ.pdf 第 5 頁規範
    • 使用 FC04 (Read Input Registers)
    • 起始位址為 0x02 (Raw data FIFO buffer size)
    • 讀取架構:[Size(1 word)] + [Data(N words)]
    • 從 0x02 開始一次讀取完整封包(包含 Header + Data)
    • 封包解析:raw_packet[0] 是 Header(剩餘大小),raw_packet[1:] 是實際資料
  • 優化:讀取效能提升
    • 超時時間優化:1 秒 → 0.5 秒
    • 添加 skip_encode_mobile = True 以優化讀取效能
    • 遵循手冊 Page 5 流程,減少讀取次數

Version 7.0.0 (2025-12-22) - 主程式與前端

  • 重大更新:移除循環緩衝區,改用降頻佇列架構
    • 移除固定大小循環緩衝區(realtime_data_bufferrealtime_time_buffer
    • 改用 web_data_queue 存儲降頻後的資料供前端使用
    • 降頻比例:50(每 50 點取 1 點,約 156 Hz 更新率)-> 目前為 25:1
    • 前端資料傳輸量減少約 98%(50:1 降頻)-> 目前為 25:1
    • CSV 和 SQL 仍使用原始資料(不降頻,保持完整資料)
  • 改進:前端顯示優化
    • 增量更新方式:使用 push() 將新資料加到圖表右側
    • 使用 splice() 移除左側舊資料,維持固定視窗大小(500 點)-> 目前為 1000
    • 更新頻率:200ms → 100ms
    • 關閉動畫:animation: false(減少閃爍並提升即時性)
    • 關閉互動提示:interaction.mode: 'none'(減少 CPU 消耗)
    • 不顯示資料點:pointRadius: 0(提升繪圖效能)
  • 改進:停止邏輯優化
    • 立即更新 UI(解決延遲問題)
    • 先停止前端更新,再發送停止請求給後端
    • 即使網路錯誤,UI 也會立即停止
  • 改進:狀態同步
    • 檢查後端 is_collecting 狀態
    • 如果後端停止且無新資料,自動同步前端 UI
    • 頁面載入時檢查後端狀態,自動恢復 UI

Version 6.0.2 (2025-12-22)

  • 重大更新:固定大小循環緩衝區架構
    • 使用 numpy array 建立固定大小的循環緩衝區(234,360 個資料點)
    • 資料從第10秒位置開始寫入,前9秒保持為0
    • 當資料超過10秒時,自動將舊資料往前推進(第10秒→第1秒→第2秒...→第9秒→第10秒)
    • 時間陣列同步更新,前9個元素為0,只有最後一個元素有時間值
    • 確保資料持續往前推進,不會停留在同一位置
  • 改進:停止邏輯優化
    • 立即停止 DAQ 讀取,然後停止資料收集執行緒
    • 剩餘檔案上傳和存檔在背景執行,不阻塞前端回應
    • 加入超時機制,避免無限等待
  • 清理:移除未使用的變數和過時註解
    • 移除 realtime_time_write_indexsql_data_buffersql_buffer_max_size 等未使用變數
    • 清理過時和不必要的註解
    • 更新所有程式檔案的版本號為 6.0.2

Version 6.0.1

  • 修正:修復前端資料點數量不穩定的問題
    • 修正後端緩衝區截斷邏輯:確保截斷時保留完整的樣本(必須是3的倍數)
    • 修正前端資料處理邏輯:確保只處理完整的樣本,避免不完整樣本導致資料點數量不一致
    • 修正前端資料點限制計算:改為限制樣本數而非資料點數(78,120 個樣本 = 234,360 個資料點)
    • 簡化前端分組邏輯,確保三個通道的資料點數始終一致

Version 6.0.0

  • 重大更新:執行緒架構重構
    • 將 CSV 和 SQL 寫入分離到獨立執行緒
    • 建立 5 個獨立執行緒:Flask Thread、DAQ Reading Thread、Collection Thread、CSV Writer Thread、SQL Writer Thread
    • 使用 queue.Queue 進行執行緒間通訊,確保執行緒安全
    • 每個組件都在獨立的執行緒中運行,不會互相阻塞
    • 資料流程:DAQ → Collection Thread → CSV/SQL 佇列 → 各自的寫入執行緒
  • 改進:前端顯示優化
    • 顯示最近 10 秒的資料(78,120 個資料點/通道)
    • 不使用抽樣,繪製所有資料點以保持波形完整性
    • 更新頻率:每 200ms 更新一次
    • 資料點數顯示即時更新
  • 改進:後端緩衝區優化
    • 緩衝區大小:10 秒的資料量(234,360 個資料點)
    • 保留最近 10 秒的資料供前端顯示
  • 新增:執行緒同步機制
    • 使用 queue.Queue 進行執行緒間通訊(執行緒安全)
    • 停止時等待所有佇列處理完成,確保資料不遺失

Version 5.0.0

  • 重大更新:移除 Master.ini,改用 csv.ini 和 sql.ini
    • 將 Master.ini 的功能拆分為兩個獨立的設定檔
    • csv.ini:包含 CSV 分檔間隔設定([DumpUnit] 區段的 second 參數)
    • sql.ini:包含 SQL 上傳間隔設定([DumpUnit] 區段的 second 參數)
    • 統一命名規則:兩個設定檔都使用 second 作為參數名稱
    • 前端設定頁面更新:移除 Master.ini 區段,新增 csv.ini 區段
    • 所有功能保持不變,僅改變設定檔結構
  • 改進:統一表單欄位命名規則
    • CSV 分檔間隔欄位:csv_second
    • SQL 上傳間隔欄位:sql_second
    • 保持命名規則一致性
  • 新增:網站 favicon 支援
    • 所有頁面(index.html、config.html、files.html)都使用 imCloud.jpg 作為 favicon
    • 使用 Flask 的 url_for('static', filename='imCloud.jpg') 正確載入

Version 4.2.0

  • 改進:前端顯示時間尺度設定為 10 秒
    • 前端圖表顯示最近 10 秒的資料(每個通道約 78,120 個資料點)
    • 後端緩衝區限制為 10 秒的資料量(234,360 個資料點,包含 3 個通道)
    • 計算:7812 Hz × 10 秒 = 78,120 個點/通道
    • 優化記憶體使用,避免緩衝區無限增長

Version 4.1.0

  • 重大更新:SQL 上傳邏輯重構
    • 改為暫存檔案機制:資料先寫入暫存 CSV 檔案,定時上傳
    • 建立暫存檔案目錄(.sql_temp),檔案命名格式:{timestamp}_sql_temp.csv
    • 新增定時上傳執行緒(sql_upload_timer_loop),每 sql_upload_interval 秒檢查並上傳
    • 上傳成功後自動刪除暫存檔案,並立即建立新暫存檔案(避免資料溢出)
    • 停止時檢查並上傳所有剩餘暫存檔案
    • 降低記憶體使用:資料直接寫入檔案,不佔用記憶體緩衝區
    • 資料持久化:即使程式異常終止,暫存檔案仍保留
  • 新增sql_uploader.py 新增 upload_from_csv_file() 方法
    • 從 CSV 檔案讀取資料並批次上傳至 SQL 伺服器
    • 支援自動建立資料表(如果不存在)
    • 包含錯誤處理與重試機制

Version 4.0.0

  • 改進:程式碼註解完善
    • 為所有核心模組添加完整的中文註解
    • 所有函數和類別都有詳細的 docstring
    • 說明函數用途、參數、返回值、注意事項
    • 移除所有冗餘註解和步驟標記
    • 提升程式碼可讀性和可維護性
  • 改進:技術文件更新
    • 更新 README.md 和 程式運作說明.md 以符合目前程式碼
    • 確保文件與實際程式碼功能一致

Version 3.0.0

  • 重大更新:重構資料讀取邏輯
    • 實現 Normal Mode 和 Bulk Mode 自動切換機制
    • 根據緩衝區狀態(buffer_count)動態選擇讀取模式
    • Normal Mode:當 buffer_count ≤ 123 時,從 Address 0x02 讀取
    • Bulk Mode:當 buffer_count > 123 時,從 Address 0x15 讀取(最多 9 個樣本)
    • FIFO buffer size(0x02) 連同資料一起讀出,確保資料一致性
  • 改進:讀取效率優化
    • 一次讀取 Header 和資料,減少 Modbus 通訊次數
    • 使用 _read_registers_with_header() 方法統一處理讀取邏輯
    • 參考 LabView 轉換版本(G.py)的實現方式
  • 改進:程式碼清理
    • 移除所有冗餘註解和步驟標記
    • 簡化程式碼結構,提升可讀性
    • 移除不再使用的舊方法(_read_fifo_length_read_raw_block 等)
  • 改進:即時資料顯示
    • 移除資料點數限制(原本限制 100000 個資料點)
    • 現在會保留並顯示所有資料
  • 改進:文件更新
    • 更新 README.md 和 程式運作說明.md
    • 詳細說明 Normal Mode 和 Bulk Mode 的運作方式
    • 更新資料流程圖和架構說明

Version 2.3.0

  • 新增:支援啟動時指定 port
    • 可透過命令行參數 --port-p 指定 Flask 伺服器埠號
    • 啟動腳本 run.shrun_with_logs.sh 支援傳遞 port 參數
    • 預設 port 仍為 8080,向後相容
    • 自動驗證 port 範圍(1-65535)

Version 2.2.0

  • 重構prowavedaq.py 架構優化
    • 重新組織程式碼結構,明確區分公開 API 和內部方法
    • 簡化讀取邏輯,移除 remaining_data 機制(每次讀取都是完整批次)
    • 改進 Modbus 連線管理(_connect_disconnect_ensure_connected
    • 新增 Modbus 寄存器常數定義(REG_SAMPLE_RATEREG_FIFO_LEN 等)
    • 模組化讀取流程(_read_fifo_length_read_raw_block_convert_raw_to_float_samples
    • 改進錯誤處理和重連邏輯
    • 確保每次讀取只處理完整的 XYZ 三軸組,避免通道錯位
  • 改進:程式碼註解
    • 為所有核心模組添加詳細的中文註解
    • 說明函數用途、參數、返回值、注意事項
    • 解釋關鍵設計決策和資料流程
    • 提升程式碼可讀性和可維護性
  • 改進:日誌系統
    • 統一 Debug 訊息標籤為 [DEBUG](與其他級別一致)
    • 改進日誌輸出格式的一致性

Version 2.1.0

  • 新增:統一日誌系統 (logger.py)
    • 提供統一的日誌格式:[YYYY-MM-DD HH:MM:SS] [LEVEL] 訊息
    • 支援 INFO、Debug、Error、Warning 四種級別
    • 自動時間戳記
    • 可控制 Debug 訊息開關
  • 修正:通道錯位問題
    • 處理資料長度不是3的倍數的情況
    • 使用 remaining_data 機制追蹤剩餘資料點
    • 確保每次只處理完整的樣本(X, Y, Z 組合)
    • 多執行緒安全保護(使用鎖定機制)
  • 修正:時間戳記計算
    • 根據取樣率自動計算每個樣本的時間戳記
    • 確保分檔時時間戳記連續
    • 每個樣本的時間間隔 = 1 / sample_rate 秒
  • 改進:資料讀取邏輯
    • 添加資料完整性檢查
    • 重新連線時自動清空剩餘資料
    • 停止讀取時處理剩餘資料
  • 改進:分檔邏輯
    • 確保切斷位置在樣本邊界(3的倍數)
    • SQL 上傳時也確保樣本邊界
  • 改進:日誌輸出
    • 隱藏 Flask HTTP 請求日誌
    • 只顯示應用程式的日誌訊息
  • 新增:通道標示
    • CSV 標題明確標示通道對應:Channel_1(X), Channel_2(Y), Channel_3(Z)
  • 新增:分析文檔
    • 通道錯誤可能性分析.md - 詳細分析可能導致通道錯誤的情況

Version 2.0.0

  • 新增:SQL 資料庫上傳功能
    • 支援 MySQL/MariaDB
    • 可選的 SQL 上傳功能
    • 獨立的 sql.ini 設定檔
    • 前端可選擇使用 INI 設定或手動輸入
  • 新增:資料保護機制
    • SQL 上傳失敗時保留資料在緩衝區
    • 最多重試 3 次,遞增延遲
    • 只有上傳成功後才從緩衝區移除
  • 新增:記憶體保護機制
    • SQL 緩衝區上限設定(最多 10,000,000 個資料點)
    • 超過上限時強制上傳
  • 改進:設定檔管理介面
    • 改為固定輸入框模式,防止誤刪參數
    • 支援三個設定檔:ProWaveDAQ.iniMaster.inisql.ini
  • 改進:Master.ini 新增 sql_upload_interval 參數
    • 控制 SQL 上傳間隔(秒數)
    • 運作方式與 CSV 的 second 參數相同

Version 1.0.2

  • 修復:讀取中進入 config 頁面再回到主畫面時,狀態會自動恢復
  • 新增:檔案瀏覽功能,可瀏覽 output 目錄中的資料夾和檔案
  • 新增:檔案下載功能

Version 1.0.1

  • 將 HTML 部分改為模板以簡化 Python 程式碼整潔性

Version 1.0.0

  • 初始版本發布
  • 實現基本的即時資料採集與可視化功能
  • Web 介面控制
  • 自動 CSV 分檔儲存

多語言版本 / Multi-language Version
English Version (CHANGELOG_EN.md) | 中文版本 (CHANGELOG.md)