pro.py 32 KB

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