From 6ba99fd91c2b8dcd71776c3fa74a9ccc9642e8ef Mon Sep 17 00:00:00 2001 From: zhangsan Date: Wed, 16 Dec 2020 16:23:39 +0800 Subject: [PATCH] tcp test ok --- .../soft_gsm_main.sip_sym | Bin 563192 -> 563192 bytes .../soft_gsm_main.sip_xm | Bin 324 -> 324 bytes .../soft_gsm_main.siwork | Bin 112151 -> 119718 bytes source/app/app_common.c | 383 +++--------------- source/app/app_common.h | 26 +- source/app/app_drv.c | 2 +- source/app/app_task_485.c | 28 +- source/app/app_task_gm35.c | 10 +- source/app/app_task_gm35.h | 3 +- source/app/app_task_tcp.c | 13 +- source/app/app_task_tcp_control.c | 7 +- source/app/main.c | 28 +- source/ctask/tick.h | 12 +- source/msp/time.h | 1 + source/tpc/tpc_ccmodbus.h | 2 +- 15 files changed, 93 insertions(+), 422 deletions(-) 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 bcc9a996c08fa71a5abee98f9f0290468aa7aaf5..8a4f8b0d1e92d1be78e52b82d3dba9c9ca5b4435 100644 GIT binary patch delta 2023 zcmX|CeQZ-z6n`JL?-lzB@2y3qIPxGbMBRs-2v(h;8=#eJ_*4icDr+O4CR3}B5S7JF zC(~HX8z*ucF5?;eLkJ0zqQ%UQXD}+nkP(UEC{pH_2%8o#aq$b!ZL2pqIrrn7-?``O z-l@IwruNP=W~zelkRY%b0YO-#3Bs-K8NW+tUy@l+76jo6q7sJ->qFp$HHgaHkgj6E zd2}+3sKnuPZ3qf-6Pmjj1C!a{)i8{|sOr$oT5&M%V{nXi^{#C2Bc87 z)mNv1_YQ;2#vs^nmW@;~u>_MCQ?$T((h!McVFkR(YO)=n_?6(j#e&z-=J!M;4xb$i z!SU;g7&#;{`1*R=DAEzRC2&rz3PqTEJ_NDaCUj?r4AQkWxD8<#t8GQI!S92Gb$4Ur zS%pDUy^bq8CA|!_r!I<~N0?{pZ1i3t&0@U{)_J`Qlc(8@lVlwAl)U2)kl>>y7QHWNO{h?bsVu??5vxvLFx3c;%wwm<+N|33c-g z(QP{jv?FpA9KGRYjD5kv;$4`m66rjWfz$zJa34=pR5`y18f)(cv(Yw2XvI%C=Mfmm zb~UaR(Kabl`cX6c*NqcFOp6i=^7wv8#K#e6+z|q;*%gmK*P2=Id2>I_k}b2v_1Vsr zUrE1;N~DS;za%PgG)CkQ6#ry6yqz^=hnF%DQ=V$U)G`OB=Ezod&mHfGU|#lVOWRl8 z)wb;3Nc+OJ`(VfXCFpLFEb$P&cUrj(98xsl@kou-*a*$fM=-`@R_`M-JBj!>Lc}lY z7p~{a(il(#;h)QwFLM$w`J}W!Q8ul6?2$*YahJRt(+v{CJ=>WM8*Lq(yh`N}kK*7# z#RqLqY`|Ej#Ik3XM>hmI37LZjgx9mRpR|eC|AwM*>%wdB%BMTA@Px{OeBH&RX!K-n z_wEa$IU-uw{l}Jys1L~$gZ+{T*L>^X@Y|A=9sZW~?LOL%>5!T23v(ei}^>Y762GWZd7Oqls_)XIxJ&l2Of|7kE3@on0M<*O`A7EI=1;{5z zCOD}Gp+ z)FF1t*?N+6PPyPMr$(M#z62%?5Wt>7rc{>s@p3Tr7OJGg=?oTD5tuhtzK%ZXlv}6c z2Wo{;7wsA~ymgfNX^1d3|Cm8<7F~;HBhp9DLu4!i?x+QYF$e7#bkcps<(*RUr@7)! zGbT+I+V%+{w2o)WoptTFj>nG3I{Y>6V9}8*82rh>!dH}G=O+`^o^`-!W5GEDv4W_? z%e__ovjfGe8RnmpD!sgl8h`j_0)AEs!{-Mn>gOnd=eU38xQL61#bn^@d1u=);{6k3 zF;7{vCml@v<721~C?>F994Jg$aNrjQy;F4D@vDQb#uz4A{q!ajUDVtBWPm1-7Ku&c z$)8W8f^p?6G#Aq?G8ZU7Ks9?{l3c44z>BeqJ+X^oE_P8G90;ri`r@77}?!#7{2OjD`w zHqKES_fN;vM!z2DujpyQ0_@qv=0Zo>%6+|y-DIGr_%$Ezhr>O_5F_&Cj3H&o^Z@Vj zwd*>P&$KVZr>dnTI43F17d@Q&v9cKbhn0=^)gdL8`{=L|F>rX2tWU)0!&s^6IX$l= zm0OYpt#EPOYqI+%W2)n~4*xX6S>G%JtIXgsXWB4@8f zor%+Ma-(|Z|9_Gg#(OsTLpl9nm0nPL4Z)gE5t_H2X2*@`cQeA`G;EK za6t>@nl`8@1B(N)g~Q!+BeR;pgMVv*C`s|u`UDf7dr9r%NK_Ml_|fTQOq>o~uZA$X eg*4KaSa1eO@@_A2?7Ad|dM380xrr@)&G;9^R+9Sw delta 1965 zcmX|CeQXrR72l89-GkdRbH1f^(gFwCBv2c(AOeo+!a>bvOgIITw4jLc@pQ|4NVt7Lo-)C?fF@?mQEL zAw!2sxeIK@Li1>c)CC`5v@8O7xeB6>D=?RB#(W7gpo`VKCNa3g;^^*`80I@QF0RKr zN2N%nMk&|5&5m$CCh9aLv$$9mF|l9cGoK}^B8enyq~FO=f;}f#Nyd&;{|NKTWENUL z>(@wpgfnL&Fub7P8NB#Y@-~Ymg@qioT^focyOd9UO8XVeB zi&f-vpn?OhsQO{EwxR}dWd^O+p#6#*Q0=7M*t!FI3~en~$61Jo7sjW;8OLOZMZiiC zGmCuhP1XbOk44MTEt47c{grWX115__(y`JQJI~D57BQ$M`_3X0oQD+{FW!uNDJho+ zm4M>qIF{*L{IrN21Dct+zhokW&O0g#c@%#_;*DWg{B{KNRjxP;opmK}Zq*T*C0GAg ztk3LQ{jG@hcf?yUX`UzX5yM}~5%CZt*R9Ots+ow^Db0j?YaGn&Q5fc)7o(ZJwZ}zt z_R1_6tgqkMu)|Kawe5w`UCVo{A}GAU(CJn=eE$pwYhx7-m5FQyum4SJYh!c!md56` zme!}hQC4AWZ$MWRa{PA;PZuNT%plGO)Jm|ove~nnl5OozHnugk*S2if692{ShT5IG z8#gp>X{>K)Zoo4K^u|k>pAT&@(0)%cGXs~ZMa;b;neda(9dIt0ncU~J!Uu`;+<+9#R1Q~* zkp9#J_X`K?`3%?h1a$FnSoP&GaJMsvk5JY+htxC%`d8`6f@=CY3ZH%DptVodF;%Jt zpgqpP9&sRd#Q@{73#nyPZx0Y-V;@l}r>NdWE~lwd4Pfgz+M9?K=j${Mm8b^PCOO2e zIKY>)kV^5dCh-wQuN*_?K~kXzF!3>2>C30V9-q`(F{QTx_QWH|S2L>g(KN zNDHGJOJ{4;pJNVK^jGWDC51S>7(X)+HZ*}?+hok`_~HbuXQ#K*~2D*eVm`vuAH-U4*DQXA*KNdv!Sz`3(@12-LrRxzyH zC40T?LjJZ1H*Qf8ucPZdGU4>DA&lR4aOkLN0{gdvg%Qz&k7<%vNn1_dI?!J*fEQeF zHnGrL^8N&gk8q}N46Io!$=E*{6Ze^ggyKf9n>VYHj* z@N;YEo@+Ip29C}+S%{E+B^{25=LJvKs z$o@j&W47}#?f2AHr%W{KG^e*tGqb~W8XZmi)5Px+ngfXsOng77Ip_l8Gq?S~$PWwL{a 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..9bde1c7de262d21922d03aefba76b8565c8c0567 100644 GIT binary patch delta 11 TcmX@YbcAWbVn+6fOBMhC8vO*F delta 11 TcmX@YbcAWbVn&9EOBMhC8sP+% diff --git a/si4/soft_gsm_main.si4project/soft_gsm_main.siwork b/si4/soft_gsm_main.si4project/soft_gsm_main.siwork index f7701435909e132a21b3b870e94cbfe562f7e986..81d8b10d2dfe3b17ce23100fe3e844e24b07b75f 100644 GIT binary patch literal 119718 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 L$1-q@o0$GT4a}XK diff --git a/source/app/app_common.c b/source/app/app_common.c index aacbd4e..ed8a868 100644 --- a/source/app/app_common.c +++ b/source/app/app_common.c @@ -6,30 +6,29 @@ #include "../app/app_paraid.h" #include "../app/app_task_relay.h" -//0xFF+0xFE+2+20+1+21 `0xFF``0xFE`00``2A``simno,salt -#define LEN_GPRS_TCP_PKG_AT_SIGNIN 46 -#define LEN_GPRS_TCP_DATA_ACK 8 struct printer_maintenance_global G; -//TS_PH3_ccmodbus_ack ccmodbus_ack; U8 ccmodbus_len = 0; -vU8 gprsTcpPkg_Signin[LEN_GPRS_TCP_PKG_AT_SIGNIN] = {0xFF,0xFE,0x0,0x2A}; -vU8 gprsdataack[LEN_GPRS_TCP_DATA_ACK] = {0xFF,0xFE,0x0,0x4,0x11,0x95,0x8F,0xCD}; void Lu_register_init() { U8 i = 0; G.p.slaverId = 0x10; - G.p.wisdom_car_no = 0x01; + G.p.wisdom_car_no = 0x91; G.p.thrombolytic_ratio = 9; //0.9 - G.p.bolus_ratio = 9; //0.9 - G.p.hold_ratio = 1; //0.1 + G.p.bolus_ratio = 1; //0.9 + G.p.hold_ratio = 9; //0.1 - G.total_weight = 50000; - G.thrombolytic_val = G.bolus_val = G.hold_val = 40000; - G.asga.xaxis = G.asga.yaxis = G.asga.zaxis = 22; + G.total_weight = 0; + G.thrombolytic_val = G.bolus_val = G.hold_val = 0; + G.asga.xaxis = G.asga.yaxis = G.asga.zaxis = 0; G.rfid = 0; + for(i=0;i<4;i++) + { + G.weight[i] = 0; + } + for(i=0;i 0x1FF) - { - paper = 0x1FF; - } - if(paper < 0) - { - paper = ~paper + 1; - paper |= 1<<9; - } - else - { - paper &= ~(1<<9); - } - paper &= 0x3FF; - return paper; -} - -static void resetToIsp() -{ - if(s_nos_tick.t_1s < G.lastResetToISPCmdTimeInSeconds) - { - //isp - IAP_CONTR = 0x60; - //disable wdt - } - else - { - G.lastResetToISPCmdTimeInSeconds = s_nos_tick.t_1s + 2; //2s(1s-2s) - } -} - -U8 L2_constructor_ccmodbus_ack(TS_PH3_ccmodbus_ack *pccmodbus, U8 addr, U8 oper, U8 *buf, U8 len) -{ - pccmodbus->filter1 = 0xFF; - pccmodbus->filter2 = 0xFE; - pccmodbus->num0 = (len + 4) >> 8 & 0xFF; - pccmodbus->num1 = (len + 4) >> 0 & 0xFF; - pccmodbus->addr = addr; - pccmodbus->oper = oper; - byte_copy_uc((U8*)&pccmodbus->buf, buf, len); - crc16(pccmodbus->crc, &pccmodbus->addr, len + 2); - pccmodbus->buf[len] = pccmodbus->crc[1]; - pccmodbus->buf[len+1] = pccmodbus->crc[0]; - return len + 6 + 2; -} - -int L2_ph3_common_send(U8 dst, void *buf, U8 len) -{ - switch(dst) - { - case ADDR_UPPER: - L0_uart0_sendArray(buf,len); - break; - case ADDR_SERVER: - L3_gm35_send(buf, len); - L0_uart0_uc('S'); - break; - default: - break; - } - return 0; -} - -void L2_do_uart_report(void) -{ - TS_Printer_Report report_ack; - - byte_copy_uc(&report_ack.papers[0],&G.papers[0],3); - byte_copy_uc(&report_ack.papers[1],&G.papers[1],3); - byte_copy_uc(&report_ack.boardstatus,&G.boardstatus,3); - report_ack.ir = 0; - - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_REPORT, (U8 *)&report_ack, sizeof(report_ack)); - L2_ph3_common_send(ADDR_UPPER,(U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_gprs_send_signin_pkg(void) -{ - libc_memcpy(gprsTcpPkg_Signin+4,G.ccid,20); - gprsTcpPkg_Signin[24] = ','; - libc_memcpy(gprsTcpPkg_Signin+25,G.ccid_passwd,21); - L2_ph3_common_send(ADDR_SERVER,(U8 *)&gprsTcpPkg_Signin,LEN_GPRS_TCP_PKG_AT_SIGNIN); -} - -void L2_gprs_send_ack_pkg(void) -{ - L2_ph3_common_send(ADDR_SERVER,(U8 *)&gprsdataack,LEN_GPRS_TCP_DATA_ACK); -} - -void L2_gprs_send_heart_pkg(void) -{ - TS_gprs_heart gprs_heart; - gprs_heart.version = APP_VERSION_HEX; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_SERVER, OPER_GPRS_HEART, (U8 *)&gprs_heart, sizeof(gprs_heart)); - L2_ph3_common_send(ADDR_SERVER,(U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_gprs_send_report_pkg(void) -{ - TS_Printer_Report report_ack; - - byte_copy_uc(&report_ack.papers[0],&G.papers[0],3); - byte_copy_uc(&report_ack.papers[1],&G.papers[1],3); - byte_copy_uc(&report_ack.boardstatus,&G.boardstatus,3); - report_ack.ir = 0; - - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_SERVER, OPER_GPRS_REPORT, (U8 *)&report_ack, sizeof(report_ack)); - L2_ph3_common_send(ADDR_SERVER,(U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_angle_setid(U8 *buf) -{ - TS_Angle_SetId *ts_angle_setid = (TS_Angle_SetId*)buf; - TS_PH1A_DAT ph1a; - ph1a.filter = D_HETU_FXA; - ph1a.id = SLAVER_ID_N; - ph1a.oper = OPER_ANGLE_SET_ID; - ph1a.xaxis[0] = ts_angle_setid->id; - ph1a.xaxis[1] = ts_angle_setid->id; - ph1a.yaxis[0] = ts_angle_setid->id; - ph1a.yaxis[1] = ts_angle_setid->id; - ph1a.zaxis[0] = ts_angle_setid->id; - ph1a.zaxis[1] = ts_angle_setid->id; - L0_uart2_sendArray(&ph1a,sizeof(TS_PH1A_DAT)); -} - -void L2_do_angle_setid_ack(U8 id) -{ - TS_Angle_SetId ts_setid_ack; - ts_setid_ack.id = id; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_SET_485_ID, (U8 *)&ts_setid_ack, sizeof(ts_setid_ack)); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_paper_count(U8 *buf) -{ - TS_Paper_Count_Ack paper_count_ack; - TS_Paper_Count *ts_paper = (TS_Paper_Count*)buf; - U16 num = 0; - - if(ts_paper->no >= PAPER_BOX_NUM) - { - L0_uart0_uc('x'); - return; - } - num = L2_paper_count(ts_paper->no,G.currentSensorVal[ts_paper->no]); - paper_count_ack.no = ts_paper->no; - paper_count_ack.num[0] = num >> 8 & 0xFF; - paper_count_ack.num[1] = num >> 0 & 0xFF; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_PAPER_COUNT, (U8 *)&paper_count_ack, sizeof(paper_count_ack)); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_calib_read(U8 *buf) -{ - TS_Paper_Upper_calib_ack upper_calib_ack; - TS_Paper_Upper_Calib_Read *ts_calib = (TS_Paper_Upper_Calib_Read*)buf; - - if(ts_calib->no >= PAPER_BOX_NUM) - { - L0_uart0_uc('x'); - return; - } - upper_calib_ack.num0 = G.paperCalibs[ts_calib->no].num0; - upper_calib_ack.angle0 = G.paperCalibs[ts_calib->no].angle0; - upper_calib_ack.num1 = G.paperCalibs[ts_calib->no].num1; - upper_calib_ack.angle1 = G.paperCalibs[ts_calib->no].angle1; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_CALIB_READ, (U8 *)&upper_calib_ack, sizeof(upper_calib_ack)); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_calib(U8 *buf) -{ - TS_Paper_Upper_calib_ack upper_calib_ack; - TS_Paper_Upper_Calib *ts_calib = (TS_Paper_Upper_Calib*)buf; - if(ts_calib->no >= PAPER_BOX_NUM || ts_calib->point >= 2) - { - L0_uart0_uc('x'); - return; - } - - switch(ts_calib->point) - { - case 0: - { - G.paperCalibs[ts_calib->no].num0 = (U16)(ts_calib->paperNum0) << 8 | ts_calib->paperNum1; - G.paperCalibs[ts_calib->no].angle0 = G.currentSensorVal[ts_calib->no]; - break; - } - case 1: - { - G.paperCalibs[ts_calib->no].num1 = (U16)(ts_calib->paperNum0) << 8 | ts_calib->paperNum1; - G.paperCalibs[ts_calib->no].angle1 = G.currentSensorVal[ts_calib->no]; - break; - } - } - - L3_flash_write_page0(); //??Flash - - upper_calib_ack.num0 = G.paperCalibs[ts_calib->no].num0; - upper_calib_ack.angle0 = G.paperCalibs[ts_calib->no].angle0; - upper_calib_ack.num1 = G.paperCalibs[ts_calib->no].num1; - upper_calib_ack.angle1 = G.paperCalibs[ts_calib->no].angle1; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_CALIB, (U8 *)&upper_calib_ack, sizeof(upper_calib_ack)); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_calib_enter(void) -{ - G.runmode = MODE_PAPER_CALIB; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_CALIB_MODE, NULL, 0 ); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} - -void L2_do_calib_leave(void) -{ - G.runmode = MODE_RUN; - ccmodbus_len = L2_constructor_ccmodbus_ack(&ccmodbus_ack, ADDR_UPPER, OPER_CALIB_LEAVE, NULL, 0 ); - L0_uart0_sendArray((U8 *)&ccmodbus_ack,ccmodbus_len); -} -void L3_protocol_handler_uart0_fun(TS_PH3_ccmodbus *p,U8 from) //0???????????????????a9 -{ - switch(p->oper) - { - case OPER_CALIB_MODE: - L2_do_calib_enter(); - break; - case OPER_CALIB_LEAVE: - L2_do_calib_leave(); - break; - case OPER_CALIB: - L2_do_calib(p->buf); - break; - case OPER_CALIB_READ: - L2_do_calib_read(p->buf); - break; - case OPER_PAPER_COUNT: - L2_do_paper_count(p->buf); - break; - case OPER_SET_485_ID: - L2_do_angle_setid(p->buf); - break; - case OPER_RELAY: - L2_do_relay(p->buf); - if(from == 1) - { - L0_uart0_uc('R'); - L0_uart0_uchex(p->buf[0]); - L0_uart0_uchex(p->buf[1]); - g_at_send_status.ack_flag = 1; //?????????????? - } - break; - case OPER_ISP: //ResetToISP???????????????? - L0_uart0_uc('P'); - resetToIsp(); - break; - case 0x00: //????? - L0_uart0_uc('H'); - break; - case 0x99: //?????????? - G.runmode = p->buf[1] & 0x0F; - Lc_print_buf("Version: %s\r\n",APP_VERSION); - Lc_delay_ms(700);// 2000--7s - break; - default: - break; - }; -} - -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/source/app/app_common.h b/source/app/app_common.h index 35198ed..8bdc51e 100644 --- a/source/app/app_common.h +++ b/source/app/app_common.h @@ -193,27 +193,17 @@ typedef struct printer_maintenance_global U16 hold_val; CCAsGaInfo asga; U16 rfid; - U16 reserved2[16 - 9]; + S32 weight[4]; + //U16 reserved2[16 - 9]; MD_SLAVER_INFO md_slaver_info[MD_SLAVER_INFO_MAX]; CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX]; vU32 modbusstmp; U16 flowStart; - U8 ccid[21]; //保存ccid卡号空间 20+'\0' TS_BoardStatus boardstatus; -#if 0 - TS_PaperCalib paperCalibs[PAPER_BOX_NUM]; - U16 currentSensorVal[PAPER_BOX_NUM]; //当前纸张传感输出 - - TS_P_paper papers[PAPER_BOX_NUM]; - U8 runmode; //运行模式 - U32 lastResetToISPCmdTimeInSeconds; //isp reset time - - U8 ccid_passwd[22]; //保存ccid密码空间 21+'\0' -#endif }PMGlobal; @@ -227,17 +217,7 @@ typedef struct printer_maintenance_global extern struct printer_maintenance_global G; extern void Lu_register_init(void); -extern U16 L2_paper_count(U8 index, U32 angle); - -extern void L3_protocol_handler_uart0_fun(TS_PH3_ccmodbus *pPara,U8 from); -extern void L3_protocol_handler_uart4_fun(U8 *pPara,U8 from); -//extern U8 L2_constructor_ccmodbus_ack(TS_PH3_ccmodbus_ack *pccmodbus, U8 addr, U8 oper, U8 *buf, U8 len); -extern void L2_do_uart_report(void); -extern void L2_gprs_send_signin_pkg(void); -extern void L2_gprs_send_ack_pkg(void); -extern void L2_gprs_send_heart_pkg(void); -extern void L2_gprs_send_report_pkg(void); -extern void L2_do_angle_setid_ack(U8 id); +extern void L3_protocol_handler_uart4_fun(U8 *pPara); #endif diff --git a/source/app/app_drv.c b/source/app/app_drv.c index 5ced68d..1b44588 100644 --- a/source/app/app_drv.c +++ b/source/app/app_drv.c @@ -57,7 +57,7 @@ void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p) p->ok = 0; array[num] = 0; - L3_protocol_handler_uart4_fun(array,0); + L3_protocol_handler_uart4_fun(array); } } diff --git a/source/app/app_task_485.c b/source/app/app_task_485.c index e30e507..c084c2f 100644 --- a/source/app/app_task_485.c +++ b/source/app/app_task_485.c @@ -30,24 +30,6 @@ void L3_task_485_handle(TS_485 *s) L2_task_go(D_task_485_constructor_modbus_pkg); TTSS_Task_step(D_task_485_constructor_modbus_pkg) - #if 0 - if(s->slaverIndex == 1) - { - L0_uart0_uc(s->slaverIndex); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].slaver); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].oper); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].reg); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].regnum); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].bytes); - Lc_delay_ms(100); - L0_uart0_uc(G.md_slaver_info[s->slaverIndex].mask); - } - #endif if(G.md_slaver_info[s->slaverIndex].mask > 0) { s->pkglen = L3_pack_modbus(&s->loopPkg,G.md_slaver_info + s->slaverIndex); @@ -61,9 +43,6 @@ void L3_task_485_handle(TS_485 *s) } TTSS_Task_step(D_task_485_send_modbus_pkg) - //Lc_delay_ms(70); - //L0_uart2_uc(s->pkglen); - //Lc_delay_ms(70); L0_uart2_sendArray((U8*)&s->loopPkg,s->pkglen); s->sendStamp = s_nos_tick.t_5ms; L2_task_go(D_task_485_wait_modbus_ack); @@ -78,12 +57,19 @@ void L3_task_485_handle(TS_485 *s) if(s->pAckPkg->salver == G.md_slaver_info[s->slaverIndex].slaver) { s->ackFlag = 1; + //TODO 这里可以根据modbus协议让代码通用, if(s->pAckPkg->salver == G.md_slaver_info[0].slaver && s->pAckPkg->oper == MODBUS_OPER_READ) { G.total_weight = (S32)(s->pAckPkg->buf[1]) << 24 | (S32)(s->pAckPkg->buf[2]) << 16 | (S32)(s->pAckPkg->buf[3]) << 8 | (S32)(s->pAckPkg->buf[4]); } + else if(s->pAckPkg->salver == G.md_slaver_info[1].slaver && s->pAckPkg->oper == MODBUS_OPER_READ) + { + G.asga.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); + G.asga.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); + G.asga.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); + } } } s->retryTimes++; diff --git a/source/app/app_task_gm35.c b/source/app/app_task_gm35.c index 34571fc..92389b1 100644 --- a/source/app/app_task_gm35.c +++ b/source/app/app_task_gm35.c @@ -216,7 +216,7 @@ void L2_task_gm35_daemon_handle(struct _s_task_gm35_gprs_ *s) #define TTSS_TASK_GM35_FLOW_CIPSTART_WAIT 0x0A #define TTSS_TASK_GM35_FLOW_CIPSTART_SUCCESS 0x0B -#define INS_TIMEOUT 2 +#define INS_TIMEOUT 10 #define GM35_SEND_DATA_INTERVAL 300 #define GM35_SEND_HEART_INTERVAL 60 #define GM35_SEND_CIPSTATUS_INTERVAL 5 @@ -260,10 +260,9 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) if(1 == g_at_send_status.sim_ok) { //Lc_print_buf("ccid: %s,",G.ccid); - L0_uart0_uc('C'); L0_uart0_sendArray(G.ccid,20); Lc_delay_ms(100);// 2000--7s - L0_uart0_uc('S'); + //L0_uart0_uc('S'); //L0_uart0_sendArray(G.ccid_passwd,21); //Lc_print_buf("%s\r\n",G.ccid_passwd); @@ -291,6 +290,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) TTSS_Task_step(TTSS_TASK_GM35_FLOW_CREG_WAIT) if(1 == g_at_send_status.net_ok) { + L0_uart0_sendstr("net ok"); G.boardstatus.a9Status = STATUS_GM35_NET_OK;//修改状态 L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_GPRS,0); } @@ -315,6 +315,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) TTSS_Task_step(TTSS_TASK_GM35_FLOW_GPRS_WAIT) if(1 == g_at_send_status.gprs_ok) { + L0_uart0_sendstr("gprs ok"); G.boardstatus.a9Status = STATUS_GM35_GPRS_OK;//修改状态 L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_CIPSTART,0); } @@ -331,6 +332,8 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) } TTSS_Task_step(TTSS_TASK_GM35_FLOW_CIPSTART) + L0_uart0_uc('L'); + L0_uart0_uc( g_at_send_status.conn_ok + '0'); L0_uart4_sendstr(AT_INS_CIPSTART); g_at_send_status.conn_ok = 0; g_at_send_status.ins_stmp = s_nos_tick.t_1s; @@ -339,6 +342,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) TTSS_Task_step(TTSS_TASK_GM35_FLOW_CIPSTART_WAIT) if(1 == g_at_send_status.conn_ok) { + L0_uart0_sendstr("conn ok"); //L3_task_gm35_send_init(); //初始化发送任务 g_at_send_status.heart_stmp = s_nos_tick.t_1s; diff --git a/source/app/app_task_gm35.h b/source/app/app_task_gm35.h index 021ee01..5bf1d5d 100644 --- a/source/app/app_task_gm35.h +++ b/source/app/app_task_gm35.h @@ -24,7 +24,8 @@ #define AT_INS_CCID "AT+CCID\r\n" //SIM卡查询指令 #define AT_INS_CREG "AT+CREG?\r\n" //网络查询指令 #define AT_INS_GPRS "AT+CGATT=1;+CGDCONT=1,\"IP\",\"CMNET\";+CGACT=1,1\r\n" //GPRS操作指令 -#define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"test.tall.wiki\",8195\r\n" +#define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"test.tall.wiki\",38195\r\n" +//#define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"43.249.193.233\",38916\r\n" //#define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"weizezhao.imwork.net\",49809\r\n" //连接服务器 // #define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"43.249.193.233\",38916\r\n" //连接服务器 #define AT_INS_CIPSEND "AT+CIPSEND\r\n" //发送数据 diff --git a/source/app/app_task_tcp.c b/source/app/app_task_tcp.c index 629c98f..7080817 100644 --- a/source/app/app_task_tcp.c +++ b/source/app/app_task_tcp.c @@ -1,6 +1,7 @@ #include "app_task_tcp.h" #include "../msp/uart0.h" #include "../msp/uart4.h" +#include "../app/app_task_gm35.h" #include "../app/app_common.h" #define MODBUS_SLAVER_DW20_REG_START 0x02 @@ -43,12 +44,14 @@ void L3_task_tcp_handle(TS_tcp *s) } TTSS_Task_step(D_task_tcp_send_modbus_pkg) - L0_uart4_sendArray((U8*)&s->loopPkg,s->pkglen); + + //L0_uart0_sendArray((U8*)&s->loopPkg,s->pkglen); + L3_gm35_send((U8*)&s->loopPkg,s->pkglen); s->sendStamp = s_nos_tick.t_5ms; L2_task_go(D_task_tcp_wait_modbus_ack); TTSS_Task_step(D_task_tcp_wait_modbus_ack) - if(s_nos_tick.t_5ms - s->sendStamp >= 20) + if(s_nos_tick.t_5ms - s->sendStamp >= 200) { if(s_uart4_tcp_rec.ok) { @@ -57,12 +60,6 @@ void L3_task_tcp_handle(TS_tcp *s) if(s->pAckPkg->slaver == G.ccmd_slaver_info[s->slaverIndex].slaver) { s->ackFlag = 1; - if(s->pAckPkg->slaver == G.ccmd_slaver_info[0].slaver && s->pAckPkg->oper == MODBUS_OPER_READ) - { - G.total_weight = - (S32)(s->pAckPkg->buf[1]) << 24 | (S32)(s->pAckPkg->buf[2]) << 16 | (S32)(s->pAckPkg->buf[3]) << 8 - | (S32)(s->pAckPkg->buf[4]); - } } } s->retryTimes++; diff --git a/source/app/app_task_tcp_control.c b/source/app/app_task_tcp_control.c index c3575d7..e68de96 100644 --- a/source/app/app_task_tcp_control.c +++ b/source/app/app_task_tcp_control.c @@ -2,6 +2,7 @@ #include "../msp/uart0.h" #include "../app/app_common.h" #include "../app/app_task_gm35.h" +#include "../app/app_task_tcp.h" TS_tcp_control ts_tcp_control; @@ -25,6 +26,8 @@ void L3_task_tcp_control_handle(TS_tcp_control *s) { if(g_at_send_status.conn_ok) { + L3_task_tcp_init(); + //发送认证包 G.ccmd_slaver_info[0].mask = 1; @@ -38,10 +41,10 @@ void L3_task_tcp_control_handle(TS_tcp_control *s) } s->conn_ok_pool = g_at_send_status.conn_ok; } - + if(s->conn_ok_pool) { - if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 4) + if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3) { G.ccmd_slaver_info[3].mask = 1; ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s; diff --git a/source/app/main.c b/source/app/main.c index 2f5260a..b48baab 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -97,6 +97,8 @@ void L0_main_init(void) 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(); } //=============================================== @@ -139,7 +141,6 @@ void main(void) //master->slaver发送逻辑控制 L3_task_485_control_handle(&ts_485_control); -#if 0 //gm35维持连接 L3_task_gm35_core_handle(); L3_UARTcom4_exp_protocol(&s_uart4_at_rec); @@ -149,31 +150,6 @@ void main(void) //master->slaver发送逻辑控制 L3_task_tcp_control_handle(&ts_tcp_control); -#endif - -#if 0 - //看门狗 - L3_task_wdt_handle(&s_task_wdt); - - //每隔n秒,主动向上位机发送心跳包 - //L3_task_report_handle(&s_task_report); - - //解析串口0协议(上位机发送的控制消息) - L3_UARTcom0_exp_protocol(&s_uart0_rec); - - //gsm模块初始化+tcp发送消息 - //L3_task_a9_handle(); - L3_task_gm35_core_handle(); - - //解析串口4协议(gsm模块收到的at响应消息+服务器发送消息) - L3_UARTcom4_exp_protocol(&s_uart4_at_rec); - - //解析串口4+CIPRCV协议 - L3_task_a9_rcv_handle(&s_uart4_tcp_rec); - - //继电器PC按键弹起 - L3_task_relay_handle(&s_task_relay); -#endif } }//end main diff --git a/source/ctask/tick.h b/source/ctask/tick.h index 4c66eab..c006f91 100644 --- a/source/ctask/tick.h +++ b/source/ctask/tick.h @@ -35,16 +35,16 @@ extern struct _s_nos_tick_ s_nos_tick; //D_debug_sim_usinghhh //10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用 -#define D_Tdelay_ms D_TIMER0_50MS_COUNT//D_TIMER0_10MS_COUNT +#define D_Tdelay_5ms D_TIMER0_5MS_COUNT//D_TIMER0_10MS_COUNT -#define D_Tdelay_100ms (D_Tdelay_ms+2) -#define D_Tdelay_200ms (D_Tdelay_ms+4) -#define D_Tdelay_300ms (D_Tdelay_ms+6) -#define D_Tdelay_400ms (D_Tdelay_ms+8) +#define D_Tdelay_100ms (D_Tdelay_5ms+20) +#define D_Tdelay_200ms (D_Tdelay_5ms+40) +#define D_Tdelay_300ms (D_Tdelay_5ms+60) +#define D_Tdelay_400ms (D_Tdelay_5ms+80) -#define D_Tdelay_1s (D_Tdelay_ms+20) +#define D_Tdelay_1s (D_Tdelay_5ms+200) #define D_Tdelay_2s (D_Tdelay_1s*2) #define D_Tdelay_3s (D_Tdelay_1s*3) #define D_Tdelay_5s (D_Tdelay_1s*5) diff --git a/source/msp/time.h b/source/msp/time.h index dd07b55..c580a67 100644 --- a/source/msp/time.h +++ b/source/msp/time.h @@ -13,6 +13,7 @@ extern void L0_timer0_Init(void); //#define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断 #define D_TIMER0_50MS_COUNT 1 //定时器为 50ms一中断 +#define D_TIMER0_5MS_COUNT 1 //定时器为 50ms一中断 #define D_1us_delay_para 1 diff --git a/source/tpc/tpc_ccmodbus.h b/source/tpc/tpc_ccmodbus.h index 117e161..a78471a 100644 --- a/source/tpc/tpc_ccmodbus.h +++ b/source/tpc/tpc_ccmodbus.h @@ -66,7 +66,7 @@ msp/uartx.c 底层代码 和cpu相关 /// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F /// 校验码的范围为 -#define D_s_PH3_ccmodbus_max 64 +#define D_s_PH3_ccmodbus_max 128 #define D_s_PH3_ccmodbus_min 4 typedef struct