pro.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673
  1. from socket import *
  2. import threading
  3. import time
  4. import app
  5. import main
  6. import datetime
  7. import user_socket
  8. import sql
  9. # import pythoncom
  10. class work_server(threading.Thread):
  11. def __init__(self, threadID, name, counter):
  12. threading.Thread.__init__(self)
  13. self.threadID = threadID
  14. self.name = name
  15. self.counter = counter
  16. self.user_var = app.user_var
  17. self.opc_value = app.opc_value
  18. self.sqlclient = sql.sqlclient
  19. self.exit_stat = False
  20. self.tcpserverParam = user_socket.tcpserverParam
  21. self.plc_conn_timeout = 0
  22. self.order_change_timeout = 0
  23. def air_data_split(self, value):
  24. air_value = value.split('\t')
  25. idx = 0
  26. for air in air_value:
  27. if air == '(OK)' or air == '(TD)' or air == '(AL)':
  28. break
  29. else:
  30. idx = idx + 1
  31. if idx >= 1 and len(air_value) - idx >= 5:
  32. return '<{0}>:{4} {5}:{1}:{2} {3}'.format(air_value[idx-1], air_value[idx], air_value[idx + 1],
  33. air_value[idx + 2], air_value[idx + 3], air_value[idx + 4])
  34. else:
  35. return ''
  36. def get_ateq_product_name(self, value):
  37. air_value = value.split('\t')
  38. return air_value[0]
  39. def opc_data_pro(self):
  40. value = self.opc_value.get_Bee()
  41. self.user_var.bee_stat = value
  42. value = self.opc_value.get_Number_type()
  43. self.user_var.number_type = '{0}{1}{2}'.format(chr(value[0]), chr(value[1]), chr(value[2]))
  44. value = self.opc_value.get_Batch_y()
  45. value = self.opc_value.get_Batch_m()
  46. value = self.opc_value.get_Batch_d()
  47. value = self.opc_value.get_Air_data_17700()
  48. self.user_var.product_17700_name = self.get_ateq_product_name(value)
  49. air_value = self.air_data_split(value)
  50. if air_value != '':
  51. self.user_var.airtightness_17700 = air_value
  52. self.user_var.airtightness_17700_str.set(self.user_var.airtightness_17700)
  53. value = self.opc_value.get_Air_data_17720()
  54. self.user_var.product_17720_name = self.get_ateq_product_name(value)
  55. air_value = self.air_data_split(value)
  56. if air_value != '':
  57. self.user_var.airtightness_17720 = air_value
  58. self.user_var.airtightness_17720_str.set(self.user_var.airtightness_17720)
  59. # value = self.opc_value.get_Ok_count()
  60. value = self.user_var.order_ok
  61. self.user_var.order_ok_str.set(value)
  62. # value = self.opc_value.get_Ng_count()
  63. value = self.user_var.order_ng
  64. self.user_var.order_ng_str.set(value)
  65. value = self.opc_value.get_Targe_count()
  66. self.user_var.order_targe_str.set(value)
  67. value = self.opc_value.get_SNP_count()
  68. self.user_var.order_snp_str.set(value)
  69. value = self.opc_value.get_Origin_ok()
  70. self.user_var.originchkok_stat = value
  71. value = self.opc_value.get_Origin_dir()
  72. self.user_var.origindir_stat = value
  73. value = self.opc_value.get_Upairtight_ok()
  74. self.user_var.upairtightok_stat = value
  75. value = self.opc_value.get_Upairtight_ng()
  76. self.user_var.upairtightng_stat = value
  77. value = self.opc_value.get_Downairtight_ok()
  78. self.user_var.downairtightok_stat = value
  79. value = self.opc_value.get_Downairtight_ng()
  80. self.user_var.downairtightng_stat = value
  81. value = self.opc_value.get_Upprint_ok()
  82. self.user_var.upprintok_stat = value
  83. value = self.opc_value.get_Downprint_ok()
  84. self.user_var.downprintok_stat = value
  85. value = self.opc_value.get_Upgage_s()
  86. self.user_var.upgages_stat = value
  87. value = self.opc_value.get_Downgage_s()
  88. self.user_var.downgages_stat = value
  89. value = self.opc_value.get_Upwork_s()
  90. self.user_var.upworks_stat = value
  91. value = self.opc_value.get_Downwork_s()
  92. self.user_var.downworks_stat = value
  93. value = self.opc_value.get_Upm_pen()
  94. self.user_var.upmpen_stat = value
  95. value = self.opc_value.get_Downm_pen()
  96. self.user_var.downmpen_stat = value
  97. value = self.opc_value.get_Upconnect()
  98. self.user_var.upconnect_stat = value
  99. value = self.opc_value.get_Downconnect()
  100. self.user_var.downconnect_stat = value
  101. value = self.opc_value.get_Motororgin_ok()
  102. self.user_var.motororiginok_stat = value
  103. value = self.opc_value.get_Motor_onup()
  104. self.user_var.motoronup_stat = value
  105. value = self.opc_value.get_Motor_ondown()
  106. self.user_var.motorondown_stat = value
  107. value = self.opc_value.get_Manual_print()
  108. value = self.opc_value.get_Manual_printup()
  109. value = self.opc_value.get_Manual_printdown()
  110. value = self.opc_value.get_Manual_printok()
  111. # stat = self.opc_value.get_PLC_ok()
  112. def check_opc_stat(self):
  113. self.opc_value.check_Bee()
  114. self.opc_value.check_Product_idx()
  115. self.opc_value.check_Product_name()
  116. self.opc_value.check_Batch_y()
  117. self.opc_value.check_Batch_m()
  118. self.opc_value.check_Batch_d()
  119. self.opc_value.check_Air_data_17700()
  120. self.opc_value.check_Air_data_17720()
  121. self.opc_value.check_Ok_count()
  122. self.opc_value.check_Ng_count()
  123. self.opc_value.check_Targe_count()
  124. self.opc_value.check_SNP_count()
  125. self.opc_value.check_Origin_ok()
  126. self.opc_value.check_Origin_dir()
  127. self.opc_value.check_Upairtight_ok()
  128. self.opc_value.check_Upairtight_ng()
  129. self.opc_value.check_Downairtight_ok()
  130. self.opc_value.check_Downairtight_ng()
  131. self.opc_value.check_Upprint_ok()
  132. self.opc_value.check_Downprint_ok()
  133. self.opc_value.check_Upgage_s()
  134. self.opc_value.check_Downgage_s()
  135. self.opc_value.check_Upwork_s()
  136. self.opc_value.check_Downwork_s()
  137. self.opc_value.check_Upm_pen()
  138. self.opc_value.check_Downm_pen()
  139. self.opc_value.check_Upconnect()
  140. self.opc_value.check_Downconnect()
  141. self.opc_value.check_Motororgin_ok()
  142. self.opc_value.check_Motor_onup()
  143. self.opc_value.check_Motor_ondown()
  144. self.opc_value.check_Manual_print()
  145. self.opc_value.check_Manual_printup()
  146. self.opc_value.check_Manual_printdown()
  147. self.opc_value.check_Manual_printok()
  148. self.opc_value.check_PLC_ok()
  149. self.opc_value.check_Airdata_stat()
  150. self.opc_value.check_Auto_printok()
  151. self.opc_value.check_Airtest_ok_r()
  152. self.opc_value.check_Airtest_ok_w()
  153. self.opc_value.check_Airtest_ng_r()
  154. self.opc_value.check_Airtest_ng_w()
  155. self.opc_value.check_Start_work()
  156. self.opc_value.check_Print_start()
  157. def batch_pro(self):
  158. value = datetime.datetime.now().month
  159. if value >= 1 and value <= 9:
  160. m_asc = value + 0x30
  161. elif value >= 10 and value <= 12:
  162. m_asc = value + 78
  163. m = self.opc_value.get_Batch_m()
  164. if m != m_asc:
  165. self.opc_value.set_Batch_m(m_asc)
  166. self.user_var.batch_m = '{}'.format(chr(m_asc))
  167. value = datetime.datetime.now().day
  168. d = self.opc_value.get_Batch_d()
  169. if d != value:
  170. self.opc_value.set_Batch_d(value)
  171. self.user_var.batch_d = '{0:02d}'.format(value)
  172. self.user_var.batch = self.user_var.batch_y + self.user_var.batch_m + self.user_var.batch_d
  173. self.user_var.batch_str.set(self.user_var.batch)
  174. def product_number_pro(self):
  175. self.user_var.number_value = '{0}{1}{2}{3}{4:04d}{5}'.format(self.user_var.number_type,
  176. self.user_var.batch_y, self.user_var.batch_m,
  177. self.user_var.batch_d,
  178. self.user_var.number_count,
  179. chr(self.user_var.team_sel + ord('A')))
  180. self.user_var.printf_num_str.set(self.user_var.number_value)
  181. self.user_var.serial_num_value = '{0:04d}{1:02d}{2:02d}{3:05d}'.format(datetime.datetime.now().year,
  182. datetime.datetime.now().month,
  183. datetime.datetime.now().day,
  184. self.user_var.serial_num)
  185. self.user_var.serial_num_str.set(self.user_var.serial_num_value)
  186. def insert_airdata(self):
  187. print("Save Data")
  188. # self.update_order_tbl(self.user_var.order_num, ok=self.user_var.order_ok,
  189. # ng=self.user_var.order_ng, targe=self.user_var.order_targe,
  190. # snp=self.user_var.order_snp)
  191. self.insert_data_tbl()
  192. def update_airdata(self, stat):
  193. print("Update Data")
  194. self.update_data_tbl(stat)
  195. def air_work_pro(self):
  196. if self.user_var.opc_conn_stat == "PLC已连接":
  197. datastat = self.opc_value.get_Airdata_stat()
  198. printok = self.opc_value.get_Auto_printok()
  199. airok_r = self.opc_value.get_Airtest_ok_r()
  200. airok_w = self.opc_value.get_Airtest_ok_w()
  201. airng_r = self.opc_value.get_Airtest_ng_r()
  202. airng_w = self.opc_value.get_Airtest_ng_w()
  203. startwork = self.opc_value.get_Start_work()
  204. if self.user_var.airdata_work_stat == 'working':
  205. if airok_r == True and airok_w == True:
  206. print("ok to printing")
  207. self.user_var.log_str.set("ok to printing")
  208. self.user_var.product_ok = True
  209. self.insert_airdata()
  210. # self.opc_value.set_Airdata_stat(1)
  211. self.opc_value.set_Airtest_ok_w(False)
  212. self.tcpserverParam.wr_data = self.user_var.number_value
  213. self.tcpserverParam.wr_stat = True
  214. self.user_var.airdata_work_stat = 'printing'
  215. elif airng_r == True and airng_w == True:
  216. print("ng to finish")
  217. self.user_var.log_str.set("ng to finish")
  218. self.user_var.order_ng = self.user_var.order_ng + 1
  219. self.user_var.order_targe = self.user_var.order_targe + 1
  220. self.update_order_tbl(self.user_var.order_num, ng=self.user_var.order_ng,
  221. targe=self.user_var.order_targe)
  222. self.user_var.product_ok = False
  223. self.insert_airdata()
  224. self.update_airdata(False)
  225. # self.opc_value.set_Airdata_stat(1)
  226. self.opc_value.set_Airtest_ng_w(False)
  227. self.user_var.airdata_work_stat = 'finish'
  228. elif self.user_var.airdata_work_stat == 'printing':
  229. if self.tcpserverParam.wr_stat == False:
  230. self.user_var.log_str.set("ok to printed")
  231. print("ok to printed")
  232. self.user_var.airdata_work_stat = 'printed'
  233. self.opc_value.set_Print_start(True)
  234. elif self.user_var.airdata_work_stat == 'printed':
  235. if printok == True:
  236. self.user_var.log_str.set("ok to finish")
  237. print("ok to finish")
  238. self.user_var.order_ok = self.user_var.order_ok + 1
  239. self.user_var.order_targe = self.user_var.order_targe + 1
  240. self.update_order_tbl(self.user_var.order_num, ok=self.user_var.order_ok,
  241. targe=self.user_var.order_targe)
  242. self.update_airdata(True)
  243. self.opc_value.set_Print_start(False)
  244. self.opc_value.set_Auto_printok(False)
  245. self.user_var.airdata_work_stat = 'finish'
  246. elif self.user_var.airdata_work_stat == 'finish':
  247. if startwork == False:
  248. print("to working")
  249. self.user_var.log_str.set("to working")
  250. self.opc_value.set_Start_work(True)
  251. self.user_var.airdata_work_stat = 'working'
  252. self.user_var.serial_num = self.user_var.order_ok + self.user_var.order_ng + 1
  253. self.user_var.number_count = self.user_var.order_ok + 1
  254. self.product_number_pro()
  255. self.user_var.serial_num_working = self.user_var.serial_num_value
  256. elif (airng_r == True and airng_w == True) or (airok_r == True and airok_w == True):
  257. print("no start to working")
  258. self.user_var.log_str.set("no start to working")
  259. self.user_var.airdata_work_stat = 'working'
  260. self.user_var.serial_num = self.user_var.order_ok + self.user_var.order_ng + 1
  261. self.user_var.number_count = self.user_var.order_ok + 1
  262. self.product_number_pro()
  263. self.user_var.serial_num_working = self.user_var.serial_num_value
  264. # def database_pro(self):
  265. def update_batch_tbl(self):
  266. sqlstr = "UPDATE batch_tbl SET end_time={0}, stat={1} WHERE stat = {2}".format(
  267. int(time.time()), True, False)
  268. self.sqlclient.sql_action_all(sqlstr)
  269. def insert_batch_tbl(self):
  270. sqlstr = "INSERT INTO batch_tbl "
  271. sqlstr = sqlstr + "(year, begin_time, end_time, stat)"
  272. sqlstr = sqlstr + " VALUES ('{0}', '{1}', '{2}', {3})".format(
  273. self.user_var.batch_y,
  274. int(time.time()),
  275. int(time.time()),
  276. False
  277. )
  278. self.sqlclient.sql_action_all(sqlstr)
  279. def batch_tbl_check(self):
  280. sqlstr = 'SELECT year FROM batch_tbl WHERE stat=False ORDER by begin_time DESC'
  281. results = self.sqlclient.sql_inquire_all(sqlstr)
  282. if results != None and len(results) > 0:
  283. idx = 0
  284. for row in results:
  285. if idx == 0:
  286. if row[0] >= 'A' and row[0] <= 'Z':
  287. self.user_var.batch_y = row[0]
  288. self.user_var.order_year_str.set(self.user_var.batch_y)
  289. self.user_var.batch_str.set(
  290. self.user_var.batch_y + self.user_var.batch_m + self.user_var.batch_d)
  291. else:
  292. self.insert_batch_tbl()
  293. def update_data_tbl(self, status):
  294. sqlstr = 'UPDATE product_data_tbl SET '
  295. if status == True:
  296. sqlstr = sqlstr + "batch='{0}', testok={1}, data_17700='{2}', data_17720='{3}', end_time={4}, stat={5} WHERE serial = '{6}'".format(
  297. self.user_var.number_value, True, self.user_var.airtightness_17700, self.user_var.airtightness_17720,
  298. int(time.time()), True, self.user_var.serial_num_working)
  299. else:
  300. sqlstr = sqlstr + "end_time={0}, data_17700='{1}', data_17720='{2}', stat={3} WHERE serial = '{4}'".format(
  301. int(time.time()), self.user_var.airtightness_17700, self.user_var.airtightness_17720, True,
  302. self.user_var.serial_num_working)
  303. self.sqlclient.sql_action_all(sqlstr)
  304. def insert_data_tbl(self):
  305. sqlstr = "INSERT INTO product_data_tbl "
  306. sqlstr = sqlstr + "(batch, serial, product_name, testok, data_17700, data_17720, team, tester, begin_time, end_time, stat)"
  307. sqlstr = sqlstr + " VALUES ('{0}', '{1}', '{2}', {3}, '{4}', '{5}', '{6}', '{7}', {8}, {9}, {10})".format(
  308. 'NULL',
  309. self.user_var.serial_num_value,
  310. self.user_var.product_name,
  311. False,
  312. 'NULL',
  313. 'NULL',
  314. str(self.user_var.team),
  315. 'tester',
  316. int(time.time()),
  317. int(time.time()),
  318. False
  319. )
  320. self.sqlclient.sql_action_all(sqlstr)
  321. def update_order_tbl(self, order_num, ok=-1, ng=-1, targe=-1, snp=-1, end_time=-1, stat=False):
  322. first = False
  323. sqlstr = 'UPDATE order_tbl SET '
  324. if ok >=0:
  325. sqlstr = sqlstr + ' ok={0}'.format(ok)
  326. first = True
  327. if ng >= 0:
  328. if first == True:
  329. sqlstr = sqlstr + ', '
  330. sqlstr = sqlstr + 'ng={0} '.format(ng)
  331. first = True
  332. if targe >=0:
  333. if first == True:
  334. sqlstr = sqlstr + ', '
  335. sqlstr = sqlstr + 'targe={0} '.format(targe)
  336. first = True
  337. if snp >= 0:
  338. if first == True:
  339. sqlstr = sqlstr + ', '
  340. sqlstr = sqlstr + 'snp={0} '.format(snp)
  341. first = True
  342. if end_time >= 0:
  343. if first == True:
  344. sqlstr = sqlstr + ', '
  345. sqlstr = sqlstr + 'end_time={0} '.format(end_time)
  346. first = True
  347. if stat == True:
  348. if first == True:
  349. sqlstr = sqlstr + ', '
  350. sqlstr = sqlstr + 'stat={0} '.format(stat)
  351. sqlstr = sqlstr + " WHERE order_num = '{0}'".format(order_num)
  352. self.sqlclient.sql_action_all(sqlstr)
  353. def insert_order_tbl(self, ok, ng, targe, snp):
  354. self.user_var.order_ok = ok
  355. self.user_var.order_ng = ng
  356. self.user_var.order_targe = targe
  357. self.user_var.order_snp = snp
  358. sqlstr = "INSERT INTO order_tbl "
  359. sqlstr = sqlstr + "(order_num, product_idx, product_name, batch, team, ok, ng, targe, snp, begin_time, stat)"
  360. sqlstr = sqlstr + " VALUES ('{0}', {1}, '{2}', '{3}', '{4}', {5}, {6}, {7}, {8}, {9}, {10})".format(self.user_var.order_num,
  361. self.user_var.product_idx,
  362. self.user_var.product_name,
  363. self.user_var.batch,
  364. str(self.user_var.team),
  365. self.user_var.order_ok,
  366. self.user_var.order_ng,
  367. self.user_var.order_targe,
  368. self.user_var.order_snp,
  369. int(time.time()),
  370. False)
  371. self.sqlclient.sql_action_all(sqlstr)
  372. def order_tbl_check(self):
  373. sqlstr = 'SELECT id, order_num,product_idx, product_name, batch, team, ok, ng, targe, snp FROM order_tbl WHERE stat=False ORDER by begin_time DESC'
  374. results = self.sqlclient.sql_inquire_all(sqlstr)
  375. if results != None and len(results) > 0:
  376. idx = 0
  377. for row in results:
  378. if idx == 0:
  379. order_num = row[1]
  380. product_idx = row[2]
  381. product_name = row[3]
  382. batch = row[4]
  383. team = row[5]
  384. ok = row[6]
  385. ng = row[7]
  386. targe = row[8]
  387. snp = row[9]
  388. if self.user_var.batch == batch:
  389. self.user_var.order_num = order_num
  390. self.user_var.team = team
  391. self.user_var.team_sel = ord(self.user_var.team) - ord('A')
  392. self.user_var.team_value = self.user_var.team_list[self.user_var.team_sel]
  393. self.user_var.order_ok = ok
  394. self.user_var.order_ng = ng
  395. self.user_var.order_targe = targe
  396. self.user_var.order_snp = snp
  397. self.user_var.number_count = self.user_var.order_ok + 1
  398. self.user_var.serial_num = self.user_var.order_ok + self.user_var.order_ng + 1
  399. else:
  400. self.update_order_tbl(order_num, end_time=int(time.time()) ,stat=True)
  401. self.insert_order_tbl(0, 0, 0, 0)
  402. else:
  403. order_num = row[1]
  404. self.update_order_tbl(order_num, stat=True)
  405. idx = idx + 1
  406. else:
  407. self.insert_order_tbl(0,0,0,0)
  408. # def insert_param_tbl(self, type):
  409. # sqlstr = "INSERT INTO product_param_tbl "
  410. # sqlstr = sqlstr + "(product_idx,product_name,param_type,startuptime,airtime,presstime, testtime, \
  411. # exhaust, maxpress, minpress, setpress, capacity, \
  412. # posthreshold, pnegthreshold)"
  413. # if type == 17700:
  414. # sqlstr = sqlstr + " VALUES ({0}, '{1}', {2}, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')".format(
  415. # self.user_var.product_idx+1,
  416. # self.user_var.product_name,
  417. # 17700)
  418. # else:
  419. # sqlstr = sqlstr + " VALUES ({0}, '{1}', {2}, '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')".format(
  420. # self.user_var.product_idx+1,
  421. # self.user_var.product_name,
  422. # 17720)
  423. # self.sqlclient.sql_action_all(sqlstr)
  424. #
  425. # def param_tbl_check(self):
  426. # sqlstr = "SELECT startuptime,airtime,presstime, testtime, exhaust, maxpress, minpress, setpress, capacity, \
  427. # posthreshold, pnegthreshold FROM product_param_tbl WHERE product_name='{0}' and \
  428. # param_type=17700".format(self.user_var.product_name)
  429. # paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  430. # if paramresult != None and len(paramresult) > 0:
  431. # for paramrow in paramresult:
  432. # self.user_var.startdelay_17700_str.set(paramrow[0])
  433. # self.user_var.airtime_17700_str.set(paramrow[1])
  434. # self.user_var.presstime_17700_str.set(paramrow[2])
  435. # self.user_var.testtime_17700_str.set(paramrow[3])
  436. # self.user_var.exhaust_17700_str.set(paramrow[4])
  437. # self.user_var.maxpress_17700_str.set(paramrow[5])
  438. # self.user_var.minpress_17700_str.set(paramrow[6])
  439. # self.user_var.setpress_17700_str.set(paramrow[7])
  440. # self.user_var.capacity_17700_str.set(paramrow[8])
  441. # self.user_var.posthreshold_17700_str.set(paramrow[9])
  442. # self.user_var.pnegthreshold_17700_str.set(paramrow[10])
  443. # else:
  444. # self.user_var.startdelay_17700_str.set("0")
  445. # self.user_var.airtime_17700_str.set("0")
  446. # self.user_var.presstime_17700_str.set("0")
  447. # self.user_var.testtime_17700_str.set("0")
  448. # self.user_var.exhaust_17700_str.set("0")
  449. # self.user_var.maxpress_17700_str.set("0")
  450. # self.user_var.minpress_17700_str.set("0")
  451. # self.user_var.setpress_17700_str.set("0")
  452. # self.user_var.capacity_17700_str.set("0")
  453. # self.user_var.posthreshold_17700_str.set("0")
  454. # self.user_var.pnegthreshold_17700_str.set("0")
  455. # self.insert_param_tbl(17700)
  456. #
  457. # sqlstr = "SELECT startuptime,airtime,presstime, testtime, exhaust, maxpress, minpress, setpress, capacity, \
  458. # posthreshold, pnegthreshold FROM product_param_tbl WHERE product_name='{0}' and \
  459. # param_type=17720".format(self.user_var.product_name)
  460. # paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  461. # if paramresult != None and len(paramresult) > 0:
  462. # for paramrow in paramresult:
  463. # self.user_var.startdelay_17720_str.set(paramrow[0])
  464. # self.user_var.airtime_17720_str.set(paramrow[1])
  465. # self.user_var.presstime_17720_str.set(paramrow[2])
  466. # self.user_var.testtime_17720_str.set(paramrow[3])
  467. # self.user_var.exhaust_17720_str.set(paramrow[4])
  468. # self.user_var.maxpress_17720_str.set(paramrow[5])
  469. # self.user_var.minpress_17720_str.set(paramrow[6])
  470. # self.user_var.setpress_17720_str.set(paramrow[7])
  471. # self.user_var.capacity_17720_str.set(paramrow[8])
  472. # self.user_var.posthreshold_17720_str.set(paramrow[9])
  473. # self.user_var.pnegthreshold_17720_str.set(paramrow[10])
  474. # else:
  475. # self.user_var.startdelay_17720_str.set("0")
  476. # self.user_var.airtime_17720_str.set("0")
  477. # self.user_var.presstime_17720_str.set("0")
  478. # self.user_var.testtime_17720_str.set("0")
  479. # self.user_var.exhaust_17720_str.set("0")
  480. # self.user_var.maxpress_17720_str.set("0")
  481. # self.user_var.minpress_17720_str.set("0")
  482. # self.user_var.setpress_17720_str.set("0")
  483. # self.user_var.capacity_17720_str.set("0")
  484. # self.user_var.posthreshold_17720_str.set("0")
  485. # self.user_var.pnegthreshold_17720_str.set("0")
  486. # self.insert_param_tbl(17720)
  487. def product_name_set(self):
  488. sqlstr = "SELECT product_idx,product_name,17700_name,17720_name FROM product_tbl WHERE stat=True"
  489. paramresult = self.sqlclient.sql_inquire_all(sqlstr)
  490. if paramresult != None and len(paramresult) > 0:
  491. for paramrow in paramresult:
  492. product_idx = paramrow[0]
  493. product_name = paramrow[1]
  494. name_17700 = paramrow[2]
  495. name_17720 = paramrow[3]
  496. if product_idx < 14:
  497. self.user_var.product_list[product_idx] = product_name
  498. self.user_var.product_list_str[product_idx].set(product_name)
  499. self.user_var.product_17700_list[product_idx] = name_17700
  500. self.user_var.product_17720_list[product_idx] = name_17720
  501. self.user_var.product_load = False
  502. def product_name_check(self):
  503. value = self.opc_value.get_Product_idx()
  504. self.user_var.opc_product_idx = value
  505. value = self.opc_value.get_Product_name()
  506. self.user_var.opc_product_name = value
  507. if self.user_var.opc_product_idx <= 14:
  508. if self.user_var.product_list[self.user_var.opc_product_idx-1] == self.user_var.opc_product_name:
  509. self.user_var.product_idx = self.user_var.opc_product_idx-1
  510. self.user_var.product_name = self.user_var.product_list[self.user_var.product_idx]
  511. self.user_var.product_17700_name = self.user_var.product_17700_list[self.user_var.product_idx]
  512. self.user_var.product_17720_name = self.user_var.product_17720_list[self.user_var.product_idx]
  513. self.user_var.product_name_noset = '品番已设置'
  514. self.user_var.product_idx_str.set(self.user_var.product_idx + 1)
  515. self.user_var.product_str.set(self.user_var.product_name)
  516. else:
  517. self.user_var.product_idx = 0
  518. self.user_var.product_name = ''
  519. self.user_var.product_17700_name = ''
  520. self.user_var.product_17720_name = ''
  521. self.user_var.product_name_noset = '品番不存在,请设置...'
  522. else:
  523. self.user_var.product_idx = 0
  524. self.user_var.product_name = ''
  525. self.user_var.product_17700_name = ''
  526. self.user_var.product_17720_name = ''
  527. self.user_var.product_name_noset = '品番编号超过14'
  528. def everyday_check(self):
  529. if self.order_change_timeout == 0:
  530. self.order_change_timeout = 10
  531. self.batch_pro()
  532. tt_check = False
  533. c_time = time.strftime("%H:%M:%S", time.localtime())
  534. if c_time[0:2] == '00': # 判断截取小时是否为0
  535. if c_time[3:5] == '00': # 判断截取分钟是否为0
  536. timevalue = int(c_time[6:8]) # 判断截取秒是否为0
  537. if timevalue >= 0 and timevalue <= 10:
  538. if self.user_var.order_date_update == False:
  539. tt_check = True
  540. else:
  541. if self.user_var.order_date_update == True:
  542. self.user_var.order_date_update = False
  543. if tt_check == True:
  544. self.update_order_tbl(self.user_var.order_num, end_time=int(time.time()), stat=True)
  545. self.user_var.order_count = 1
  546. self.user_var.order_num = '{0}{1}{2}{3:02d}'.format(self.user_var.number_type,
  547. datetime.datetime.now().strftime('%Y%m%d%H%M%S'),
  548. chr(self.user_var.team_sel + ord('A')),
  549. self.user_var.order_count)
  550. self.insert_order_tbl(0, 0, 0, 0)
  551. self.user_var.serial_num = self.user_var.order_ok + self.user_var.order_ng + 1
  552. self.user_var.number_count = self.user_var.order_ok + 1
  553. self.user_var.order_date_update = True
  554. print("insert order_tbl everyday!")
  555. elif self.user_var.order_update_stat == True:
  556. self.user_var.order_update_stat = False
  557. self.update_order_tbl(self.user_var.order_num, end_time=int(time.time()), stat=True)
  558. self.insert_order_tbl(self.user_var.order_ok, self.user_var.order_ng,
  559. self.user_var.order_targe, self.user_var.order_snp)
  560. else:
  561. self.order_change_timeout = self.order_change_timeout - 1
  562. def plc_conn_check(self):
  563. if self.plc_conn_timeout == 0:
  564. self.plc_conn_timeout = 20
  565. if self.user_var.workstatstr == True:
  566. self.user_var.workstatstr = False
  567. self.opc_value.set_PLC_ok(True)
  568. else:
  569. self.user_var.workstatstr = True
  570. self.opc_value.set_PLC_ok(False)
  571. else:
  572. self.plc_conn_timeout = self.plc_conn_timeout - 1
  573. def exit(self):
  574. self.exit_stat = True
  575. def run(self):
  576. self.product_name_set()
  577. while self.user_var.opc_conn_stat != "PLC已连接":
  578. if self.exit_stat == True:
  579. break
  580. time.sleep(1)
  581. if self.exit_stat == False:
  582. self.batch_tbl_check()
  583. self.batch_pro()
  584. self.order_tbl_check()
  585. # self.param_tbl_check()
  586. while self.exit_stat == False:
  587. with main.threadlock:
  588. if self.user_var.product_load == True:
  589. self.product_name_set()
  590. if self.user_var.batch_update_stat == True:
  591. self.user_var.batch_update_stat = False
  592. self.update_batch_tbl()
  593. self.insert_batch_tbl()
  594. self.product_name_check()
  595. self.plc_conn_check()
  596. self.opc_data_pro()
  597. self.check_opc_stat()
  598. self.air_work_pro()
  599. self.everyday_check()
  600. self.product_number_pro()
  601. time.sleep(0.1)
  602. print("work进程结束!")
  603. self.user_var.pro_exit_stat = True