|
@@ -31,6 +31,7 @@ import random
|
|
|
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg as FigureCanvas
|
|
|
import io
|
|
|
from flask import make_response
|
|
|
+from distutils.util import strtobool # 將字串 string 轉成布林 boolean
|
|
|
|
|
|
import psutil
|
|
|
|
|
@@ -323,7 +324,7 @@ def dry_auto_test():
|
|
|
DI1 = 'DI_InputtingBean'
|
|
|
print('-- DI1 狀態更新:入豆中 --')
|
|
|
# 入料儲豆槽入豆時 且 (發酵儲豆槽有入料 或者 前方儲豆槽非可出豆), 則停止入豆
|
|
|
- elif DI1 == 'DI_InputtingBean' and (DI_UP_UltraSoniclist[0] > 55) and (FO1 != 'FO_OutputtingBean') :
|
|
|
+ elif DI1 == 'DI_InputtingBean' and (DI_UP_UltraSoniclist[0] > 35) and (FO1 != 'FO_OutputtingBean') :
|
|
|
DI1 = 'DI_OutputtingBean'
|
|
|
print('-- DI1 狀態更新:可出豆 --')
|
|
|
# 若入料儲豆槽可出豆 且 儲豆槽內高度低於 40 且 前方脫皮機儲豆槽可出豆 且 目前無桶槽需入料時
|
|
@@ -333,7 +334,7 @@ def dry_auto_test():
|
|
|
# if DI2 == 'DI_Waiting' and FO2 == 'FO_OutputtingBean':
|
|
|
# DI2 = 'DI_InputtingBean'
|
|
|
# print('-- DI2 狀態更新:入豆中 --')
|
|
|
- # elif DI2 == 'DI_InputtingBean' and ((DI_DOWN_UltraSoniclist[1] > 55) or (FO2 == 'FO_OutputtingBean')) :
|
|
|
+ # elif DI2 == 'DI_InputtingBean' and ((DI_DOWN_UltraSoniclist[1] > 35) or (FO2 == 'FO_OutputtingBean')) :
|
|
|
# DI2 = 'DI_OutputtingBean'
|
|
|
# print('-- DI2 狀態更新:可出豆 --')
|
|
|
# elif DI2 == 'DI_OutputtingBean' and (DI_DOWN_UltraSoniclist[1] < 40) and FO2 == 'FO_OutputtingBean' and Dry_InputtingBean_number == 0 and Dry_InputtingBeanPause_number == 0:
|
|
@@ -352,7 +353,7 @@ def dry_auto_test():
|
|
|
# 參考 -- 乾燥桶槽 F1~F6 可出豆→出料儲豆槽 FO1 判斷 --
|
|
|
|
|
|
# 出料儲豆槽入料 且滿時, 出料儲豆槽可出豆
|
|
|
- if DO1 == ('DO_InputtingBean' and DO_UP_UltraSoniclist[0] > 55):
|
|
|
+ if DO1 == ('DO_InputtingBean' and DO_UP_UltraSoniclist[0] > 35):
|
|
|
DO1 = 'DO_OutputtingBean'
|
|
|
# 出料儲豆槽入料 且未滿, 桶槽可出豆已空
|
|
|
# -- 取得乾燥桶槽 D1~D6 桶內高度 UltraSonic -------------
|
|
@@ -468,9 +469,11 @@ def ferment_auto():
|
|
|
def ferment_auto_test():
|
|
|
info = request.args.to_dict()
|
|
|
Ferment_Tank_bean_height = int(info['Ferment_Tank_bean_height'])
|
|
|
+ FermentAuto_fermenting = strtobool(info['FermentAuto_fermenting'])
|
|
|
print('發酵自動化_指定生豆高度: ', Ferment_Tank_bean_height)
|
|
|
+ print('發酵自動化_發酵排程: ', FermentAuto_fermenting, type(FermentAuto_fermenting))
|
|
|
# [介面] 讓使用者可以選擇排程內有發酵/清洗/校正, 此處預設為 True
|
|
|
- Ferment_btn = True
|
|
|
+ Ferment_btn = FermentAuto_fermenting # Ferment_btn = True
|
|
|
# 從資料庫資料表中取得最新狀態
|
|
|
ferment_status = ferment_container_status.query.order_by(text('datetime desc')).first()
|
|
|
FI1 = ferment_status.Ferment_Input_1
|
|
@@ -494,13 +497,53 @@ def ferment_auto_test():
|
|
|
F_UP_tanklist = [F1, F2, F3, F4, F5, F6]
|
|
|
F_DOWN_tanklist = [F7, F8, F9, F10, F11, F12]
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ # ----- 發酵入料儲豆槽 FI1~FI2 入豆→可出豆判斷 ------------------------------
|
|
|
+ # 目前發酵槽 F1~F6 正在入豆的桶槽數量 (應小於一桶)
|
|
|
+ FermentUp_InputtingBean_number = int(F_UP_tanklist.count('F_InputtingBean'))
|
|
|
+ FermentUp_InputtingBeanPause_number = int(F_UP_tanklist.count('F_InputtingBean_Pause'))
|
|
|
+ # -- 取得發酵入料儲豆槽 FI1~FI2 桶內高度 UltraSonic -------------
|
|
|
+ FI_UP_UltraSoniclist = []
|
|
|
+ for i in range(1, 3, 1):
|
|
|
+ input_UltraSonic = ferment_input_UltraSonic.query.filter_by(tank_num='FI' + str(i)).order_by(text('datetime desc')).first()
|
|
|
+ UltraSonic = int(input_UltraSonic.UltraSonic)
|
|
|
+ FI_UP_UltraSoniclist.append(UltraSonic)
|
|
|
+ print('FI_UP_UltraSoniclist: ', FI_UP_UltraSoniclist)
|
|
|
+ # -- 取得發酵入料儲豆槽 FI1~FI2 桶內高度 UltraSonic -------------
|
|
|
+ # 入料儲豆槽等待中、且脫皮機儲豆槽可出豆時, 入料儲豆槽入豆
|
|
|
+ if FI1 == 'FI_Waiting' and PO1 == 'PO_OutputtingBean':
|
|
|
+ FI1 = 'FI_InputtingBean'
|
|
|
+ print('-- FI1 狀態更新:入豆中 --')
|
|
|
+ # 入料儲豆槽入豆時 且 (發酵儲豆槽有入料(少) 或者 前方儲豆槽非可出豆), 則停止入豆
|
|
|
+ elif FI1 == 'FI_InputtingBean' and (FI_UP_UltraSoniclist[0] <= 5) and (PO1 != 'PO_OutputtingBean') :
|
|
|
+ FI1 = 'FI_Waiting'
|
|
|
+ print('-- FI1 狀態更新:空桶等待 --')
|
|
|
+ # 入料儲豆槽入豆時 且 (發酵儲豆槽有入料(多) 或者 前方儲豆槽非可出豆), 則停止入豆
|
|
|
+ elif FI1 == 'FI_InputtingBean' and (FI_UP_UltraSoniclist[0] >= 35) and (PO1 != 'PO_OutputtingBean') :
|
|
|
+ FI1 = 'FI_OutputtingBean'
|
|
|
+ print('-- FI1 狀態更新:可出豆 --')
|
|
|
+ # 若入料儲豆槽可出豆 且 儲豆槽內高度低於 40 且 前方脫皮機儲豆槽可出豆 且 目前無桶槽需入料時
|
|
|
+ elif FI1 == 'FI_OutputtingBean' and (FI_UP_UltraSoniclist[0] < 40) and PO1 == 'PO_OutputtingBean' and FermentUp_InputtingBean_number == 0 and FermentUp_InputtingBeanPause_number == 0:
|
|
|
+ FI1 = 'FI_InputtingBean'
|
|
|
+ print('-- FI1 狀態更新:入豆中 --')
|
|
|
+ # if FI2 == 'FI_Waiting' and PO2 == 'PO_OutputtingBean':
|
|
|
+ # FI2 = 'FI_InputtingBean'
|
|
|
+ # print('-- FI2 狀態更新:入豆中 --')
|
|
|
+ # elif FI2 == 'FI_InputtingBean' and ((FI_UP_UltraSoniclist[1] >= 35) or (PO2 != 'PO_OutputtingBean')) :
|
|
|
+ # FI2 = 'FI_OutputtingBean'
|
|
|
+ # print('-- FI2 狀態更新:可出豆 --')
|
|
|
+ # elif FI2 == 'FI_OutputtingBean' and (FI_UP_UltraSoniclist[1] < 40) and PO2 == 'PO_OutputtingBean' and FermentUp_InputtingBean_number == 0 and FermentUp_InputtingBeanPause_number == 0:
|
|
|
+ # FI2 = 'FI_InputtingBean'
|
|
|
+ # print('-- FI2 狀態更新:入豆中 --')
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
# ----- 發酵桶槽 F1~F6 入料暫停→入料判斷 ------------------------------
|
|
|
### 移到入料
|
|
|
|
|
|
# ----- 發酵桶槽 F1~F6 等待→入料判斷 ------------------------------
|
|
|
- # 目前發酵槽 F1~F6 正在入豆的桶槽數量 (應小於一桶)
|
|
|
- Ferment_InputtingBean_number = int(F_UP_tanklist.count('F_InputtingBean'))
|
|
|
- Ferment_InputtingBeanPause_number = int(F_UP_tanklist.count('F_InputtingBean_Pause'))
|
|
|
# -- 取得發酵桶槽 F1~F6 桶內高度 UltraSonic -------------
|
|
|
F_UP_UltraSoniclist = []
|
|
|
for i in range(1, 7, 1):
|
|
@@ -534,11 +577,11 @@ def ferment_auto_test():
|
|
|
F6 = 'F_InputtingBean_Finish'
|
|
|
print('-- F6 狀態更新:入料完成 --')
|
|
|
# 若有兩個以上桶槽入料中, 則桶號最小者優先入料
|
|
|
- if Ferment_InputtingBean_number >= 1:
|
|
|
+ if FermentUp_InputtingBean_number >= 1:
|
|
|
print('發酵槽 F'+str(F_UP_tanklist.index('F_InputtingBean')+1)+' 優先入豆中')
|
|
|
- print('-- F'+str(F_UP_tanklist.index('F_InputtingBean')+1)+' 入料中 --')
|
|
|
+ print('-- F'+str(F_UP_tanklist.index('F_InputtingBean')+1)+' 狀態更新:入料中 --')
|
|
|
# 若 F1~F6 發酵桶槽為 入豆暫停, 則狀態改為優先入豆
|
|
|
- elif Ferment_InputtingBeanPause_number >= 1:
|
|
|
+ elif FermentUp_InputtingBeanPause_number >= 1:
|
|
|
if F1 == 'F_InputtingBean_Pause':
|
|
|
F1 = 'F_InputtingBean'
|
|
|
print('-- F1 狀態更新:入料中 --')
|
|
@@ -558,7 +601,7 @@ def ferment_auto_test():
|
|
|
F6 = 'F_InputtingBean'
|
|
|
print('-- F6 狀態更新:入料中 --')
|
|
|
# 若 F1~F6 皆無入豆 無入豆暫停, 則桶號最小者開始入豆
|
|
|
- elif Ferment_InputtingBean_number == 0 and Ferment_InputtingBeanPause_number == 0:
|
|
|
+ elif FermentUp_InputtingBean_number == 0 and FermentUp_InputtingBeanPause_number == 0:
|
|
|
if F1 == 'F_Waiting':
|
|
|
F1 = 'F_InputtingBean'
|
|
|
print('-- F1 狀態更新:入料中 --')
|
|
@@ -578,7 +621,7 @@ def ferment_auto_test():
|
|
|
F6 = 'F_InputtingBean'
|
|
|
print('-- F6 狀態更新:入料中 --')
|
|
|
# 若入料儲豆槽非可出豆, 且 F1~F6 其中有桶槽入料中, 若桶槽未滿則入料暫停
|
|
|
- elif FI1 != 'FI_InputtingBean' and Ferment_InputtingBean_number >= 1:
|
|
|
+ elif FI1 != 'FI_InputtingBean' and FermentUp_InputtingBean_number >= 1:
|
|
|
if F1 == 'F_InputtingBean' and F_UP_UltraSoniclist[0] < Ferment_Tank_bean_height:
|
|
|
F1 = 'F_InputtingBean_Pause'
|
|
|
print('-- F1 狀態更新:入料暫停 --')
|
|
@@ -624,12 +667,10 @@ def ferment_auto_test():
|
|
|
|
|
|
# ----- 10/07 --------------------------------------------------------------------------------------------------------------------------------
|
|
|
# ----- 發酵桶槽 F1~F6 入料→入料暫停判斷 ------------------------------
|
|
|
- # if FI1 != 'FI_OutputtingBean' and Ferment_InputtingBean_number >= 1:
|
|
|
### 移到入料
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
# # ----- 發酵桶槽 F1~F6 入料→入水判斷 ------------------------------
|
|
|
# Ferment_InputtingBeanFinish_number = int(F_UP_tanklist.count('F_InputtingBean_Finish'))
|
|
|
# Ferment_InputtingWater_number = int(F_UP_tanklist.count('F_InputtingWater'))
|
|
@@ -733,43 +774,8 @@ def ferment_auto_test():
|
|
|
print('-- F6 狀態更新:出豆中 --')
|
|
|
print('-- FO1 狀態更新:入豆中 --')
|
|
|
|
|
|
-
|
|
|
-
|
|
|
# ----- 發酵入料儲豆槽 FI1~FI2 入豆→可出豆判斷 ------------------------------
|
|
|
- # -- 取得發酵入料儲豆槽 FI1~FI2 桶內高度 UltraSonic -------------
|
|
|
- FI_UP_UltraSoniclist = []
|
|
|
- for i in range(1, 3, 1):
|
|
|
- input_UltraSonic = ferment_input_UltraSonic.query.filter_by(tank_num='FI' + str(i)).order_by(text('datetime desc')).first()
|
|
|
- UltraSonic = int(input_UltraSonic.UltraSonic)
|
|
|
- FI_UP_UltraSoniclist.append(UltraSonic)
|
|
|
- print('FI_UP_UltraSoniclist: ', FI_UP_UltraSoniclist)
|
|
|
- # 入料儲豆槽等待中、且脫皮機儲豆槽可出豆時, 入料儲豆槽入豆
|
|
|
- if FI1 == 'FI_Waiting' and PO1 == 'PO_OutputtingBean':
|
|
|
- FI1 = 'FI_InputtingBean'
|
|
|
- print('-- FI1 狀態更新:入豆中 --')
|
|
|
- # 入料儲豆槽入豆時 且 (發酵儲豆槽有入料(少) 或者 前方儲豆槽非可出豆), 則停止入豆
|
|
|
- elif FI1 == 'FI_InputtingBean' and ((FI_UP_UltraSoniclist[0] <= 30) and (PO1 != 'PO_OutputtingBean')) :
|
|
|
- FI1 = 'FI_Waiting'
|
|
|
- print('-- FI1 狀態更新:空桶等待 --')
|
|
|
- # 入料儲豆槽入豆時 且 (發酵儲豆槽有入料(多) 或者 前方儲豆槽非可出豆), 則停止入豆
|
|
|
- elif FI1 == 'FI_InputtingBean' and ((FI_UP_UltraSoniclist[0] > 30) and (PO1 != 'PO_OutputtingBean')) :
|
|
|
- FI1 = 'FI_OutputtingBean'
|
|
|
- print('-- FI1 狀態更新:可出豆 --')
|
|
|
- # 若入料儲豆槽可出豆 且 儲豆槽內高度低於 40 且 前方脫皮機儲豆槽可出豆 且 目前無桶槽需入料時
|
|
|
- elif FI1 == 'FI_OutputtingBean' and (FI_UP_UltraSoniclist[0] < 40) and PO1 == 'PO_OutputtingBean' and Ferment_InputtingBean_number == 0 and Ferment_InputtingBeanPause_number == 0:
|
|
|
- FI1 = 'FI_InputtingBean'
|
|
|
- print('-- FI1 狀態更新:入豆中 --')
|
|
|
- # if FI2 == 'FI_Waiting' and PO2 == 'PO_OutputtingBean':
|
|
|
- # FI2 = 'FI_InputtingBean'
|
|
|
- # print('-- FI2 狀態更新:入豆中 --')
|
|
|
- # elif FI2 == 'FI_InputtingBean' and ((FI_UP_UltraSoniclist[1] > 55) or (PO2 != 'PO_OutputtingBean')) :
|
|
|
- # FI2 = 'FI_OutputtingBean'
|
|
|
- # print('-- FI2 狀態更新:可出豆 --')
|
|
|
- # elif FI2 == 'FI_OutputtingBean' and (FI_UP_UltraSoniclist[1] < 40) and PO2 == 'PO_OutputtingBean' and Ferment_InputtingBean_number == 0 and Ferment_InputtingBeanPause_number == 0:
|
|
|
- # FI2 = 'FI_InputtingBean'
|
|
|
- # print('-- FI2 狀態更新:入豆中 --')
|
|
|
-
|
|
|
-
|
|
|
+ # 1008 移到桶槽前面
|
|
|
|
|
|
|
|
|
# ----- 發酵出料儲豆槽 FO1~FO2 入豆→可出豆判斷 ------------------------------
|
|
@@ -784,7 +790,7 @@ def ferment_auto_test():
|
|
|
# 參考 -- 發酵桶槽 F1~F6 可出豆→出料儲豆槽 FO1 判斷 --
|
|
|
|
|
|
# 出料儲豆槽入料 且滿時, 出料儲豆槽可出豆
|
|
|
- if FO1 == ('FO_InputtingBean' and FO_UP_UltraSoniclist[0] > 55):
|
|
|
+ if FO1 == ('FO_InputtingBean') and FO_UP_UltraSoniclist[0] > 35:
|
|
|
FO1 = 'FO_OutputtingBean'
|
|
|
print('-- FO1 狀態更新:可出豆 --')
|
|
|
# 出料儲豆槽入料 且未滿, 桶槽可出豆已空
|
|
@@ -830,30 +836,30 @@ def ferment_auto_test():
|
|
|
elif FO1 == 'FO_OutputtingBean' and FO_UP_UltraSoniclist[0] < 5:
|
|
|
FO1 = 'FO_Waiting'
|
|
|
|
|
|
- # # ----- 將狀態寫入資料庫 ------------------------------
|
|
|
- # # 獲取文本框的值並賦值給user實體對象
|
|
|
- # F_status = ferment_container_status()
|
|
|
- # F_status.Ferment_Input_1 = FI1
|
|
|
- # F_status.Ferment_Input_2 = FI2
|
|
|
- # F_status.Ferment_Tank_1 = F1
|
|
|
- # F_status.Ferment_Tank_2 = F2
|
|
|
- # F_status.Ferment_Tank_3 = F3
|
|
|
- # F_status.Ferment_Tank_4 = F4
|
|
|
- # F_status.Ferment_Tank_5 = F5
|
|
|
- # F_status.Ferment_Tank_6 = F6
|
|
|
- # F_status.Ferment_Tank_7 = F7
|
|
|
- # F_status.Ferment_Tank_8 = F8
|
|
|
- # F_status.Ferment_Tank_9 = F9
|
|
|
- # F_status.Ferment_Tank_10 = F10
|
|
|
- # F_status.Ferment_Tank_11 = F11
|
|
|
- # F_status.Ferment_Tank_12 = F12
|
|
|
- # F_status.Ferment_Output_1 = FO1
|
|
|
- # F_status.Ferment_Output_2 = FO2
|
|
|
- # #將數據保存進資料庫
|
|
|
- # db.session.add(F_status)
|
|
|
- # # 手動提交
|
|
|
- # db.session.commit()
|
|
|
- # # ----- 將狀態寫入資料庫 ------------------------------
|
|
|
+ # ----- 將狀態寫入資料庫 ------------------------------
|
|
|
+ # 獲取文本框的值並賦值給user實體對象
|
|
|
+ F_status = ferment_container_status()
|
|
|
+ F_status.Ferment_Input_1 = FI1
|
|
|
+ F_status.Ferment_Input_2 = FI2
|
|
|
+ F_status.Ferment_Tank_1 = F1
|
|
|
+ F_status.Ferment_Tank_2 = F2
|
|
|
+ F_status.Ferment_Tank_3 = F3
|
|
|
+ F_status.Ferment_Tank_4 = F4
|
|
|
+ F_status.Ferment_Tank_5 = F5
|
|
|
+ F_status.Ferment_Tank_6 = F6
|
|
|
+ F_status.Ferment_Tank_7 = F7
|
|
|
+ F_status.Ferment_Tank_8 = F8
|
|
|
+ F_status.Ferment_Tank_9 = F9
|
|
|
+ F_status.Ferment_Tank_10 = F10
|
|
|
+ F_status.Ferment_Tank_11 = F11
|
|
|
+ F_status.Ferment_Tank_12 = F12
|
|
|
+ F_status.Ferment_Output_1 = FO1
|
|
|
+ F_status.Ferment_Output_2 = FO2
|
|
|
+ #將數據保存進資料庫
|
|
|
+ db.session.add(F_status)
|
|
|
+ # 手動提交
|
|
|
+ db.session.commit()
|
|
|
+ # ----- 將狀態寫入資料庫 ------------------------------
|
|
|
|
|
|
return jsonify({"Ferment_Input_1":FI1,
|
|
|
"Ferment_Tank_1":F1,
|