auto_F.html 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871
  1. <!-- 宣告我們要套用模板 -->
  2. {% extends "base.html" %}
  3. {% block title %}{{ title }}{% endblock %}
  4. {% block script %}
  5. <script language="JavaScript">
  6. function myrefresh()
  7. {
  8. $.get('/ferment_auto_data', function (resText) {
  9. var PO = [resText.PO1,resText.PO2];
  10. var FI = [resText.FI1,resText.FI2];
  11. var F=[resText.F1,resText.F2,resText.F3,resText.F4,resText.F5,resText.F6,resText.F7,resText.F8,resText.F9,resText.F10,resText.F11,resText.F12];
  12. var FO = [resText.FO1,resText.FO2];
  13. var DI = [resText.DI1,resText.DI2];
  14. for (let i=0; i<2; i++) {
  15. if (PO[i] == 'PO_InputtingBean') {
  16. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  17. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 入豆中")
  18. } else if (PO[i] == 'PO_Waiting') {
  19. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  20. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 空桶等待")
  21. } else if (PO[i] == 'PO_OutputtingBean') {
  22. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  23. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 可出豆")
  24. } else if (PO[i] == 'PO_Stand_by') {
  25. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  26. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 待命")
  27. } else {
  28. console.log('pass')
  29. }
  30. }
  31. for (let i=0; i<2; i++) {
  32. if (FI[i] == 'FI_InputtingBean') {
  33. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  34. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 入豆中")
  35. } else if (FI[i] == 'FI_Waiting') {
  36. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  37. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 空桶等待")
  38. } else if (FI[i] == 'FI_OutputtingBean') {
  39. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  40. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 可出豆")
  41. } else if (FI[i] == 'FI_Stand_by') {
  42. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  43. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 待命")
  44. } else {
  45. console.log('pass')
  46. }
  47. }
  48. for (let i=0; i<12; i++) {
  49. if (F[i] == 'F_InputtingBean') {
  50. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  51. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆中")
  52. } else if (F[i] == 'F_InputtingBean_Pause') {
  53. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  54. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆暫停")
  55. } else if (F[i] == 'F_InputtingBean_Finish') {
  56. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  57. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆完成")
  58. } else if (F[i] == 'F_InputtingWater') {
  59. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "DeepSkyBlue")
  60. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 內外桶入水中")
  61. } else if (F[i] == 'F_Waiting') {
  62. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  63. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 空桶等待")
  64. } else if (F[i] == 'F_Cleaning') {
  65. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "plum")
  66. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 清洗中")
  67. } else if (F[i] == 'F_Fermenting') {
  68. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "NavajoWhite")
  69. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 發酵中")
  70. } else if (F[i] == 'F_OutputtingWater') {
  71. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "DeepSkyBlue")
  72. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 內桶排水中")
  73. } else if (F[i] == 'F_OutputtingBean') {
  74. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  75. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 可出豆")
  76. } else if (F[i] == 'F_Warning') {
  77. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "crimson")
  78. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 發生錯誤")
  79. $("#F"+parseInt(i+1)+"_status").css("color", "crimson")
  80. } else if (F[i] == 'F_Stand_by') {
  81. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  82. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 待命中")
  83. } else {
  84. console.log('pass')
  85. }
  86. }
  87. for (let i=0; i<2; i++) {
  88. if (FO[i] == 'FO_InputtingBean') {
  89. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  90. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 入豆中")
  91. } else if (FO[i] == 'FO_Waiting') {
  92. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  93. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 空桶等待")
  94. } else if (FO[i] == 'FO_OutputtingBean') {
  95. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  96. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 可出豆")
  97. } else if (FO[i] == 'FO_Stand_by') {
  98. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  99. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 待命")
  100. } else {
  101. console.log('pass')
  102. }
  103. }
  104. for (let i=0; i<2; i++) {
  105. if (DI[i] == 'DI_InputtingBean') {
  106. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  107. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 入豆中")
  108. } else if (DI[i] == 'DI_Waiting') {
  109. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  110. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 空桶等待")
  111. } else if (DI[i] == 'DI_OutputtingBean') {
  112. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  113. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 可出豆")
  114. } else if (DI[i] == 'DI_Stand_by') {
  115. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  116. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 待命")
  117. } else {
  118. console.log('pass')
  119. }
  120. }
  121. },'json');
  122. loading_F()
  123. }
  124. setInterval('myrefresh()',1000);
  125. </script>
  126. <script>
  127. var tank_num = '1';
  128. var status = '{{status}}';
  129. var username = '{{username}}';
  130. $(document).ready(function(){
  131. $("#coffee_title_pc").text('發酵自動化');
  132. $("#coffee_title_phone").text('發酵自動化');
  133. $('#navbarDropdown_user_pc').text(username);
  134. $('#navbarDropdown_user_phone').text(username);
  135. // 脫皮機
  136. peel_output_status = ['{{PO1}}','{{PO2}}']
  137. for (let i=0; i<peel_output_status.length; i++) {
  138. if (peel_output_status[i] == 'PO_InputtingBean') {
  139. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  140. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 入豆中")
  141. } else if (peel_output_status[i] == 'PO_Waiting') {
  142. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  143. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 空桶等待")
  144. } else if (peel_output_status[i] == 'PO_OutputtingBean') {
  145. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  146. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 可出豆")
  147. } else if (peel_output_status[i] == 'PO_Stand_by') {
  148. $("#PO"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  149. $("#PO"+parseInt(i+1)+"_status").text("PO" + parseInt(i+1) + " 待命")
  150. } else {
  151. console.log('pass')
  152. }
  153. }
  154. // 乾燥入料
  155. dry_input_status = ['{{DI1}}','{{DI2}}']
  156. for (let i=0; i<dry_input_status.length; i++) {
  157. if (dry_input_status[i] == 'DI_InputtingBean') {
  158. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  159. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 入豆中")
  160. } else if (dry_input_status[i] == 'DI_Waiting') {
  161. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  162. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 空桶等待")
  163. } else if (dry_input_status[i] == 'DI_OutputtingBean') {
  164. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  165. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 可出豆")
  166. } else if (dry_input_status[i] == 'DI_Stand_by') {
  167. $("#DI"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  168. $("#DI"+parseInt(i+1)+"_status").text("DI" + parseInt(i+1) + " 待命")
  169. } else {
  170. console.log('pass')
  171. }
  172. }
  173. // 桶槽入料
  174. ferment_input_status_N = ['{{FI1}}', '{{FI2}}']
  175. for (let i=0; i<ferment_input_status_N.length; i++) {
  176. if (ferment_input_status_N[i] == 'FI_InputtingBean') {
  177. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  178. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 入豆中")
  179. } else if (ferment_input_status_N[i] == 'FI_Waiting') {
  180. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  181. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 空桶等待")
  182. } else if (ferment_input_status_N[i] == 'FI_OutputtingBean') {
  183. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  184. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 可出豆")
  185. } else if (ferment_input_status_N[i] == 'FI_Stand_by') {
  186. $("#FI"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  187. $("#FI"+parseInt(i+1)+"_status").text("FI" + parseInt(i+1) + " 待命")
  188. } else {
  189. console.log('pass')
  190. }
  191. }
  192. // 桶槽狀態顯示
  193. ferment_tank_status_N = ['{{F1}}', '{{F2}}', '{{F3}}', '{{F4}}', '{{F5}}', '{{F6}}',
  194. '{{F7}}', '{{F8}}', '{{F9}}', '{{F10}}', '{{F11}}', '{{F12}}']
  195. for (let i=0; i<ferment_tank_status_N.length; i++) {
  196. if (ferment_tank_status_N[i] == 'F_InputtingBean') {
  197. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  198. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆中")
  199. } else if (ferment_tank_status_N[i] == 'F_InputtingBean_Pause') {
  200. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  201. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆暫停")
  202. } else if (ferment_tank_status_N[i] == 'F_InputtingBean_Finish') {
  203. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  204. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 入豆完成")
  205. } else if (ferment_tank_status_N[i] == 'F_InputtingWater') {
  206. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "DeepSkyBlue")
  207. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 內外桶入水中")
  208. } else if (ferment_tank_status_N[i] == 'F_Waiting') {
  209. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  210. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 空桶等待")
  211. } else if (ferment_tank_status_N[i] == 'F_Cleaning') {
  212. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "plum")
  213. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 清洗中")
  214. } else if (ferment_tank_status_N[i] == 'F_Fermenting') {
  215. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "NavajoWhite")
  216. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 發酵中")
  217. } else if (ferment_tank_status_N[i] == 'F_OutputtingWater') {
  218. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "DeepSkyBlue")
  219. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 內桶排水中")
  220. } else if (ferment_tank_status_N[i] == 'F_OutputtingBean') {
  221. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  222. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 可出豆")
  223. } else if (ferment_tank_status_N[i] == 'F_Warning') {
  224. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "crimson")
  225. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 發生錯誤")
  226. $("#F"+parseInt(i+1)+"_status").css("color", "crimson")
  227. } else if (ferment_tank_status_N[i] == 'F_Stand_by') {
  228. $("#F"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  229. $("#F"+parseInt(i+1)+"_status").text("F" + parseInt(i+1) + " 待命中")
  230. } else {
  231. console.log('pass')
  232. }
  233. }
  234. // 桶槽出料顯示
  235. ferment_output_status_N = ['{{FO1}}', '{{FO2}}']
  236. for (let i=0; i<ferment_output_status_N.length; i++) {
  237. if (ferment_output_status_N[i] == 'FO_InputtingBean') {
  238. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  239. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 入豆中")
  240. } else if (ferment_output_status_N[i] == 'FO_Waiting') {
  241. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "lightgray")
  242. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 空桶等待")
  243. } else if (ferment_output_status_N[i] == 'FO_OutputtingBean') {
  244. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "MediumSeaGreen")
  245. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 可出豆")
  246. } else if (ferment_output_status_N[i] == 'FO_Stand_by') {
  247. $("#FO"+parseInt(i+1)+"_status_dot").css("background-color", "HotPink")
  248. $("#FO"+parseInt(i+1)+"_status").text("FO" + parseInt(i+1) + " 待命")
  249. } else {
  250. console.log('pass')
  251. }
  252. loading_F()
  253. }
  254. });
  255. $(function(){
  256. $('#cb_cleaning').on('change', function () {
  257. if ($('#cb_cleaning').prop('checked')) {
  258. $("input[name='Ferment_auto_cleaning_Ftimes']").attr('disabled', false);
  259. $("input[name='Ferment_auto_cleaning_Ftimes']").attr('value', '1');
  260. } else {
  261. $("input[name='Ferment_auto_cleaning_Ftimes']").attr('disabled', true);
  262. }
  263. })
  264. $('#cb_calibratingEC').on('change', function () {
  265. if ($('#cb_calibratingEC').prop('checked')) {
  266. $("input[name='Ferment_auto_calibratingEC_Ftimes']").attr('disabled', false);
  267. $("input[name='Ferment_auto_calibratingEC_Ftimes']").attr('value', '1');
  268. } else {
  269. $("input[name='Ferment_auto_calibratingEC_Ftimes']").attr('disabled', true);
  270. }
  271. })
  272. $('#cb_calibratingSTIR').on('change', function () {
  273. if ($('#cb_calibratingSTIR').prop('checked')) {
  274. $("input[name='Ferment_auto_calibratingSTIR_Ftimes']").attr('disabled', false);
  275. $("input[name='Ferment_auto_calibratingSTIR_Ftimes']").attr('value', '1');
  276. } else {
  277. $("input[name='Ferment_auto_calibratingSTIR_Ftimes']").attr('disabled', true);
  278. }
  279. })
  280. })
  281. function loading_F(){
  282. var ftid = '{{ftid}}';
  283. console.log(ftid)
  284. $.get('/loading/F'+ftid, '', function (resText) {
  285. var a = [resText.vacuum,resText.threewayvalve_input,resText.diskvalve,resText.solenoid_tank_pump,resText.solenoid_disinfect,resText.solenoid_outer_water,resText.solenoid_water_in,resText.solenoid_water_out,resText.pump_sensor,resText.threewayvalve_outer_float,resText.heater1,resText.heater2,resText.motor,resText.warning_light];
  286. for (let i=0; i<14; i++) {
  287. if (a[i] == 1) {
  288. $("#actuator_"+parseInt(i)+"_status").css("background-color", "MediumSeaGreen")
  289. } else if (a[i] == 0) {
  290. $("#actuator_"+parseInt(i)+"_status").css("background-color", "lightgray")
  291. }
  292. else {
  293. $("#actuator_"+parseInt(i)+"_status").css("background-color", "crimson")
  294. }
  295. }
  296. $("#sensor_1").text(resText.UltraSonic);
  297. $("#sensor_2").text(resText.SHT11_Temp);
  298. $("#sensor_3").text(resText.SHT11_Humidity);
  299. $("#sensor_4").text(resText.CO2);
  300. $("#sensor_5").text(resText.PA);
  301. $("#sensor_6").text(resText.PH);
  302. $("#sensor_7").text(resText.ORP);
  303. $("#sensor_8").text(resText.DO);
  304. $("#sensor_9").text(resText.EC);
  305. $("#sensor_10").text(resText.WaterLevel);
  306. $("#sensor_11").text(resText.motorEncoder);
  307. $("#sensor_12").text(resText.butterflyvalve);
  308. }, 'json');
  309. }
  310. </script>
  311. {% endblock %}
  312. {% block style %}
  313. <style>
  314. .F_status_css {
  315. font-weight: bold;
  316. text-align: center;
  317. }
  318. .input-text {
  319. height: 25px;
  320. width: 40px;
  321. text-align: center;
  322. margin-left: 2px;
  323. margin-right: 5px;
  324. }
  325. </style>
  326. {% endblock %}
  327. {% block main %}
  328. <div class="album py-5 bg-light">
  329. <div class="container">
  330. <div class="row row-cols-1 row-cols-sm-1 row-cols-md-1 g-3">
  331. <div class="col">
  332. <div class="card shadow-sm">
  333. <div class="card-body">
  334. <div class="d-flex justify-content-between align-items-center">
  335. <table style="border: 3px lightsteelblue solid; margin-right: auto; margin-left: auto; text-align: center; margin-top: 5px;" cellpadding="5" border="1">
  336. <div style="text-align: center;">
  337. <tr>
  338. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  339. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  340. <tr>
  341. <td>
  342. <!-- 發酵槽入料儲豆槽 FI1 -->
  343. <div id="FI1" tabindex="0" class="FI1_position" role="button" style="text-align: center;">
  344. <span id="FI1_status" class="F_status_css">FI1 status</span>
  345. </div>
  346. </td>
  347. </tr>
  348. </table>
  349. </td>
  350. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  351. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  352. <tr>
  353. <td>
  354. <div id="F1" tabindex="0" class="F1_position" role="button">
  355. <span id="F1_status" class="F_status_css">F1 status</span>
  356. </div>
  357. </td>
  358. </tr>
  359. </table>
  360. </td>
  361. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  362. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  363. <tr>
  364. <td>
  365. <div id="F2" tabindex="0" class="F2_position" role="button">
  366. <span id="F2_status" class="F_status_css">F2 status</span>
  367. </div>
  368. </td>
  369. </tr>
  370. </table>
  371. </td>
  372. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  373. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  374. <tr>
  375. <td>
  376. <div id="F3" tabindex="0" class="F3_position" role="button">
  377. <span id="F3_status" class="F_status_css">F3 status</span>
  378. </div>
  379. </td>
  380. </tr>
  381. </table>
  382. </td>
  383. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  384. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  385. <tr>
  386. <td>
  387. <div id="F4" tabindex="0" class="F4_position" role="button">
  388. <span id="F4_status" class="F_status_css">F4 status</span>
  389. </div>
  390. </td>
  391. </tr>
  392. </table>
  393. </td>
  394. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  395. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  396. <tr>
  397. <td>
  398. <div id="F5" tabindex="0" class="F5_position" role="button">
  399. <span id="F5_status" class="F_status_css">F5 status</span>
  400. </div>
  401. </td>
  402. </tr>
  403. </table>
  404. </td>
  405. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  406. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  407. <tr>
  408. <td>
  409. <div id="F6" tabindex="0" class="F6_position" role="button">
  410. <span id="F6_status" class="F_status_css">F6 status</span>
  411. </div>
  412. </td>
  413. </tr>
  414. </table>
  415. </td>
  416. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  417. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  418. <tr>
  419. <td>
  420. <div id="FO1" tabindex="0" class="FO1_position" role="button">
  421. <span id="FO1_status" class="F_status_css">FO1 status</span>
  422. </div>
  423. </td>
  424. </tr>
  425. </table>
  426. </td>
  427. </tr>
  428. <tr>
  429. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  430. <div id="FI1_status_dot" style="height: 20px; background-color: black;"></div>
  431. </td>
  432. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  433. <div id="F1_status_dot" style=" height: 20px; background-color: black;"></div>
  434. </td>
  435. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  436. <div id="F2_status_dot" style=" height: 20px; background-color: black;"></div>
  437. </td>
  438. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  439. <div id="F3_status_dot" style=" height: 20px; background-color: black;"></div>
  440. </td>
  441. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  442. <div id="F4_status_dot" style="height: 20px; background-color: black;"></div>
  443. </td>
  444. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  445. <div id="F5_status_dot" style="height: 20px; background-color: black;"></div>
  446. </td>
  447. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  448. <div id="F6_status_dot" style="height: 20px; background-color: black;"></div>
  449. </td>
  450. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  451. <div id="FO1_status_dot" style="height: 20px; background-color: black;"></div>
  452. </td>
  453. </tr>
  454. <tr>
  455. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  456. 入料儲豆槽
  457. </td>
  458. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  459. 發酵槽
  460. </td>
  461. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  462. 發酵槽
  463. </td>
  464. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  465. 發酵槽
  466. </td>
  467. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  468. 發酵槽
  469. </td>
  470. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  471. 發酵槽
  472. </td>
  473. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  474. 發酵槽
  475. </td>
  476. <td style="border: lightsteelblue 1px solid;" width="12.5%">
  477. 出料儲豆槽
  478. </td>
  479. </tr>
  480. <tr>
  481. <td style="border: lightsteelblue 1px solid;">
  482. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  483. <tr>
  484. <td>
  485. <div id="FI2" tabindex="0" class="FI2_position" role="button">
  486. <span id="FI2_status" class="F_status_css">FI2 status</span>
  487. </div>
  488. </td>
  489. </tr>
  490. </table>
  491. </td>
  492. <td style="border: lightsteelblue 1px solid;">
  493. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  494. <tr>
  495. <td>
  496. <div id="F7" tabindex="0" class="F7_position" role="button">
  497. <span id="F7_status" class="F_status_css">F7 status</span>
  498. </div>
  499. </td>
  500. </tr>
  501. </table>
  502. </td>
  503. <td style="border: lightsteelblue 1px solid;">
  504. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  505. <tr>
  506. <td>
  507. <div id="F8" tabindex="0" class="F8_position" role="button">
  508. <span id="F8_status" class="F_status_css">F8 status</span>
  509. </div>
  510. </td>
  511. </tr>
  512. </table>
  513. </td>
  514. <td style="border: lightsteelblue 1px solid;">
  515. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  516. <tr>
  517. <td>
  518. <div id="F9" tabindex="0" class="F9_position" role="button">
  519. <span id="F9_status" class="F_status_css">F9 status</span>
  520. </div>
  521. </td>
  522. </tr>
  523. </table>
  524. </td>
  525. <td style="border: lightsteelblue 1px solid;">
  526. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  527. <tr>
  528. <td>
  529. <div id="F10" tabindex="0" class="F10_position" role="button">
  530. <span id="F10_status" class="F_status_css">F10 status</span>
  531. </div>
  532. </td>
  533. </tr>
  534. </table>
  535. </td>
  536. <td style="border: lightsteelblue 1px solid;">
  537. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  538. <tr>
  539. <td>
  540. <div id="F11" tabindex="0" class="F11_position" role="button">
  541. <span id="F11_status" class="F_status_css">F11 status</span>
  542. </div>
  543. </td>
  544. </tr>
  545. </table>
  546. </td>
  547. <td style="border: lightsteelblue 1px solid;">
  548. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  549. <tr>
  550. <td>
  551. <div id="F12" tabindex="0" class="F12_position" role="button">
  552. <span id="F12_status" class="F_status_css">F12 status</span>
  553. </div>
  554. </td>
  555. </tr>
  556. </table>
  557. </td>
  558. <td style="border: lightsteelblue 1px solid;">
  559. <table style="border: 0px plum solid; margin-right: auto; margin-left: auto; text-align: center;" cellpadding="5">
  560. <tr>
  561. <td>
  562. <div id="FO2" tabindex="0" class="FO2_position" role="button">
  563. <span id="FO2_status" class="F_status_css">FO2 status</span>
  564. </div>
  565. </td>
  566. </tr>
  567. </table>
  568. </td>
  569. </tr>
  570. <tr>
  571. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  572. <div id="FI2_status_dot" style=" height: 20px; background-color: black;"></div>
  573. </td>
  574. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  575. <div id="F7_status_dot" style=" height: 20px; background-color: black;"></div>
  576. </td>
  577. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  578. <div id="F8_status_dot" style=" height: 20px; background-color: black;"></div>
  579. </td>
  580. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  581. <div id="F9_status_dot" style=" height: 20px; background-color: black;"></div>
  582. </td>
  583. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  584. <div id="F10_status_dot" style="height: 20px; background-color: black;"></div>
  585. </td>
  586. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  587. <div id="F11_status_dot" style="height: 20px; background-color: black;"></div>
  588. </td>
  589. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  590. <div id="F12_status_dot" style="height: 20px; background-color: black;"></div>
  591. </td>
  592. <td width="12.5%" style="border: lightsteelblue 1px solid;">
  593. <div id="FO2_status_dot" style="height: 20px; background-color: black;"></div>
  594. </td>
  595. </tr>
  596. </table>
  597. </div>
  598. <!-- 發酵貨櫃 致動器狀態 感測器數值 -->
  599. <div style="text-align: center;">
  600. <table style="border: 3px lightsteelblue solid; margin-right: auto; margin-left: auto; text-align: center; margin-top: 5px;" cellpadding="5" border="1">
  601. <tr>
  602. <td width="7%" style="border: lightsteelblue 1px solid;">
  603. 桶槽<br>真空吸料機
  604. </td>
  605. <td width="7%" style="border: lightsteelblue 1px solid;">
  606. 入料<br>三通閥
  607. </td>
  608. <td width="7%" style="border: lightsteelblue 1px solid;">
  609. 蝴蝶閥
  610. </td>
  611. <td width="7%" style="border: lightsteelblue 1px solid;">
  612. 逆洗幫浦<br>電磁閥
  613. </td>
  614. <td width="7%" style="border: lightsteelblue 1px solid;">
  615. 桶內消毒<br>電磁閥
  616. </td>
  617. <td width="7%" style="border: lightsteelblue 1px solid;">
  618. 保溫夾層進水<br>電磁閥
  619. </td>
  620. <td width="7%" style="border: lightsteelblue 1px solid;">
  621. 清水入水<br>電磁閥
  622. </td>
  623. <td width="7%" style="border: lightsteelblue 1px solid;">
  624. 排水廢水<br>電磁閥
  625. </td>
  626. <td width="7%" style="border: lightsteelblue 1px solid;">
  627. 感測器抽水<br>雙核隔膜泵
  628. </td>
  629. <td width="7%" style="border: lightsteelblue 1px solid;">
  630. 外桶浮選<br>三通閥
  631. </td>
  632. <td width="7%" style="border: lightsteelblue 1px solid;">
  633. 加熱器<br>1
  634. </td>
  635. <td width="7%" style="border: lightsteelblue 1px solid;">
  636. 加熱器<br>2
  637. </td>
  638. <td width="7%" style="border: lightsteelblue 1px solid;">
  639. 馬達
  640. </td>
  641. <td width="7%" style="border: lightsteelblue 1px solid;">
  642. 警示燈
  643. </td>
  644. </tr>
  645. <tr>
  646. <td style="border: lightsteelblue 1px solid;">
  647. <div id="actuator_0_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  648. </td>
  649. <td style="border: lightsteelblue 1px solid;">
  650. <div id="actuator_1_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  651. </td>
  652. <td style="border: lightsteelblue 1px solid;">
  653. <div id="actuator_2_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  654. </td>
  655. <td style="border: lightsteelblue 1px solid;">
  656. <div id="actuator_3_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  657. </td>
  658. <td style="border: lightsteelblue 1px solid;">
  659. <div id="actuator_4_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  660. </td>
  661. <td style="border: lightsteelblue 1px solid;">
  662. <div id="actuator_5_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  663. </td>
  664. <td style="border: lightsteelblue 1px solid;">
  665. <div id="actuator_6_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  666. </td>
  667. <td style="border: lightsteelblue 1px solid;">
  668. <div id="actuator_7_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  669. </td>
  670. <td style="border: lightsteelblue 1px solid;">
  671. <div id="actuator_8_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  672. </td>
  673. <td style="border: lightsteelblue 1px solid;">
  674. <div id="actuator_9_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  675. </td>
  676. <td style="border: lightsteelblue 1px solid;">
  677. <div id="actuator_10_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  678. </td>
  679. <td style="border: lightsteelblue 1px solid;">
  680. <div id="actuator_11_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  681. </td>
  682. <td style="border: lightsteelblue 1px solid;">
  683. <div id="actuator_12_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  684. </td>
  685. <td style="border: lightsteelblue 1px solid;">
  686. <div id="actuator_13_status" style="margin:0 auto; height: 20px; background-color: lightgray;"></div>
  687. </td>
  688. </tr>
  689. </table>
  690. <table style="border: 3px lightsteelblue solid; margin-right: auto; margin-left: auto; text-align: center; margin-top: 5px;" cellpadding="5" border="1">
  691. <tr>
  692. <td style="border: lightsteelblue 1px solid;">
  693. 水位/生豆<br>高度
  694. </td>
  695. <td style="border: lightsteelblue 1px solid;">
  696. 溫度
  697. </td>
  698. <td style="border: lightsteelblue 1px solid;">
  699. 濕度
  700. </td>
  701. <td style="border: lightsteelblue 1px solid;">
  702. 二氧化碳
  703. </td>
  704. <td style="border: lightsteelblue 1px solid;">
  705. 大氣壓力
  706. </td>
  707. <td style="border: lightsteelblue 1px solid;">
  708. 水質<br>酸鹼度
  709. </td>
  710. <td style="border: lightsteelblue 1px solid;">
  711. 水質<br>氧化還原電位
  712. </td>
  713. <td style="border: lightsteelblue 1px solid;">
  714. 水質<br>溶氧量
  715. </td>
  716. <td style="border: lightsteelblue 1px solid;">
  717. 水質<br>導電度
  718. </td>
  719. <td style="border: lightsteelblue 1px solid;">
  720. 保溫夾層<br>水位
  721. </td>
  722. <td style="border: lightsteelblue 1px solid;">
  723. 馬達<br>編碼器
  724. </td>
  725. <td style="border: lightsteelblue 1px solid;">
  726. 蝴蝶閥<br>編碼器
  727. </td>
  728. </tr>
  729. <tr>
  730. <td style="border: lightsteelblue 1px solid;">
  731. <span id="sensor_1"></span>
  732. </td>
  733. <td style="border: lightsteelblue 1px solid;">
  734. <span id="sensor_2"></span>
  735. </td>
  736. <td style="border: lightsteelblue 1px solid;">
  737. <span id="sensor_3"></span>
  738. </td>
  739. <td style="border: lightsteelblue 1px solid;">
  740. <span id="sensor_4"></span>
  741. </td>
  742. <td style="border: lightsteelblue 1px solid;">
  743. <span id="sensor_5"></span>
  744. </td>
  745. <td style="border: lightsteelblue 1px solid;">
  746. <span id="sensor_6"></span>
  747. </td>
  748. <td style="border: lightsteelblue 1px solid;">
  749. <span id="sensor_7"></span>
  750. </td>
  751. <td style="border: lightsteelblue 1px solid;">
  752. <span id="sensor_8"></span>
  753. </td>
  754. <td style="border: lightsteelblue 1px solid;">
  755. <span id="sensor_9"></span>
  756. </td>
  757. <td style="border: lightsteelblue 1px solid;">
  758. <span id="sensor_10"></span>
  759. </td>
  760. <td style="border: lightsteelblue 1px solid;">
  761. <span id="sensor_11"></span>
  762. </td>
  763. <td style="border: lightsteelblue 1px solid;">
  764. <span id="sensor_12"></span>
  765. </td>
  766. </tr>
  767. </table>
  768. <table style="border: 3px lightsteelblue solid; margin-right: auto; margin-left: auto; text-align: center; margin-top: 5px; line-height: 28px;" cellpadding="5" border="1">
  769. <tr>
  770. <td style="border: lightsteelblue 1px solid;">
  771. 桶槽<br>
  772. 參數設定
  773. </td>
  774. </tr>
  775. <tr>
  776. <td style="padding: 10px; text-align: left; vertical-align: text-top;">
  777. 生豆高度
  778. <input name="Ferment_Tank_bean_height" class="input-text" type="text" value="5">公分<br>
  779. 吸放料時間
  780. <input name="Ferment_Tank_vacuum_time" class="input-text" type="text" value="5">秒<br>
  781. 水位高度
  782. <input name="Ferment_Tank_water_height" class="input-text" type="text" value="8">公分<br>
  783. 馬達轉速
  784. <input name="Ferment_Tank_motor_rpm" class="input-text" type="text" value="15">rpm<br>
  785. 發酵溫度
  786. <input name="Ferment_Tank_fermenting_temp" class="input-text" type="text" value="30">℃<br>
  787. 廢水排放
  788. <input name="Ferment_Tank_WaterOut_time" class="input-text" type="text" value="60">秒, 消毒開啟
  789. <input name="Ferment_Tank_Disinfect_time" class="input-text" type="text" value="10">秒<br>
  790. </td>
  791. </tr>
  792. </table>
  793. </div>
  794. </div>
  795. </div>
  796. </div>
  797. </div>
  798. </div>
  799. </div>
  800. </div>
  801. {% endblock %}