台灣最大程式設計社群網站
線上人數
564
 
會員總數:245800
討論主題:189429
歡迎您免費加入會員
討論區列表 >> C# >> 有關機台使用率計算
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有關機台使用率計算
價值 : 100 QP  點閱數:486 回應數:6
樓主

jim9624
門外漢
0 1
59 3
發送站內信

自己正在試寫有關工廠的最佳機台使用率,但遇到了一些問題。

問題如下
在一開始要求設定工作時間 EX 08:00(DateStart) ~ 18:00(DateEnd)
然後再根據 停機需求設定 一週、一~日 XX:XX ~ XX:XX
資料都轉成DateTime儲存起來

最後計算使用率=實際運行分鐘/總共分鐘

假設現在設定是 禮拜一 08:00~18:00
停機時間有 一週 12:00~13:00
禮拜一 15:00~15:30
禮拜一 11:00~12:00

我是這樣寫 判斷12:00~13:00介於工作時間內 切成 08:00~12:00 , 13:00~18:00
再接著判斷15:00~15:30 切成 08:00~12:00 , 13:00~15:00 , 15:30~18:00
判斷11:00~12:00 切成 08:00~11:00 , 13:00~15:00 , 15:30~18:00

這樣寫判斷條件太多,寫的一個頭兩個大,想請教有沒有更好的定義及算法

感謝各位先進~~

搜尋相關Tags的文章: [ Datetime ] , [ 時間切割 ] , [ 停機 ] , [ 休息 ] ,
本篇文章發表於2018-09-18 14:07
1樓
回應

春天
檢舉此回應
假設現在設定是 禮拜一 08:00~18:00
停機時間有 一週 12:00~13:00
禮拜一 15:00~15:30
禮拜一 11:00~12:00

星期一的運作時間:10小時(08:00~18:00) - 1小時(12:00~13:00) - 0.5小時(15:00~15:30) - 1小時(11:00~12:00) = 7.5小時
星期一的使用率= 7.5 * 60 (實際運行分鐘) / 24 * 60(總共分鐘)
這樣計算不行嗎?
另外要注意如果有停機時段超出你定義的08:00~18:00 要額外處理
本篇文章回覆於2018-09-18 14:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

jim9624
檢舉此回應
春天您好~

這樣寫可以,只是困擾在於要怎麼判斷停機的時間有沒有重複到,

因為停機時間是自由輸入的

假設現在設定是 禮拜一 08:00~18:00
停機時間有 一週 12:00~13:00
禮拜一 15:00~15:30
禮拜一 {11:00~12:30 }

星期一的運作時間:10小時(08:00~18:00) - 1小時(12:00~13:00) - 0.5小時(15:00~15:30) - { 1.5小時(11:00~12:30) }= 7.5小時

大框框處困擾於怎麼判斷時間重覆到,所以才想採用切割方式保證時間正確

感謝春天大大回答~~
本篇文章回覆於2018-09-18 15:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

春天
檢舉此回應
這樣應該可以我沒測試過,你試試

本篇文章回覆於2018-09-18 15:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

jim9624
檢舉此回應
感謝 春天大大

真的沒想到用Bool來判斷,這樣看來沒問題,也比我原本切割生成新時間來判斷有效率多了

不過中間 代碼好像有錯 分鐘放成小時了
45 //停機開始分鐘數
46 int iStart = timeStart.Hour * {HoursInDay }+ timeStart.Minute;
47 //停機結束分鐘數
48 int iEnd = timeEnd.Hour *{ HoursInDay} + timeEnd.Minute;

看來還真的要再多看多GOOGLE,訓練一下邏輯想法。

本篇文章回覆於2018-09-18 17:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

春天
檢舉此回應
看起來是放錯了,另外static readonly int MinutesInHours = 60; 這個變數名稱也有點問題,應該是MinutesInHour
本篇文章回覆於2018-09-18 17:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

jim9624
檢舉此回應
另外補充一下

使用上沒問題,不過開始、結束都相等,這樣用到一次會多出1分鐘
判斷上多個+1
EX 09:01~10:00

49 for (int i = iStart +1 ; i <= iEnd; i++)
50 {
51 this.stopTime[i] = true;
52 }



再次感謝春天大大
本篇文章回覆於2018-09-18 17:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.