diff --git a/keilp/cc_as_stc02_ps5ws.uvprojx b/keilp/cc_as_stc02_ps5ws.uvprojx index 3d0d2ce..6782846 100644 --- a/keilp/cc_as_stc02_ps5ws.uvprojx +++ b/keilp/cc_as_stc02_ps5ws.uvprojx @@ -10,7 +10,6 @@ STC8F2K16S2 0x0 MCS-51 - 0 AT80C31X2 @@ -177,14 +176,12 @@ 0 0 0 - 0 0 0 0 0 0 0 - 0 0 0 0 @@ -254,16 +251,6 @@ 0x0 0x0 - - 0 - 0x0 - 0x0 - - - 0 - 0x0 - 0x0 - diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_sym b/si4/ps5ws.si4project/soft_ps5ws.sip_sym index 3e50c3d..f5b3cb8 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_sym and b/si4/ps5ws.si4project/soft_ps5ws.sip_sym differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xab b/si4/ps5ws.si4project/soft_ps5ws.sip_xab index ebda7a1..36c17d9 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xab and b/si4/ps5ws.si4project/soft_ps5ws.sip_xab differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xad b/si4/ps5ws.si4project/soft_ps5ws.sip_xad index 426cc27..1484248 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xad and b/si4/ps5ws.si4project/soft_ps5ws.sip_xad differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xc b/si4/ps5ws.si4project/soft_ps5ws.sip_xc index 2f44ca7..fc42b93 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xc and b/si4/ps5ws.si4project/soft_ps5ws.sip_xc differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xf b/si4/ps5ws.si4project/soft_ps5ws.sip_xf index 57ddca8..5ac518c 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xf and b/si4/ps5ws.si4project/soft_ps5ws.sip_xf differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xm b/si4/ps5ws.si4project/soft_ps5ws.sip_xm index c299849..8951bf7 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xm and b/si4/ps5ws.si4project/soft_ps5ws.sip_xm differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xr b/si4/ps5ws.si4project/soft_ps5ws.sip_xr index b2ffd07..3db5d74 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xr and b/si4/ps5ws.si4project/soft_ps5ws.sip_xr differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb index b97f01b..c1ff671 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsb and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsb differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd index bd99620..db7bf5f 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.sip_xsd and b/si4/ps5ws.si4project/soft_ps5ws.sip_xsd differ diff --git a/si4/ps5ws.si4project/soft_ps5ws.siproj b/si4/ps5ws.si4project/soft_ps5ws.siproj index 077d503..c96ede9 100644 Binary files a/si4/ps5ws.si4project/soft_ps5ws.siproj and b/si4/ps5ws.si4project/soft_ps5ws.siproj differ diff --git a/source/app/app_config.c b/source/app/app_config.c index b906984..e43bacb 100644 --- a/source/app/app_config.c +++ b/source/app/app_config.c @@ -3,6 +3,7 @@ #include "../bsp/chipid.h" #include "../msp/eeprom.h" #include "../clib/clib.h" + GlobalParam G; GlobalRegister R; @@ -84,17 +85,45 @@ void L3_iap_2_reg(void) void L3_reg_reset(void) { - R.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道 + U8 i = 0; + //R.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道 R.p.slaver_id = D_UART0_485_SLAVER_ID; - R.p.weight_max = 500; //500kg - R.p.lmd = 2; //2mv/v - R.p.adc_blur_mid = 1; - R.p.adc_blur_avg = 6; - R.p.adc_blur_shift[0] = 0; - R.p.adc_blur_shift[1] = 2; - R.p.adc_blur_shift[2] = 4; - R.p.adc_blur_threshold[0] = 1600; //g - R.p.adc_blur_threshold[1] = 700; //g + //R.p.weight_max = 500; //500kg + //R.p.lmd = 2; //2mv/v + //R.p.adc_blur_mid = 1; + //R.p.adc_blur_avg = 6; + //R.p.adc_blur_shift[0] = 0; + //R.p.adc_blur_shift[1] = 2; + //R.p.adc_blur_shift[2] = 4; + //R.p.adc_blur_threshold[0] = 1600; //g + //R.p.adc_blur_threshold[1] = 700; //g + R.pen_sta = 0; + R.pen_net_sta = 0; + R.pen_ele_sta = 0; + R.question_sta = 0; + R.spee_save = 0; + R.oid3_order = 0; + R.pack_order = 0; + R.frame_order = 0; + R.x_axis1 = 0; + R.y_axis1 = 0; + R.time1 = 0; + R.x_axis2 = 0; + R.y_axis2 = 0; + R.time2 = 0; + + for(i=0;islaver发送逻辑控制 + //L3_task_tcp_control_handle(&ts_tcp_control); } } //end main diff --git a/source/app/task_adc.h b/source/app/task_adc.h index 327b972..18031df 100644 --- a/source/app/task_adc.h +++ b/source/app/task_adc.h @@ -97,22 +97,6 @@ typedef struct _s_task_adc_blur_show }S_TASK_ADC_BLUR_SHOW; -extern S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM]; -//extern S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM]; -extern S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; -extern S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; -extern S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; -extern S_TASK_ADC_BLUR_SHOW ts_adc_blur_show; - - -extern void L3_task_adc_init(U8 ch); -extern void L3_task_show_init(void); -extern void L3_task_adc_handler(U8 ch); -extern void L3_task_adc_init_handler(void); -extern void L3_task_adc_channel_switch_handler(void); -extern void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s); - - #endif // #ifndef _APP_TASK_ADC_H diff --git a/source/app/task_modbus.c b/source/app/task_modbus.c index da89416..813fa9d 100644 --- a/source/app/task_modbus.c +++ b/source/app/task_modbus.c @@ -1,7 +1,7 @@ #include "task_modbus.h" #include "../msp/uart0.h" -#include "../msp/uart2.h" -#include "../tpc/modbus.h" +//#include "../msp/uart2.h" +//#include "../tpc/modbus.h" #include "../app/app_config.h" U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num) @@ -189,7 +189,8 @@ void L3_task_modbus_handler(TP_Handler_X *ph4) { U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack); L0_uart0_sendArray((U8*)&s_uart0_ack, acklen); - } + } + #if 0 else { //LED0 ^= 1; @@ -201,7 +202,8 @@ void L3_task_modbus_handler(TP_Handler_X *ph4) ph4->yes=0; L0_uart2_sendArray(s_uart0_rec.buf, s_uart0_rec.num); } - + #endif +} } void L3_task_modbus_handler2(TP_Handler_X *ph4) { diff --git a/source/app/task_register.c b/source/app/task_register.c index 799f3ec..f715e06 100644 --- a/source/app/task_register.c +++ b/source/app/task_register.c @@ -14,6 +14,7 @@ #include "../app/app_config.h" #include "../bsp/bsp_config.h" #include "../msp/uart0.h" +#include "task_w600.h" //============================================= @@ -26,7 +27,7 @@ void L3_task_reglisten_init(void) } //配置模式任务 -#define D_task_WEIGHT_COUNT 0x50 +#define D_task_WEIGHT_COUNT 0x50 #define D_task_IAP 0x51 void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) { @@ -35,14 +36,16 @@ void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) L2_task_go(D_task_WEIGHT_COUNT); TTSS_Task_step(D_task_WEIGHT_COUNT) - if(R.zero != 0) + if(R.w600_mode == 1) { - R.total_zweight = R.rough_weight; //皮重 = 毛重 - R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重 - R.zero = 0; + L3_gm35_send_str("+++"); + Lc_delay_ms(1000); + //s_task_gm35_flow.mode=W600_AP; + L3_task_gm35_flow_init(W600_AP); + R.w600_mode = 0; } - L2_task_go(D_task_IAP); //延时100ms + L2_task_go(D_task_IAP); //延时100ms TTSS_Task_step(D_task_IAP) if(R.status_eep_save != 0) diff --git a/source/app/task_w600.c b/source/app/task_w600.c index 91884e0..bae8706 100644 --- a/source/app/task_w600.c +++ b/source/app/task_w600.c @@ -17,6 +17,10 @@ #include "../msp/uart0.h" struct _s_task_gm35_gprs_ s_task_gm35_flow; +TS_tcp_control ts_tcp_control; +TS_tcp ts_tcp; + + #define LEN_GPRS_TCP_PKG 18 @@ -62,37 +66,134 @@ void L3_gm35_rcv_data(U8* buf,U8 num) } } +U8 wifi_ins[64]; +char *GET_WIFI_INS() +{ + //AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" + Lc_strcpy(wifi_ins,"AT+CWJAP_DEF=\""); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_sid); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\",\""); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),G.st_pwd); + Lc_strcpy(wifi_ins+Lc_strlen(wifi_ins),"\"\r\n"); + return wifi_ins; +} + + -void L3_uart2_exp_protocol(TS_Handle_0d0a *p) +void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p) { if (1 == p->ok ) { U8 *pPara = p->buf + 1; s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s; + //通用判定 if(Lc_strStartsWith(pPara,"OK")) { s_task_gm35_flow.ins_ok = 1; } - if(Lc_strStartsWith(pPara,"WIFI GOT IP")) + else if(Lc_strStartsWith(pPara,"ERROR")) { - s_task_gm35_flow.wifi_ok = 1; - } - if(Lc_strStartsWith(pPara,"CONNECT")) + s_task_gm35_flow.st_error= 1; + } + //Station模式判定 + if(s_task_gm35_flow.mode == W600_ST) + { + if(Lc_strStartsWith(pPara,"WIFI GOT IP")) + { + s_task_gm35_flow.st_wifi_ok = 1; + } + else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED")) + { + s_task_gm35_flow.st_cip_ok = 1; + } + } + //AP模式判定 + else if(s_task_gm35_flow.mode == W600_AP) { - s_task_gm35_flow.wifi_ok = 1; + if(Lc_strStartsWith(pPara,"+IPD,0")) + { + //解析协议,success + //1将id,pwd放入寄存器2.ok=1 + //失败不处理不设置标志位 + //buf: [20]+IPD,0,5:#ccsens:ccsens123$ 后面没\0 + //pPara: +IPD,0,5:#ccsens:ccsens123$ + + int j = 0 , len = p->buf[0]; + p->buf[len+1] = 0;//在+IPD,0,5:#ccsens:ccsens123$后加0 + for(j=0;jok = 0; } } - //------------------------------------------------------ gm35 tasks -------------------------------- + +void L3_task_tcp_init(void) +{ + L1_task_init(&ts_tcp.task); + L3_task_s_go(ts_tcp,D_task_init); + ts_tcp.slaverIndex = 0; + ts_tcp.pkglen = 0; + ts_tcp.retryTimes = 0; + ts_tcp.ackFlag = 0; +} + +void L3_task_tcp_control_init(void) +{ + L1_task_init(&ts_tcp_control.task); + L3_task_s_go(ts_tcp_control,D_task_init); + ts_tcp_control.conn_ok_pool = 0; + ts_tcp_control.tcp_send_stmp = 0; +} + void L3_task_gm35_flow_init(U8 mode) { L1_task_init(&s_task_gm35_flow.task); L3_task_s_go(s_task_gm35_flow,D_task_init); s_task_gm35_flow.mode = mode; + s_task_gm35_flow.send = 0; #if 0 g_at_send_status.send_lock = 0; @@ -118,25 +219,28 @@ void L3_task_gm35_flow_init(U8 mode) //------------------------ GM35 Flow Handle ----------------------------------- +#define TTSS_TASK_GM35_MODE 0x01 -#define TTSS_TASK_GM35_FLOW_ATEQV 0x01 -#define TTSS_TASK_GM35_FLOW_ATEQV_WAIT 0x02 +#define TTSS_TASK_GM35_FLOW_ATEQV 0x02 #define TTSS_TASK_GM35_FLOW_ST 0x03 -#define TTSS_TASK_GM35_FLOW_ST_WAIT 0x04 -#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x05 -#define TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT 0x06 -#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x07 -#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT 0x08 -#define TTSS_TASK_GM35_FLOW_ST_TCP 0x09 -#define TTSS_TASK_GM35_FLOW_ST_TCP_WAIT 0x0A -#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x0B -#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT 0x0C -#define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x0D -#define TTSS_TASK_GM35_FLOW_ST_CIPSEND_WAIT 0x0E -#define TTSS_TASK_GM35_FLOW_ST_DATA 0x0F +#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x04 +#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x05 +#define TTSS_TASK_GM35_FLOW_ST_TCP 0x06 +#define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x07 +#define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x08 +#define TTSS_TASK_GM35_FLOW_ST_DATA 0x09 +#define TTSS_TASK_GM35_FLOW_ST_CIPMODE0 0x10 #define TTSS_TASK_GM35_FLOW_AP 0x20 -#define TTSS_TASK_GM35_FLOW_AP_WAIT 0x21 +#define TTSS_TASK_GM35_FLOW_AP_WIFI 0x21 +#define TTSS_TASK_GM35_FLOW_AP_CIPMUX1 0x22 +#define TTSS_TASK_GM35_FLOW_AP_SERVER 0x23 +#define TTSS_TASK_GM35_FLOW_TCP_TIME 0x24 +#define TTSS_TASK_GM35_FLOW_AP_DATA 0x25 +#define TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT 0x26 +#define TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT 0x27 +#define TTSS_TASK_MODE_TRAN 0x28 +#define TTSS_TASK_MODE_SERVER_CLOSE 0x29 #define INS_TIMEOUT 5 @@ -144,138 +248,405 @@ void L3_task_gm35_flow_init(U8 mode) #define GM35_SEND_HEART_INTERVAL 60 #define GM35_SEND_CIPSTATUS_INTERVAL 5 + void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) { TTSS_Task_init() L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) - L3_gm35_send_str(AT_INS_ATE0); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV_WAIT,D_Tdelay_300ms); + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ATE0); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(s->ins_ok == 1) //等待 + { + s->send = 0; + L2_task_go_Tdelay(s->mode == W600_ST ? TTSS_TASK_GM35_FLOW_ST + : TTSS_TASK_GM35_FLOW_ST_CIPMODE0,D_Tdelay_3s); + } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV_WAIT) - if(1 == s->ins_ok) - { - if(s->mode == W600_ST) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0); - } - else if(s->mode == W600_AP) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,0); - } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(s->ins_ok == 1) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,D_Tdelay_3s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,0); + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) + if(s->send == 0) + {//发送 + L3_gm35_send_str(GET_WIFI_INS()); + s->ins_ok = 0; + s->st_wifi_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok && 1 == s->st_wifi_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,D_Tdelay_3s); } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST) - L3_gm35_send_str(AT_INS_ST); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_300ms); - - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WAIT) - if(1 == s->ins_ok) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0); + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMUX0); + s->ins_ok = 0; + s->st_wifi_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,D_Tdelay_3s); } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_TCP); + s->ins_ok = 0; + s->st_cip_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok || 1 == s->st_cip_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_3s); + } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMODE1); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,D_Tdelay_3s); + } + + else if(1 == s->st_error) { L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0); } - - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) - L3_gm35_send_str(AT_INS_ST_WIFI); + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND) + L3_gm35_send_str(AT_INS_ST_CIPSEND); s->ins_ok = 0; - s->wifi_ok = 0; + s->conn_ok = 0; s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT,D_Tdelay_300ms); - - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT) - if(1 == s->ins_ok && 1 == s->wifi_ok) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_300ms); + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) + //L0_uart2_sendstr("abcdefg"); + s->conn_ok = 1; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_3s); + + + + + + TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE0) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_ST_CIPMODE0); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_3s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0); + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI,D_Tdelay_3s); } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) - L3_gm35_send_str(AT_INS_ST_CIPMUX0); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT,D_Tdelay_300ms); - - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT) - if(1 == s->ins_ok) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_WIFI); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_3s); } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_CIPMUX1) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_CIPMUX1); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_SERVER,D_Tdelay_3s); } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) - L3_gm35_send_str(AT_INS_ST_TCP); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT,D_Tdelay_5s); - - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT) - if(1 == s->ins_ok) - { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_SERVER) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_SERVER); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_TCP_TIME,D_Tdelay_3s); } + + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_TCP_TIME) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_TCP_TIME); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT,D_Tdelay_3s); + } + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_TCP_CONN_WAIT) + if(1 == s->ap_tcp_ok) { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); + s->ap_conn_ok = 0; + s->ap_tcp_ok = 0; + s->ap_rec_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT,0); + } + TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP_WIFI_DATA_STA_WAIT) + if(1 == s->ap_rec_ok)//收到正确的数据才会ok=1 + {//ok回复#ok$\r\n + L0_uart0_sendstr("ap config ok"); + L3_gm35_send_str(AT_INS_AP_SEND);//进入发送模式 + L2_task_go_Tdelay(TTSS_TASK_MODE_TRAN,D_Tdelay_1s); + } + else if(1 == s->ap_conn_ok) + { + s->ap_conn_ok = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_CIPMUX1,D_Tdelay_300ms); + } + TTSS_Task_step(TTSS_TASK_MODE_TRAN) + if(s->send == 0) + {//发送 + L3_gm35_send_str("#OK$\r\n"); + s->ins_ok = 0; + s->ap_data_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ap_data_ok) //等待 + { + s->send = 0; + s->ap_tcp_ok = 0; + L2_task_go_Tdelay(TTSS_TASK_MODE_SERVER_CLOSE,D_Tdelay_3s); } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) - L3_gm35_send_str(AT_INS_ST_CIPMODE1); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT,D_Tdelay_300ms); + TTSS_Task_step(TTSS_TASK_MODE_SERVER_CLOSE) + if(s->send == 0) + {//发送 + L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE); + s->ins_ok = 0; + s->ins_stmp = s_nos_tick.t_1s; + s->send = 1; + } + else if(1 == s->ins_ok) //等待 + { + s->send = 0; + L3_task_gm35_flow_init(W600_ST); + } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT) - if(1 == s->ins_ok) + else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + {//超时重发 + s->send = 0; + } + TTSS_Task_end(); +} + +#define D_task_tcp_constructor_modbus_pkg 0x41 +#define D_task_tcp_send_modbus_pkg 0x42 +#define D_task_tcp_wait_modbus_ack 0x43 +#define D_task_tcp_switch_next_slaver 0x44 + +void L3_task_tcp_handle(TS_tcp *s) +{ + TTSS_Task_init(); + L2_task_go(D_task_tcp_constructor_modbus_pkg); + + TTSS_Task_step(D_task_tcp_constructor_modbus_pkg) //构造包 + if(R.ccmd_slaver_info[s->slaverIndex].mask > 0) { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,0); + s->pkglen = L3_pack_ccmodbus(&s->loopPkg,R.ccmd_slaver_info + s->slaverIndex); + s->ackFlag = 0; + s->retryTimes = 0; + L2_task_go(D_task_tcp_send_modbus_pkg); } - else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) + else { - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); + L2_task_go(D_task_tcp_switch_next_slaver); } - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPSEND) - L3_gm35_send_str(AT_INS_ST_CIPSEND); - s->ins_ok = 0; - s->ins_stmp = s_nos_tick.t_1s; - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_300ms); + TTSS_Task_step(D_task_tcp_send_modbus_pkg) //发送包 + L3_gm35_send_data((U8*)&s->loopPkg,s->pkglen); + s->sendStamp = s_nos_tick.t_1s; + if(R.ccmd_slaver_info[s->slaverIndex].mask == 1) + { + R.ccmd_slaver_info[s->slaverIndex].mask = 0; + } + L2_task_go(D_task_tcp_wait_modbus_ack); + + TTSS_Task_step(D_task_tcp_wait_modbus_ack) //等待ack + if(s_uart2_tcp_rec.ok) + { + s_uart2_tcp_rec.ok = 0; + s_task_gm35_flow.tcp_last_recv_stmp = s_nos_tick.t_1s; - TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_DATA) - L0_uart0_uc('A'); - L0_uart2_sendstr("abcdefg"); - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_5s); + s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart2_tcp_rec.sp); + L3_gm35_rcv_data((U8*)s->pAckPkg,s->pAckPkg->num + 3); + if(s->pAckPkg->slaver == R.ccmd_slaver_info[s->slaverIndex].slaver) + { + s->ackFlag = 1; + + } + } + if(s->ackFlag == 1 || s_nos_tick.t_1s - s->sendStamp >= 5) //收到ack或者超时 + { + L2_task_go(D_task_tcp_switch_next_slaver); + } + + TTSS_Task_step(D_task_tcp_switch_next_slaver) //切换下一个 + if(++ s->slaverIndex >= CCMD_SLAVER_INFO_MAX) + { + s->slaverIndex = 0; + } + L2_task_go(D_task_tcp_constructor_modbus_pkg); + + TTSS_Task_end(); +} +#define D_task_tcp_control_01 0x51 +#define D_task_tcp_control_02 0x52 +void L3_task_tcp_control_handle(TS_tcp_control *s) +{ + TTSS_Task_init(); + L2_task_go(D_task_tcp_control_01); + + TTSS_Task_step(D_task_tcp_control_01) + if(s->conn_ok_pool != s_task_gm35_flow.conn_ok) + { + s->conn_ok_pool = s_task_gm35_flow.conn_ok; + } + L2_task_go(D_task_tcp_control_02); + TTSS_Task_step(D_task_tcp_control_02) + if(s_task_gm35_flow.conn_ok) + { + //3s一次发送数据包 + if(s_nos_tick.t_1s - ts_tcp_control.tcp_send_stmp >= 3) + { + R.ccmd_slaver_info[0].mask = 1; + ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s; + } + } + L2_task_go(D_task_tcp_control_01); + + TTSS_Task_end(); +} +/********************************************************/ - TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) - L0_uart0_uc('C'); - L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_10s); - - TTSS_Task_end(); -} diff --git a/source/app/task_w600.h b/source/app/task_w600.h index 2982a33..e708a9f 100644 --- a/source/app/task_w600.h +++ b/source/app/task_w600.h @@ -1,104 +1,159 @@ -//////////////////////////////////////////////////////////////////////////// -///@copyright Copyright (c) 2018, 传控科技 All rights reserved. -///------------------------------------------------------------------------- -/// @file bsp_gc6133.c.h -/// @brief bsp @ driver config -///------------------------------------------------------------------------- -/// @version 1.0 -/// @author CC -/// @date 20180331 -/// @note cc_AS_stc02 - -////////////////////////////////////////////////////////////////////////////// - -#ifndef _app_task_w600_H -#define _app_task_w600_H - -#include "../bsp/bsp_config.h" -#include "../bsp/w600.h" -#include "../ctask/task.h" -#include "../tpc/at0d0a.h" - -////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<< -#define AT_INS_ATE0 "ATE1\r\n" //模块查询+关闭回显 -#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式 -#define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" //网络查询指令 -#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" //GPRS操作指令 -#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"192.168.0.79\",4001\r\n" //连接服务器 -#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" //发送数据 -#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" //主动关闭连接 -#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" //查询连接状态 - -////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<< -enum _s_w600_mode -{ - W600_ST,W600_AP -}; -struct _s_task_gm35_gprs_ -{ - TS_task task; - - vU8 ins_ok; - vU8 wifi_ok; - vU8 mode; - - vU8 send_lock; - vU8 module_ok; - vU8 sim_ok; - vU8 net_ok; - vU8 gprs_ok; - vU8 conn_ok; - vU8 status_query_ok; - vU32 ins_stmp; //指令时间戳 - vU32 gprs_last_recv_stmp; //上次接收指令时间戳 - vU32 tcp_last_recv_stmp; //上次接收数据时间戳 - vU32 tcp_conn_stmp; //断开连接时间戳 - vU32 tcp_close_stmp; //断开连接时间戳 - - vU32 heart_stmp; //连接成功后,等待发送时间 - vU32 data_stmp;//数据发送时间记录 - - vU8 sign_flag; //发送登录数据标志 - vU8 ack_flag;//下行数据ack - vU8 gm35_reboot_times; //gm35重启次数 -}; - -#define STATUS_GM35_INIT 0 -#define STATUS_GM35_MODULE_OK 1 -#define STATUS_GM35_SIM_OK 2 -#define STATUS_GM35_NET_OK 3 -#define STATUS_GM35_GPRS_OK 4 -#define STATUS_GM35_TCP_OK 5 -#define BUF_SIZE 5 -#define BUF_MAX 32 //注意缓冲区的长度 - -extern struct _s_task_gm35_gprs_ s_task_gm35_flow; - -extern void L3_task_gm35_flow_init(U8 mode); -extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s); - -extern void L3_uart2_exp_protocol(TS_Handle_0d0a *p); - - -#endif - - - - - - - - - - - - - - - - - - - - - +//////////////////////////////////////////////////////////////////////////// +///@copyright Copyright (c) 2018, 传控科技 All rights reserved. +///------------------------------------------------------------------------- +/// @file bsp_gc6133.c.h +/// @brief bsp @ driver config +///------------------------------------------------------------------------- +/// @version 1.0 +/// @author CC +/// @date 20180331 +/// @note cc_AS_stc02 + +////////////////////////////////////////////////////////////////////////////// + +#ifndef _app_task_w600_H +#define _app_task_w600_H + +#include "../bsp/bsp_config.h" +#include "../bsp/w600.h" +#include "../ctask/task.h" +#include "../tpc/at0d0a.h" +#include "../tpc/ccmodbus.h" + +////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<< +#define AT_INS_ATE0 "ATE0\r\n" //模块查询+关闭回显 +#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式 +//#define AT_INS_ST_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" //网络查询指令 +#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" //GPRS操作指令 +#define AT_INS_ST_TCP "AT+CIPSTART=\"TCP\",\"test.tall.wiki\",49000\r\n" //连接服务器 +#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\r\n" //发送数据 +#define AT_INS_ST_CIPSEND "AT+CIPSEND\r\n" //主动关闭连接 +#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\r\n" //查询连接状态 + + +#define AT_INS_AP "AT+CWMODE=2\r\n" //进入AP模式 +#define AT_INS_AP_WIFI "AT+CWSAP=\"ccsens_pen\",\"ccsens123\",10,4,4,0\r\n" //设置AP参数 +#define AT_INS_AP_CIPMUX1 "AT+CIPMUX=1\r\n" //开启多连接 +#define AT_INS_AP_SERVER "AT+CIPSERVER=1,1001\r\n" //建立服务器 +#define AT_INS_AP_TCP_TIME "AT+CIPSTO=300\r\n" +#define AT_INS_AP_SEND "AT+CIPSENDEX=0,6\r\n" // +#define AT_INS_AP_SERVER_CLOSE "AT+CIPSERVER=0\r\n" // 关闭服务器 + +////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<< +enum _s_w600_mode +{ + W600_ST,W600_AP +}; +struct _s_task_gm35_gprs_ +{ + TS_task task; + vU8 send; + + vU8 ins_ok; + vU8 st_wifi_ok; + vU8 st_conn_ok; + vU8 ap_conn_ok; + vU8 ap_rec_ok; + vU8 st_cip_ok; + vU8 ap_tcp_ok; + vU8 ap_data_ok; + vU8 st_error; + vU8 mode; + + vU8 send_lock; + vU8 module_ok; + vU8 sim_ok; + vU8 net_ok; + vU8 gprs_ok; + vU8 conn_ok; + vU8 status_query_ok; + vU32 ins_stmp; //指令时间戳 + vU32 gprs_last_recv_stmp; //上次接收指令时间戳 + vU32 tcp_last_recv_stmp; //上次接收数据时间戳 + vU32 tcp_conn_stmp; //断开连接时间戳 + vU32 tcp_close_stmp; //断开连接时间戳 + + vU32 heart_stmp; //连接成功后,等待发送时间 + vU32 data_stmp;//数据发送时间记录 + + vU8 sign_flag; //发送登录数据标志 + vU8 ack_flag;//下行数据ack + vU8 gm35_reboot_times; //gm35重启次数 +}; +extern struct _s_task_gm35_gprs_ s_task_gm35_flow; + +#define STATUS_GM35_INIT 0 +#define STATUS_GM35_MODULE_OK 1 +#define STATUS_GM35_SIM_OK 2 +#define STATUS_GM35_NET_OK 3 +#define STATUS_GM35_GPRS_OK 4 +#define STATUS_GM35_TCP_OK 5 +#define BUF_SIZE 5 +#define BUF_MAX 32 //注意缓冲区的长度 +typedef struct +{ + TS_task task; + TS_PH3_ccmodbus loopPkg; + TS_PH3_ccmodbus *pAckPkg; + U8 slaverIndex; + U8 pkglen; + U32 sendStamp; + U8 retryTimes; + U8 ackFlag; + U16 treg; +}TS_tcp; + + +typedef struct +{ + TS_task task; + vU8 conn_ok_pool; + vU32 tcp_send_stmp; +}TS_tcp_control; + +extern TS_tcp_control ts_tcp_control; +extern struct _s_task_gm35_gprs_ s_task_gm35_flow; +extern TS_tcp ts_tcp; + +#define U485_TIMEOUT 3 //3 x 100ms = 300ms +extern TS_tcp ts_tcp; +extern void L3_task_tcp_control_init(); + +extern void L3_task_tcp_init(); + + +extern struct _s_task_gm35_gprs_ s_task_gm35_flow; +extern void L3_gm35_send_str(U8 *str); + +extern void L3_task_gm35_flow_init(U8 mode); +extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s); + +extern void L3_uart2_exp_protocol(struct _s_PC1_0D0A_ *p); + + +extern void L3_task_tcp_handle(TS_tcp *s); + +extern void L3_task_tcp_control_handle(TS_tcp_control *s); + +#endif + + + + + + + + + + + + + + + + + + + + + diff --git a/source/bsp/bsp_config.c b/source/bsp/bsp_config.c index 80b1a06..7f3dbdb 100644 --- a/source/bsp/bsp_config.c +++ b/source/bsp/bsp_config.c @@ -81,4 +81,3 @@ void L0_board_config(void) //Lp0_Sys_timer_extern_handler = L1_Sys_timer_extern_handler; } - diff --git a/source/clib/clib.c b/source/clib/clib.c index 2ddf72f..a5cfafe 100644 --- a/source/clib/clib.c +++ b/source/clib/clib.c @@ -29,6 +29,17 @@ U8 Lc_strStartsWith(U8 *s1,U8 *s2) } +int Lc_strlen(const char *str) +{ + int i; + i = 0; + while((*str++)!='\0') + { + i++; + } + return i; +} + U8* Lc_strcpy(U8* dst,const char* str) { U8 *p = dst; @@ -56,6 +67,7 @@ void Lc_delay_nop(U8 i) } + // D_1ms_delay_para ///22m 300 /// 22M 100ns 5个100ns 20ns @@ -384,13 +396,13 @@ void Lc_encrypt_id1(U8 *enc_dst, U8 *enc_src, U8 enc_key[], U8 src_len) } -int Lc_strlen(char *str) -{ - char *tmp = str; - while(*tmp++) - ; - return tmp - str - 1; -} +//int Lc_strlen(char *str) +//{ +// char *tmp = str; +// while(*tmp++) +// ; +// return tmp - str - 1; +//} int Lc_memset(U8 *buf,U8 c,U16 len) { diff --git a/source/clib/clib.h b/source/clib/clib.h index 6ace03c..70f0109 100644 --- a/source/clib/clib.h +++ b/source/clib/clib.h @@ -28,6 +28,7 @@ typedef struct }TS_up_down_p_; extern U8 Lc_Hex2Char(U8 CharStr); +extern int Lc_strlen(const char *str); extern U8* Lc_strcpy(U8* dst,const char* str); //extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d); // input: 123456d @@ -66,6 +67,7 @@ extern void Lc_sint2str_3(int i_in,char *d); extern char *Lc_int2a(vS32 value, char *string, UN_TYPE radix); extern void Lc_int2D(vS16 value, char *string,char bits); +extern void *Lc_memcpy(void *dest, const void *src, size_t count); extern char *strstr(const char *str1, const char *str2); extern unsigned char catch_protocol (const char d_src[],char d_protocol[]) ; diff --git a/source/msp/UART2.C b/source/msp/UART2.C index eb52ca7..4e18b00 100644 --- a/source/msp/UART2.C +++ b/source/msp/UART2.C @@ -57,7 +57,6 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 #include "uart2.h" #include "../app/app_config.h" #include "../msp/time.h" -#include "../tpc/at0d0a.h" //#define _USE_485 @@ -65,6 +64,7 @@ static volatile Ts_uart_send_buf idata ts_uart_send_shop; TP_Handler_X s_uart2_rec; TS_PH4_modbus s_uart2_ack; struct _s_PC1_0D0A_ s_uart2_at; +TS_Handle_PH3 s_uart2_tcp_rec; void L0_uart2_init(void) { diff --git a/source/msp/UART2.h b/source/msp/UART2.h index c381e2b..32c69ae 100644 --- a/source/msp/UART2.h +++ b/source/msp/UART2.h @@ -54,7 +54,10 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 #define _uart2_H #include "../bsp/bsp_config.h" + +#include "../tpc/at0d0a.h" #include "../tpc/ccmodbus.h" + #include "uart_x.h" #define uNum2 1 @@ -69,7 +72,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 void L0_uart2_buf_init(void); void L0_uart2_sendArray(U8 * buf, U16 len); -void uart2_Handdle(void) ; +void uart2_Handdle(void); #define L0_uart2_uc(X) L0_uartN_uc(uNum2,X) #define L0_uart2_us(X) L0_uartN_us(uNum2,X) #define L0_uart2_ul(X) L0_uartN_ul(uNum2,X) @@ -80,7 +83,8 @@ void uart2_Handdle(void) ; #define L0_uart2_sendstr(buf) L0_uartN_sendstr(uNum2,buf) extern TP_Handler_X s_uart2_rec; extern TS_PH4_modbus s_uart2_ack; -extern struct _s_PC1_0D0A_ s_uart2_at; +extern TS_Handle_0d0a s_uart2_at; +extern TS_Handle_PH3 s_uart2_tcp_rec; #endif //#ifndef _uart2_H diff --git a/source/tpc/at0d0a.c b/source/tpc/at0d0a.c index ce0d80e..7a5f7a7 100644 --- a/source/tpc/at0d0a.c +++ b/source/tpc/at0d0a.c @@ -1,6 +1,7 @@ #include "at0d0a.h" #include "../clib/clib.h" +//#include void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant { if(p->head == 0) diff --git a/source/tpc/ccmodbus.c b/source/tpc/ccmodbus.c index e3408a9..688b01c 100644 --- a/source/tpc/ccmodbus.c +++ b/source/tpc/ccmodbus.c @@ -88,13 +88,67 @@ U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num, return bufsize + bytes + 2 + 2; } #endif +U8 L3_pack_ccmodbus_03(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num) +{ + U8 bufsize = 4; + pmodbus->slaver = slaverId; + pmodbus->oper = MODBUS_OPER_READ; + pmodbus->buf[0] = reg >> 8 & 0xFF; + pmodbus->buf[1] = reg >> 0 & 0xFF; + pmodbus->buf[2] = num >> 8 * 0xFF; + pmodbus->buf[3] = num >> 0 & 0xFF; + crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize); + pmodbus->buf[bufsize] = pmodbus->crc[0]; + pmodbus->buf[bufsize + 1] = pmodbus->crc[1]; + + return bufsize + 2 + 2; +} +U8 L3_pack_ccmodbus_06(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf) +{ + U8 bufsize = 4; + pmodbus->slaver = slaverId; + pmodbus->oper = MODBUS_OPER_WRITE; + pmodbus->buf[0] = reg >> 8 & 0xFF; + pmodbus->buf[1] = reg >> 0 & 0xFF; + pmodbus->buf[2] = buf[0]; + pmodbus->buf[3] = buf[1]; + crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize); + pmodbus->buf[bufsize] = pmodbus->crc[0]; + pmodbus->buf[bufsize + 1] = pmodbus->crc[1]; + + return bufsize + 2 + 2; +} + +U8 L3_pack_ccmodbus_10(TS_PH3_ccmodbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf) +{ + U8 bufsize = 5,i = 0; + pmodbus->slaver = slaverId; + pmodbus->oper = MODBUS_OPER_WRITE_M; + pmodbus->buf[0] = reg >> 8 & 0xFF; + pmodbus->buf[1] = reg >> 0 & 0xFF; + pmodbus->buf[2] = num >> 8 * 0xFF; + pmodbus->buf[3] = num >> 0 & 0xFF; + pmodbus->buf[4] = bytes; + + for(i=0;ibuf[5+i] = buf[i]; + } + crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize + bytes); + pmodbus->buf[bufsize + bytes] = pmodbus->crc[0]; + pmodbus->buf[bufsize + bytes + 1] = pmodbus->crc[1]; + + return bufsize + bytes + 2 + 2; +} + +#if 0 U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info) { pccmodbus->filter1 = D_CMD_Filter1_ff; pccmodbus->filter2 = D_CMD_Filter2_fe; pccmodbus->num = L3_pack_modbus((TS_PH4_modbus*)&pccmodbus->slaver, slaver_info); -#if 0 + switch(slaver_info->oper) { case MODBUS_OPER_READ: @@ -110,9 +164,10 @@ U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info) break; } pccmodbus->num = pkglen; -#endif + return pccmodbus->num + 3; } +#endif U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck) { @@ -175,6 +230,29 @@ void L1_s2b_PH3(struct _tp_handler_x *p)// reentrant } } +U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info) +{ + U8 pkglen = 0; + pccmodbus->filter1 = D_CMD_Filter1_ff; + pccmodbus->filter2 = D_CMD_Filter2_fe; + switch(slaver_info->oper) + { + case MODBUS_OPER_READ: + pkglen = L3_pack_ccmodbus_03(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum); + break; + case MODBUS_OPER_WRITE: + pkglen = L3_pack_ccmodbus_06(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf); + break; + case MODBUS_OPER_WRITE_M: + pkglen = L3_pack_ccmodbus_10(pccmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf); + break; + + default: + break; + } + pccmodbus->num = pkglen; + return pkglen + 3; +} /****************************************************************************** diff --git a/source/tpc/ccmodbus.h b/source/tpc/ccmodbus.h index 234355f..1e59882 100644 --- a/source/tpc/ccmodbus.h +++ b/source/tpc/ccmodbus.h @@ -77,7 +77,23 @@ typedef struct vU8 crc[2]; //crc16 }TS_PH3_ccmodbus; -#if 0 + + +typedef struct +{//8byte + vU8 cashe[2]; + vU8 reg; + vU8 max; //接收到的数目的最大值 + vU8 head_0; + vU8 head_1; + vU8 head; //接收标志头标志 + vU8 ok; //接收协议ok标志 + vU8 num; + vU8 *sp; + TS_PH3_ccmodbus ts_ccmodbus; + vU8 crc[2]; +}TS_Handle_PH3; + typedef struct { U16 slaver; @@ -88,11 +104,12 @@ typedef struct U8 *buf; U16 mask; }CCMD_SLAVER_INFO; -#endif + + extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info); extern U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck); extern void L3_ccmodbus_master_handler(TS_PH3_ccmodbus *pmodbus,MD_SLAVER_INFO *p_slaver_info); extern void L1_s2b_PH3(struct _tp_handler_x *p);// reentrant; -#endif /* end __TPC_CCMODBUS_H_ */ \ No newline at end of file +#endif /* end __TPC_CCMODBUS_H_ */