GunHandler.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. import os
  2. import xml.etree.ElementTree as ET
  3. import xlwt
  4. # from xlwt import Workbook, XFStyle, Borders, Pattern, Font
  5. import datetime
  6. import time
  7. import xlsxwriter
  8. import sys
  9. sys.path.append("C:\Python\Python36\Lib")
  10. import socket
  11. # python3
  12. import configparser
  13. import win32api,win32con
  14. start = time.time()
  15. def getHeaderStyle():
  16. return xlwt.easyxf('font:height 720;') # 36pt,类型小初的字号
  17. def getHeaderStyleFont():
  18. fnt = Font()
  19. fnt.height = 400
  20. fnt.bold = True
  21. style = XFStyle()
  22. style.font = fnt
  23. return style
  24. def gettitlestyle():
  25. fnt = Font()
  26. fnt.bold = True
  27. alignment = xlwt.Alignment() # Create Alignment
  28. alignment.horz = xlwt.Alignment.HORZ_CENTER # May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
  29. alignment.vert = xlwt.Alignment.VERT_CENTER # May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
  30. style = XFStyle()
  31. style.alignment = alignment # Add Alignment to Style
  32. style.font = fnt
  33. return style
  34. def getcontentstyle():
  35. fnt = Font()
  36. alignment = xlwt.Alignment() # Create Alignment
  37. alignment.horz = xlwt.Alignment.HORZ_CENTER # May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
  38. alignment.vert = xlwt.Alignment.VERT_CENTER # May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
  39. style = XFStyle()
  40. style.alignment = alignment # Add Alignment to Style
  41. style.font = fnt
  42. return style
  43. tree = ET.parse('C:\\Tokheim\\xml\\GunReport.xml')
  44. root = tree.getroot()
  45. tag = root.tag
  46. fn = 'C:\\Tokheim\\枪报表' + root.get('attrtime') + '.xlsx'
  47. sectionname = 'GunReport'
  48. cfgpath = "C:\\Tokheim\\plugs\\" + sectionname + "cfg.ini"
  49. workbook = xlsxwriter.Workbook(fn)
  50. try:
  51. workbook.close()
  52. except:
  53. state = "2"
  54. conf = configparser.ConfigParser()
  55. conf.add_section(sectionname)
  56. conf.set(sectionname, "State", state)
  57. conf.write(open(cfgpath, "w"))
  58. exit(1)
  59. workbook = xlsxwriter.Workbook(fn)
  60. # borders = Borders()
  61. # borders.left = Borders.THICK
  62. # borders.right = Borders.THICK
  63. # borders.top = Borders.THICK
  64. # borders.bottom = Borders.THICK
  65. # pattern = Pattern()
  66. # pattern.pattern = Pattern.SOLID_PATTERN
  67. # pattern.pattern_fore_colour = 0x0A
  68. # style = XFStyle()
  69. # style.borders = borders
  70. # headerstyle = getHeaderStyle()
  71. # headerStyleFont = getHeaderStyleFont()
  72. # titlestyle = gettitlestyle()
  73. # contentstyle = getcontentstyle()
  74. format1 = workbook.add_format()
  75. format2 = workbook.add_format()
  76. format2.set_fg_color('#d9d9d9')
  77. recordcount = 0
  78. for index, oilgun in enumerate(root):
  79. sheetoil = workbook.add_worksheet(oilgun.get('oilnum') + '号枪报表')
  80. sheetgrid = workbook.add_worksheet(oilgun.get('oilnum') + '号图表')
  81. # first_row = sheetoil.row(0)
  82. # first_row.set_style(headerstyle)
  83. # sheetoil.write_merge(0,0,0,25,"油气回收在线监测枪数据表",headerStyleFont)
  84. # col1 = sheetoil.col(1)
  85. # col1.width = 256 * 20
  86. # first_col = sheetoil.col(0)
  87. # first_col.width = 256 * 20
  88. # col2 = sheetoil.col(2)
  89. # col2.width = 256 * 15
  90. sheetoil.write(0, 0, "油气回收在线监测枪数据表")
  91. sheetoil.write(2, 0, '枪号')
  92. sheetoil.write(2, 1, int(oilgun.get('oilnum')))
  93. sheetoil.set_column('A:A', len('2019-00-00 00:00:00') + 1)
  94. sheetoil.set_column('AO:AO', len('2019-00-00 00:00:00') + 1)
  95. sheetoil.set_column(11, 11, None, None, {'hidden': 1})
  96. sheetoil.set_column(12, 12, None, None, {'hidden': 1})
  97. sheetoil.set_column(13, 13, None, None, {'hidden': 1})
  98. sheetoil.set_column(14, 14, None, None, {'hidden': 1})
  99. sheetoil.set_column(50, 50, None, None, {'hidden': 1})
  100. sheetoil.set_column(51, 51, None, None, {'hidden': 1})
  101. sheetoil.write(4, 0, '时间')
  102. sheetoil.write(4, 1, '计数')
  103. sheetoil.write(4, 2, '有效计数')
  104. sheetoil.write(4, 3, 'A/L超标计数')
  105. sheetoil.write(4, 4, 'A/L')
  106. sheetoil.write(4, 5, '油体积')
  107. sheetoil.write(4, 6, '气体积')
  108. sheetoil.write(4, 7, '油流速')
  109. sheetoil.write(4, 8, '气流速')
  110. sheetoil.write(4, 9, '管线压力')
  111. sheetoil.write(4, 10, '油罐压力')
  112. sheetoil.write(4, 11, '气压力')
  113. sheetoil.write(4, 12, 'PWM')
  114. sheetoil.write(4, 13, 'VCC错误信息')
  115. sheetoil.write(4, 14, '流量计错误')
  116. sheetoil.write(4, 40, '时间')
  117. sheetoil.write(4, 41, '有效计数')
  118. sheetoil.write(4, 42, 'A/L超标计数')
  119. sheetoil.write(4, 43, 'A/L')
  120. sheetoil.write(4, 44, '油体积')
  121. sheetoil.write(4, 45, '气体积')
  122. sheetoil.write(4, 46, '油流速')
  123. sheetoil.write(4, 47, '气流速')
  124. sheetoil.write(4, 48, '管线压力')
  125. sheetoil.write(4, 49, '油罐压力')
  126. sheetoil.write(4, 50, '气压力')
  127. sheetoil.write(4, 51, 'PWM')
  128. sheetoil.write(4, 60, 'A/L')
  129. sheetoil.write(4, 61, '油流速')
  130. sheetoil.write(4, 62, '气流速')
  131. count = 0
  132. for guncol in oilgun:
  133. validcounts = 0
  134. validflag = 0
  135. avicounts = 0
  136. count = 0
  137. for index, gunele in enumerate(guncol):
  138. recordcount = recordcount + 1
  139. timetxt = gunele.find('time').text
  140. isfalse = gunele.find('isfalse').text
  141. al = float(gunele.find('al').text)
  142. liquidvl = float(gunele.find('liquidvl').text)
  143. vaporvl = float(gunele.find('vaporvl').text)
  144. liquidfr = float(gunele.find('liquidfr').text)
  145. vaporfr = float(gunele.find('vaporfr').text)
  146. yz = float(gunele.find('yz').text)
  147. tankpress = float(gunele.find('tankpress').text)
  148. gaspress = float(gunele.find('gaspress').text)
  149. pwm = float(gunele.find('pwm').text)
  150. vccerror = gunele.find('vccerror').text
  151. errornum = gunele.find('errornum').text
  152. if liquidvl >= 15:
  153. validflag = 1
  154. else:
  155. validflag = 0;
  156. sheetoil.write(index + 5, 1, index + 1)
  157. if validflag == 1:
  158. sheetoil.write(index + 5, 2, validcounts+1)
  159. tmpformat = format1
  160. if validflag == 0:
  161. tmpformat = format2
  162. sheetoil.write_number(index + 5, 4, al,tmpformat)
  163. sheetoil.write(index + 5, 5, liquidvl,tmpformat)
  164. sheetoil.write(index + 5, 6, vaporvl,tmpformat)
  165. sheetoil.write(index + 5, 7, liquidfr,tmpformat)
  166. sheetoil.write(index + 5, 8, vaporfr,tmpformat)
  167. sheetoil.write(index + 5, 9, yz,tmpformat)
  168. sheetoil.write(index + 5, 10, tankpress,tmpformat)
  169. sheetoil.write(index + 5, 11, gaspress,tmpformat)
  170. sheetoil.write(index + 5, 12, pwm,tmpformat)
  171. sheetoil.write(index + 5, 13, vccerror,tmpformat)
  172. sheetoil.write(index + 5, 14, errornum,tmpformat)
  173. if validflag == 1:
  174. sheetoil.write(validcounts + 5, 41, validcounts+1)
  175. sheetoil.write_number(validcounts + 5, 43, al)
  176. sheetoil.write(validcounts + 5, 44, liquidvl)
  177. sheetoil.write(validcounts + 5, 45, vaporvl)
  178. sheetoil.write(validcounts + 5, 46, liquidfr)
  179. sheetoil.write(validcounts + 5, 47, vaporfr)
  180. sheetoil.write(validcounts + 5, 48, yz)
  181. sheetoil.write(validcounts + 5, 49, tankpress)
  182. sheetoil.write(validcounts + 5, 50, gaspress)
  183. sheetoil.write(validcounts + 5, 51, pwm)
  184. sheetoil.write_number(validcounts + 5, 60, al * 1000)
  185. sheetoil.write(validcounts + 5, 61, liquidfr * 100)
  186. sheetoil.write(validcounts + 5, 62, vaporfr * 100)
  187. date_time = datetime.datetime.strptime(timetxt, '%Y%m%d%H%M%S')
  188. sheetoil.write(index + 5, 0, date_time.strftime('%Y-%m-%d %H:%M:%S'))
  189. if validflag == 1:
  190. sheetoil.write(validcounts + 5, 40, date_time.strftime('%Y-%m-%d %H:%M:%S'))
  191. count = count + 1
  192. if validflag == 1:
  193. if isfalse == 'Y':
  194. avicounts = avicounts + 1
  195. sheetoil.write(index + 5, 3, avicounts)
  196. sheetoil.write(validcounts + 5, 42, avicounts)
  197. else:
  198. sheetoil.write(index + 5, 3, 0)
  199. sheetoil.write(validcounts + 5, 42, 0)
  200. if validflag == 1:
  201. validcounts = validcounts + 1
  202. namerow = 4
  203. frow = 5
  204. lrow = validcounts + 5 -1
  205. countcol = 1
  206. chartcol = 3
  207. chart1 = workbook.add_chart({'type': 'scatter'})
  208. # Configure second series. Note use of alternative syntax to define ranges.
  209. chart1.add_series({
  210. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 43],
  211. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  212. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 43, lrow, 43],
  213. 'marker': {
  214. 'type': 'plus',
  215. 'size': 5,
  216. },
  217. })
  218. # Add a chart title and some axis labels.
  219. chart1.set_title({'name': '气液比'})
  220. chart1.set_x_axis({'name': '计数'})
  221. chart1.set_y_axis({'name': '数据'})
  222. # Set an Excel chart style.
  223. chart1.set_style(11)
  224. # Insert the chart into the worksheet (with an offset).
  225. sheetgrid.insert_chart('A1', chart1, {'x_offset': 5, 'y_offset': 5})
  226. chart2 = workbook.add_chart({'type': 'scatter'})
  227. chart2.add_series({
  228. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 46],
  229. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  230. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 46, lrow, 46],
  231. 'line': {'color': 'blue',
  232. 'width': 1},
  233. 'marker': {
  234. 'type': 'none',
  235. 'size': 5,
  236. },
  237. })
  238. chart2.set_title({'name': '油流速'})
  239. chart2.set_x_axis({'name': '计数'})
  240. chart2.set_y_axis({'name': '数据'})
  241. chart2.set_style(11)
  242. sheetgrid.insert_chart('I1', chart2, {'x_offset': 5, 'y_offset': 5})
  243. chart3 = workbook.add_chart({'type': 'scatter'})
  244. chart3.add_series({
  245. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 47],
  246. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  247. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 47, lrow, 47],
  248. 'line': {'color': '#037b7e',
  249. 'width': 1},
  250. 'marker': {
  251. 'type': 'none',
  252. 'size': 5,
  253. },
  254. })
  255. chart3.set_title({'name': '气流速'})
  256. chart3.set_x_axis({'name': '计数'})
  257. chart3.set_y_axis({'name': '数据'})
  258. chart3.set_style(11)
  259. sheetgrid.insert_chart('A16', chart3, {'x_offset': 5, 'y_offset': 5})
  260. chart4 = workbook.add_chart({'type': 'scatter'})
  261. # chart4.set_size({'width': 650, 'height': 480})
  262. chart4.add_series({
  263. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 60],
  264. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  265. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 60, lrow, 60],
  266. 'marker': {
  267. 'type': 'plus',
  268. 'size': 5,
  269. },
  270. })
  271. chart4.add_series({
  272. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 61],
  273. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  274. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 61, lrow, 61],
  275. 'line': {'color': 'blue',
  276. 'width': 1},
  277. 'marker': {
  278. 'type': 'none',
  279. 'size': 5,
  280. },
  281. })
  282. chart4.add_series({
  283. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 62],
  284. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  285. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 62, lrow, 62],
  286. 'line': {'color': '#037b7e',
  287. 'width': 1},
  288. 'marker': {
  289. 'type': 'none',
  290. 'size': 5,
  291. },
  292. })
  293. chart4.set_title({'name': '气液比、油流速、气流速'})
  294. chart4.set_x_axis({'name': '计数'})
  295. chart4.set_y_axis({'name': '数据'})
  296. chart4.set_style(12)
  297. sheetgrid.insert_chart('I16', chart4, {'x_offset': 5, 'y_offset': 5})
  298. chart5 = workbook.add_chart({'type': 'scatter'})
  299. chart5.add_series({
  300. 'name': [oilgun.get('oilnum') + '号枪报表', namerow, 48],
  301. 'categories': [oilgun.get('oilnum') + '号枪报表', frow, countcol, lrow, countcol],
  302. 'values': [oilgun.get('oilnum') + '号枪报表', frow, 48, lrow, 48],
  303. 'line': {'color': '#037b7e',
  304. 'width': 1},
  305. 'marker': {
  306. 'type': 'none',
  307. 'size': 5,
  308. },
  309. })
  310. chart5.set_title({'name': '管线压力'})
  311. chart5.set_x_axis({'name': '计数'})
  312. chart5.set_y_axis({'name': '数据'})
  313. chart5.set_style(11)
  314. sheetgrid.insert_chart('A32', chart5, {'x_offset': 5, 'y_offset': 5})
  315. state = "0"
  316. try:
  317. workbook.close()
  318. state = "1"
  319. except:
  320. state = "2"
  321. end = time.time()
  322. stime = end -start
  323. print(stime)
  324. print(recordcount)
  325. print(state)
  326. conf = configparser.ConfigParser()
  327. conf.add_section(sectionname)
  328. conf.set(sectionname, "State", state)
  329. conf.set(sectionname, "time", str(stime))
  330. conf.set(sectionname, "count", str(recordcount))
  331. conf.write(open(cfgpath, "w"))