Skip to content

yellow-radio/C_sharp_train

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Motor Motion Simulation System (馬達運動模擬系統)

本專案為基於 C# .NET WinForms 開發的運動控制模擬軟體。開發目標在於實作使用者介面與邏輯狀態機,並透過非同步編程優化系統效能。


核心技術點

1. 非同步編程與 I/O 處理 (Async / Await)

為確保使用者介面(UI)在執行耗時任務時不產生鎖死(Lock-up),本專案全面採用非同步架構:

  • JSON 序列化存取:使用 await File.ReadAllTextAsyncTask.Run 處理配方檔案讀寫。
  • 任務分流:確保大量數據序列化邏輯運行於背景執行緒,維持 UI 執行緒的流暢度。

2. 有限狀態機 (Finite State Machine, FSM)

系統行為由明確的狀態機驅動,提升程式碼的可維護性與邏輯嚴密性:

  • 狀態管理:定義 IdleMovingHomingError 狀態。
  • 行為封裝:將物理計算邏輯與狀態切換解耦,確保系統在不同狀態間跳轉時的行為一致。

3. 事件驅動型介面互鎖 (Safety Interlock)

實作工業等級的軟體互鎖機制,防止誤操作導致的系統異常:

  • 動態權限控管:根據馬達即時狀態(Moving/Homing)動態鎖定或啟用 UI 控制項(如按鈕、參數輸入框)。
  • 狀態同步:透過事件觸發機制,確保介面呈現與底層邏輯狀態高度同步。

4. 數值演算與離散時間模擬

在固定時間週期(100ms)下實作數值模擬:

  • 離散步進計算:在計時器週期內處理連續數據的變化,並實作目標點位之補償與校正。
  • 參數校驗:在進入運動邏輯前執行參數合法性檢查,防止除以零或溢位等運算異常。

5. sql輸出的生產者-消費者架構

透過生產者-消費者架構,解耦檔案寫入的衝突問題:

  • 生產者:在log輸出的fuction與timer中加入呼叫寫入.db的功能。
  • 消費者:用迴圈與暫存由舊到新依序寫入log資訊。

專案功能架構

功能模組 技術實現 說明
參數管理 (Recipe) System.Text.Json 實作物件與檔案間的序列化轉換,支援本地檔案讀寫。
即時監控 (Monitor) System.Windows.Forms.Timer 實作 10Hz 採樣頻率的實時座標反饋。
日誌系統 (Logging) ListBox 封裝 實作自動捲動與帶有時間戳記的系統行為紀錄。
物件導向 (OOP) Motor Class 將運動邏輯、座標狀態與參數配置進行物件化封裝。
SQL日誌持久化輸出 (OOP) SQLite Class 將程式運作日誌輸出持久化成單獨資料

檔案說明

  • Form1.cs:負責 UI 事件處理、非同步呼叫觸發與介面互鎖邏輯。
  • Motor.cs:核心邏輯類別,包含狀態機驅動、位移數值演進與參數配置結構。
  • SQLite.cs:核心邏輯類別,包含Dapper控制sql的輸入存檔。

About

本專案為基於 C# .NET WinForms 開發的運動控制模擬軟體。開發目標在於實作高響應性的使用者介面與嚴謹的邏輯狀態機,並透過非同步編程優化系統效能。

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages