From ced7682f4aafef946fe397e193d4817a77e6a8f7 Mon Sep 17 00:00:00 2001 From: zhangsan Date: Fri, 4 Jun 2021 01:39:41 +0800 Subject: [PATCH] =?UTF-8?q?v2.0.3=20=E6=B7=BB=E5=8A=A0RFID=E5=8F=8A?= =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E8=B7=AF=E5=80=BE=E8=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- keilp/cc_as_stc02_gsm_main.uvproj | 5 ++ .../soft_gsm_main.sip_sym | Bin 729512 -> 512432 bytes .../soft_gsm_main.sip_xc | Bin 164456 -> 168504 bytes .../soft_gsm_main.sip_xf | Bin 164456 -> 168504 bytes .../soft_gsm_main.sip_xm | Bin 324 -> 324 bytes .../soft_gsm_main.sip_xr | Bin 164456 -> 168504 bytes .../soft_gsm_main.siproj | Bin 27080 -> 27736 bytes .../soft_gsm_main.siwork | Bin 92949 -> 108932 bytes source/app/app_common.c | 18 +++++- source/app/app_common.h | 16 ++++- source/app/app_drv.c | 61 +++++++++++------- source/app/app_task_485.c | 8 ++- source/app/app_task_gm35.c | 21 +++++- source/app/app_task_gm35.h | 1 + source/app/app_task_rfid.c | 43 ++++++++++++ source/app/app_task_rfid.h | 17 +++++ source/app/app_task_tcp.c | 5 +- source/app/app_task_wdt.c | 1 + source/app/main.c | 3 + source/app/main.h | 1 + source/msp/UART3.c | 17 ++--- source/tpc/tpc_ccmodbus.c | 5 +- 22 files changed, 177 insertions(+), 45 deletions(-) create mode 100644 source/app/app_task_rfid.c create mode 100644 source/app/app_task_rfid.h diff --git a/keilp/cc_as_stc02_gsm_main.uvproj b/keilp/cc_as_stc02_gsm_main.uvproj index ad5c857..0faaf8a 100644 --- a/keilp/cc_as_stc02_gsm_main.uvproj +++ b/keilp/cc_as_stc02_gsm_main.uvproj @@ -421,6 +421,11 @@ 1 ..\source\app\app_task_wdt.c + + app_task_rfid.c + 1 + ..\source\app\app_task_rfid.c + diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym index 511b6f6f492ee75517fd19f3eb65e3989d1c8822..aad6a627ce71b231f529cab6b208cb60c2189116 100644 GIT binary patch delta 4411 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 delta 6177 zcmeHKeQ;FO6@Pc%efwgv3omRK0wiU@6+sb03lhpo5)vA~KwdD^Xn<^hAdwI@VM8j2 z3CNeQ!V3p;pjFuzr+$nKn=WH)i*~8B3I-;$w0>5D#Th$=X%Ou=gDpMxz6V-m#?JI# z-prkQ-~BlEeEjb3o*VBR@!V_U(g*8`vQSa@UsDw&D@{={yV46?7|&+ht15~@y^5@{ z;I!L^;dfLIf*SW~G_r<@_&$UaYA59H z)||FMK8V-y#9?nfgZv5(eIpE*xIY5|1EXO1GvMgJ7$loH_H5Bp zG@)+*B$3P*r%}TVchuEGcn62f;X#NE zi$MR1eDF_j!=g#`*msF>=oucx*0qeMk0t3(QMppzf(17+AGBsg(Qk6w`eigOzIw>c z?!^B26bE6f=oWQ78GX%eQWA5Hxi~!Wy(n56bq^YIc?urt(9&Vfh+SyT;bilx#%{lb z@d_8mzSV96d**TjS_g4>*&oH&7q&pn{j}5lG+Y25^k3o-3=l>Jx$NQn z&hUOY+*-$>KM;jb#2$?~qcOZ-sXmC^WI=y%AW=TLh@tthD*%UYCZn1uIN>oC#42r1 zHq$Ec?MbAMy_uucPevO>ZmvzIPKFcibq|63PdJ2bi(>LTDI&mED8@uBqMk6u_g#&# z*oi~dBpGCE{fK^^s|$)qCl*cm1;dUNLVqL!i%z=@NY3UEo*IRCh^(s{9}ODNKh1)8kmI5oDHT~u?k7^` z>;WhnFj6nV_{#t?$J_6%#UfaPKuKQ#lTA*NB5PrF!6s;+m!HT5D z{zY^sa~6_{*W$Xqh1RurZo{Hd!3{1~Ew;tncfl*!x`baHZ7Seb2ds(izqOpT$lxc3 zsod?B@qn%Yv(cPQ<_gYwK-~UPduOIN-2(=c-(6Kue}7#~)!j9bSunC_I<)55Tq};4 z_#TImuM$Rx1K|)+LGIWwl87=g)>YT9s{gO`OQB#(5PJrwwuc`VDFE97rxs6zg&>X%z_P#%~Fw_q{w8+nZ7|} z*H^M4RRv2{w2iz|Y$L_(aK!DBM_pRuSjKk4-&Wh=EGdq-mZxW26*oUD6@;p%^X!yQ z_+F%F;#&g~X81^Zs*Gs92@`$_3rzWZ-^`uBCF=rR1*%#F{7PJ|0j;v zby$5-&H+}KQ)N!Jc7oFTHAhKilK`xigEFrA55w$FEpzPXPI};m|Ij;SUSfnnNbcSyC$Pm zOQgGeZU(+F&@~Q9J~zQg<%x5zFJ%}WPf{btEO8y!Chc=H(v-0<;`lxYy+s-05-mk; zIU9~0Pq5peYa6lQo0NfmYF{no!Up;(U_wtPwl;HH!+G@UgD-mMLcc?&M7u^$#TUl2 zRCw`(1)=r!+V9&-mC4vKp7|1?lP|gi>jxm`lqIYSz*%b0jURx$f1sStqjL<;V}2<4 zBjrN$>e+po6e$kCq0@A&aI$ClpJ*DRM%JInf%8dJFEw)ZX#v>u7TrN>sVDbs5>A;n z=B^`A=iVlLA{@_&pV&JVm`$`v3;mS8OPfq2St;+4lUixz;rC>skFkenIQ%}n64q01 z;4c>PhpF*4HD0DhBKkqp2cZs1x_|C??_=S&MDWwIgpvDQ8m4nrDxd(HE}LK-@WPqP z&+c|oei+YkbYPe8k2d@e_=qxUVXea~6XspDRQYs&sJsMkp z)_PUL+uUrO)5xscN;wL&S3H_aE_^(N9HTDkC zcy}^|MN-oiQLsd;-Ab@K&&Qq|Cf=23ZC7o4jKK4^u>?yKhISts&**J3^EYZ>YgP`U z;_A-IQ8Txs)i^>FWjN-&r0&Dev#OEyjMK}N@mnvxq*CGC7hlqC0#zu+C*dKbQ`$8!dEuwo$|RLrfzno?!bo4)NK`U%zvIT{3Z6%+%2@! z^4m+-;;9bRhv%qIybJ8kN1(x^v|uasg>QA+eYIGyjf9#1S2`<|J^B%>QPD| zv&pNf>c^Ll(VC;5s0KS{kJla7zaW!O@&In@kt%a6S;PF@!4rCfcjff5>*cx+u4CXj S2Cie^ItH#|;QztEHufJx;T<*r diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xc b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xc index 4d5fdedeaeaa4d893558bcd6a6b8d959cae35b26..47610cd10f6e55b82c7a8ce7efe1889ed9731b55 100644 GIT binary patch delta 3171 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 I$+s5&A0hcy6#xJL diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xf b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xf index 4bd335a707b29e5b654b5dcfb865002652e3f2c0..07582cedc017794d5ac8b8a428cd8c95ab0c362e 100644 GIT binary patch delta 2278 zcmZ8ie@q-{8J_QBc6WAmcXoDRmt|RC7s}7$$Iv^9r7edP%0c-JZK2rfo|^ul{XwJc z6;sS|)}y^N!tiLnRIQ@Xq=~&kUE`|7JG>Y}(|SkGKTPiQpt%^EdU{k(C3+g)*=>z+ zlF4M|`{sF{_j#Z9{qCPrfAk$S=+h&fU5D9PuQ*W2f|#jyinUf|N0WS1=v$c~p8g!Y{YLh(1m2UQ__8;QGFvlOqS&k| z#<(X8qbUzJZMjUwuWapEiX`Kgr*kp#VHNR_5w}NK3#RPfAb_Z&1gocNFzzU3vWWkd zG`#<;CRR3?hF8WEtiGQ^(5iUzB^I3H3O1b6Xz=<_ zttpsQ%Y?dxsaRI)IqCKnwGHznHVkL!=yqij{kUr%5+N14p7-K)*IuR|?7o8aEJgGT zb5*?2!~B@_%UE-77qffWP8_@I#39ciVsz8fo==)kO|1LzMMajVkWvdwxsU|#;u$T9 zhK?{^(5g+thNL#k6Eb3sTFNDemSP(Qy%jbKgX1JAFuuTwOv6E8ZFtpNgXUs8RK^L^yx8#~f zthtmx99S6e;`9DNcj9r6NQy2Zeay0pDqc=9C%OhB_^G1O|8jnd%@XIoS5#_|T4Y^{ zN{nGtz}?_LXC%HXu`* zCj@)Q$_Z7&@j5#`y}uG46of2mgvl{>+}U5PB+@=3qxncy%SLOtc9b6I##&j_3V?QUw>L#)P+-CeVYaov6{=)-FXvZ!vGO^MwS% zVxL!RoZ>p_GzZq6>Y*5J`cXyIF0w&6mC}K)oQn$eA&ZHP0T#o>%M^jT#O)(&R4kt0 z0SnTLc)pE3+wtu$E}_3hCLF6B6uk7}7bxJ}R;yuT7`@$Oophsl(_Q``l!NQj!=@3z zS8FOP`IG(UJ406J<@t|@RR{YTSwR-w&vIvS{#%@m7K&B9_mM8$8S*oi$E{4-~Y>R8V6~$iMFi}ldjAzKSj%+BsUj!o@9EeA;zxC^n9n3y`4|SEEjqm zkBYhuuBEhA_I<`an)=ypc9&f`!?s(tTeQomd+p3ghtR5)+U#UEI0iybkYsaRPozoU zc&QifRVmY5JuKDL!zUe>uTaTjG|p?4)E|cV1Q$PVl zA(r2yMp&vXBK8(23EgM`lw}Thn#k@Zo=uCzX;{;!CMRX1?*k7Vsb(ZfD{h=!$+0R( z(sx)X3_j{3!!+`Ub=o-#rtwAw{&5|DNI*J$O1F|_6Dy-kJtvrDw#%9QRz*Ah189NP ABme*a delta 2099 zcmYjS4{Vfo8UB91es|w@|Nn8LJr;MmDBlQFWuutK;?k8vdyUkv&_AYFiT1*If{IN8$IB!f1`+ zlC79Vnx!A_+3vx`rXb$^nvT7nG$Cz|W4^BPJGCZV9z z(TxnskZp=lVSvxiZx_mTaG(``sAkQ7X>p>N2#Y|h6;y;jUnk&cSI%_Kn2&c3a7)L!};SL z)6gwUa6~3dBZ&EJT}U_EQK2O$-Y8ZfTgy&xqqjIRxg*XeEmG}xv3L$kQbqYyjaH|G zo;y@hByitHya}=EEZ*r|H$CV&Q$Lzic77pA;O*=${mg+d(uigxE`jv``k*v`0=z|8mIwoC6 z&$+E4=$n^BfYLp}g^_jKdJi6<>=VL=hjxV!535DG9>;-?N=#!lQ*6h!drEP6R|^fj zARP3{{lZP_w~7F&cE3c0RvE-!>%A!Kt|3ho9y)!BU0?WFltoo>y+c{VxaMowFzL#1U>k*QYEKh(~Sb0^^H=0IeZsG9d zpjD9ubf?viH8koIZ}SLK$@f*JeCl~A zXeuUZOrwRjnY;B=c#MsA=IoF)&kNE?=XxyY>u&S8o`H{W-f!flUU*;d6*rcza-*m< zH2n`z!|MAPz2BPa{ujrrj5+^>F9^QT%c3;!v+s7E&QICf{y(ku@u^lmJ}78G6Emja z6-E2%?;ju*i{6YCel_%gEJ7szP Kt}n}ulK%jzwxPlR diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm index 20f8fa12c28a6520d2daa0832faa5f3163d99d78..6acd8830c03409afa3c34c013fb2e7670ebcddc0 100644 GIT binary patch delta 29 gcmX@YbcAVwwh%if0|NsO5c2|YAP@&_v}I=m07>Ws8~^|S delta 29 gcmX@YbcAVwwh#j+0|NsW5OV`D4-oTiv}I=m07Xm#hX4Qo diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xr b/si4/soft_gsm_main.si4project/soft_gsm_main.sip_xr index 77ab5ccb9c02973df26c5592619aa9102be25ae9..96c3678e2549d926a2e8b926465d8a8b46aa2c28 100644 GIT binary patch delta 3799 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 SSDu&cl+VnJH(V{+J^uxA$12JI delta 3440 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 diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.siproj b/si4/soft_gsm_main.si4project/soft_gsm_main.siproj index 46296b3416059967931d9537cc69d2b80d7e7709..ef516e1b2403d529b59cb9ab2006f953b69287a9 100644 GIT binary patch delta 886 zcmXw&ZAep59LCSN+q`p|n|gJ*n=`NZmKrV-dJ)49X=e7K5el*rw2`DPD=0-jNEsBA zt*e!xeJLTsXnI-^NJS9zrX*5oD81N+3c~C|lEv0@=r;Iq&;HMI{?B>2_vr+knxb}> zNQj#deHkHSH!y=@I;6a#K9_k|&{Ji=^eyK~aoFZl?5tHEN0o=SEoXhObU|tdf<`ZrO&G6Z0YgZyycm33%u|1$ zbOwZJBq1^a<3{${Z?2Bh&09CrpG5}u2Mc_LD&JX&KgR>0SQniueG za_(8MFm=QlLxXJGYNq;NC=^oP+t%xO7Zx9B{8wV>Q7?6l=f_88`q1STl9HguXtc42 z*la4tL@!BeA>V<_PbOAFNBQpS?b!YGFP-JQL!p6?n~>8rJkhuVj7wSnvNS4p7u0TU zfvpI(y(q8J=rQt6f8uWFl%F4>QgdPPBP;^T~it4 zPmsSt+OA=UC&Y+xGYeFtQ89e_^Y~RH&Q)$ODXTj^&Y!{@KMVu#Y|`km6Jo)*k>%HT z1?Tv)2Tp$Lr?Du0jFB2u;dr6crhO8d*MLtB^{6g!K^{Em z9z!NoF)tJFkA!nXrzXVOX_-%vxLfC`t5qN6%*)Q?wCZN~&%qM~$~7$f1)$}y{{=AU B)%O4Z delta 792 zcmXw%TSyd97{|{yJMOxxdvkSkH$^5(trpZSpjko0ie*`fq7jM^ilVk8Q4bX%6;axQ zE+J)fr7%LMJsJevq=b;P$eP`U(sF(1C9DKPh_?UPord`_GvEI|=ewK}4%6#tQVLCs zH83VuF~$UcqtR$NJyd6@uP`Yn$)r9_nd@o`X=H$U5B$FFG2AiiX??1~PskaR^>X5Q`h88KAfz@R>FhM)mq2%^i@!?vA*+!sw`x+9 z5dDID1{ihTSs6>ldn^BF@k=X<7q2XgVYL!u8Uz+dg8l0mLw!sk-eS!qk9Bs+Tk}Dq z7I-=kPtqAkMqz;`w$wnA(-nx=mgP=30$=RKvA{aVvfPCL&v(8txCnLf z1w;ZtFSn)@kY~YB6_ZCGi*TAwC5h%c6f_^X@%`HI8I61ijNOKuuT$X^&2LY1@sacl z@)Ql+9G`iwQ5kI59JWU1Xrfr@PsWfz-Qc@))riKUn4gM-Zde4HR>Vhoj*n;hCDWZ? zov4YIW_Ks4(+!hhZBip6mi1zwtKb(%XBqS1$@%BCdE{yQ)<7ZHa$!4!@M@hJo5;S= zTWB{eEzOI4=Iy0LF87%8aP8n*jdo%1*(jw9egWsBm3xiuQ17SyXOJI3oq4-y$0f`6ON zWhH(%I{DUveo4JBvH7ACXXreN>V(Ci^A)MYdD_7zoBfixdhmD4I7WG$`&v)aKjgs3 A-T(jq diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.siwork b/si4/soft_gsm_main.si4project/soft_gsm_main.siwork index aef5b9826a8430e3231bc4fbadeae4f2df10b3a6..563818938a1cc45ac094dca1f4523a4d4d2b96ca 100644 GIT binary patch literal 108932 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 literal 92949 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 + { + case OPER_SET_DEBUG: + G.debug = ccmodbus->buf[0]; + break; + } } void L3_protocol_handler_uart4_fun(U8 *pPara) diff --git a/source/app/app_common.h b/source/app/app_common.h index 9028e72..9455aca 100644 --- a/source/app/app_common.h +++ b/source/app/app_common.h @@ -60,6 +60,8 @@ enum CCMODBUS_OPER OPER_GPRS_HEART = 0x00, // OPER_GPRS_ACK = 0x95, OPER_GPRS_REPORT = 0x97, + + OPER_SET_DEBUG = 0x01, }; enum TS_485_OPER @@ -90,13 +92,17 @@ typedef struct printer_paper_calib /** * Register Memory Map - */ + */ +#define SLAVER_RFID 0x00 //RFID发送过来的数据 +#define SLAVER_COM0 0x01 //COM0发送过来的数据 + #define SLAVER_DW20_ID 0x11 -#define SLAVER_ASGA03_ID 0x12 +#define SLAVER_ASGA03_ID 0x12 //称重内部倾角传感 #define SLAVER_SHOW01_ID 0x13 #define SLAVER_TCP_SERVER_ID 0x14 +#define SLAVER_ASGA03_UPDOWN_ID 0x15 //升降位置倾角传感 -#define MD_SLAVER_INFO_MAX 5 +#define MD_SLAVER_INFO_MAX 6 #define CCMD_SLAVER_INFO_MAX 4 //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出 @@ -145,7 +151,10 @@ typedef struct printer_maintenance_global U8 _rfid; S32 pi_weight; S32 total_weight; + + CCAsGaInfo asga_02; U8 reset; + U8 debug; }PMGlobal; //寄存器内存基地址 @@ -159,6 +168,7 @@ typedef struct printer_maintenance_global extern struct printer_maintenance_global G; extern void L2_register_init(void); extern void L3_protocol_handler_uart4_fun(U8 *pPara); +extern void L3_protocol_handler_uart0_fun(TS_PH3_ccmodbus *ccmodbus); extern void L2_do_board_reset(void); extern void L2_do_gm35_reset(void); diff --git a/source/app/app_drv.c b/source/app/app_drv.c index e01ba03..0a5d002 100644 --- a/source/app/app_drv.c +++ b/source/app/app_drv.c @@ -70,23 +70,39 @@ void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p) } } +//FF FE 05 00 00 28 FC CC 从FF开始校验 +int L3_checkCrc16(TS_PH3_ccmodbus *ccmodbus) +{ + U8 crc[2]; + crc16(crc,&ccmodbus->filter1,ccmodbus->num + 3 - 2); + if(crc[0] == ccmodbus->buf[ccmodbus->num-2-2] && crc[1] == ccmodbus->buf[ccmodbus->num-2-1]) + { + return 1; + } + return 0; +} + void L3_UARTcom0_exp_protocol(TS_Handle_PH3 *p) { if (1 == p->ok) { - #if 0 - TS_PH3_ccmodbus ccmodbus; - byte_copy_uc((U8*)&ccmodbus,(U8*)&p->ts_ccmodbus,p->ts_ccmodbus.num + 3); - if(ccmodbus.buf[0] != G._rfid) //rfid发生改变 - { - G.rfid = G._rfid = ccmodbus.buf[0]; + if(L3_checkCrc16(&p->ts_ccmodbus)) + { + switch(p->ts_ccmodbus.slaver) + { + case SLAVER_RFID: + L0_uart0_uc('r'); + L0_uart0_uchex(p->ts_ccmodbus.buf[0]); + if(p->ts_ccmodbus.buf[0] != G._rfid) //rfid发生改变 + { + G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; + } + break; + case SLAVER_COM0: + L3_protocol_handler_uart0_fun(&p->ts_ccmodbus); + break; + } } - #else - if(p->ts_ccmodbus.buf[0] != G._rfid) //rfid发生改变 - { - G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; - } - #endif p->ok = 0; } } @@ -95,20 +111,17 @@ void L3_UARTcom0_exp_protocol(TS_Handle_PH3 *p) void L3_UARTcom3_exp_protocol(TS_Handle_PH3 *p) { if (1 == p->ok) - { - #if 0 - TS_PH3_ccmodbus ccmodbus; - byte_copy_uc((U8*)&ccmodbus,(U8*)&p->ts_ccmodbus,p->ts_ccmodbus.num + 3); - if(ccmodbus.buf[0] != G._rfid) //rfid发生改变 + { + if(L3_checkCrc16(&p->ts_ccmodbus)) { - G.rfid = G._rfid = ccmodbus.buf[0]; + L0_uart0_uc('r'); + L0_uart0_uchex(p->ts_ccmodbus.buf[0]); + + if(p->ts_ccmodbus.buf[0] != G._rfid) //rfid发生改变 + { + G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; + } } - #else - if(p->ts_ccmodbus.buf[0] != G._rfid) //rfid发生改变 - { - G.rfid = G._rfid = p->ts_ccmodbus.buf[0]; - } - #endif p->ok = 0; } } diff --git a/source/app/app_task_485.c b/source/app/app_task_485.c index a403fa0..c50e8ca 100644 --- a/source/app/app_task_485.c +++ b/source/app/app_task_485.c @@ -62,7 +62,7 @@ void L3_task_485_handle(TS_485 *s) G.md_slaver_info[s->slaverIndex].mask = 0; } - //TODO 这里可以根据modbus协议让代码通用, + //TODO 这里可以根据modbus协议让代码通用 if(s->pAckPkg->oper == MODBUS_OPER_READ) { if(s->pAckPkg->salver == G.md_slaver_info[0].slaver) @@ -105,6 +105,12 @@ void L3_task_485_handle(TS_485 *s) } } } + else if(s->pAckPkg->salver == G.md_slaver_info[5].slaver) + { + G.asga_02.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); + G.asga_02.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); + G.asga_02.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); + } } } } diff --git a/source/app/app_task_gm35.c b/source/app/app_task_gm35.c index 0b37d73..c3c96dd 100644 --- a/source/app/app_task_gm35.c +++ b/source/app/app_task_gm35.c @@ -44,7 +44,10 @@ U8 * _cipsend_hex(U8 len) void L3_gm35_send_str(U8 *str) { L0_uart4_sendstr(str); - L0_uart0_sendstr(str); + if(G.debug) + { + L0_uart0_sendstr(str); + } } //将数据放入gm35待发送缓冲区 @@ -52,7 +55,20 @@ void L3_gm35_send_data(U8 *buf , U8 len) { L3_gm35_send_str(_cipsend_hex(len)); L0_uart4_sendArray(buf,len); - L0_uart0_sendArray(buf,len); + if(G.debug) + { + L0_uart0_sendArray(buf,len); + } +} + +void L3_gm35_rcv_data(U8* buf,U8 num) +{ + if(G.debug) + { + L0_uart0_sendstr("ATRCV="); + L0_uart0_uchex(num); + L0_uart0_sendArray(buf,num); + } } //------------------------------------------------------ gm35 tasks -------------------------------- @@ -138,6 +154,7 @@ void L2_task_gm35_daemon_handle(struct _s_task_gm35_gprs_ *s) P55 = 1; //灯灭 if(s_nos_tick.t_1s - g_at_send_status.tcp_close_stmp > TCP_MAX_DISCONN) { + L0_uart0_uc('>'); if(++g_at_send_status.gm35_reboot_times >= TCP_MAX_GM35_REBOOT_TIMES) { L2_do_board_reset(); diff --git a/source/app/app_task_gm35.h b/source/app/app_task_gm35.h index 1502c63..17de300 100644 --- a/source/app/app_task_gm35.h +++ b/source/app/app_task_gm35.h @@ -85,6 +85,7 @@ extern struct _s_task_gm35_gprs_ s_task_connect_gprs; extern void L3_task_gm35_core_init(void); extern void L3_task_gm35_core_handle(void); extern void L3_gm35_send_data(U8 *buf , U8 len); +extern void L3_gm35_rcv_data(U8* buf,U8 num); #endif diff --git a/source/app/app_task_rfid.c b/source/app/app_task_rfid.c new file mode 100644 index 0000000..f31693e --- /dev/null +++ b/source/app/app_task_rfid.c @@ -0,0 +1,43 @@ +#include "app_task_rfid.h" +#include "../msp/uart0.h" +#include "../msp/uart3.h" + +#define MODBUS_SLAVER_RETRY_MAX_TIME 3 + +TS_rfid ts_rfid; + +void L3_task_rfid_init(void) +{ + L1_task_init(&ts_rfid.task); + L3_task_s_go(ts_rfid,D_task_init); +} + +U8 rfid_start_pkg[] = {0xBB,0x00,0x27,0x00,0x03,0x22,0xFF,0xFF,0x4A,0x7E}; +U8 rfid_stop_pkg[] = {0xBB,0x00,0x28,0x00,0x00,0x28,0x7E}; + +void L1_enable_rfid() +{ + L0_uart0_sendArray(rfid_start_pkg,10); + L0_uart3_sendArray(rfid_start_pkg,10); +} + +void L1_disable_rfid() +{ + L0_uart0_sendArray(rfid_stop_pkg,7); + L0_uart3_sendArray(rfid_stop_pkg,7); +} + +#define D_task_rfid_send 0x51 +void L3_task_rfid_handle(TS_rfid *s) +{ + TTSS_Task_init(); + L2_task_go(D_task_rfid_send); + + TTSS_Task_step(D_task_rfid_send) + L1_enable_rfid(); + L2_task_go_Tdelay(D_task_rfid_send, D_Tdelay_10s); + + TTSS_Task_end(); +} + + diff --git a/source/app/app_task_rfid.h b/source/app/app_task_rfid.h new file mode 100644 index 0000000..43586b3 --- /dev/null +++ b/source/app/app_task_rfid.h @@ -0,0 +1,17 @@ +#ifndef APP_TASK_RFID +#define APP_TASK_RFID + +#include "../ctask/task.h" +#include "app_common.h" + +typedef struct +{ + TS_task task; +}TS_rfid; + +extern TS_rfid ts_rfid; + +extern void L3_task_rfid_init(); +extern void L3_task_rfid_handle(TS_rfid *s); + +#endif diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index d751bb5..9a31f01 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -59,10 +59,7 @@ void L3_task_tcp_handle(TS_tcp *s) g_at_send_status.tcp_last_recv_stmp = s_nos_tick.t_1s; s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart4_tcp_rec.sp); - L0_uart0_sendstr("ATRCV="); - L0_uart0_uchex(s->pAckPkg->num + 3); - L0_uart0_sendArray((U8*)s->pAckPkg,s->pAckPkg->num + 3); - + L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num + 3); if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) { s->ackFlag = 1; diff --git a/source/app/app_task_wdt.c b/source/app/app_task_wdt.c index 981d0d6..b2e6b5e 100644 --- a/source/app/app_task_wdt.c +++ b/source/app/app_task_wdt.c @@ -9,6 +9,7 @@ void L3_task_wdt_init(void) { L1_task_init(&s_task_wdt.task); L3_task_s_go(s_task_wdt,D_task_init); + L0_wdt_init(); } #define TTSS_TASK_WDT_STP_01 0x1 diff --git a/source/app/main.c b/source/app/main.c index f7eef89..c7c2687 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -93,12 +93,14 @@ void L0_main_init(void) L3_task_wdt_init(); //看门狗任务初始化 #endif + L3_task_wdt_init(); L2_gm35_init(); L3_task_gm35_core_init(); L3_task_485_init(); //485轮询任务初始化 L3_task_485_control_init(); L3_task_tcp_init(); //485轮询任务初始化 L3_task_tcp_control_init(); + L3_task_rfid_init();//rfid任务初始化 } //=============================================== @@ -140,6 +142,7 @@ void main(void) L3_task_wdt_handle(&s_task_wdt); //串口0,3 RFID接收 + L3_task_rfid_handle(&ts_rfid); L3_UARTcom0_exp_protocol(&s_uart0_rec); L3_UARTcom3_exp_protocol(&s_uart3_rec); diff --git a/source/app/main.h b/source/app/main.h index 40d2e58..0c6bb0f 100644 --- a/source/app/main.h +++ b/source/app/main.h @@ -83,6 +83,7 @@ #include "../app/app_task_tcp.h" #include "../app/app_task_tcp_control.h" #include "../app/app_task_relay.h" +#include "../app/app_task_rfid.h" #include "../app/app_common.h" #include "../app/app_paraid.h" diff --git a/source/msp/UART3.c b/source/msp/UART3.c index 02af1d6..fa2c46e 100644 --- a/source/msp/UART3.c +++ b/source/msp/UART3.c @@ -67,20 +67,21 @@ struct _s_uart3_send_buf_ s_uart3_send_depot; void L0_uart3_init(void) //57600 { -#if 0 - S3CON = 0x10; //8位数据,可变波特率 - S3CON &= 0xBF; //串口3选择定时器2为波特率发生器 - AUXR |= 0x04; //定时器2时钟为Fosc,即1T - T2L = 0xD0; //设定定时初值 - T2H = 0xFF; //设定定时初值 - AUXR |= 0x10; //启动定时器 -#endif +#if 0 //57600 S3CON = 0x10; //8位数据,可变波特率 S3CON |= 0x40; //串口3选择定时器3为波特率发生器 T4T3M |= 0x02; //定时器3时钟为Fosc,即1T T3L = 0xD0; //设定定时初值 T3H = 0xFF; //设定定时初值 T4T3M |= 0x08; //启动定时器3 +#else //115200 + S3CON = 0x10; //8位数据,可变波特率 + S3CON |= 0x40; //串口3选择定时器3为波特率发生器 + T4T3M |= 0x02; //定时器3时钟为Fosc,即1T + T3L = 0xE8; //设定定时初值 + T3H = 0xFF; //设定定时初值 + T4T3M |= 0x08; //启动定时器3 +#endif D_uart3_ES_INT_OPEN(); //打开串口中断 } diff --git a/source/tpc/tpc_ccmodbus.c b/source/tpc/tpc_ccmodbus.c index a120f14..887fc7c 100644 --- a/source/tpc/tpc_ccmodbus.c +++ b/source/tpc/tpc_ccmodbus.c @@ -146,8 +146,9 @@ void L1_s2b_PH3(TS_Handle_PH3 *p)// reentrant } if(p->num >= p->max) { - crc16(p->crc,&p->ts_ccmodbus.slaver,p->ts_ccmodbus.num - 2); - if(/*p->crc[0] == p->ts_ccmodbus.crc[1] && p->crc[1] == p->ts_ccmodbus.crc[0]*/ 1) + //crc16(p->crc,&p->ts_ccmodbus.slaver,p->ts_ccmodbus.num - 2); + //if(p->crc[0] == p->sp[p->num-1] && p->crc[1] == p->sp[p->num]) + if(1) { if (p->ok != 1) {