tax.c 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231
  1. #include "tax.h"
  2. #include "includes.h"
  3. coll_tax_conf_t coll_tax_conf;
  4. tax_read_info_t tax_read_info;
  5. ///////////////////////////////////////////////////// 明文 ///////////////////////////////////////////////
  6. // 明文指令
  7. // 明文下发的数据协议
  8. uint8_t tax_cmd_set(uint8_t cmd, uint8_t *parm, uint8_t size, void *puser)
  9. {
  10. uint8_t send_len;
  11. uint8_t send_buf[64], *p_crc, *fparm;
  12. tTaxCommFrame_t *p_tax = (tTaxCommFrame_t *)send_buf;
  13. memset(send_buf, 0, sizeof(send_buf));
  14. p_crc = &send_buf[sizeof(tTaxCommFrame_t) + size];
  15. p_tax->fhead = 0xbb;
  16. p_tax->flen = 3 + size; // 长度码为命令码、帧号、参数和校验码的字节数之和
  17. p_tax->findex = 0xff; // 帧号标识本帧的特征信息,帧号OFFH表示单帧命令;
  18. p_tax->fcmd = cmd;
  19. fparm = &send_buf[sizeof(tTaxCommFrame_t)];
  20. memcpy(fparm, parm, size);
  21. *p_crc = _crc_get_gw(&p_tax->findex, p_tax->flen - 1); // 校验码为帧号、命令码和参数逐字节的逻辑和
  22. send_len = p_tax->flen + 2;
  23. memcpy(puser, p_tax, send_len);
  24. return send_len;
  25. }
  26. // 明文下发数据
  27. uint16_t tax_send_cmd(uint8_t cmd, uint8_t gun, void *purse)
  28. {
  29. uint8_t para[16] = {0};
  30. uint16_t send_len = 0;
  31. switch (cmd)
  32. {
  33. case 0x83:
  34. para[0] = 0;
  35. send_len = tax_cmd_set(0x83, para, 1, purse);
  36. break;
  37. case 0x86:
  38. para[0] = gun - 1;
  39. para[1] = 0x01;
  40. send_len = tax_cmd_set(0x86, para, 2, purse);
  41. break;
  42. case 0x89:
  43. para[0] = gun - 1;
  44. para[1] = 0x00;
  45. para[2] = 0x01;
  46. send_len = tax_cmd_set(0x89, para, 3, purse);
  47. break;
  48. default:
  49. break;
  50. }
  51. return send_len;
  52. }
  53. int tax_0x83_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  54. {/* status 十 tax_ data为税务信息数据,格式和初始化数据相同,其中时间为税控加油机实时时钟的当前时间。
  55. 总长48字节,依次为:出厂编号 (10);油枪位编号 (2);纳税人登记证号 (20);
  56. 油品 (4);年 (4)、月 (2)、日 (2)、时 (2)和分 (2)a*/
  57. tax_info_t * p_tax = (tax_info_t *)puser;
  58. uint8_t *tax_data = data + 1;
  59. // uint8_t i;
  60. // uint32_t value;
  61. int ret = 0;
  62. // char temp[3] = {0};
  63. if(data_len < 11)
  64. return 1;
  65. if(isdigit(tax_data[0])) {//数字 英泰赛福
  66. p_tax->factory = 1;
  67. switch(tax_data[0]) {
  68. case '0':
  69. case '1':
  70. p_tax->gun_num = 1;
  71. break;
  72. case '2':
  73. case '3':
  74. p_tax->gun_num = 2;
  75. break;
  76. default:
  77. p_tax->gun_num = tax_data[0] - '0';
  78. break;
  79. }
  80. } else if(isalpha(tax_data[0])) {//字母 拓盛
  81. p_tax->factory = 2;
  82. if((tax_data[0] >= 'A')&&(tax_data[0] <= 'Z')) {
  83. p_tax->gun_num = tax_data[0] - 'A' + 1;
  84. } else if((tax_data[0] >= 'a')&&(tax_data[0] <= 'z')) {
  85. p_tax->gun_num = tax_data[0] - 'a' + 1;
  86. }
  87. }
  88. else//不是字母和数字,即读取的数据错误,默认是 英泰1枪
  89. {
  90. p_tax->factory = 1;
  91. p_tax->gun_num = 1;
  92. }
  93. if(p_tax->gun_num > 8)//最多8枪
  94. p_tax->gun_num = 8;
  95. //将税控序列号转为BCD码
  96. asciitohex((char *)tax_data,p_tax->monitor_serino,10);
  97. // for(i = 0;i < 5;i++) {
  98. // strncpy(temp,(char *)&tax_data[2*i],2);
  99. // sscanf(temp,"%02x",&value);
  100. // p_tax->monitor_serino[i] = value;
  101. // // p_tax->monitor_serino[i] = ((tax_data[2*i+0]<<4)&0xF0) | (tax_data[2*i+1]&0x0F);
  102. // }
  103. memcpy(&p_tax->monitor_serino[5], tax_data, 10);
  104. data_dump("83 serino",p_tax->monitor_serino,15);
  105. //data_dump("0x83", data, data_len);
  106. return ret;
  107. }
  108. int tax_0x86_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  109. {/* status+ 〔当次加油数据〕当次加油数据 总长 22字节,依次为:日 (2)、时 (2)、分 (2);油量 (6);金额 (6);单价 (4)0 */
  110. gun_info_t * p_gun = (gun_info_t *)puser;
  111. char *current = (char *)data + 7;
  112. int ret = 0;
  113. // uint32_t value;
  114. char temp[3] = {0};
  115. // data_dump("0x86 data :", data, data_len);
  116. if(data_len < 23)
  117. return 1;
  118. strncpy(temp,(char *)data+1,2);
  119. temp[2] = 0;
  120. // sscanf(temp,"%02x",&value);
  121. p_gun->time_day = strtohex(temp,2);
  122. strncpy(temp,(char *)data+3,2);
  123. temp[2] = 0;
  124. // sscanf(temp,"%02x",&value);
  125. p_gun->time_hour = strtohex(temp,2);
  126. strncpy(temp,(char *)data+5,2);
  127. temp[2] = 0;
  128. // sscanf(temp,"%02x",&value);
  129. p_gun->time_minute = strtohex(temp,2);
  130. // printf("%02x,%02x,%02x\r\n",p_gun->time_day,p_gun->time_hour,p_gun->time_minute);
  131. current[16] = 0;
  132. p_gun->last_unit_price = atoi(&current[12]);
  133. current[12] = 0;
  134. p_gun->last_price = atoi(&current[6]);
  135. current[6] = 0;
  136. p_gun->last_oil_volume = atoi(current);
  137. p_gun->gun_type = SINGLE_DATA;
  138. printf("day=%02x,hour=%02x,min=%02x\n",p_gun->time_day,p_gun->time_hour,p_gun->time_minute);
  139. printf("unit price=%u,price=%u,volum=%u\n",p_gun->last_unit_price,p_gun->last_price,p_gun->last_oil_volume);
  140. return ret;
  141. }
  142. int tax_0x89_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  143. {/* status十 [总累计加油数据] 总累计加油数据 总长 24字节,依次为:总累计油量 (12);总累计金额 (12) */
  144. gun_info_t * p_gun = (gun_info_t *)puser;
  145. char *total = (char *)data + 1;
  146. int ret = 0;
  147. if(data_len < 26)
  148. return 1;
  149. total[24] = 0;
  150. p_gun->total_price = atoll(&total[12]);
  151. total[12] = 0;
  152. p_gun->total_oil_volume = atoll(total);
  153. printf("\r\n total_princ = %lld, total_volume = %lld \r\n",p_gun->total_price,p_gun->total_oil_volume);
  154. p_gun->gun_type = CUMULATIVE_DATA;
  155. return ret;
  156. }
  157. /*---------------------------------------------------------------------------------------------------------------------------------------------------------
  158. * 密文不用加密模块的下发
  159. *---------------------------------------------------------------------------------------------------------------------------------------------------------*/
  160. tax_send_info_t tax_send_info;
  161. tax_info_t tax_info;
  162. unsigned int cmd_72_proc(uint8_t *p_input, uint8_t *output)
  163. {
  164. unsigned int k; // r3
  165. uint8_t *v2; // r4
  166. unsigned int i; // r3
  167. unsigned int j; // r0
  168. char v5; // r2
  169. char v6; // r2
  170. char v7[8];
  171. char v8[8];
  172. char v9[4];
  173. v2 = p_input;
  174. *(unsigned int *)(&v8[0]) = 0x982850A0;
  175. *(unsigned int *)(&v8[4]) = 0x183060C0;
  176. *(unsigned int *)(&v7[0]) = 0x3365CA94;
  177. *(unsigned int *)(&v7[4]) = 0x03060C18;
  178. output[0] = 0x31;
  179. output[1] = 0x32;
  180. output[2] = 0x33;
  181. output[3] = 0x34;
  182. for ( i = 0; i < 4; ++i )
  183. {
  184. for ( j = 0; j < 4; ++j )
  185. v9[j] = 0;
  186. v5 = *(char *)(v2 + i) ^ output[0];
  187. if ( (v5 & 0x80) != 0 )
  188. {
  189. v9[0] ^= 0xA0u;
  190. v9[1] ^= 0x00u;
  191. v9[2] ^= 0x01u;
  192. v9[3] ^= 0x94u;
  193. }
  194. v6 = v5 << 1;
  195. for ( k = 1; k < 8; ++k )
  196. {
  197. if ( (v6 & 0x80) != 0 )
  198. {
  199. v9[0] ^= *((char *)v8 + k);
  200. v9[3] ^= *((char *)v7 + k);
  201. }
  202. v6 <<= 1;
  203. }
  204. output[0] = output[1] ^ v9[0];
  205. output[1] = output[2] ^ v9[1];
  206. output[2] = output[3] ^ v9[2];
  207. output[3] = v9[3];
  208. }
  209. return 0;
  210. }
  211. uint16_t tax_send_cmd_ciphertext(uint8_t cmd, uint8_t *data, uint8_t len, void *purse)
  212. {
  213. uint8_t para[64] = {0};
  214. uint16_t send_len = 0;
  215. switch(cmd)
  216. {
  217. case 0x72:
  218. para[0] = 0x01;
  219. para[1] = 0x01;
  220. send_len = tax_cmd_set(0x72,para,2,purse);
  221. break;
  222. case 0x73:
  223. send_len = tax_cmd_set(0x73,data,len,purse);
  224. break;
  225. case 0x70:
  226. para[0] = 0x00;
  227. send_len = tax_cmd_set(0x70,para,1,purse);
  228. break;
  229. case 0x8C:
  230. send_len = tax_cmd_set(0x8C,data,len,purse);
  231. break;
  232. default:
  233. break;
  234. }
  235. return send_len;
  236. }
  237. void tax_send_start(uint8_t startCmd)
  238. {
  239. tax_send_info.start = 1;
  240. tax_send_info.step = 0;
  241. tax_send_info.send = 1;
  242. tax_send_info.startcmd = startCmd;
  243. printf("send begin\n");
  244. }
  245. void tax_send_end(void)
  246. {
  247. tax_send_info.start = 0;
  248. tax_send_info.step = 0;
  249. tax_send_info.send = 0;
  250. tax_send_info.startcmd = 0;
  251. timeout_stop(&lora_comm_info.uart_timeout);
  252. printf("send end\n");
  253. }
  254. int tax_0x72_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  255. {
  256. tax_info_t * p_tax = (tax_info_t *)puser;
  257. cmd_72_proc(data,p_tax->cmd_73_data);
  258. return 0;
  259. }
  260. int tax_0x70_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  261. {
  262. tax_info_t * p_tax = (tax_info_t *)puser;
  263. if(data_len > 20)
  264. {
  265. if(isdigit(data[1])) {// 数字为英泰
  266. p_tax->factory = 1;
  267. switch(data[1]) {
  268. case '0':
  269. case '1':
  270. p_tax->gun_num = 1;
  271. break;
  272. case '2':
  273. case '3':
  274. p_tax->gun_num = 2;
  275. break;
  276. default:
  277. p_tax->gun_num = data[1] - '0';
  278. break;
  279. }
  280. } else if(isalpha(data[1])) {//字母 为排成
  281. p_tax->factory = 2;
  282. if((data[1] >= 'A')&&(data[1] <= 'Z')) {
  283. p_tax->gun_num = data[1] - 'A' + 1;
  284. } else if((data[1] >= 'a')&&(data[1] <= 'z')) {
  285. p_tax->gun_num = data[1] - 'a' + 1;
  286. }
  287. }
  288. memcpy(p_tax->tax_serino,data+1,10);
  289. memcpy(p_tax->bmq_serino,data+11,10);
  290. data_dump("tax_serino",p_tax->tax_serino,10);
  291. }
  292. return 0;
  293. }
  294. //明文接收数据处理
  295. int tax_rcv_analyze(uint8_t *data, void *puser, uint16_t len)
  296. {
  297. int ret = 1;
  298. uint8_t *p_crc, crc, *fparm;
  299. tTaxCommFrame_t *p_tax_rx;
  300. p_tax_rx = (tTaxCommFrame_t *)data;
  301. crc = get_xor(&p_tax_rx->findex, p_tax_rx->flen-1);
  302. p_crc = &data[p_tax_rx->flen + 1];
  303. if((p_tax_rx->fhead == 0xBB)&&(crc == *p_crc)) {
  304. if((p_tax_rx->findex != 0xFF) ){ // 帧号
  305. if((p_tax_rx->findex&0x80) != 0x80) return ret;
  306. }
  307. fparm = &data[sizeof(tTaxCommFrame_t)];
  308. switch(p_tax_rx->fcmd)
  309. {
  310. case 0x83:
  311. tax_0x83_anaylse(puser,fparm,p_tax_rx->flen-3);
  312. ret = 0x83;
  313. // return ret;
  314. break;
  315. case 0x86:
  316. // tax_0x86_anaylse(puser,fparm,p_tax_rx->flen-3);
  317. /*
  318. 明文: BB 1A FF 86 01 30 31 30 30 30 38 30 30 30 30 35 36 30 30 30 30 35 36 30 31 30 30 70
  319. 密文:BB 04 FF 89 00 76 或 BB 06 FF 86 00 09 20 50
  320. */
  321. if((fparm[0]==0x01) && p_tax_rx->flen >= 0x1A)//明文
  322. {
  323. if(tax_send_info.uartid == UART4_ID)//报税口1
  324. {
  325. device_fixed_info.Encrypt &= 0xFC;
  326. device_fixed_info.Encrypt |= PLAINTEXT;
  327. }
  328. else if(tax_send_info.uartid == UART5_ID)//报税口2
  329. {
  330. device_fixed_info.Encrypt &= 0xF3;
  331. device_fixed_info.Encrypt |= (PLAINTEXT<<2);
  332. }
  333. }
  334. else if(fparm[0]==0x00)//密文
  335. {
  336. if(tax_send_info.uartid == UART4_ID)//报税口1
  337. {
  338. device_fixed_info.Encrypt &= 0xFC;
  339. device_fixed_info.Encrypt |= CIPHERTEXT;
  340. }
  341. else if(tax_send_info.uartid == UART5_ID)//报税口2
  342. {
  343. device_fixed_info.Encrypt &= 0xF3;
  344. device_fixed_info.Encrypt |= (CIPHERTEXT<<2);
  345. }
  346. }
  347. ret = 0x86;
  348. // return ret;
  349. break;
  350. case 0x89:
  351. tax_0x89_anaylse(puser,fparm,p_tax_rx->flen-3);
  352. ret = 0x89;
  353. // return ret;
  354. break;
  355. case 0x72:
  356. printf("72 proc\n");
  357. tax_0x72_anaylse(puser,fparm,p_tax_rx->flen-3);
  358. tax_send_info.step++;
  359. tax_send_info.send = 1;
  360. break;
  361. case 0x73:
  362. printf("rcv 73: len = %d\n",p_tax_rx->flen);
  363. // memcpy(device_fixed_info.cmd_73,data,8);
  364. // device_fixed_info.Encrypt &= 0xF0;
  365. if(tax_send_info.uartid == UART4_ID)//报税口1
  366. {
  367. if((device_fixed_info.Encrypt & 0x03) == 0)//报税口1状态未保存
  368. {
  369. if(p_tax_rx->flen == 0x06) //密文
  370. {
  371. device_fixed_info.Encrypt &= 0xFC;
  372. device_fixed_info.Encrypt |= CIPHERTEXT;
  373. }
  374. else if((p_tax_rx->flen == 0x04) || (p_tax_rx->flen == 0x05)) { //明文
  375. device_fixed_info.Encrypt &= 0xFC;
  376. device_fixed_info.Encrypt |= PLAINTEXT;
  377. }
  378. }
  379. // else//明文
  380. // {
  381. // device_fixed_info.Encrypt &= 0xFC;
  382. // device_fixed_info.Encrypt |= PLAINTEXT;
  383. // }
  384. if(len <= CMD73_LEN)
  385. {
  386. if(buff_compare(cmd_73_info[0].data,data,len))//73有变化
  387. {
  388. memcpy(cmd_73_info[0].data,data,len);
  389. cmd_73_info[0].len = len;
  390. cmd_73_info[0].read_flag = 1;
  391. }
  392. }
  393. }
  394. else if(tax_send_info.uartid == UART5_ID)//报税口2
  395. {
  396. if((device_fixed_info.Encrypt & 0x0C) == 0)//报税口2状态未保存
  397. {
  398. if(p_tax_rx->flen == 0x06) //密文
  399. {
  400. device_fixed_info.Encrypt &= 0xF3;
  401. device_fixed_info.Encrypt |= (CIPHERTEXT<<2);
  402. }
  403. else if((p_tax_rx->flen == 0x04) || (p_tax_rx->flen == 0x05)) {//明文
  404. // if(fparm[0] == 0x02)
  405. device_fixed_info.Encrypt &= 0xF3;
  406. device_fixed_info.Encrypt |= (PLAINTEXT<<2);
  407. }
  408. }
  409. // else//明文
  410. // {
  411. // device_fixed_info.Encrypt &= 0xF3;
  412. // device_fixed_info.Encrypt |= (PLAINTEXT<<2);
  413. // }
  414. if(len <= CMD73_LEN)
  415. {
  416. if(buff_compare(cmd_73_info[1].data,data,len))//73有变化
  417. {
  418. memcpy(cmd_73_info[1].data,data,len);
  419. cmd_73_info[1].len = len;
  420. cmd_73_info[1].read_flag = 1;
  421. }
  422. }
  423. }
  424. // if(p_tax_rx->flen == 0x06) device_fixed_info.Encrypt |= CIPHERTEXT;
  425. // else if(p_tax_rx->flen == 0x04) {
  426. // if(fparm[0] == 0x02) device_fixed_info.Encrypt |= PLAINTEXT;
  427. // }
  428. tax_info.data73len = p_tax_rx->flen;
  429. tax_send_info.step++;
  430. tax_send_info.send = 1;
  431. break;
  432. case 0x70:
  433. tax_0x70_anaylse(puser,fparm,p_tax_rx->flen-3);
  434. tax_send_info.step++;
  435. tax_send_info.send = 1;
  436. break;
  437. case 0x8C:
  438. //tax_0x8C_anaylse(puser,fparm,p_tax_rx->flen-3);
  439. tax_send_info.step++;
  440. tax_send_info.send = 1;
  441. break;
  442. default : break;
  443. }
  444. }
  445. return ret;
  446. }
  447. uint8_t tax_83[20] = {0x00,0x42,0x36,0x30,0x32,0x36,0x33,0x32,0x34,0x30,0x30};
  448. uint8_t tax_86[30] = {0x01,0x31,0x31,0x32,0x30,0x31,0x38, 0x30,0x30,0x30,0x30,0x35,0x37, 0x30,0x30,0x30,0x30,0x35,0x36, 0x30,0x31,0x30,0x30, 0x30};
  449. uint8_t tax_89[30] = {0x01, 0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x35,0x36, 0x30,0x30,0x30,0x32,0x30,0x30,0x30,0x30,0x30,0x30,0x35,0x36, 0x37};
  450. void tax_test(void)
  451. {
  452. uint8_t buf[64]={0};
  453. uint16_t len;
  454. tax_0x83_anaylse(buf,tax_83,11);
  455. tax_0x86_anaylse(buf,tax_86,30);
  456. tax_0x89_anaylse(buf,tax_89,30);
  457. len = tax_send_cmd(0x86,1,buf);
  458. uart_msg_send(UART3_ID,(char *)buf,len);
  459. data_dump("tax send",buf,len);
  460. }
  461. ////////////////////////////////////////////////////////// 密文 ////////////////////////////////////////////
  462. // 密文下发的数据协议
  463. uint16_t ytsf_cmd_set(uint8_t tax, uint8_t cmd, uint8_t *parm, uint8_t size, void *puser)
  464. {
  465. uint8_t send_buf[128], send_size, *fparm;
  466. uint16_t p_crc;
  467. tYTSFCommFrame_t *p_tax_tx = (tYTSFCommFrame_t *)send_buf;
  468. memset(send_buf, 0, sizeof(send_buf));
  469. p_tax_tx->fhead = 0xbb;
  470. p_tax_tx->flen = 5 + size; // 长度码为命令码、帧号、参数和校验码的字节数之和
  471. p_tax_tx->findex = 0x81; // 帧号标识本帧的特征信息,帧号OFFH表示单帧命令;
  472. p_tax_tx->fport = tax;
  473. p_tax_tx->fcmd = cmd;
  474. fparm = &send_buf[sizeof(tYTSFCommFrame_t)];
  475. memcpy(fparm, parm, size);
  476. p_crc = CRC16_get(&p_tax_tx->fhead, p_tax_tx->flen);
  477. send_buf[sizeof(tYTSFCommFrame_t) + size] = p_crc & 0xff;
  478. send_buf[sizeof(tYTSFCommFrame_t) + size + 1] = (p_crc >> 8) & 0xff;
  479. _ytsf_data_code(send_buf, &send_size); /* 编码发送 */
  480. memcpy(puser, p_tax_tx, send_size);
  481. return send_size;
  482. }
  483. // 密文下发数据
  484. uint16_t ytsf_send_cmd(uint8_t cmd, uint8_t info_type, uint8_t tax, uint8_t gun, uint8_t *serino, uint8_t *date, void *purse)
  485. {
  486. uint8_t para[16] = {0};
  487. uint8_t send_len;
  488. switch (cmd)
  489. {
  490. case 0xA1: // 累计数读取指令
  491. if (info_type == 0x11) // 查当次加油信息
  492. {
  493. para[0] = 0x11;
  494. para[1] = gun - 1;
  495. memset(&para[2], 0, 4);
  496. memcpy(&para[6], serino, 5);
  497. send_len = ytsf_cmd_set(tax - 1, 0xA1, para, 11, purse);
  498. }
  499. else if (info_type == 0x12) // 0x12 查日累计信息
  500. {
  501. para[0] = info_type;
  502. para[1] = gun - 1;
  503. memcpy(&para[2], date, 4); // 查询的日期
  504. memcpy(&para[6], serino, 5);
  505. send_len = ytsf_cmd_set(tax - 1, 0xA1, para, 11, purse);
  506. }
  507. else if (info_type == 0x14) // 0x14 查总累计信息
  508. {
  509. para[0] = 0x14;
  510. para[1] = gun - 1;
  511. memset(&para[2], 0, 4);
  512. memcpy(&para[6], serino, 5);
  513. send_len = ytsf_cmd_set(tax - 1, 0xA1, para, 11, purse);
  514. }
  515. break;
  516. case 0xA2:
  517. if ((info_type == 0x00) || (info_type == 0x01) || (info_type == 0x20))
  518. { // 00 查监控序列号;01 查编码器序列号;20 查防作弊状态
  519. para[0] = info_type;
  520. para[1] = gun - 1;
  521. memset(para + 2, 0, 6);
  522. send_len = ytsf_cmd_set(tax - 1, 0xA2, para, 8, purse);
  523. }
  524. break;
  525. case 0xA5:
  526. if (info_type == 0xFF) // 读模块版本及信息
  527. {
  528. para[0] = 0xFF;
  529. send_len = ytsf_cmd_set(tax - 1, 0xA5, para, 1, purse);
  530. }
  531. break;
  532. }
  533. return send_len;
  534. }
  535. //税控序列号解析
  536. int ytsf_0xa2_0x00_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  537. {/* 信息类型[1byte] + 枪号[1byte] + 读取结果[1byte] +
  538. 读取数据[Mbytes] 监 控 序 列 号 (BCD码)[5bytes]+序列号(ASCII 码)[10bytes] */
  539. tax_info_t * p_tax = (tax_info_t *)puser;
  540. uint8_t tax_data = *(data + 8);
  541. int ret = 0;
  542. p_tax->gun_num = 1;
  543. if(isdigit(tax_data)) {//英泰赛福
  544. p_tax->factory = 1;
  545. switch(tax_data) {
  546. case '0':
  547. case '1':
  548. p_tax->gun_num = 1;
  549. break;
  550. case '2':
  551. case '3':
  552. p_tax->gun_num = 2;
  553. break;
  554. default:
  555. p_tax->gun_num = tax_data - '0';
  556. break;
  557. }
  558. } else if(isalpha(tax_data)) {//拓盛
  559. p_tax->factory = 2;
  560. if((tax_data >= 'A')&&(tax_data <= 'Z')) {
  561. p_tax->gun_num = tax_data - 'A' + 1;
  562. } else if((tax_data >= 'a')&&(tax_data <= 'z')) {
  563. p_tax->gun_num = tax_data - 'a' + 1;
  564. }
  565. }
  566. else//不是字母和数字,即读取的数据错误,默认是 英泰1枪
  567. {
  568. p_tax->factory = 1;
  569. p_tax->gun_num = 1;
  570. }
  571. if(p_tax->gun_num > 8)//最多8枪
  572. p_tax->gun_num = 8;
  573. memcpy(p_tax->monitor_serino, data + 3, 15);
  574. data_dump("monitor_serino", p_tax->monitor_serino, 16);
  575. return ret;
  576. }
  577. /**
  578. * @brief hex convert ascii
  579. * @par param[in] *ascii:ascii data
  580. * @par param[in] *hex:hex data
  581. * @par param[in] hexLen:length of hex
  582. * @retval length
  583. */
  584. uint32_t Hex2Dec(uint8_t *hex, uint16_t hexLen)
  585. {
  586. uint32_t data = 0;
  587. uint8_t i;
  588. for(i=0;i<hexLen;i++) {
  589. data = data * 100;
  590. data += (hex[i]>>4)*10 + (hex[i]&0x0F);
  591. }
  592. return data;
  593. }
  594. uint64_t Hex2Dec64(uint8_t *hex, uint16_t hexLen)
  595. {
  596. uint64_t data = 0;
  597. uint8_t i;
  598. for(i=0;i<hexLen;i++) {
  599. data = data * 100;
  600. data += (hex[i]>>4)*10 + (hex[i]&0x0F);
  601. }
  602. return data;
  603. }
  604. //当次交易解析
  605. int ytsf_0xa1_0x11_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  606. {/* 累计类型[1byte] + 枪号[1byte] + 读取结果[1byte] +
  607. 读取数据[Mbytes] 时间[3bytes]+油量[5bytes]+金额[5bytes]+单价[3bytes]
  608. 0x11 查当次加油信息*/
  609. gun_info_t * p_gun = (gun_info_t *)puser;
  610. uint8_t *current = (uint8_t *)data + 6;
  611. int ret = 0;
  612. if(data_len < 19) {
  613. return -1;
  614. }
  615. // data_dump("0x86 data :", data, data_len);
  616. p_gun->time_day = *(data+3);
  617. p_gun->time_hour = *(data+4);
  618. p_gun->time_minute = *(data+5);
  619. // printf("%02x,%02x,%02x\r\n",p_gun->time_day,p_gun->time_hour,p_gun->time_minute);
  620. p_gun->last_oil_volume = Hex2Dec(current, 5);
  621. p_gun->last_price = Hex2Dec(current + 5, 5);
  622. p_gun->last_unit_price = Hex2Dec(current + 10, 3);
  623. return ret;
  624. }
  625. //总累计解析
  626. int ytsf_0xa1_0x14_anaylse(void *puser, uint8_t *data, uint8_t data_len)
  627. {/* 累计类型[1byte] + 枪号[1byte] + 读取结果[1byte] +
  628. 读取数据[Mbytes] 油量[7bytes]+金额[7bytes]
  629. 0x14 查总累计信息*/
  630. gun_info_t * p_gun = (gun_info_t *)puser;
  631. uint8_t *total = data + 3;
  632. int ret = 0;
  633. if(data_len < 17) {
  634. return -1;
  635. }
  636. p_gun->total_oil_volume = Hex2Dec64(total, 7);
  637. p_gun->total_price = Hex2Dec64(total+7, 7);
  638. return ret;
  639. }
  640. /*----------------------------------------------------------------------
  641. * 密文接收数据处理
  642. * result:读取结果
  643. * 0x00:执行错误 0x01: 执行成功 0x02:数据模块忙,稍息再试 0x03:监控微处理器忙,稍后再试
  644. * 0x04:监控微处理器通讯超时,超时时间设定为10S
  645. * 0x05:查询的纪录不存在
  646. * 0x10: 监控微处理器序列号不存在
  647. * 0x11: 密文数据解密错误
  648. */
  649. int ytsf_rcv_analyze(uint8_t *data,uint8_t len,void *puser, uint8_t *port)
  650. {
  651. int ret = 1;
  652. uint8_t *fparm;
  653. uint16_t p_crc, crc;
  654. uint8_t result = 0x01;
  655. tYTSFCommFrame_t *p_tax_rx = (tYTSFCommFrame_t *)data;
  656. _ytsf_data_decode(data, &len); /* 接收解码 */
  657. crc = CRC16_get(&p_tax_rx->fhead, p_tax_rx->flen);
  658. p_crc = data[p_tax_rx->flen+1];
  659. p_crc = (p_crc<<8)|data[p_tax_rx->flen];
  660. if(p_tax_rx->fhead == 0xBB && crc == p_crc)
  661. {
  662. result = *(data+7); // 读取结果
  663. if(result != 0x01 ) return result;
  664. *port = p_tax_rx->fport;
  665. fparm = &data[sizeof(tYTSFCommFrame_t)];
  666. switch(p_tax_rx->fcmd)
  667. {
  668. case 0xA1:
  669. if(*fparm == 0x11)
  670. {
  671. ytsf_0xa1_0x11_anaylse(puser, fparm, p_tax_rx->flen-5);
  672. ret = YTSF_0XA1_0X11;
  673. }
  674. else if(*fparm == 0x14)
  675. {
  676. ytsf_0xa1_0x14_anaylse(puser, fparm, p_tax_rx->flen-5);
  677. ret = YTSF_0XA1_0X14;
  678. }
  679. break;
  680. case 0xA2:
  681. if(*fparm == 0x00)
  682. {
  683. ytsf_0xa2_0x00_anaylse(puser, fparm, p_tax_rx->flen-5);
  684. ret = YTSF_0XA2_0X00;
  685. }
  686. break;
  687. }
  688. }
  689. return ret;
  690. }
  691. ////////////////////////////////////////////////////////////////////////////////////////////////
  692. /*-------------------------------------------------------------
  693. * 判断拓盛密文 的是否都读取一遍
  694. * 返回值 :
  695. * 0: 没有
  696. * 1:都读取一遍了
  697. * -------------------------------------------------------------*/
  698. int tsmw_gun_read_finish(void)
  699. {
  700. // int ret = 0;
  701. int i;
  702. for(i = 0; i < coll_tax_conf.tax_num; i++)
  703. {
  704. if(coll_tax_conf.tax_conf[i].encrypt == CIPHERTEXT)
  705. {}
  706. // for(j = 0; j < downlink_config.collect_conf[i].tax_num; j++)
  707. // {
  708. // if(downlink_config.collect_conf[i].tax_type==CIPHERTEXT && downlink_config.collect_conf[i].tax_conf[j].factory == 2)
  709. // {
  710. // for(m = 0; m < downlink_config.collect_conf[i].tax_conf[j].gun_num; j++)
  711. // {
  712. // if(nodeConf.taxconf[i].port[j].gun[m].tsmw_flag == 0) return 0;
  713. // }
  714. // }
  715. // }
  716. }
  717. return 1;
  718. }
  719. void tax_process(void)
  720. {
  721. // uint8_t state = 0;
  722. // uint8_t portCur = 0;
  723. //// uint8_t gunno = 0;
  724. // uint8_t portno = 0;
  725. // uint8_t factory = 0;
  726. // if(timeout_isOut(&tax_read_info.tt_uart)==0)
  727. // return;
  728. // if(timeout_isOut(&tax_read_info.tt_cmd_time) == 0)
  729. // return;
  730. // if(tax_read_info.uart_flag)
  731. // return;
  732. // if(tax_read_info.cmd_flag)
  733. // return;
  734. // if(0)//正在加油则不读
  735. // return;
  736. // portCur = tax_read_info.tax_no;
  737. // portno = coll_tax_conf.tax_conf[portCur].tax_id;
  738. // // gunno = coll_tax_conf.tax_conf[portCur].gunid;
  739. // state = tax_read_info.cmd_no;
  740. // switch(state)
  741. // {
  742. // case TAX_GUN_LP_STATE_IDLE:
  743. // //
  744. // break;
  745. // case TAX_GUN_LP_STATE_83:
  746. // break;
  747. // case TAX_GUN_LP_STATE_89:
  748. // break;
  749. // case TAX_GUN_LP_STATE_86:
  750. // break;
  751. // case TAX_GUN_LP_STATE_CH:
  752. // break;
  753. // default:
  754. // break;
  755. // }
  756. }
  757. /*
  758. idle:
  759. 是否拓盛密文,且拓盛密文定时是否完成,如果未完成,跳到ch
  760. 判断是否需要读83,是跳到83,否跳到89
  761. 83
  762. 跳到89
  763. 89
  764. 跳到86
  765. 86
  766. 跳到ch
  767. ch
  768. 计算下一次读取的报税口号和枪号,并根据是否需要加读取间隔,来设置定时。
  769. encoder daily: tax:1,gun:2,pluse:3,pl_inter1:3492,pl_inter2:14973,pl_inter3:3492,timestamp:7211431
  770. encoder daily: tax:1,gun:2,pluse:9,pl_inter1:3072,pl_inter2:3458,pl_inter3:3458,timestamp:7231168
  771. encoder daily: tax:1,gun:2,pluse:54,pl_inter1:282,pl_inter2:2382,pl_inter3:377,timestamp:7252939
  772. encoder daily: tax:1,gun:2,pluse:104,pl_inter1:295,pl_inter2:712,pl_inter3:373,timestamp:7273139
  773. encoder daily: tax:1,gun:2,pluse:153,pl_inter1:295,pl_inter2:704,pl_inter3:330,timestamp:7292876
  774. encoder daily: tax:1,gun:2,pluse:203,pl_inter1:293,pl_inter2:712,pl_inter3:329,timestamp:7313030
  775. encoder daily: tax:1,gun:2,pluse:253,pl_inter1:298,pl_inter2:712,pl_inter3:331,timestamp:7333185
  776. encoder daily: tax:1,gun:2,pluse:302,pl_inter1:296,pl_inter2:713,pl_inter3:320,timestamp:7353028
  777. encoder daily: tax:1,gun:2,pluse:352,pl_inter1:293,pl_inter2:712,pl_inter3:318,timestamp:7373164
  778. encoder daily: tax:1,gun:2,pluse:401,pl_inter1:296,pl_inter2:708,pl_inter3:326,timestamp:7392995
  779. encoder daily: tax:1,gun:2,pluse:451,pl_inter1:293,pl_inter2:717,pl_inter3:326,timestamp:7413214
  780. encoder daily: tax:1,gun:2,pluse:500,pl_inter1:296,pl_inter2:707,pl_inter3:314,timestamp:7433016
  781. encoder daily: tax:1,gun:2,pluse:550,pl_inter1:292,pl_inter2:709,pl_inter3:312,timestamp:7453178
  782. encoder daily: tax:1,gun:2,pluse:600,pl_inter1:295,pl_inter2:710,pl_inter3:314,timestamp:7473289
  783. encoder daily: tax:1,gun:2,pluse:649,pl_inter1:293,pl_inter2:711,pl_inter3:293,timestamp:7493125
  784. encoder daily: tax:1,gun:2,pluse:699,pl_inter1:295,pl_inter2:704,pl_inter3:295,timestamp:7513258
  785. encoder daily: tax:1,gun:2,pluse:748,pl_inter1:303,pl_inter2:709,pl_inter3:413,timestamp:7533177
  786. encoder daily: tax:1,gun:2,pluse:798,pl_inter1:302,pl_inter2:706,pl_inter3:416,timestamp:7553332
  787. encoder daily: tax:1,gun:2,pluse:848,pl_inter1:304,pl_inter2:707,pl_inter3:411,timestamp:7573497
  788. encoder daily: tax:1,gun:2,pluse:898,pl_inter1:296,pl_inter2:703,pl_inter3:415,timestamp:7593654
  789. encoder daily: tax:1,gun:2,pluse:948,pl_inter1:305,pl_inter2:712,pl_inter3:413,timestamp:7613861
  790. encoder daily: tax:1,gun:2,pluse:998,pl_inter1:302,pl_inter2:709,pl_inter3:414,timestamp:7633988
  791. encoder daily: tax:1,gun:2,pluse:1047,pl_inter1:295,pl_inter2:710,pl_inter3:442,timestamp:7653726
  792. encoder daily: tax:1,gun:2,pluse:1097,pl_inter1:295,pl_inter2:708,pl_inter3:440,timestamp:7673839
  793. encoder daily: tax:1,gun:2,pluse:1147,pl_inter1:295,pl_inter2:706,pl_inter3:437,timestamp:7693985
  794. encoder daily: tax:1,gun:2,pluse:1197,pl_inter1:291,pl_inter2:710,pl_inter3:439,timestamp:7714129
  795. encoder daily: tax:1,gun:2,pluse:1246,pl_inter1:295,pl_inter2:706,pl_inter3:706,timestamp:7733816
  796. encoder daily: tax:1,gun:2,pluse:1296,pl_inter1:293,pl_inter2:706,pl_inter3:706,timestamp:7753974
  797. encoder daily: tax:1,gun:2,pluse:1346,pl_inter1:292,pl_inter2:706,pl_inter3:706,timestamp:7774076
  798. encoder daily: tax:1,gun:2,pluse:1396,pl_inter1:295,pl_inter2:711,pl_inter3:711,timestamp:7794233
  799. encoder daily: tax:1,gun:2,pluse:1446,pl_inter1:294,pl_inter2:709,pl_inter3:709,timestamp:7814404
  800. encoder daily: tax:1,gun:2,pluse:1496,pl_inter1:297,pl_inter2:711,pl_inter3:711,timestamp:7834543
  801. encoder daily: tax:1,gun:2,pluse:1546,pl_inter1:296,pl_inter2:703,pl_inter3:703,timestamp:7854680
  802. encoder daily: tax:1,gun:2,pluse:1596,pl_inter1:295,pl_inter2:701,pl_inter3:701,timestamp:7874805
  803. encoder daily: tax:1,gun:2,pluse:1645,pl_inter1:291,pl_inter2:698,pl_inter3:497,timestamp:7894227
  804. encoder daily: tax:1,gun:2,pluse:1695,pl_inter1:295,pl_inter2:698,pl_inter3:516,timestamp:7914359
  805. encoder daily: tax:1,gun:2,pluse:1745,pl_inter1:293,pl_inter2:699,pl_inter3:514,timestamp:7934476
  806. encoder daily: tax:1,gun:2,pluse:1795,pl_inter1:295,pl_inter2:706,pl_inter3:520,timestamp:7954628
  807. encoder daily: tax:1,gun:2,pluse:1845,pl_inter1:293,pl_inter2:706,pl_inter3:515,timestamp:7974771
  808. encoder daily: tax:1,gun:2,pluse:1895,pl_inter1:297,pl_inter2:704,pl_inter3:503,timestamp:7994984
  809. encoder daily: tax:1,gun:2,pluse:1945,pl_inter1:294,pl_inter2:707,pl_inter3:524,timestamp:8015121
  810. encoder daily: tax:1,gun:2,pluse:1994,pl_inter1:293,pl_inter2:710,pl_inter3:482,timestamp:8034736
  811. encoder daily: tax:1,gun:2,pluse:2044,pl_inter1:297,pl_inter2:707,pl_inter3:486,timestamp:8054944
  812. encoder daily: tax:1,gun:2,pluse:2094,pl_inter1:293,pl_inter2:707,pl_inter3:486,timestamp:8075061
  813. encoder daily: tax:1,gun:2,pluse:2144,pl_inter1:295,pl_inter2:706,pl_inter3:478,timestamp:8095233
  814. encoder daily: tax:1,gun:2,pluse:2193,pl_inter1:296,pl_inter2:708,pl_inter3:441,timestamp:8114924
  815. encoder daily: tax:1,gun:2,pluse:2243,pl_inter1:295,pl_inter2:712,pl_inter3:436,timestamp:8135111
  816. encoder daily: tax:1,gun:2,pluse:2293,pl_inter1:295,pl_inter2:708,pl_inter3:438,timestamp:8155278
  817. encoder daily: tax:1,gun:2,pluse:2343,pl_inter1:294,pl_inter2:703,pl_inter3:443,timestamp:8175448
  818. encoder daily: tax:1,gun:2,pluse:2392,pl_inter1:296,pl_inter2:706,pl_inter3:387,timestamp:8195160
  819. encoder daily: tax:1,gun:2,pluse:2440,pl_inter1:293,pl_inter2:704,pl_inter3:411,timestamp:8214679
  820. encoder daily: tax:1,gun:2,pluse:2445,pl_inter1:1511,pl_inter2:4619,pl_inter3:3600,timestamp:8231179
  821. encoder daily: tax:1,gun:2,pluse:2452,pl_inter1:2412,pl_inter2:5765,pl_inter3:2460,timestamp:8253582
  822. encoder daily: tax:1,gun:2,pluse:2458,pl_inter1:3020,pl_inter2:3608,pl_inter3:3425,timestamp:8273461
  823. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  824. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  825. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  826. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  827. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  828. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  829. encoder daily: tax:1,gun:2,pluse:2462,pl_inter1:2404,pl_inter2:3434,pl_inter3:2404,timestamp:8285516
  830. encoder daily: tax:2,gun:1,pluse:1,pl_inter1:0,pl_inter2:0,pl_inter3:0,timestamp:9264143
  831. encoder daily: tax:2,gun:1,pluse:7,pl_inter1:2575,pl_inter2:5766,pl_inter3:3073,timestamp:9283995
  832. encoder daily: tax:2,gun:1,pluse:17,pl_inter1:549,pl_inter2:3301,pl_inter3:549,timestamp:9304470
  833. encoder daily: tax:2,gun:1,pluse:70,pl_inter1:193,pl_inter2:777,pl_inter3:545,timestamp:9324655
  834. encoder daily: tax:2,gun:1,pluse:128,pl_inter1:232,pl_inter2:644,pl_inter3:297,timestamp:9345155
  835. encoder daily: tax:2,gun:1,pluse:183,pl_inter1:222,pl_inter2:605,pl_inter3:402,timestamp:9364925
  836. encoder daily: tax:2,gun:1,pluse:241,pl_inter1:213,pl_inter2:626,pl_inter3:296,timestamp:9385115
  837. encoder daily: tax:2,gun:1,pluse:296,pl_inter1:226,pl_inter2:660,pl_inter3:660,timestamp:9405053
  838. encoder daily: tax:2,gun:1,pluse:354,pl_inter1:214,pl_inter2:610,pl_inter3:373,timestamp:9425137
  839. encoder daily: tax:2,gun:1,pluse:410,pl_inter1:214,pl_inter2:592,pl_inter3:370,timestamp:9445217
  840. encoder daily: tax:2,gun:1,pluse:468,pl_inter1:225,pl_inter2:618,pl_inter3:385,timestamp:9465115
  841. encoder daily: tax:2,gun:1,pluse:524,pl_inter1:215,pl_inter2:617,pl_inter3:263,timestamp:9485205
  842. encoder daily: tax:2,gun:1,pluse:581,pl_inter1:224,pl_inter2:613,pl_inter3:510,timestamp:9505178
  843. encoder daily: tax:2,gun:1,pluse:638,pl_inter1:220,pl_inter2:639,pl_inter3:271,timestamp:9525339
  844. encoder daily: tax:2,gun:1,pluse:694,pl_inter1:228,pl_inter2:655,pl_inter3:511,timestamp:9545047
  845. encoder daily: tax:2,gun:1,pluse:751,pl_inter1:206,pl_inter2:635,pl_inter3:277,timestamp:9565310
  846. encoder daily: tax:2,gun:1,pluse:807,pl_inter1:218,pl_inter2:597,pl_inter3:412,timestamp:9585131
  847. encoder daily: tax:2,gun:1,pluse:866,pl_inter1:219,pl_inter2:629,pl_inter3:293,timestamp:9605442
  848. encoder daily: tax:2,gun:1,pluse:921,pl_inter1:214,pl_inter2:686,pl_inter3:686,timestamp:9625364
  849. encoder daily: tax:2,gun:1,pluse:979,pl_inter1:218,pl_inter2:548,pl_inter3:345,timestamp:9645419
  850. encoder daily: tax:2,gun:1,pluse:1034,pl_inter1:226,pl_inter2:622,pl_inter3:388,timestamp:9665213
  851. encoder daily: tax:2,gun:1,pluse:1092,pl_inter1:211,pl_inter2:610,pl_inter3:327,timestamp:9685307
  852. encoder daily: tax:2,gun:1,pluse:1147,pl_inter1:223,pl_inter2:651,pl_inter3:445,timestamp:9705351
  853. encoder daily: tax:2,gun:1,pluse:1205,pl_inter1:220,pl_inter2:664,pl_inter3:459,timestamp:9725533
  854. encoder daily: tax:2,gun:1,pluse:1262,pl_inter1:227,pl_inter2:598,pl_inter3:247,timestamp:9745602
  855. encoder daily: tax:2,gun:1,pluse:1319,pl_inter1:227,pl_inter2:646,pl_inter3:435,timestamp:9765425
  856. encoder daily: tax:2,gun:1,pluse:1376,pl_inter1:214,pl_inter2:640,pl_inter3:267,timestamp:9785696
  857. encoder daily: tax:2,gun:1,pluse:1433,pl_inter1:208,pl_inter2:661,pl_inter3:401,timestamp:9805945
  858. encoder daily: tax:2,gun:1,pluse:1491,pl_inter1:225,pl_inter2:584,pl_inter3:296,timestamp:9826120
  859. encoder daily: tax:2,gun:1,pluse:1546,pl_inter1:226,pl_inter2:566,pl_inter3:563,timestamp:9845964
  860. encoder daily: tax:2,gun:1,pluse:1604,pl_inter1:218,pl_inter2:659,pl_inter3:372,timestamp:9866241
  861. encoder daily: tax:2,gun:1,pluse:1660,pl_inter1:218,pl_inter2:641,pl_inter3:371,timestamp:9886304
  862. encoder daily: tax:2,gun:1,pluse:1718,pl_inter1:221,pl_inter2:607,pl_inter3:379,timestamp:9906196
  863. encoder daily: tax:2,gun:1,pluse:1774,pl_inter1:222,pl_inter2:574,pl_inter3:222,timestamp:9926336
  864. encoder daily: tax:2,gun:1,pluse:1831,pl_inter1:214,pl_inter2:636,pl_inter3:499,timestamp:9946321
  865. encoder daily: tax:2,gun:1,pluse:1888,pl_inter1:217,pl_inter2:657,pl_inter3:270,timestamp:9966494
  866. encoder daily: tax:2,gun:1,pluse:1945,pl_inter1:220,pl_inter2:633,pl_inter3:402,timestamp:9986580
  867. encoder daily: tax:2,gun:1,pluse:2001,pl_inter1:229,pl_inter2:639,pl_inter3:274,timestamp:10006463
  868. encoder daily: tax:2,gun:1,pluse:2058,pl_inter1:232,pl_inter2:562,pl_inter3:403,timestamp:10026722
  869. encoder daily: tax:2,gun:1,pluse:2116,pl_inter1:224,pl_inter2:572,pl_inter3:295,timestamp:10046734
  870. encoder daily: tax:2,gun:1,pluse:2172,pl_inter1:225,pl_inter2:639,pl_inter3:428,timestamp:10067009
  871. encoder daily: tax:2,gun:1,pluse:2230,pl_inter1:225,pl_inter2:608,pl_inter3:406,timestamp:10087029
  872. encoder daily: tax:2,gun:1,pluse:2286,pl_inter1:220,pl_inter2:582,pl_inter3:354,timestamp:10107055
  873. encoder daily: tax:2,gun:1,pluse:2343,pl_inter1:223,pl_inter2:570,pl_inter3:384,timestamp:10126829
  874. encoder daily: tax:2,gun:1,pluse:2400,pl_inter1:223,pl_inter2:551,pl_inter3:268,timestamp:10147264
  875. encoder daily: tax:2,gun:1,pluse:2457,pl_inter1:220,pl_inter2:529,pl_inter3:413,timestamp:10167337
  876. encoder daily: tax:2,gun:1,pluse:2516,pl_inter1:218,pl_inter2:626,pl_inter3:295,timestamp:10187699
  877. encoder daily: tax:2,gun:1,pluse:2571,pl_inter1:218,pl_inter2:643,pl_inter3:607,timestamp:10207552
  878. encoder daily: tax:2,gun:1,pluse:2629,pl_inter1:213,pl_inter2:654,pl_inter3:337,timestamp:10227471
  879. encoder daily: tax:2,gun:1,pluse:2685,pl_inter1:220,pl_inter2:598,pl_inter3:373,timestamp:10247603
  880. encoder daily: tax:2,gun:1,pluse:2743,pl_inter1:227,pl_inter2:656,pl_inter3:397,timestamp:10267751
  881. encoder daily: tax:2,gun:1,pluse:2799,pl_inter1:234,pl_inter2:600,pl_inter3:272,timestamp:10287876
  882. encoder daily: tax:2,gun:1,pluse:2856,pl_inter1:221,pl_inter2:637,pl_inter3:355,timestamp:10307798
  883. encoder daily: tax:2,gun:1,pluse:2914,pl_inter1:213,pl_inter2:653,pl_inter3:268,timestamp:10327958
  884. encoder daily: tax:2,gun:1,pluse:2970,pl_inter1:214,pl_inter2:536,pl_inter3:506,timestamp:10347793
  885. encoder daily: tax:2,gun:1,pluse:3028,pl_inter1:218,pl_inter2:627,pl_inter3:297,timestamp:10368106
  886. encoder daily: tax:2,gun:1,pluse:3084,pl_inter1:223,pl_inter2:572,pl_inter3:390,timestamp:10388041
  887. encoder daily: tax:2,gun:1,pluse:3142,pl_inter1:227,pl_inter2:681,pl_inter3:335,timestamp:10408167
  888. encoder daily: tax:2,gun:1,pluse:3197,pl_inter1:221,pl_inter2:649,pl_inter3:430,timestamp:10428127
  889. encoder daily: tax:2,gun:1,pluse:3254,pl_inter1:219,pl_inter2:631,pl_inter3:372,timestamp:10447853
  890. encoder daily: tax:2,gun:1,pluse:3312,pl_inter1:219,pl_inter2:621,pl_inter3:234,timestamp:10468306
  891. encoder daily: tax:2,gun:1,pluse:3369,pl_inter1:224,pl_inter2:619,pl_inter3:456,timestamp:10488206
  892. encoder daily: tax:2,gun:1,pluse:3427,pl_inter1:224,pl_inter2:636,pl_inter3:271,timestamp:10508626
  893. encoder daily: tax:2,gun:1,pluse:3483,pl_inter1:224,pl_inter2:661,pl_inter3:405,timestamp:10528542
  894. encoder daily: tax:2,gun:1,pluse:3541,pl_inter1:221,pl_inter2:596,pl_inter3:295,timestamp:10548696
  895. encoder daily: tax:2,gun:1,pluse:3596,pl_inter1:219,pl_inter2:617,pl_inter3:546,timestamp:10568457
  896. encoder daily: tax:2,gun:1,pluse:3654,pl_inter1:217,pl_inter2:667,pl_inter3:369,timestamp:10588653
  897. encoder daily: tax:2,gun:1,pluse:3711,pl_inter1:211,pl_inter2:595,pl_inter3:211,timestamp:10608859
  898. encoder daily: tax:2,gun:1,pluse:3769,pl_inter1:228,pl_inter2:581,pl_inter3:456,timestamp:10628905
  899. encoder daily: tax:2,gun:1,pluse:3826,pl_inter1:216,pl_inter2:633,pl_inter3:268,timestamp:10649030
  900. encoder daily: tax:2,gun:1,pluse:3883,pl_inter1:228,pl_inter2:587,pl_inter3:403,timestamp:10669094
  901. encoder daily: tax:2,gun:1,pluse:3941,pl_inter1:216,pl_inter2:627,pl_inter3:292,timestamp:10689132
  902. encoder daily: tax:2,gun:1,pluse:3997,pl_inter1:226,pl_inter2:580,pl_inter3:455,timestamp:10709328
  903. encoder daily: tax:2,gun:1,pluse:4055,pl_inter1:223,pl_inter2:598,pl_inter3:465,timestamp:10729458
  904. encoder daily: tax:2,gun:1,pluse:4112,pl_inter1:221,pl_inter2:571,pl_inter3:234,timestamp:10749377
  905. encoder daily: tax:2,gun:1,pluse:4170,pl_inter1:220,pl_inter2:596,pl_inter3:480,timestamp:10769623
  906. encoder daily: tax:2,gun:1,pluse:4227,pl_inter1:224,pl_inter2:673,pl_inter3:271,timestamp:10789529
  907. encoder daily: tax:2,gun:1,pluse:4283,pl_inter1:221,pl_inter2:549,pl_inter3:407,timestamp:10809393
  908. encoder daily: tax:2,gun:1,pluse:4341,pl_inter1:221,pl_inter2:631,pl_inter3:299,timestamp:10829491
  909. encoder daily: tax:2,gun:1,pluse:4397,pl_inter1:224,pl_inter2:673,pl_inter3:472,timestamp:10849669
  910. encoder daily: tax:2,gun:1,pluse:4455,pl_inter1:223,pl_inter2:559,pl_inter3:466,timestamp:10869782
  911. encoder daily: tax:2,gun:1,pluse:4512,pl_inter1:216,pl_inter2:669,pl_inter3:238,timestamp:10889731
  912. encoder daily: tax:2,gun:1,pluse:4569,pl_inter1:216,pl_inter2:596,pl_inter3:464,timestamp:10909521
  913. encoder daily: tax:2,gun:1,pluse:4627,pl_inter1:217,pl_inter2:565,pl_inter3:270,timestamp:10929905
  914. encoder daily: tax:2,gun:1,pluse:4683,pl_inter1:218,pl_inter2:580,pl_inter3:396,timestamp:10949808
  915. encoder daily: tax:2,gun:1,pluse:4741,pl_inter1:218,pl_inter2:591,pl_inter3:293,timestamp:10969929
  916. encoder daily: tax:2,gun:1,pluse:4797,pl_inter1:218,pl_inter2:642,pl_inter3:447,timestamp:10990048
  917. encoder daily: tax:2,gun:1,pluse:4855,pl_inter1:220,pl_inter2:560,pl_inter3:470,timestamp:11010113
  918. encoder daily: tax:2,gun:1,pluse:4912,pl_inter1:217,pl_inter2:607,pl_inter3:224,timestamp:11030091
  919. encoder daily: tax:2,gun:1,pluse:4969,pl_inter1:214,pl_inter2:583,pl_inter3:462,timestamp:11049959
  920. encoder daily: tax:2,gun:1,pluse:5026,pl_inter1:215,pl_inter2:578,pl_inter3:267,timestamp:11070122
  921. encoder daily: tax:2,gun:1,pluse:5082,pl_inter1:224,pl_inter2:626,pl_inter3:372,timestamp:11089919
  922. encoder daily: tax:2,gun:1,pluse:5140,pl_inter1:223,pl_inter2:534,pl_inter3:275,timestamp:11110126
  923. encoder daily: tax:2,gun:1,pluse:5196,pl_inter1:216,pl_inter2:626,pl_inter3:608,timestamp:11130311
  924. encoder daily: tax:2,gun:1,pluse:5254,pl_inter1:223,pl_inter2:626,pl_inter3:369,timestamp:11150436
  925. encoder daily: tax:2,gun:1,pluse:5311,pl_inter1:217,pl_inter2:655,pl_inter3:219,timestamp:11170643
  926. encoder daily: tax:2,gun:1,pluse:5369,pl_inter1:204,pl_inter2:631,pl_inter3:464,timestamp:11190753
  927. encoder daily: tax:2,gun:1,pluse:5426,pl_inter1:224,pl_inter2:608,pl_inter3:274,timestamp:11210897
  928. encoder daily: tax:2,gun:1,pluse:5482,pl_inter1:222,pl_inter2:672,pl_inter3:378,timestamp:11230688
  929. encoder daily: tax:2,gun:1,pluse:5540,pl_inter1:224,pl_inter2:558,pl_inter3:275,timestamp:11250990
  930. encoder daily: tax:2,gun:1,pluse:5596,pl_inter1:222,pl_inter2:645,pl_inter3:645,timestamp:11271131
  931. encoder daily: tax:2,gun:1,pluse:5653,pl_inter1:220,pl_inter2:595,pl_inter3:312,timestamp:11290895
  932. encoder daily: tax:2,gun:1,pluse:5709,pl_inter1:231,pl_inter2:570,pl_inter3:387,timestamp:11310853
  933. encoder daily: tax:2,gun:1,pluse:5744,pl_inter1:210,pl_inter2:5120,pl_inter3:3332,timestamp:11330590
  934. encoder daily: tax:2,gun:1,pluse:5750,pl_inter1:2276,pl_inter2:5390,pl_inter3:2276,timestamp:11349659
  935. encoder daily: tax:2,gun:1,pluse:5757,pl_inter1:2327,pl_inter2:3343,pl_inter3:3343,timestamp:11370937
  936. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  937. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  938. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  939. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  940. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  941. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  942. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  943. encoder daily: tax:2,gun:1,pluse:5761,pl_inter1:2269,pl_inter2:3364,pl_inter3:2269,timestamp:11383087
  944. encoder daily: tax:1,gun:2,pluse:6,pl_inter1:2450,pl_inter2:4661,pl_inter3:2937,timestamp:37914787
  945. encoder daily: tax:1,gun:2,pluse:12,pl_inter1:2877,pl_inter2:5466,pl_inter3:2877,timestamp:37936286
  946. encoder daily: tax:1,gun:2,pluse:49,pl_inter1:286,pl_inter2:2406,pl_inter3:345,timestamp:37956948
  947. encoder daily: tax:1,gun:2,pluse:98,pl_inter1:296,pl_inter2:726,pl_inter3:441,timestamp:37976978
  948. encoder daily: tax:1,gun:2,pluse:147,pl_inter1:299,pl_inter2:716,pl_inter3:442,timestamp:37996918
  949. encoder daily: tax:1,gun:2,pluse:196,pl_inter1:298,pl_inter2:717,pl_inter3:443,timestamp:38016817
  950. encoder daily: tax:1,gun:2,pluse:246,pl_inter1:298,pl_inter2:711,pl_inter3:445,timestamp:38037152
  951. encoder daily: tax:1,gun:2,pluse:295,pl_inter1:298,pl_inter2:713,pl_inter3:436,timestamp:38056988
  952. encoder daily: tax:1,gun:2,pluse:345,pl_inter1:299,pl_inter2:710,pl_inter3:447,timestamp:38077264
  953. encoder daily: tax:1,gun:2,pluse:394,pl_inter1:297,pl_inter2:720,pl_inter3:523,timestamp:38097119
  954. encoder daily: tax:1,gun:2,pluse:444,pl_inter1:298,pl_inter2:716,pl_inter3:524,timestamp:38117398
  955. encoder daily: tax:1,gun:2,pluse:494,pl_inter1:296,pl_inter2:714,pl_inter3:511,timestamp:38137690
  956. encoder daily: tax:1,gun:2,pluse:543,pl_inter1:300,pl_inter2:713,pl_inter3:451,timestamp:38157496
  957. encoder daily: tax:1,gun:2,pluse:593,pl_inter1:296,pl_inter2:709,pl_inter3:438,timestamp:38177776
  958. encoder daily: tax:1,gun:2,pluse:642,pl_inter1:301,pl_inter2:714,pl_inter3:381,timestamp:38197687
  959. encoder daily: tax:1,gun:2,pluse:692,pl_inter1:297,pl_inter2:719,pl_inter3:378,timestamp:38217981
  960. encoder daily: tax:1,gun:2,pluse:741,pl_inter1:299,pl_inter2:728,pl_inter3:334,timestamp:38238019
  961. encoder daily: tax:1,gun:2,pluse:791,pl_inter1:300,pl_inter2:715,pl_inter3:336,timestamp:38258365
  962. encoder daily: tax:1,gun:2,pluse:840,pl_inter1:296,pl_inter2:713,pl_inter3:324,timestamp:38278412
  963. encoder daily: tax:1,gun:2,pluse:888,pl_inter1:301,pl_inter2:724,pl_inter3:318,timestamp:38298166
  964. encoder daily: tax:1,gun:2,pluse:937,pl_inter1:298,pl_inter2:710,pl_inter3:298,timestamp:38318209
  965. encoder daily: tax:1,gun:2,pluse:987,pl_inter1:297,pl_inter2:714,pl_inter3:297,timestamp:38338585
  966. encoder daily: tax:1,gun:2,pluse:1036,pl_inter1:305,pl_inter2:713,pl_inter3:414,timestamp:38358650
  967. encoder daily: tax:1,gun:2,pluse:1085,pl_inter1:307,pl_inter2:717,pl_inter3:447,timestamp:38378652
  968. encoder daily: tax:1,gun:2,pluse:1134,pl_inter1:300,pl_inter2:713,pl_inter3:713,timestamp:38398578
  969. encoder daily: tax:1,gun:2,pluse:1184,pl_inter1:300,pl_inter2:711,pl_inter3:711,timestamp:38418937
  970. encoder daily: tax:1,gun:2,pluse:1233,pl_inter1:296,pl_inter2:707,pl_inter3:509,timestamp:38438594
  971. encoder daily: tax:1,gun:2,pluse:1283,pl_inter1:296,pl_inter2:711,pl_inter3:511,timestamp:38458966
  972. encoder daily: tax:1,gun:2,pluse:1332,pl_inter1:298,pl_inter2:718,pl_inter3:484,timestamp:38478773
  973. encoder daily: tax:1,gun:2,pluse:1381,pl_inter1:298,pl_inter2:713,pl_inter3:447,timestamp:38498685
  974. encoder daily: tax:1,gun:2,pluse:1431,pl_inter1:299,pl_inter2:719,pl_inter3:442,timestamp:38519047
  975. encoder daily: tax:1,gun:2,pluse:1480,pl_inter1:297,pl_inter2:712,pl_inter3:390,timestamp:38538970
  976. encoder daily: tax:1,gun:2,pluse:1529,pl_inter1:297,pl_inter2:713,pl_inter3:341,timestamp:38558961
  977. encoder daily: tax:1,gun:2,pluse:1578,pl_inter1:295,pl_inter2:709,pl_inter3:324,timestamp:38579001
  978. encoder daily: tax:1,gun:2,pluse:1627,pl_inter1:298,pl_inter2:709,pl_inter3:323,timestamp:38599038
  979. encoder daily: tax:1,gun:2,pluse:1677,pl_inter1:297,pl_inter2:711,pl_inter3:323,timestamp:38619362
  980. encoder daily: tax:1,gun:2,pluse:1726,pl_inter1:296,pl_inter2:712,pl_inter3:314,timestamp:38639390
  981. encoder daily: tax:1,gun:2,pluse:1775,pl_inter1:301,pl_inter2:711,pl_inter3:308,timestamp:38659450
  982. encoder daily: tax:1,gun:2,pluse:1824,pl_inter1:294,pl_inter2:710,pl_inter3:359,timestamp:38679479
  983. encoder daily: tax:1,gun:2,pluse:1873,pl_inter1:299,pl_inter2:715,pl_inter3:432,timestamp:38699471
  984. encoder daily: tax:1,gun:2,pluse:1922,pl_inter1:297,pl_inter2:713,pl_inter3:442,timestamp:38719406
  985. encoder daily: tax:1,gun:2,pluse:1971,pl_inter1:299,pl_inter2:721,pl_inter3:456,timestamp:38739359
  986. encoder daily: tax:1,gun:2,pluse:2020,pl_inter1:298,pl_inter2:714,pl_inter3:552,timestamp:38759248
  987. encoder daily: tax:1,gun:2,pluse:2071,pl_inter1:299,pl_inter2:714,pl_inter3:453,timestamp:38780026
  988. encoder daily: tax:1,gun:2,pluse:2121,pl_inter1:297,pl_inter2:712,pl_inter3:447,timestamp:38800360
  989. encoder daily: tax:1,gun:2,pluse:2170,pl_inter1:301,pl_inter2:717,pl_inter3:551,timestamp:38820260
  990. encoder daily: tax:1,gun:2,pluse:2220,pl_inter1:298,pl_inter2:712,pl_inter3:547,timestamp:38840555
  991. encoder daily: tax:1,gun:2,pluse:2269,pl_inter1:298,pl_inter2:710,pl_inter3:515,timestamp:38860390
  992. encoder daily: tax:1,gun:2,pluse:2319,pl_inter1:297,pl_inter2:713,pl_inter3:514,timestamp:38880810
  993. encoder daily: tax:1,gun:2,pluse:2368,pl_inter1:298,pl_inter2:713,pl_inter3:451,timestamp:38900689
  994. encoder daily: tax:1,gun:2,pluse:2417,pl_inter1:297,pl_inter2:716,pl_inter3:387,timestamp:38920648
  995. encoder daily: tax:1,gun:2,pluse:2467,pl_inter1:299,pl_inter2:712,pl_inter3:391,timestamp:38940995
  996. encoder daily: tax:1,gun:2,pluse:2516,pl_inter1:299,pl_inter2:713,pl_inter3:333,timestamp:38960936
  997. encoder daily: tax:1,gun:2,pluse:2565,pl_inter1:298,pl_inter2:708,pl_inter3:322,timestamp:38980918
  998. encoder daily: tax:1,gun:2,pluse:2614,pl_inter1:299,pl_inter2:711,pl_inter3:320,timestamp:39000892
  999. encoder daily: tax:1,gun:2,pluse:2664,pl_inter1:299,pl_inter2:709,pl_inter3:319,timestamp:39021222
  1000. encoder daily: tax:1,gun:2,pluse:2713,pl_inter1:300,pl_inter2:717,pl_inter3:317,timestamp:39041275
  1001. encoder daily: tax:1,gun:2,pluse:2762,pl_inter1:298,pl_inter2:711,pl_inter3:374,timestamp:39061346
  1002. encoder daily: tax:1,gun:2,pluse:2811,pl_inter1:300,pl_inter2:712,pl_inter3:431,timestamp:39081352
  1003. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1004. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1005. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1006. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1007. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1008. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1009. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1010. encoder daily: tax:1,gun:2,pluse:2824,pl_inter1:317,pl_inter2:533,pl_inter3:362,timestamp:39086630
  1011. encoder daily: tax:1,gun:2,pluse:1,pl_inter1:0,pl_inter2:0,pl_inter3:0,timestamp:50644958
  1012. encoder daily: tax:1,gun:2,pluse:8,pl_inter1:2163,pl_inter2:4348,pl_inter3:3342,timestamp:50666435
  1013. encoder daily: tax:1,gun:2,pluse:18,pl_inter1:519,pl_inter2:5642,pl_inter3:584,timestamp:50687869
  1014. encoder daily: tax:1,gun:2,pluse:66,pl_inter1:292,pl_inter2:745,pl_inter3:333,timestamp:50708394
  1015. encoder daily: tax:1,gun:2,pluse:116,pl_inter1:297,pl_inter2:712,pl_inter3:320,timestamp:50728614
  1016. encoder daily: tax:1,gun:2,pluse:165,pl_inter1:298,pl_inter2:715,pl_inter3:327,timestamp:50748505
  1017. encoder daily: tax:1,gun:2,pluse:215,pl_inter1:296,pl_inter2:720,pl_inter3:326,timestamp:50768690
  1018. encoder daily: tax:1,gun:2,pluse:264,pl_inter1:301,pl_inter2:727,pl_inter3:318,timestamp:50788661
  1019. encoder daily: tax:1,gun:2,pluse:313,pl_inter1:299,pl_inter2:720,pl_inter3:299,timestamp:50808639
  1020. encoder daily: tax:1,gun:2,pluse:362,pl_inter1:304,pl_inter2:718,pl_inter3:407,timestamp:50828585
  1021. encoder daily: tax:1,gun:2,pluse:412,pl_inter1:302,pl_inter2:717,pl_inter3:416,timestamp:50848781
  1022. encoder daily: tax:1,gun:2,pluse:461,pl_inter1:297,pl_inter2:722,pl_inter3:442,timestamp:50868612
  1023. encoder daily: tax:1,gun:2,pluse:511,pl_inter1:300,pl_inter2:720,pl_inter3:444,timestamp:50888840
  1024. encoder daily: tax:1,gun:2,pluse:560,pl_inter1:299,pl_inter2:719,pl_inter3:719,timestamp:50908657
  1025. encoder daily: tax:1,gun:2,pluse:610,pl_inter1:294,pl_inter2:717,pl_inter3:717,timestamp:50928895
  1026. encoder daily: tax:1,gun:2,pluse:659,pl_inter1:299,pl_inter2:701,pl_inter3:467,timestamp:50948418
  1027. encoder daily: tax:1,gun:2,pluse:709,pl_inter1:296,pl_inter2:700,pl_inter3:476,timestamp:50968682
  1028. encoder daily: tax:1,gun:2,pluse:759,pl_inter1:297,pl_inter2:723,pl_inter3:473,timestamp:50988917
  1029. encoder daily: tax:1,gun:2,pluse:809,pl_inter1:299,pl_inter2:720,pl_inter3:473,timestamp:51009181
  1030. encoder daily: tax:1,gun:2,pluse:858,pl_inter1:298,pl_inter2:716,pl_inter3:495,timestamp:51028985
  1031. encoder daily: tax:1,gun:2,pluse:907,pl_inter1:301,pl_inter2:721,pl_inter3:447,timestamp:51048789
  1032. encoder daily: tax:1,gun:2,pluse:957,pl_inter1:298,pl_inter2:726,pl_inter3:452,timestamp:51069047
  1033. encoder daily: tax:1,gun:2,pluse:1007,pl_inter1:295,pl_inter2:717,pl_inter3:447,timestamp:51089291
  1034. encoder daily: tax:1,gun:2,pluse:1057,pl_inter1:299,pl_inter2:717,pl_inter3:455,timestamp:51109540
  1035. encoder daily: tax:1,gun:2,pluse:1107,pl_inter1:298,pl_inter2:719,pl_inter3:447,timestamp:51129770
  1036. encoder daily: tax:1,gun:2,pluse:1156,pl_inter1:296,pl_inter2:721,pl_inter3:393,timestamp:51149568
  1037. encoder daily: tax:1,gun:2,pluse:1206,pl_inter1:298,pl_inter2:727,pl_inter3:393,timestamp:51169825
  1038. encoder daily: tax:1,gun:2,pluse:1255,pl_inter1:296,pl_inter2:715,pl_inter3:346,timestamp:51189676
  1039. encoder daily: tax:1,gun:2,pluse:1305,pl_inter1:300,pl_inter2:723,pl_inter3:342,timestamp:51209918
  1040. encoder daily: tax:1,gun:2,pluse:1354,pl_inter1:300,pl_inter2:721,pl_inter3:324,timestamp:51229848
  1041. encoder daily: tax:1,gun:2,pluse:1404,pl_inter1:296,pl_inter2:723,pl_inter3:321,timestamp:51250106
  1042. encoder daily: tax:1,gun:2,pluse:1454,pl_inter1:299,pl_inter2:722,pl_inter3:325,timestamp:51270398
  1043. encoder daily: tax:1,gun:2,pluse:1503,pl_inter1:297,pl_inter2:725,pl_inter3:324,timestamp:51290351
  1044. encoder daily: tax:1,gun:2,pluse:1552,pl_inter1:300,pl_inter2:726,pl_inter3:316,timestamp:51310478
  1045. encoder daily: tax:1,gun:2,pluse:1601,pl_inter1:299,pl_inter2:726,pl_inter3:307,timestamp:51330569
  1046. encoder daily: tax:1,gun:2,pluse:1650,pl_inter1:299,pl_inter2:719,pl_inter3:361,timestamp:51350664
  1047. encoder daily: tax:1,gun:2,pluse:1699,pl_inter1:300,pl_inter2:724,pl_inter3:437,timestamp:51370667
  1048. encoder daily: tax:1,gun:2,pluse:1748,pl_inter1:299,pl_inter2:724,pl_inter3:440,timestamp:51390623
  1049. encoder daily: tax:1,gun:2,pluse:1797,pl_inter1:300,pl_inter2:720,pl_inter3:480,timestamp:51410539
  1050. encoder daily: tax:1,gun:2,pluse:1846,pl_inter1:302,pl_inter2:728,pl_inter3:471,timestamp:51430458
  1051. encoder daily: tax:1,gun:2,pluse:1896,pl_inter1:302,pl_inter2:725,pl_inter3:487,timestamp:51450818
  1052. encoder daily: tax:1,gun:2,pluse:1945,pl_inter1:298,pl_inter2:720,pl_inter3:527,timestamp:51470679
  1053. encoder daily: tax:1,gun:2,pluse:1994,pl_inter1:301,pl_inter2:729,pl_inter3:461,timestamp:51490585
  1054. encoder daily: tax:1,gun:2,pluse:2044,pl_inter1:300,pl_inter2:721,pl_inter3:452,timestamp:51511000
  1055. encoder daily: tax:1,gun:2,pluse:2093,pl_inter1:303,pl_inter2:728,pl_inter3:392,timestamp:51530934
  1056. encoder daily: tax:1,gun:2,pluse:2142,pl_inter1:300,pl_inter2:727,pl_inter3:338,timestamp:51550960
  1057. encoder daily: tax:1,gun:2,pluse:2191,pl_inter1:301,pl_inter2:726,pl_inter3:322,timestamp:51571013
  1058. encoder daily: tax:1,gun:2,pluse:2240,pl_inter1:301,pl_inter2:720,pl_inter3:320,timestamp:51591072
  1059. encoder daily: tax:1,gun:2,pluse:2289,pl_inter1:301,pl_inter2:721,pl_inter3:315,timestamp:51611141
  1060. encoder daily: tax:1,gun:2,pluse:2339,pl_inter1:302,pl_inter2:728,pl_inter3:318,timestamp:51631565
  1061. encoder daily: tax:1,gun:2,pluse:2388,pl_inter1:301,pl_inter2:730,pl_inter3:372,timestamp:51651628
  1062. encoder daily: tax:1,gun:2,pluse:2437,pl_inter1:300,pl_inter2:726,pl_inter3:425,timestamp:51671634
  1063. encoder daily: tax:1,gun:2,pluse:2486,pl_inter1:300,pl_inter2:723,pl_inter3:438,timestamp:51691617
  1064. encoder daily: tax:1,gun:2,pluse:2535,pl_inter1:300,pl_inter2:728,pl_inter3:703,timestamp:51711515
  1065. encoder daily: tax:1,gun:2,pluse:2585,pl_inter1:299,pl_inter2:726,pl_inter3:704,timestamp:51731893
  1066. encoder daily: tax:1,gun:2,pluse:2635,pl_inter1:298,pl_inter2:722,pl_inter3:708,timestamp:51752306
  1067. encoder daily: tax:1,gun:2,pluse:2684,pl_inter1:301,pl_inter2:725,pl_inter3:440,timestamp:51771976
  1068. encoder daily: tax:1,gun:2,pluse:2734,pl_inter1:298,pl_inter2:717,pl_inter3:440,timestamp:51792384
  1069. encoder daily: tax:1,gun:2,pluse:2784,pl_inter1:301,pl_inter2:727,pl_inter3:441,timestamp:51812732
  1070. encoder daily: tax:1,gun:2,pluse:2833,pl_inter1:296,pl_inter2:722,pl_inter3:503,timestamp:51832657
  1071. encoder daily: tax:1,gun:2,pluse:2882,pl_inter1:301,pl_inter2:725,pl_inter3:482,timestamp:51852515
  1072. encoder daily: tax:1,gun:2,pluse:2931,pl_inter1:300,pl_inter2:719,pl_inter3:411,timestamp:51872429
  1073. encoder daily: tax:1,gun:2,pluse:2981,pl_inter1:300,pl_inter2:726,pl_inter3:409,timestamp:51892831
  1074. encoder daily: tax:1,gun:2,pluse:3030,pl_inter1:300,pl_inter2:723,pl_inter3:348,timestamp:51912782
  1075. encoder daily: tax:1,gun:2,pluse:3079,pl_inter1:297,pl_inter2:720,pl_inter3:325,timestamp:51932837
  1076. encoder daily: tax:1,gun:2,pluse:3128,pl_inter1:303,pl_inter2:732,pl_inter3:324,timestamp:51952886
  1077. encoder daily: tax:1,gun:2,pluse:3177,pl_inter1:299,pl_inter2:721,pl_inter3:323,timestamp:51972961
  1078. encoder daily: tax:1,gun:2,pluse:3226,pl_inter1:299,pl_inter2:729,pl_inter3:305,timestamp:51993058
  1079. encoder daily: tax:1,gun:2,pluse:3275,pl_inter1:299,pl_inter2:716,pl_inter3:358,timestamp:52013151
  1080. encoder daily: tax:1,gun:2,pluse:3324,pl_inter1:297,pl_inter2:728,pl_inter3:436,timestamp:52033167
  1081. encoder daily: tax:1,gun:2,pluse:3373,pl_inter1:300,pl_inter2:725,pl_inter3:445,timestamp:52053083
  1082. encoder daily: tax:1,gun:2,pluse:3422,pl_inter1:301,pl_inter2:721,pl_inter3:445,timestamp:52073038
  1083. encoder daily: tax:1,gun:2,pluse:3471,pl_inter1:300,pl_inter2:725,pl_inter3:443,timestamp:52092985
  1084. encoder daily: tax:1,gun:2,pluse:3521,pl_inter1:300,pl_inter2:726,pl_inter3:443,timestamp:52113336
  1085. encoder daily: tax:1,gun:2,pluse:3570,pl_inter1:302,pl_inter2:726,pl_inter3:525,timestamp:52133249
  1086. encoder daily: tax:1,gun:2,pluse:3620,pl_inter1:300,pl_inter2:727,pl_inter3:521,timestamp:52153559
  1087. encoder daily: tax:1,gun:2,pluse:3669,pl_inter1:300,pl_inter2:724,pl_inter3:454,timestamp:52173427
  1088. encoder daily: tax:1,gun:2,pluse:3719,pl_inter1:297,pl_inter2:721,pl_inter3:449,timestamp:52193773
  1089. encoder daily: tax:1,gun:2,pluse:3768,pl_inter1:299,pl_inter2:727,pl_inter3:382,timestamp:52213700
  1090. encoder daily: tax:1,gun:2,pluse:3818,pl_inter1:299,pl_inter2:719,pl_inter3:385,timestamp:52234067
  1091. encoder daily: tax:1,gun:2,pluse:3867,pl_inter1:298,pl_inter2:723,pl_inter3:335,timestamp:52254049
  1092. encoder daily: tax:1,gun:2,pluse:3916,pl_inter1:299,pl_inter2:718,pl_inter3:323,timestamp:52274064
  1093. encoder daily: tax:1,gun:2,pluse:3965,pl_inter1:300,pl_inter2:726,pl_inter3:328,timestamp:52294151
  1094. encoder daily: tax:1,gun:2,pluse:4014,pl_inter1:297,pl_inter2:716,pl_inter3:316,timestamp:52314049
  1095. encoder daily: tax:1,gun:2,pluse:4064,pl_inter1:298,pl_inter2:725,pl_inter3:316,timestamp:52334374
  1096. encoder daily: tax:1,gun:2,pluse:4114,pl_inter1:300,pl_inter2:720,pl_inter3:318,timestamp:52354680
  1097. encoder daily: tax:1,gun:2,pluse:4163,pl_inter1:299,pl_inter2:722,pl_inter3:299,timestamp:52374694
  1098. encoder daily: tax:1,gun:2,pluse:4212,pl_inter1:305,pl_inter2:727,pl_inter3:419,timestamp:52394786
  1099. encoder daily: tax:1,gun:2,pluse:4261,pl_inter1:304,pl_inter2:720,pl_inter3:442,timestamp:52414766
  1100. encoder daily: tax:1,gun:2,pluse:4310,pl_inter1:299,pl_inter2:726,pl_inter3:726,timestamp:52434669
  1101. encoder daily: tax:1,gun:2,pluse:4360,pl_inter1:300,pl_inter2:720,pl_inter3:720,timestamp:52455005
  1102. encoder daily: tax:1,gun:2,pluse:4409,pl_inter1:296,pl_inter2:712,pl_inter3:491,timestamp:52474613
  1103. encoder daily: tax:1,gun:2,pluse:4459,pl_inter1:297,pl_inter2:716,pl_inter3:491,timestamp:52494893
  1104. encoder daily: tax:1,gun:2,pluse:4508,pl_inter1:299,pl_inter2:720,pl_inter3:498,timestamp:52514750
  1105. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1106. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1107. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1108. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1109. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1110. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1111. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1112. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1113. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1114. encoder daily: tax:1,gun:2,pluse:4523,pl_inter1:303,pl_inter2:729,pl_inter3:448,timestamp:52521145
  1115. encoder daily: tax:1,gun:2,pluse:5,pl_inter1:2484,pl_inter2:2988,pl_inter3:2558,timestamp:53945685
  1116. encoder daily: tax:1,gun:2,pluse:16,pl_inter1:757,pl_inter2:3968,pl_inter3:757,timestamp:53967531
  1117. encoder daily: tax:1,gun:2,pluse:37,pl_inter1:685,pl_inter2:1564,pl_inter3:1564,timestamp:53986928
  1118. encoder daily: tax:1,gun:2,pluse:61,pl_inter1:640,pl_inter2:1057,pl_inter3:905,timestamp:54006638
  1119. encoder daily: tax:1,gun:2,pluse:86,pl_inter1:609,pl_inter2:1461,pl_inter3:899,timestamp:54027828
  1120. encoder daily: tax:1,gun:2,pluse:111,pl_inter1:606,pl_inter2:1443,pl_inter3:873,timestamp:54047910
  1121. encoder daily: tax:1,gun:2,pluse:135,pl_inter1:606,pl_inter2:1393,pl_inter3:858,timestamp:54067452
  1122. encoder daily: tax:1,gun:2,pluse:160,pl_inter1:604,pl_inter2:1422,pl_inter3:854,timestamp:54087583
  1123. encoder daily: tax:1,gun:2,pluse:184,pl_inter1:603,pl_inter2:1408,pl_inter3:868,timestamp:54107242
  1124. encoder daily: tax:1,gun:2,pluse:209,pl_inter1:615,pl_inter2:1459,pl_inter3:861,timestamp:54127837
  1125. encoder daily: tax:1,gun:2,pluse:233,pl_inter1:626,pl_inter2:1428,pl_inter3:1038,timestamp:54148089
  1126. encoder daily: tax:1,gun:2,pluse:252,pl_inter1:666,pl_inter2:1504,pl_inter3:1156,timestamp:54167787
  1127. encoder daily: tax:1,gun:2,pluse:266,pl_inter1:993,pl_inter2:2473,pl_inter3:1121,timestamp:54187503
  1128. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1129. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1130. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1131. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1132. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1133. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1134. encoder daily: tax:1,gun:2,pluse:276,pl_inter1:1139,pl_inter2:1902,pl_inter3:1561,timestamp:54202436
  1135. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1136. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1137. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1138. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1139. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1140. encoder daily: tax:1,gun:2,pluse:281,pl_inter1:2457,pl_inter2:134456,pl_inter3:2568,timestamp:54347139
  1141. encoder daily: tax:1,gun:2,pluse:283,pl_inter1:3595,pl_inter2:107268,pl_inter3:3595,timestamp:54458002
  1142. encoder daily: tax:1,gun:2,pluse:283,pl_inter1:3595,pl_inter2:107268,pl_inter3:3595,timestamp:54458002
  1143. encoder daily: tax:1,gun:2,pluse:283,pl_inter1:3595,pl_inter2:107268,pl_inter3:3595,timestamp:54458002
  1144. */