GunHandler.py 13 KB

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