From aca05d5dc04d479b20b3d87a6b0b987d4a79aad4 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Thu, 6 Jul 2023 19:02:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B5=8B=E7=A0=81=E4=BB=AA=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checker_gen1.uvoptx | 16 +- checker_gen1.uvprojx | 10 + python/checker_save.py | 45 +- python/checker_test.py | 12 +- python/file/EX_Coder_Test_2023-07-4.json | 231 +++++++ python/file/EX_Coder_Test_2023-07-6.json | 785 +++++++++++++++++++++++ python/file/EX_Coder_Test_2023-07-6.xlsx | Bin 0 -> 12341 bytes python/file/checker_ye_cfg.json | 225 ------- python/file/judge-xt.lua | 30 +- python/prottcp.py | 2 + source/ReadMe.txt | 4 + source/coder/coder_judge.c | 215 +++++++ source/coder/coder_judge.h | 16 + source/coder/coder_lib.c | 7 +- source/dev/dev_flash.h | 14 +- source/main/compiler_info.h | 2 +- source/task/tran_for_coder2.c | 28 +- 17 files changed, 1378 insertions(+), 264 deletions(-) create mode 100644 python/file/EX_Coder_Test_2023-07-6.json create mode 100644 python/file/EX_Coder_Test_2023-07-6.xlsx create mode 100644 source/coder/coder_judge.c create mode 100644 source/coder/coder_judge.h diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx index 18269cd..0b92649 100644 --- a/checker_gen1.uvoptx +++ b/checker_gen1.uvoptx @@ -1177,7 +1177,7 @@ rt_thread - 1 + 0 0 0 0 @@ -2297,6 +2297,18 @@ 0 0 + + 13 + 142 + 1 + 0 + 0 + 0 + .\source\coder\coder_judge.c + coder_judge.c + 0 + 0 + @@ -2307,7 +2319,7 @@ 0 14 - 142 + 143 5 0 0 diff --git a/checker_gen1.uvprojx b/checker_gen1.uvprojx index e9e6aed..d15258b 100644 --- a/checker_gen1.uvprojx +++ b/checker_gen1.uvprojx @@ -1351,6 +1351,11 @@ 1 .\source\coder\coder_lib.c + + coder_judge.c + 1 + .\source\coder\coder_judge.c + @@ -4266,6 +4271,11 @@ 1 .\source\coder\coder_lib.c + + coder_judge.c + 1 + .\source\coder\coder_judge.c + diff --git a/python/checker_save.py b/python/checker_save.py index e057a32..03c0c1a 100644 --- a/python/checker_save.py +++ b/python/checker_save.py @@ -3,6 +3,8 @@ import lupa from lupa import LuaRuntime import execjs import json +import datetime +from datetime import datetime, timedelta @@ -18,8 +20,16 @@ def lua_test(lua_file:str,json_file:str,data:bytearray): save_prints=lua.eval("function(a) prints=a end") with open("file/prints.lua",encoding="utf-8") as f: save_prints(lua.execute(f.read())) + # 初始化全局变量 cfg_name - lua.execute("cfg_name=\""+json_file+"\"\n") + # lua.execute("cfg_name=\""+json_file+"\"\n") + + # 初始化配置字符串 + save_cfg_str=lua.eval("function(a) check_cfg_str=a end") + with open(json_file,encoding="utf-8") as f: + a=f.read() + save_cfg_str(a) + # 初始化全局变量 check_data s=data.hex(' ') # print("输入数据",s) @@ -28,15 +38,20 @@ def lua_test(lua_file:str,json_file:str,data:bytearray): lua.execute("check_data={"+s+"}\n") # 执行判定脚本 with open(lua_file,encoding="utf-8") as f: - a,b=lua.execute(f.read()) - print(a,b) + lua.execute(f.read()) + a,b=lua.globals().main() + return a,b + return "脚本执行失败",0xd1 class save: - def __init__(self,scheme:str) -> None: + def __init__(self,scheme:str,script:str) -> None: self.scheme=scheme + self.script=script + self.save_file=scheme.split(".")[0]+".csv" + print("save file:",self.save_file) with open(scheme,"rb") as f: self.json_obj=json.loads(f.read()) @@ -54,24 +69,34 @@ class save: def save(self,data:bytearray): d=data[1:] ret_num=self.calc_retnum()*2+8+self.calc_parerrnum() - for i in range(20): - self.save_item(d[i*ret_num:i*ret_num+ret_num]) - def save_item(self,d:bytearray): + slave_num=len(d)//ret_num + for i in range(slave_num): + print("slave:",i+1) + self.save_item(i+1,d[i*ret_num:i*ret_num+ret_num]) + + # 保存一个条目 + def save_item(self,slave_addr:int,d:bytearray): # print("save_item",d.hex(" ")) errnum=self.calc_parerrnum() - s='=\"'+d[0:8].hex()+'\"'+',' + s=str(slave_addr)+',' + s+='=\"'+d[0:8].hex()+'\"'+',' s+='=\"'+self.hex2bit(d[8:8+errnum])+'\"'+',' s+=self.hex2int(d[8+errnum:]) # print(d[8:8+errnum].hex(' ')) + a,b=lua_test(self.script,self.scheme,d) + s=s+a+','+str(b) print(s) - lua_test("file/judge-xt.lua",self.scheme,d) - with open("./file/save.csv","+a") as f: + with open(self.save_file,"+a") as f: f.write(s+'\n') + + # 把两个字节拼为一个int def hex2int(self,d:bytearray): s="" for i in range(len(d)//2): s+=str(d[i*2]|(d[i*2+1]<<8))+',' return s + + # 把数据转换为二进制字符串 def hex2bit(self,d:bytearray): s="" for i in range(len(d)*8): diff --git a/python/checker_test.py b/python/checker_test.py index 42167d2..48775ed 100644 --- a/python/checker_test.py +++ b/python/checker_test.py @@ -58,7 +58,7 @@ class port: self.ser = serial.Serial(port=name, baudrate=bsp,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE,timeout=None) else: - self.ser=utcp(9527) + self.ser=utcp(bsp) def start_recv(self): self.thread_ = threading.Thread(target=self.recv, args=()) self.thread_.start() @@ -123,7 +123,7 @@ class port: length=data[8]|(data[9]<<8)|(data[10]<<16)|(data[11]<<24) self.num_to_recv=5+length+2 if(self.num_to_recv>0 and self.num_to_recv==len(data)): - # print("recv:",data.hex(" ")) + print("recv:",data.hex(" ")) return self.decode(data) def encode(self,data:bytearray): t=bytearray() @@ -148,10 +148,10 @@ class port: # print("send:",d.hex(",")) self.ser.write(d) # 测试批检仪 - def checker_test(self,times:int,scheme:str): + def checker_test(self,times:int,scheme:str,script:str): print("批检仪测试:") tick=0 - save=checker_save.save(scheme) + save=checker_save.save(scheme,script) data=bytearray() while(tick-Q5BV?hxFAd(hzS?(QT&aM$4O?(XjH?oQB;>~qhz@6J7Ee$4w! zKV9p2r>nbqRjrbf1OrC{06u&GeDK}-(hX_HtpN%EP(lL$SO5UP#e&}1+RohG#L&>e zp8l@~Bb|$-MR>fdbqWJs(D@VE!2K*17%_5|SwYb$oAQ(WT?cf559vw3-ST)Ou*#cl ziVk}7_898qg6!9}`#OXQ@6Z=GcVPlSw2LehN3PVngZc4^Qr1#oh3 zm-RrSwG0`??XImw*0L1GGe>t;1UUKDm`0RQtKsW~anKqWcrEJT;6ZRyxP@!i*kYWg z8uddDrq8g3yV~`~K*Z5);a-gFV@cbBYipTE;`T9jr?C?Qv!3xT_cGJIr?3N|FY9GQ zc+0{7rGgJ@HI@!3RLVo;%=cVTMhI2rWdMz1MG_&ddu65k3TR0Zas`;-i4F9nKPo*3 zV+t~n2Ju1wlkH$-MylIj;i42^5vG$jwor2IVGx(zRiBNSzfQ0MeYfvLCfLhvkKEV@ zm74*I8eBu(h%V`IP=nspoUN1DzT)?sIr4ljCg>MX=+QGsV2=bdWzEO!ioR}%8HD%#PAOx8q*IZM+|mMv!-#$J)E z*%Fo@b<(o=E%b8a_Jt6ta;)T0nXILd<2tM+c-;1khgXXHhbu(6e{9I_`k(96zySd7 z_dWVwHYC$u8!~Y;BAWv(@ctStH~%Pc{#$(+&8}dgNS~o^^>NT<=n=IM#^d?q2x% zIthP+Jng$f8cE|zl5X8IZqJP9C`{@(1hrO1a6DRcekQ;)TpKxKOGx78aWwTo#Et8Oc%N`{LCUiL)H>m!Ke-b&8ME^(-}qv!BAm9xe8~d zE7xa|IQ_*G5)zU*x(j`UsxvY=g;)&>Mc)A$F4V|pSTQLI4d5JVAZHcip!+#|5*%tJ z4~GQg19ObvK3yDAAufpq5fdutkaddbhY|_q7(HbplrF`%U!YMbNOF41nnE3}!1qzL zz4y`hUQl_g>`SoVCvV5uP;f3&Q^!GDOV}EvqvYmu4k}PI#nf=4 z4^6+%%p6MWE9(^brNRZp(S_-6&)9;K{ zGCeC^$d?>M)AwT{w^R&dt5s+$P(7SpQK^*8iZ<=nT){6@BFAu}jw20?HPdqWY;?PN zG35M=RX!ewGM}`g26-`>OD_*W=@0l8C;-Glbj5^AomL!~Tb9EBn)6!tKE& zs^slvTilGi!>d@b?N@_kx90_I3wG*$FOy@_SB@64ZNrM&O^lgz)VMsgsX1xPb$1t> zS6RZB%Y~EE1h2QHC95W9rUiSR(QHE5QNu9j6d`8wVTYfc1ofB3E=3g~F{^t{**JXoPVYVFJ~C%)qS^yir?-#^swepzLs&o|W) ztPVJNx^{WOtsQMC14b-8?w`KZa!Td@GG$wCk5F8Hb$plZ{An-BgkD|l9Jhn*4 z6Ev}_Z-GCTU_03NA-{d#}2$=q_e-K)yBK z8Sr3oEB6}{LAPyta1hEYPTok+04hA7uyPRBqo%xC$E5&<&82TDt*|nL^UdWJzwakr z02rM}Bxz8A54W;_pA;bDA``BGY!Z)I7^3Y1`iGp(4%+}I^NwBdvr?L@a3}zhi$91{ zx8QflRwc@dos$yD#1#$WF2Xi=^bg=uS*VHwuXOe>)}ydY-s9Rj(FhFC5{v7Ba-F)e zN*h%2z8#eK9PN@xqz}{ypCS7B~U0HKH+;j^F6snqs zi=x{JLtv7P+ppvyKiO=d4ZYGeO1#z)0ZkCtcKzWUd@Lk}Ujy{1yj|rMFP2216PbN) zR742?wCOFNaRWj7?I?-Hg1<5b!H5DRIRT+3wpzcQVRf|z9~8lDsP+lt!uRPf#seUU zu4U!BYyl|PuA5~ZuYnik2G3NW9OVn-Rd-k8{n{aIl+%dN>n%qKLqT8wi032#K(3E4 zTBjG0C=Q+i@CX1$B?1hA3wLq+9${_+qaMzG17oL0W3giWK+~^Br0*NA`+otdt)PjKl9}%RYL`8xIVLpeGOG@CUjP-HN1Q+^k zm2i#oJ_Yh~{e&Fk0Gx1F$I37Oc#R7WBcd}_&JucUE?4zxQ2%tw_fJxT7$IZ%^*xHb z-+lj$)UfZ4f@$HaBIv)qmPRT=rlq z;eBgJ&A!hgTsmut=*?$|_&2F}{!MCTZCS!@Z{;$Y&8s84*@T{5tDBr(?l)&x^jUVx zyFc-UZ=aHj2fY+F&UELW&1vQ*>(6T+**?~LOaGhH$WTgO@4S%j=a9=_C`qCXbENqsq0C$1{Rk`%{P2Uq9#- ztw2-z4?JVaqVG9x{7*H~Y^7%ks0u<{c zWU7OoS7?xVAW%TPbThqfiUEmXAqq~^hJpuD9vo7T7HP;#3p9WUiGeo`f6&J!AM3-Y zkO8c)5qmJT6|+#5PuG}%T;nj-w+@dTSP?7sVDyGjcnCTvu9(fP5l@)3E3{rgd5%%v zpA2Xd@`lDtn#mAC#4a$cawf%`ywDn!-(WK}CJr9tdlXr&oftPG9q zG}Fk1h+Sc#cx&U9@NAZs#kvde($j~;cN+xv)e%J?`E0_)ANE028EdZ$ae<_tDRf7lk^ zuz6A_6TukI`)v1~bZGDpqV|4gRjXr%wXTA3;#8KAa32nuw8V~Vo8XS8RXCMStt=OQ zYN85N4f7tJu%mOOSuVl37t?j1k?*$}QbZ)(VXB}Vf%*dZ-D1>ig@MX2qi0B3;55R6 zGk7l&Tz1#M7L0t`G%(#s@c=}R`zxdqJqf{ZopmS|5ZjpgeCIfaspl%~D`c#6bbghH z=GLo3G^^@vUJDqfJq{h%6E)TQ8Xm2--;-*-8`yGRucK=QTHD^ ztUk9Ki*xa0o(v9XWt|WQ)lrPy`L;&6EGr(~_%u;uyL%v(5e2nTtl!5%jsRWPhi48! z0_npq&|wJmOgs*8`QZAfwLf)B7r>gP{;)oMXF!-!3B0+!;Tl&{2|Mo)k%a497vxQT zc#nci#*Q!{Qde6EQ_${&0=#X029$6ESqx;`US0c4mAp#i!}C3(^lu>l3`r16i@0SV z0KoEl@{jm;;;(0IZT?pzifWf#VLY6!eO>Z;YZurr?o5`~Ll}wtG*45?SVmI|0*=A_1+e zn50ORIZ|PyEv%0%k07L$A(;V^AjrIc@cCeW!J^i$RQHj+fe|)lQftn5`1z5@tsm`? z?#QEnq3kkIs`)lzkhi0{dyvR>iRY8+hbdIfw(1!gS)rAwokYs z>ZTT!dPq;uX?MtpXoF&{oqFq$B^w1w?d;XO?ysksmIi8LzSouUp>z8u-`S@;$33+a zPa}G>7`M13>MA3Q{RG)-S68Py2k&K)7mUL

(`>KH2y*%Dsvr|B{z?m+HLVI5_`ut+t(^ zh5cWZoqs!+?)OM*?5J5c15&`bCrstNdRhYfEKLeZ94<1nCr_F<`aAiD5uidgYg>Sy2E&sgwb zyJNcDo3pdc%~hzuH5Ta>yc%Q)NR#?)QbaP9tjHJueuVZJw@`YeR1l3k3MdPh{~aZ^ zS)6YjXxKh@4z!$wbM#52DCibXqQyTWI zHgD%?WEh8}&PIS~4+c#3^F2VeTV1=T3C1~oI)v@=J9 zwG;uEYS3rqR&rAq3Q|JcApWId)KY&kyY<^f$46v#QM|Pp4h%Ms>yJ20mh~KGwfHIo za>M$zo?6e(N*;~0dxYobd%evf%g4!IkmEDT2{6BJU0q$C^*b%~x?Z0CoYNe$_V#>f zi@UqnH2U?rr)`E?`Z~G7pNk!1<=-Gs9>C2Syr_E03|s7J^>L8W2uIKvbhIr6oYTgC zQhboGM@oiB)Ap4vcHUXZo1tm>^x;fdtbPc&f{`aDYn)#!sx6|I(Ol_A}Ao%xT2u=u>wpq3XHpxKRC!p_@R zzqd^C_Tcr7IGMF)Dh+>SW;%3OL?k? z0v5hH0&qXn0s-H<2r^s2u@b1_l~rHjMxwZzG~ea}D!jwi7}AA0%M}?YmK)gtqgoHb zFX1_7^t~VnjT_kY9Ul6_>_6CQm$P%9t45qS8wVb_=0<)gb3A-jdnmtP(MBjOC;a^D;*X=X zGGIgY1PcJr(E=xSBqL@u%mH zme)Ze$1x=oZB`%MaST8?2dCo4h?zVa9zyDX^pNZ#_X)KH?LpN`0SE2FeAdq^ZhDDr zugE`&P01^6_8bJt$2J^06^(J;rrEbOy}Yzj5Ky-V=5=o?#*h+tw~uEBd?b|O!OM7d z?76;{<#Vxii@g|G*y*n9SB%L*9`_d19ly`6@7~0QFp>!p#t$@ah6tyYJS2B0`r@#RPzq36ZaId5Af_QED;XtF0KM6;QZXrKU)$QpLM{E94 z_+E?&UmINm_c6TNh^$z4mOXhcX?!(cPaC_Z3dEAR__^e&CVEhD@~I==kb3NF^oDh|QL6QrO2 zT&@2cB#*18!ZC}&ED&C^(-NGvg}g98eNA!r{P0)}$JLlmELt)F!4!CVt$n`eym54r zW8x!-^P~Jh{HW1!D6-a<#)=ISMGCc$v&qR|S{mbSloV|tL{Q@U(wT*QsQ?g4s=N@~ zW6RcrJAV%KTOC?<5+a)x7ftBKoIp3{U12RPhcq)2EbU3;__3KIB3U;cnxvk4CIkbJ z$|~w}_%9t+XbIv_%252m-MBp?P&8q7nG{@#4QDd^;B~jlkeT_!*!Y+!selvc;SPq{ zCRv4H^;`1QK{iBf-}Md11%;2zF_^ZKV|=xz`z*iC6yghuYsc{lqG>#cYGX-K5k2W2 z5_G(gp2zbk-+a8ip`})Skz)mTd$pLC1OQ(Zmaox-U(cG{n#O$JG$3w^#=wsapH zlS0|wI6}7gr+Q8mQQhDfK{2dO{$!M)SKgF32)E?H%+FO;_*7r!rg&w~JK~C&YhTqc z;SoP?cD!NZ?GvLUEAZAfadlbI*Ih-Nq`+o#?~f;KcFB@Y7+O(M>5B>3d^OpIzg9mHRZ4T9 zt^j)|oxVN@pxT38gi&^%%B|{d_sZBjZSD;J1Awx!V{TRfvnH$J)$; zkBcw|n4$;9cMZKaRokrufgX}XM+(l zX$~ZKmNw{2xPCc}2uWiYkqkj~Dq zqcJbSbe#yzqEn3>F83kPi5m74kjoDJ`MMX`#_a>>7}4SN*>M0Mi`dMOxivR`L;^M8 zhM8Y0LPQgcd2+ao&2@-^clQlquZe?Hw>+}|eN0N&*4jUbox0@UuBoIyH-v2l!kiky zvcFRE`eFdAk&I9>x`;cNHE69j=G4&_J{ig}?E?cAq=O^(9o${%3q>wOCl=hUmC?KE zcZQ!+!aLmZQY)aXM9+3XF+m~Cs2J!p2-+95kv^p;9E&f2JtI93<>-s{Qrw2_*gdgY zVD}wmjMprXcxkn>EhwN{_3nt5vIdt>G(|sjW|C69CW$q0eLMZR6bu#}(V6Bmd{n@c z%;|usqnxV7EQsAQ{xf}JJjTqK0$o1#N6*ybRbBIDigp<{QPPR9j=8GJ zR1S=gju%1Kl0*t6nk2L8t}mLHp9+h!R!rbC;zfR`Nn;*E?u{iXv6LGl$`b5{&#Yj~ ztBbtiW4cU-WZTw!FZi1Tu=T?OXHKa;O7i@3A}Un}UNS!!uKO5C((_{?S)+%FzNp3- zd?xp+_)_d-E3p&?f&?FK5&O}5pB5U0FW3c$Fi?f`1U7Ul44mW+aSUF_qk_YwqwDZ4 z+d<)|K`iRpyCeBnd}qr*q(ai7siRdhcVNTkqLXLCJD&q)e<&|owG|MB}^HD-0ef!fE zt*onUSc7ZQJ*AHr=~_7cKzMC*W2TRp6hdI!J?|046OzLtjRyNU`1m(iN#jTc1zP$_ zg(=pAejG4Kg%UI@mELlfVjHAJ;&MF~TQeEV(pvsKp0l$l$h{ZbU^|`=@b)k<;NHNp zeu^K)h@3lgT*RGwZlkRqk|8fsyV%O32{u@4QfVem2tIL1Vrm~65N;khaVVV3QWexP zkG~8UN?PZy?cZp}gp$085;X$NLoMvGhPW?)=3kt-`z>N0xfZE?6~HxxU^rlv6{(>~ zybu5QGt;vqSt#eYkim(@x(6_XZV!m2h7+ zj0|ASt34FusFl!#Xg5WbnoV65WH+cx!@MfN=Y(4G+F$$HSYuiN`a?s+K#IHD7S~w~ z;xa2$l1pWn8ZJq=VE3HAmm_Bj(lG$7{pASjnWk7WvqPI{Q=O!W^E4Ht`L7e~YTnneEq&E2HUf;-G}=eYR5-nU64Z|S{0IOGBRPzsIJuh?k}BD|nbyY( zo?+0yE_7cT;N=vjIGT2t;{9CPP^o6)lC)`5%CSWUP8PO)Wu&t4vFe`x!qN)w3E;OK z_8iox@sU16xM8+M<>Bk6LHl3PUQQz+UlB}mFo+LP{GE)O!@BHfkQVMXsY5Tng`DX} z>JI3_?p`UAd3O}_3MG4HR@?M)`0heO9n-+rwqvdZ>-0fQEHr6Yz)CnqJ!{czp^`lr zqnMiRyqy$0aJOk~sOwPDSM49=Z5Y$lWd*k0#qZ6k!$wEF9OdO)}s_hJ8#F;$lX1ZQ?B zeN08moh)$Kgi>9*NMM5$Sf<#3e+V559YmlD&ZL7*7=m&@Ox0hfn6Xx`727ue&ipY5pW?Oe%kZ`o}K1&>Z6 z?#A=O>0;*=R$LM-tH8Sv`(`!#%I32jt6*VEdTvXNv0C<_TGYoHTK6Sd*CUyLri)BE z7L#!r6O}L{l>no04G#uI8gLj(Dhn9TG+}+QOx!7s+P5~+ zWm`N-ni|OK>b6vTcnp>j$YRn!&WQcDPT zj_nzAj&KQDlutmQ`39RP(dIMRUtlPo(2Itf(UY{4nCn16A@&uLsO#X)A_SW-sNI=@sgwRldn@ZE6p1+3Nfs zj2SQ`AOD3}PMYfA&&ettwr)^YT=ixt`PzpT1TR>?yri zGV8}~3}AZA2XdmZO<;eb>6BQzU{`9YCQK+HeB3e}YuYUTMOP=g4PL)q;C26p07+M-(=JqEj{LAJd{(ZTBi+9#H+_cvaL@CNa{Pfq}DD znOhu{6nBx8{mDru(Hao_5^+US-z0O35(tXwJ`>d{9G0s|h!pl{9~}Q6+a7gU3@lxO zvHQ%uz5nuh!8O(^=}a1Q7aAGck3Y<*U5ymVb2iO!pvoTXZ*K`J9;i>qOb`>nN;=h4 zbJ;14J$Tsqpkg^s($YaVwpxB9+pI z?d1S1WAD>HLcTdk(AM^NnpjG-KWBdU7AM8d{qe3vDn}+-_a!vubs*`4(f5w=Se0mC zA4go|^ib?F8a=A8N{6E9d`SYHgf1J1aJ0Y)UFu}atlTgUP> zxav;}+Ge{)RpnjvfO8v006&IiiAmTD4YB?SNLg@pR3-q>8M!%k2%L+wINdW-CSTy%%qb_uIvqEMylo2ZBRa!n)_{{Cq|xAEEd4 zRcC@x%gkl_+rwe?dK&{+9D>K|Y&Ksyx7+JQHRd`WLkBwq!QlmQc!==)Ajr}#@`4c( zzvz|&S~t=(3Iqa(Dd0|76;vxj*Qm=;e9^TYoCSb-adjgjKHn-Qh0Y2n50Zy&809>+ z(`DH=14^J@D}F|M%>p5a4VdMERLR74%t`Yd5~#t_1W@L38?;`|bt7_w?P zHvYLunx~VTklG>TCtaRs0^H%}q|ma74_i#kR3EbFei=Ps9N8J^wTs*hf2RB}B1HpD z-FV5A4#dM|?L(f9ny-M7mN**?P_b)JLOS$ehYWG;(_J^JE(k;W zCL=Xqo@kHX*h|rhBo-=fj1&CnPKeVNt=A-&Ivb@$llTy4%V&GYX8osdT3Lzp6cG!> zXE$Tux3aHC?a1Lj%=^Lw*}c}o_AjJeSdt{ROkm5pUJ!B5G1B|E!0lc<*FD#r*L&ME zl!qx!>xLoCkL_*y=!@{8`(rD4SoL?3N7Spqb6-F#jJ}7NFvd_2Yhr9kH1Kbn;6Ru0 z<^fk=Z9(-?r38s!=X`~s6Kqf_fUd^<;xK*2?q|<%A52Q>8Z)ffZ>l%_r0ZaE=nA5k zI0`HJ0_#!tb~;cc>@}-d?p00e_M{6S1Eyozr;GM~66-UNdL7-Tc5>4g6Odr*WuP(I zg#~ehqc)YkxRsku&EZ&6oRSGl^|Dg;G#Vr2E=k0m%-R{)x&|WfQ`euV4|I$7<8+fj zB*=q48!Y)Sz-~qC7IwwXV_eJokD4CN0O9FEKL;pjs0MK=JDI;8k!c-iJEs&9j`abA z*gqvoy-vHqYN+)^~%}K@yvgF*%N7sQqFqRmh zDrL_n23zD78mk<<2IaAgO`zScvXYN#Vrk%dIc54W z^6SLzne=Z72I4izp(t1r>DUYy_-cI^B2k8}ya}`~qF&U#D@_$!+wqe-odQ6^q{#&O zMdB+j{K7Gk`Rd&^hK=rNlvO5mwT`?h%%-<-b$Q%vswL3<( zTJMU}i(3`OEZqph)J$629j&A_4JO}XW^NQ?eifC^43)zp^9B}&9i2d9tX`-Mc2ewn zD2f0{x;f@<{Q{ovnB{0g>?|LbD6P;$S;)N_LPl~mF8Ua+)=CQ3GV8+<&)V#rS?JP| zz(IVurf}t}Ln@er=bjct4e4Euiluw@wJana^XwS*09QSDEgxA^!06X~ z+SO`Lc(h&N@7maLVT}}w46=`D*AHFXZ0InLHN!`C3GMqczTo&UX2VGsRP#qPZC1A$ z{gs|2n^#G;G6#=*2}0F!4m)Gix)R!=j|Y%!Dun-B5BDap9*uXtLIL@&YfnSS+RDMu z%0XMn)yB~N>+jm;XzZ|67sGpR(95@hWuR@Qva&Kbh9`|i&J?1}DRiZc#jrl*vnPcw ziM%|4pM-@4r~Q8Vaa7!zj#i2RBuH&F#IXUVWQRn44L;_H{!R2+HF$P~1eS4@4lF<0 z!M!LfVxnAmub(pGBh;Au7dhCGR4B=~sX%q%PeF|Lf-*f=F6`sy4GwI6;ieYcs_pmS zxrxb%+~bGWOkx0k8dpsi+%KI0_o9->g=5BFUVi3K3yP+dLQcf$UZvB}YpR+-8PHc(l!TNff&ktcKogs(8m|q;({)^4 zWMH$dLZR#j>63#N++!VxZw#`F67o})0Q4-Y;Lkldx4JqO!D{l{2cp(kY39cUpXZDa zFNOmL^X+4*WmE1-FqQ~9ta}HRPj57=A=RD;ld|23Ij!i(`cJ+0H%`6Vyl>&r^}g%>1Ik|=sehvU**f+&3K7(Q zMER?c>`#e_8)qviZ~ePZ8p8a|4XO{>1;0B>qJB zGc)-cA&TT*2>(A%`P1}IZv3~Y1leDve=_Ai0sf4-e*-WA{}F@#H2gC>{cR{f4FLRy ZU?nFB@gB*3=U(sth4&n6l;-!Z{|B+@w$lIr literal 0 HcmV?d00001 diff --git a/python/file/checker_ye_cfg.json b/python/file/checker_ye_cfg.json index b61fbf5..be3a089 100644 --- a/python/file/checker_ye_cfg.json +++ b/python/file/checker_ye_cfg.json @@ -14,231 +14,6 @@ "TimeOutM": 40, "TimeOutUI": 42, "TaskIDMax": 26, - "MajorErrInfo": [ - { - "Info": "执行成功", - "MajorErrCode": 0, - "SubErrCode": [] - }, - { - "Info": "检测器异常", - "MajorErrCode": 1, - "SubErrCode": [ - 21, - 23, - 254 - ] - }, - { - "Info": "主电容异常", - "MajorErrCode": 2, - "SubErrCode": [ - 30, - 31, - 32, - 33, - 34, - 35, - 42 - ] - }, - { - "Info": "接触异常", - "MajorErrCode": 3, - "SubErrCode": [ - 27 - ] - }, - { - "Info": "桥丝阻值异常", - "MajorErrCode": 4, - "SubErrCode": [ - 30, - 41, - 42 - ] - }, - { - "Info": "芯片异常", - "MajorErrCode": 5, - "SubErrCode": [ - 22, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 32, - 33, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45 - ] - }, - { - "Info": "其他异常", - "MajorErrCode": 20, - "SubErrCode": [ - 255 - ] - }, - { - "Info": "通信失败", - "MajorErrCode": 208, - "SubErrCode": [ - ] - }, - { - "Info": "脚本执行失败", - "MajorErrCode": 209, - "SubErrCode": [ - ] - }, - { - "Info": "数据长度与方案不符", - "MajorErrCode": 210, - "SubErrCode": [ - ] - }, - { - "Info": "方案ID不符", - "MajorErrCode": 211, - "SubErrCode": [ - ] - }, - { - "Info": "检测项目不足,无法判定", - "MajorErrCode": 212, - "SubErrCode": [ - ] - }, - { - "Info": "数据不合规", - "MajorErrCode": 213, - "SubErrCode": [ - ] - } - ], - "SubErrInfo": [ - { - "Info": "预设电压异常", - "ErrCode": 21 - }, - { - "Info": "上电充能错误", - "ErrCode": 22 - }, - { - "Info": "电压设置异常", - "ErrCode": 23 - }, - { - "Info": "UID扫描错误", - "ErrCode": 24 - }, - { - "Info": "OTP错误", - "ErrCode": 25 - }, - { - "Info": "通讯电流错误", - "ErrCode": 26 - }, - { - "Info": "基本电流错误", - "ErrCode": 27 - }, - { - "Info": "读取芯片ID错误", - "ErrCode": 28 - }, - { - "Info": "密码验证错误", - "ErrCode": 29 - }, - { - "Info": "DAC比较错误", - "ErrCode": 30 - }, - { - "Info": "高压充能错误", - "ErrCode": 31 - }, - { - "Info": "充电电流错误", - "ErrCode": 32 - }, - { - "Info": "高压充末电流错误", - "ErrCode": 33 - }, - { - "Info": "低压充电能量错误", - "ErrCode": 34 - }, - { - "Info": "低压充末电流错误", - "ErrCode": 35 - }, - { - "Info": "写延时错误", - "ErrCode": 36 - }, - { - "Info": "读延时错误", - "ErrCode": 37 - }, - { - "Info": "芯片程测错误", - "ErrCode": 38 - }, - { - "Info": "时钟校准错误", - "ErrCode": 39 - }, - { - "Info": "写工厂信息错误", - "ErrCode": 40 - }, - { - "Info": "模拟起爆错误", - "ErrCode": 41 - }, - { - "Info": "芯片状态码异常", - "ErrCode": 42 - }, - { - "Info": "通信电流错误", - "ErrCode": 43 - }, - { - "Info": "反码时长错误", - "ErrCode": 44 - }, - { - "Info": "复位放电错误", - "ErrCode": 45 - }, - { - "Info": "检测器执行异常", - "ErrCode": 254 - }, - { - "Info": "返回参数判断", - "ErrCode": 255 - } - ], "TaskArray": [ { "TaskID": 0, diff --git a/python/file/judge-xt.lua b/python/file/judge-xt.lua index f25d615..b34b376 100644 --- a/python/file/judge-xt.lua +++ b/python/file/judge-xt.lua @@ -22,13 +22,10 @@ --- 读取方案配置信息 --- print(cfg_name) -check_cfg_file=io.open(cfg_name,"r") -check_cfg_str=check_cfg_file:read("*a") -check_cfg_file:close() -json_table = json:decode(check_cfg_str) - +-- 2023.7.5 +-- 调用者可以设置 check_cfg_str 变量,此时脚本不会使用io函数而直接使用 +-- 如果 check_cfg_str 为 nil 时自动读取 cfg_name 文件 +-- 改为调用main函数来运行脚本 @@ -273,7 +270,7 @@ function XT_Test_PowerOn(task,err_code) else -- 充能流程正常,返回第一个值是电压,第二个值是充能时间 ret_value=find_return(task["TaskIndex"]+1) - prints:print_a(ret_value) + prints:print_a(ret_value,2) -- 电压无法上升,检测器异常 if(ret_value[1]range[i]["Max"]) then -- print("task=",task["TaskBrief"],"out of range:") -- print("err code=",task["ResultErrCode"][i]) @@ -481,12 +480,15 @@ function judge_list() local ack=find_ack(i,acks) local task_p=json_table["TaskArray"][i] local ret_value=find_return(i) + -- print("taskindex:",task_p["TaskIndex"]) local err_code=judge_task(task_p,ret_value) + -- print("err_code:") + -- prints:print_a(err_code) if ack==false then table.insert(err_code,task_p["ExecuteErrCode"]) end if len(err_code)>0 then - print("task:",task_p["TaskBrief"],"err_code:") + -- print("task:",task_p["TaskBrief"],"err_code:") prints:print_a(err_code) return get_err_code(err_code) end @@ -519,6 +521,14 @@ end function main() + -- 读取方案配置信息 + -- print(cfg_name) + if(check_cfg_str==nil)then + check_cfg_file=io.open(cfg_name,"r") + check_cfg_str=check_cfg_file:read("*a") + check_cfg_file:close() + end + json_table = json:decode(check_cfg_str) check_erryternum=clac_cfg_errbytenum() local err_str_table={"检测器异常","主电容异常","接触异常","桥丝阻值异常","芯片异常"} local ch_err,ch_code=check_env() @@ -554,7 +564,7 @@ end -- 先返回错误描述,再返回错误码 -return main() +-- return main() diff --git a/python/prottcp.py b/python/prottcp.py index ca03f77..a041b7c 100644 --- a/python/prottcp.py +++ b/python/prottcp.py @@ -147,6 +147,8 @@ def arr_from_int(num:int): def scheme_get_task_range(j:json): t=bytearray() return_count=j["ReturnCount"] + t+=j["TaskID"] + t+=j["TaskIndex"] t+=arr_from_int(return_count) t+=arr_from_int(j["ExecuteErrCode"]) index=0 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index e37a5cd..4aa4ab6 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -132,4 +132,8 @@ 2023.7.3 检测错误码 解决tcp下升级方案死机的问题,原因是内存没有回收导致的内存不足 +2023.7.6 + UID转存储码特征码从*10000改为*100000 + 赋码仪接收上位机的0x81,0x82回复 + 添加错误判断,未完成 \ No newline at end of file diff --git a/source/coder/coder_judge.c b/source/coder/coder_judge.c new file mode 100644 index 0000000..f18701c --- /dev/null +++ b/source/coder/coder_judge.c @@ -0,0 +1,215 @@ +#include "coder_judge.h" +#include "dev_flash.h" +#include "string.h" + + +// d aУظ +static void c_insert(uint8_t *a,uint8_t d) +{ + int len=sizeof(uint8_t [6]); + for(int i=0;itask_num;i++) + { + t=&s->task[i]; + if(t->taskid==taskid) + return t; + } + return 0; +} + +// ȡindexIJ + + +// ȡindexΧ +static int get_range(int index,int *min,int *max) +{ + const scheme_def *s=check_scheme(); + const scheme_task_def *t; + int index_p=0; + for(int i=0;itask_num;i++) + { + t=&s->task[i]; + for(int j=0;jitem_num;j++) + { + if(index_p==index) + { + if(min) *min=t->range[j].min; + if(max) *max=t->range[j].max; + return index_p; + } + index_p++; + } + } + return index_p; +} + + +// ȡindex +static int get_data(const uint8_t *data,int index) +{ + data+=16; + return data[index*2]|(data[index*2+1]<<8); +} + +// ȡindexǷɹ1ʧܣ0ɹ +static int get_ack(const uint8_t *data,int index) +{ + if(data[index/8]&(1<<(index%8))) + return 1; + else + return 0; +} + + +//-- 쳣,1 +//-- 쳣,2 +//-- Ӵ쳣,3 +//-- ˿ֵ쳣,4 +//-- оƬ쳣,5 +//-- 7 +//-- ·8 + +#define TASK_RETURN(task) {\ + if(task==0) return 6; \ + else index+=1;\ +}// Ҳ + +uint8_t coder_judge(const uint8_t *data) +{ + int temp,temp2; + int index=0; + const scheme_task_def *task=0; + + // + task=find_task_next(index,0); + TASK_RETURN(task); + { + if(get_ack(data,0)) + { + // ϵ󣬼쳣 + return 1; + } + } + + // ϵ + task=find_task_next(index,1); + TASK_RETURN(task); + { + temp=get_data(data,0); + if(temprange[0].min) + { + // ѹ޷쳣 + return 1; + } + temp=get_data(data,1); + if((temp>39000)||(temp<1)){ + // ʧܣ + } + } + + // + task=find_task_next(index,4); + TASK_RETURN(task); + temp=get_data(data,5); + temp2=get_data(data,6); + if((temp<10)&&(temp2<20)) + { + // Ӵ쳣 + return 3; + } + else if(((temp>task->range[0].max)&&(temp<1500))|| + ((temp2>task->range[0].max)&&(temp2<1500))) + { + // + return 7; + }else if((temp>1500)&&(temp2>1500)) + { + // · + return 8; + } + + + // uid + task=find_task_next(index,5); + TASK_RETURN(task); + if(get_ack(data,task->taskindex)) + { + // оƬ + return 5; + } + + // ˿ + task=find_task_next(index,6); + TASK_RETURN(task); + temp=get_data(data,7); + if((temprange[0].min)||(temp>task->range[0].max)) + { + // ˿ + return 4; + } + + // + + + return 0; +} + + + diff --git a/source/coder/coder_judge.h b/source/coder/coder_judge.h new file mode 100644 index 0000000..c2504c2 --- /dev/null +++ b/source/coder/coder_judge.h @@ -0,0 +1,16 @@ +#ifndef coder_judge_h__ +#define coder_judge_h__ + +#include "stdint.h" + + + +uint8_t coder_judge(const uint8_t *data); + + + + + + +#endif + diff --git a/source/coder/coder_lib.c b/source/coder/coder_lib.c index 393b691..b4d1f1f 100644 --- a/source/coder/coder_lib.c +++ b/source/coder/coder_lib.c @@ -129,7 +129,8 @@ int coder_uid_to_save(const char *uid_code,uint8_t *save_code) ymd|=coder_strint_to_byte(&uid_code[8],2); save_code[2]=ymd>>8; save_code[3]=ymd&0xff; - feature=uid_code[10]*10000; + // 文档 YM-UID设计V1.2 - 2023.xlsx 规定*10000,实际是*100000 + feature=uid_code[10]*100000; feature+=coder_strint_to_byte(&uid_code[11],3)*100; feature+=coder_strint_to_byte(&uid_code[14],2); save_code[4]=feature>>16; @@ -174,8 +175,8 @@ int coder_save_to_uid(const uint8_t *save_code,char *uid_code) ret|=coder_int_to_strint(ymd>>9,&uid_code[2],2); ret|=coder_int_to_strint((ymd>>5)&0x0f,&uid_code[6],2); ret|=coder_int_to_strint((ymd)&0x1f,&uid_code[8],2); - uid_code[10]=feature/10000; - ret|=coder_int_to_strint(feature%10000/100,&uid_code[11],3); + uid_code[10]=feature/100000; + ret|=coder_int_to_strint(feature%100000/100,&uid_code[11],3); ret|=coder_int_to_strint(feature%100,&uid_code[14],2); return ret; } diff --git a/source/dev/dev_flash.h b/source/dev/dev_flash.h index 3867314..511940f 100644 --- a/source/dev/dev_flash.h +++ b/source/dev/dev_flash.h @@ -85,9 +85,9 @@ const sys_param_def *sys_param(void); __packed typedef struct{ - uint32_t max; - uint32_t min; - uint32_t err; + uint32_t max; + uint32_t min; + uint32_t err; }scheme_range_def; @@ -95,9 +95,11 @@ typedef struct{ __packed typedef struct { - uint32_t item_num; - uint32_t err; - scheme_range_def range[16]; + uint32_t taskid; + uint32_t taskindex; + uint32_t item_num; + uint32_t err; + scheme_range_def range[16]; }scheme_task_def; // 方案参数 diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index c53d27a..aa788c4 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-07-04 09:17:01" +#define BUILD_DATE "2023-07-06 19:01:21" #define SOFT_VERSION "0.10" diff --git a/source/task/tran_for_coder2.c b/source/task/tran_for_coder2.c index 8dcd71c..c6de619 100644 --- a/source/task/tran_for_coder2.c +++ b/source/task/tran_for_coder2.c @@ -11,6 +11,7 @@ #include "coder_lib.h" #include "PSDGenerate.h" #include "mystring.h" +#include "coder_judge.h" // 这个文件解析跟赋码仪相关的命令 @@ -93,6 +94,8 @@ static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *e emit tran_send_signal(w->u.p,0x82,arr_temp(a)); tran_set_busy(w->u.p,0); g_self.step=0; + // 把命令字改为0x82用于接收主机应答 + w->u.cmd=0x82; } } @@ -123,6 +126,14 @@ static void write_del(ucport_def *u) } +static int write_uid_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) +{ + DBG_LOG("recv write_uid end signal."); + return 0; +} + + + static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data) { if(arr_length(data)<140+4+1){ @@ -134,6 +145,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data) u->u.p=t; u->u.del=write_del; u->u.doend=write_uid_end; + u->u.dolater=write_uid_dolater; u->addrs_num=arr_get(data,0); memcpy(u->year,arr_data(data)+1,4); DBG_LOG("coder, year=%s",u->year); @@ -329,7 +341,13 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s ack_d[3]=(errcode>>8)&0xff; ack_d[4]=(errcode>>16)&0xff; ack_d[5]=(errcode>>24)&0xff; - if(ack_d[1]==0) ack_d[1]=ack_d[2]; + if(ack_d[1]==0){ + // 先判断主要错误,如果没有主要错误,则填充为子错误 + ack_d[1]=coder_judge(arr_data(data)); + if(ack_d[1]==0){ + ack_d[1]=ack_d[2]; + } + } }else{ } @@ -342,6 +360,8 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s arr_appends(a,w->ack,(6)*10); emit tran_send_signal(w->u.p,0x81,arr_temp(a)); tran_set_busy(w->u.p,0); + // 把命令字改为0x81用于接收主机应答 + w->u.cmd=0x81; g_self.step=1; } } @@ -372,6 +392,11 @@ static void check_del(ucport_def *u) free(u); } +static int check_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) +{ + DBG_LOG("recv check end signal."); + return 0; +} static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data) @@ -384,6 +409,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data) u->u.p=t; u->u.del=check_del; u->u.doend=check_end; + u->u.dolater=check_dolater; u->addrs_num=arr_get(data,0); u->type=arr_get(data,0); // 默认失败