Browse Source

w600测试通过

master
liyating 4 years ago
parent
commit
6089a27fd7
  1. 13
      keilp/cc_as_stc02_ps5ws.uvprojx
  2. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_sym
  3. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xab
  4. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xad
  5. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xc
  6. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xf
  7. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xm
  8. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xr
  9. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsb
  10. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsd
  11. BIN
      si4/ps5ws.si4project/soft_ps5ws.siproj
  12. 49
      source/app/app_config.c
  13. 53
      source/app/app_config.h
  14. 28
      source/app/app_task_tcp.h
  15. 12
      source/app/main.c
  16. 16
      source/app/task_adc.h
  17. 8
      source/app/task_modbus.c
  18. 13
      source/app/task_register.c
  19. 533
      source/app/task_w600.c
  20. 65
      source/app/task_w600.h
  21. 1
      source/bsp/bsp_config.c
  22. 26
      source/clib/clib.c
  23. 2
      source/clib/clib.h
  24. 2
      source/msp/UART2.C
  25. 8
      source/msp/UART2.h
  26. 1
      source/tpc/at0d0a.c
  27. 82
      source/tpc/ccmodbus.c
  28. 21
      source/tpc/ccmodbus.h

13
keilp/cc_as_stc02_ps5ws.uvprojx

@ -10,7 +10,6 @@
<TargetName>STC8F2K16S2</TargetName> <TargetName>STC8F2K16S2</TargetName>
<ToolsetNumber>0x0</ToolsetNumber> <ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName> <ToolsetName>MCS-51</ToolsetName>
<uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
<Device>AT80C31X2</Device> <Device>AT80C31X2</Device>
@ -177,14 +176,12 @@
<Mx51P>0</Mx51P> <Mx51P>0</Mx51P>
<hadXRAM2>0</hadXRAM2> <hadXRAM2>0</hadXRAM2>
<uocXram2>0</uocXram2> <uocXram2>0</uocXram2>
<hadXRAM3>0</hadXRAM3>
<ModC2>0</ModC2> <ModC2>0</ModC2>
<ModH2>0</ModH2> <ModH2>0</ModH2>
<Mdu_R515>0</Mdu_R515> <Mdu_R515>0</Mdu_R515>
<Mdu_F120>0</Mdu_F120> <Mdu_F120>0</Mdu_F120>
<Psoc>0</Psoc> <Psoc>0</Psoc>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<hadIROM3>0</hadIROM3>
<ModSmx2>0</ModSmx2> <ModSmx2>0</ModSmx2>
<cBanks>0</cBanks> <cBanks>0</cBanks>
<xBanks>0</xBanks> <xBanks>0</xBanks>
@ -254,16 +251,6 @@
<StartAddress>0x0</StartAddress> <StartAddress>0x0</StartAddress>
<Size>0x0</Size> <Size>0x0</Size>
</IROM512> </IROM512>
<XRA513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</XRA513>
<IROM513>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</IROM513>
</OnChipMemories> </OnChipMemories>
</Target51Misc> </Target51Misc>
<C51> <C51>

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_sym

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xab

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xad

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xc

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xf

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xm

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xr

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsb

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsd

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.siproj

Binary file not shown.

49
source/app/app_config.c

@ -3,6 +3,7 @@
#include "../bsp/chipid.h" #include "../bsp/chipid.h"
#include "../msp/eeprom.h" #include "../msp/eeprom.h"
#include "../clib/clib.h" #include "../clib/clib.h"
GlobalParam G; GlobalParam G;
GlobalRegister R; GlobalRegister R;
@ -84,17 +85,45 @@ void L3_iap_2_reg(void)
void L3_reg_reset(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.slaver_id = D_UART0_485_SLAVER_ID;
R.p.weight_max = 500; //500kg //R.p.weight_max = 500; //500kg
R.p.lmd = 2; //2mv/v //R.p.lmd = 2; //2mv/v
R.p.adc_blur_mid = 1; //R.p.adc_blur_mid = 1;
R.p.adc_blur_avg = 6; //R.p.adc_blur_avg = 6;
R.p.adc_blur_shift[0] = 0; //R.p.adc_blur_shift[0] = 0;
R.p.adc_blur_shift[1] = 2; //R.p.adc_blur_shift[1] = 2;
R.p.adc_blur_shift[2] = 4; //R.p.adc_blur_shift[2] = 4;
R.p.adc_blur_threshold[0] = 1600; //g //R.p.adc_blur_threshold[0] = 1600; //g
R.p.adc_blur_threshold[1] = 700; //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;i<CCMD_SLAVER_INFO_MAX;i++)
{
R.ccmd_slaver_info[i].mask = 0;
}
R.ccmd_slaver_info[0].slaver = SLAVER_TCP_SERVER_ID;
R.ccmd_slaver_info[0].oper = MODBUS_OPER_WRITE_M;
R.ccmd_slaver_info[0].reg = 0x00;
R.ccmd_slaver_info[0].regnum = 0x21;
R.ccmd_slaver_info[0].bytes = R.ccmd_slaver_info[0].regnum * 2;
R.ccmd_slaver_info[0].buf = (U8*)&R.pen_sta;
R.ccmd_slaver_info[0].mask = 2;
} }
void L3_reg_init(void) void L3_reg_init(void)

53
source/app/app_config.h

@ -3,8 +3,10 @@
#include "../clib/type.h" #include "../clib/type.h"
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../bsp/bsp_config.h"
#include "../tpc/ccmodbus.h"
#define APP_VERSION 0x10 #define APP_VERSION 0x10
#define SLAVER_TCP_SERVER_ID 0x10
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 )) #define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000) #define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
@ -14,21 +16,29 @@
//寄存器编号从1开始 //寄存器编号从1开始
//#define D_COUNT_WEIGHT(adc) (U32)(1000.0 * R.p.weight_max * (adc) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd)) //#define D_COUNT_WEIGHT(adc) (U32)(1000.0 * R.p.weight_max * (adc) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd))
//#define D_blur_threshold_2_1(threshold) (U32) ( 1.0 * threshold *(2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd) / (1000.0 * R.p.weight_max )) //#define D_blur_threshold_2_1(threshold) (U32) ( 1.0 * threshold *(2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd) / (1000.0 * R.p.weight_max ))
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
#define ADC_status_chx_Ready_BASE 0x01
#define ADC_status_ch1_Ready 0x01 #define CCMD_SLAVER_INFO_MAX 4
#define ADC_status_ch2_Ready 0x02
#define ADC_status_ch3_Ready 0x04
#define ADC_status_ch4_Ready 0x08
#define D_ADC_CHANNEL_NUM 4
typedef struct global_register typedef struct global_register
{ {
//RO Register //RO Register
U16 reserved1; U16 w600_mode;
U32 total_weight; //净重(显示重量)*100 U16 pen_sta;
U32 total_zweight; //皮重*100 U16 pen_net_sta;
U16 pen_ele_sta;
U16 question_sta;
U16 spee_save;
U32 oid3_order;
U16 pack_order;
U16 frame_order;
U32 x_axis1;
U32 y_axis1;
U32 time1;
U32 x_axis2;
U32 y_axis2;
U32 time2;
CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];
//RW Register //RW Register
U16 reserved2; U16 reserved2;
U16 zero; //清0标志,写入任何值清0(去皮) U16 zero; //清0标志,写入任何值清0(去皮)
@ -37,18 +47,9 @@ typedef struct global_register
struct struct
{ //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出 { //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
U16 slaver_id; U16 slaver_id;
U16 adc_ch_status;
U16 weight_max; //量程
U16 lmd; //2mv/v
U16 adc_blur_mid; //中值滤波
U16 adc_blur_avg; //均值滤波
U16 adc_blur_shift[3]; //移位滤波点数
U16 adc_blur_threshold[2]; //移位滤波阀值
}p; }p;
U16 reserved3; U16 reserved3;
U32 adval[D_ADC_CHANNEL_NUM]; //4路重量
U32 ch_weight[D_ADC_CHANNEL_NUM]; //4路重量
U32 rough_weight; // 毛重
}GlobalRegister; }GlobalRegister;
extern GlobalRegister R; extern GlobalRegister R;
@ -56,9 +57,9 @@ extern GlobalRegister R;
//寄存器内存基地址 //寄存器内存基地址
#define REG_MEM_BASE ((U16*)(&R)) //寄存器基础地址(本文件外部不应该使用该宏定义) #define REG_MEM_BASE ((U16*)(&R)) //寄存器基础地址(本文件外部不应该使用该宏定义)
//变量地址转寄存器 //变量地址转寄存器
#define MEM_2_REG(mem) (((U16*)(mem) - REG_MEM_BASE) + 1) #define MEM_2_REG(mem) (((U16*)(mem) - REG_MEM_BASE))
//寄存器转变量地址 //寄存器转变量地址
#define REG_2_MEM(reg) (REG_MEM_BASE + (U16)((reg) - 1)) #define REG_2_MEM(reg) (REG_MEM_BASE + (U16)((reg))) //寄存及从0地址开始
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Register CONFIG End //STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Register CONFIG End
@ -75,9 +76,9 @@ typedef struct global_param
//station模式状态 //station模式状态
U8 st_status; //0:none 1:wifi_ok 2:tcp_connect_ok U8 st_status; //0:none 1:wifi_ok 2:tcp_connect_ok
//station模式sid //station模式sid
U8 st_sid[32]; U8 st_sid[32];//必须是一个字符串 "ccsens\0"
//station模式pwd //station模式pwd
U8 st_pwd[32]; U8 st_pwd[32];//必须是一个字符串 "ccsens123\0"
//ap模式状态 //ap模式状态
U8 ap_status; //0: none 1: ap_ok 2:tcp_server_ok U8 ap_status; //0: none 1: ap_ok 2:tcp_server_ok
//ap模式sid //ap模式sid

28
source/app/app_task_tcp.h

@ -0,0 +1,28 @@
#ifndef APP_TASK_TCP
#define APP_TASK_TCP
#include "../ctask/task.h"
#include "../tpc/tpc_ccmodbus.h"
#include "app_common.h"
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;
#define U485_TIMEOUT 3 //3 x 100ms = 300ms
extern TS_tcp ts_tcp;
extern void L3_task_tcp_init();
extern void L3_task_tcp_handle(TS_tcp *s);
#endif

12
source/app/main.c

@ -99,6 +99,9 @@ void L0_main_init(void)
//w600任务初始化 //w600任务初始化
L3_task_gm35_flow_init(W600_ST); L3_task_gm35_flow_init(W600_ST);
//L3_task_tcp_init(); //485轮询任务初始化
//L3_task_tcp_control_init();
} }
//=============================================== //===============================================
@ -124,10 +127,15 @@ void main(void)
L2_task_gm35_flow_handle(&s_task_gm35_flow); L2_task_gm35_flow_handle(&s_task_gm35_flow);
//寄存器值监控 //寄存器值监控
//L3_task_reglisten_handle(&s_task_reglisten); L3_task_reglisten_handle(&s_task_reglisten);
//输出,响应485协议 //输出,响应485协议
//L3_task_modbus_handler(&s_uart0_rec); L3_task_modbus_handler(&s_uart0_rec);
//L3_task_modbus_handler2(&s_uart2_rec); //L3_task_modbus_handler2(&s_uart2_rec);
//tcp发送
//L3_task_tcp_handle(&ts_tcp);
//tcp master->slaver发送逻辑控制
//L3_task_tcp_control_handle(&ts_tcp_control);
} }
} }
//end main //end main

16
source/app/task_adc.h

@ -97,22 +97,6 @@ typedef struct _s_task_adc_blur_show
}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 #endif // #ifndef _APP_TASK_ADC_H

8
source/app/task_modbus.c

@ -1,7 +1,7 @@
#include "task_modbus.h" #include "task_modbus.h"
#include "../msp/uart0.h" #include "../msp/uart0.h"
#include "../msp/uart2.h" //#include "../msp/uart2.h"
#include "../tpc/modbus.h" //#include "../tpc/modbus.h"
#include "../app/app_config.h" #include "../app/app_config.h"
U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num) U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
@ -190,6 +190,7 @@ void L3_task_modbus_handler(TP_Handler_X *ph4)
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack); U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen); L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
} }
#if 0
else else
{ {
//LED0 ^= 1; //LED0 ^= 1;
@ -201,7 +202,8 @@ void L3_task_modbus_handler(TP_Handler_X *ph4)
ph4->yes=0; ph4->yes=0;
L0_uart2_sendArray(s_uart0_rec.buf, s_uart0_rec.num); L0_uart2_sendArray(s_uart0_rec.buf, s_uart0_rec.num);
} }
#endif
}
} }
void L3_task_modbus_handler2(TP_Handler_X *ph4) void L3_task_modbus_handler2(TP_Handler_X *ph4)
{ {

13
source/app/task_register.c

@ -14,6 +14,7 @@
#include "../app/app_config.h" #include "../app/app_config.h"
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../msp/uart0.h" #include "../msp/uart0.h"
#include "task_w600.h"
//============================================= //=============================================
@ -35,14 +36,16 @@ void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
L2_task_go(D_task_WEIGHT_COUNT); L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(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; //皮重 = 毛重 L3_gm35_send_str("+++");
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重 Lc_delay_ms(1000);
R.zero = 0; //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) TTSS_Task_step(D_task_IAP)
if(R.status_eep_save != 0) if(R.status_eep_save != 0)

533
source/app/task_w600.c

@ -17,6 +17,10 @@
#include "../msp/uart0.h" #include "../msp/uart0.h"
struct _s_task_gm35_gprs_ s_task_gm35_flow; 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 #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 ) if (1 == p->ok )
{ {
U8 *pPara = p->buf + 1; U8 *pPara = p->buf + 1;
s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s; s_task_gm35_flow.gprs_last_recv_stmp = s_nos_tick.t_1s;
//通用判定
if(Lc_strStartsWith(pPara,"OK")) if(Lc_strStartsWith(pPara,"OK"))
{ {
s_task_gm35_flow.ins_ok = 1; s_task_gm35_flow.ins_ok = 1;
} }
else if(Lc_strStartsWith(pPara,"ERROR"))
{
s_task_gm35_flow.st_error= 1;
}
//Station模式判定
if(s_task_gm35_flow.mode == W600_ST)
{
if(Lc_strStartsWith(pPara,"WIFI GOT IP")) if(Lc_strStartsWith(pPara,"WIFI GOT IP"))
{ {
s_task_gm35_flow.wifi_ok = 1; s_task_gm35_flow.st_wifi_ok = 1;
}
else if(Lc_strStartsWith(pPara,"ALREADY CONNECTED"))
{
s_task_gm35_flow.st_cip_ok = 1;
}
} }
if(Lc_strStartsWith(pPara,"CONNECT")) //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;j<len;j++)
{
if(pPara[j] == ':')
{
break;
}
}
pPara += (j+1);//pPara ===== #ccsens:ccsens123$
L0_uart0_sendstr(pPara);
len = Lc_strlen(pPara);
if(pPara[0] == '#' && pPara[len-1] == '$')
{
pPara[len-1] = 0;
pPara++;//pPara ===== ccsens:ccsens123
for(j=0;j<len;j++)
{
if(pPara[j] == ':')
{
break;
}
}
pPara[j] = 0;//ccsens\0ccsens123
Lc_strcpy(G.st_sid, pPara);
pPara += j+1;//ccsens123
Lc_strcpy(G.st_pwd, pPara);
//标志位
s_task_gm35_flow.ap_rec_ok = 1;
}
} }
else if(Lc_strStartsWith(pPara,"0,CONNECT"))
{
s_task_gm35_flow.ap_tcp_ok = 1;
}
else if(Lc_strStartsWith(pPara,"SEND OK"))
{
s_task_gm35_flow.ap_data_ok= 1;
}
else if(Lc_strStartsWith(pPara,"+DIST_STA_IP"))
{
s_task_gm35_flow.ap_conn_ok = 1;
}
}
p->ok = 0; p->ok = 0;
} }
} }
//------------------------------------------------------ gm35 tasks -------------------------------- //------------------------------------------------------ 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) void L3_task_gm35_flow_init(U8 mode)
{ {
L1_task_init(&s_task_gm35_flow.task); L1_task_init(&s_task_gm35_flow.task);
L3_task_s_go(s_task_gm35_flow,D_task_init); L3_task_s_go(s_task_gm35_flow,D_task_init);
s_task_gm35_flow.mode = mode; s_task_gm35_flow.mode = mode;
s_task_gm35_flow.send = 0;
#if 0 #if 0
g_at_send_status.send_lock = 0; g_at_send_status.send_lock = 0;
@ -118,25 +219,28 @@ void L3_task_gm35_flow_init(U8 mode)
//------------------------ GM35 Flow Handle ----------------------------------- //------------------------ GM35 Flow Handle -----------------------------------
#define TTSS_TASK_GM35_MODE 0x01
#define TTSS_TASK_GM35_FLOW_ATEQV 0x01 #define TTSS_TASK_GM35_FLOW_ATEQV 0x02
#define TTSS_TASK_GM35_FLOW_ATEQV_WAIT 0x02
#define TTSS_TASK_GM35_FLOW_ST 0x03 #define TTSS_TASK_GM35_FLOW_ST 0x03
#define TTSS_TASK_GM35_FLOW_ST_WAIT 0x04 #define TTSS_TASK_GM35_FLOW_ST_WIFI 0x04
#define TTSS_TASK_GM35_FLOW_ST_WIFI 0x05 #define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x05
#define TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT 0x06 #define TTSS_TASK_GM35_FLOW_ST_TCP 0x06
#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0 0x07 #define TTSS_TASK_GM35_FLOW_ST_CIPMODE1 0x07
#define TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT 0x08 #define TTSS_TASK_GM35_FLOW_ST_CIPSEND 0x08
#define TTSS_TASK_GM35_FLOW_ST_TCP 0x09 #define TTSS_TASK_GM35_FLOW_ST_DATA 0x09
#define TTSS_TASK_GM35_FLOW_ST_TCP_WAIT 0x0A #define TTSS_TASK_GM35_FLOW_ST_CIPMODE0 0x10
#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_AP 0x20 #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 #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_HEART_INTERVAL 60
#define GM35_SEND_CIPSTATUS_INTERVAL 5 #define GM35_SEND_CIPSTATUS_INTERVAL 5
void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s) void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
{ {
TTSS_Task_init() TTSS_Task_init()
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV,D_Tdelay_10s);//上电等待10s
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV) TTSS_Task_step(TTSS_TASK_GM35_FLOW_ATEQV)
if(s->send == 0)
{//发送
L3_gm35_send_str(AT_INS_ATE0); L3_gm35_send_str(AT_INS_ATE0);
s->ins_ok = 0; s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ATEQV_WAIT,D_Tdelay_300ms); s->send = 1;
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) else if(s->ins_ok == 1) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,0); 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);
} }
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) 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) TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST)
if(s->send == 0)
{//发送
L3_gm35_send_str(AT_INS_ST); L3_gm35_send_str(AT_INS_ST);
s->ins_ok = 0; s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_300ms); s->send = 1;
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) else if(s->ins_ok == 1) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0); 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)
{//超时重发
s->send = 0;
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI) TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_WIFI)
L3_gm35_send_str(AT_INS_ST_WIFI); if(s->send == 0)
{//发送
L3_gm35_send_str(GET_WIFI_INS());
s->ins_ok = 0; s->ins_ok = 0;
s->wifi_ok = 0; s->st_wifi_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI_WAIT,D_Tdelay_300ms); 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_WIFI_WAIT) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
if(1 == s->ins_ok && 1 == s->wifi_ok) {//超时重发
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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); 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) 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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WIFI,0); s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,D_Tdelay_3s);
} }
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
L3_gm35_send_str(AT_INS_ST_CIPMUX0); {//超时重发
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_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT,D_Tdelay_300ms); 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);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMUX0_WAIT) else if(1 == s->st_error)
if(1 == s->ins_ok)
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST,0);
} }
else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT) 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->conn_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(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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMUX0,0); s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP,D_Tdelay_3s);
} }
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_TCP) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
L3_gm35_send_str(AT_INS_ST_TCP); {//超时重发
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_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP_WAIT,D_Tdelay_5s); 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_TCP_WAIT) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
if(1 == s->ins_ok) {//超时重发
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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); 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) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
{//超时重发
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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_TCP,0); s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_AP_SERVER,D_Tdelay_3s);
} }
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
L3_gm35_send_str(AT_INS_ST_CIPMODE1); {//超时重发
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_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT,D_Tdelay_300ms); 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);
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_ST_CIPMODE1_WAIT) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
if(1 == s->ins_ok) {//超时重发
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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPSEND,0); 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) 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)
{
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) //等待
{ {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_CIPMODE1,0); 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_CIPSEND) TTSS_Task_step(TTSS_TASK_MODE_SERVER_CLOSE)
L3_gm35_send_str(AT_INS_ST_CIPSEND); if(s->send == 0)
{//发送
L3_gm35_send_str(AT_INS_AP_SERVER_CLOSE);
s->ins_ok = 0; s->ins_ok = 0;
s->ins_stmp = s_nos_tick.t_1s; s->ins_stmp = s_nos_tick.t_1s;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_300ms); 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_DATA) else if(s_nos_tick.t_1s - s->ins_stmp > INS_TIMEOUT)
L0_uart0_uc('A'); {//超时重发
L0_uart2_sendstr("abcdefg"); s->send = 0;
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_DATA,D_Tdelay_5s); }
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)
{
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
{
L2_task_go(D_task_tcp_switch_next_slaver);
}
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;
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
TTSS_Task_step(TTSS_TASK_GM35_FLOW_AP) void L3_task_tcp_control_handle(TS_tcp_control *s)
L0_uart0_uc('C'); {
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_ST_WAIT,D_Tdelay_10s); 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_end();
} }
/********************************************************/

65
source/app/task_w600.h

@ -18,17 +18,27 @@
#include "../bsp/w600.h" #include "../bsp/w600.h"
#include "../ctask/task.h" #include "../ctask/task.h"
#include "../tpc/at0d0a.h" #include "../tpc/at0d0a.h"
#include "../tpc/ccmodbus.h"
////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<< ////<<<<<<<<<<<<<<<<<<< GM35模块 AT操作指令 <<<<<<<<<<<<<<<<<<<<<<<<
#define AT_INS_ATE0 "ATE1\r\n" //模块查询+关闭回显 #define AT_INS_ATE0 "ATE0\r\n" //模块查询+关闭回显
#define AT_INS_ST "AT+CWMODE=1\r\n" //进入station模式 #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_WIFI "AT+CWJAP_DEF=\"ccsens\",\"ccsens123\"\r\n" //网络查询指令
#define AT_INS_ST_CIPMUX0 "AT+CIPMUX=0\r\n" //GPRS操作指令 #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_TCP "AT+CIPSTART=\"TCP\",\"test.tall.wiki\",49000\r\n" //连接服务器
#define AT_INS_ST_CIPMODE1 "AT+CIPMODE=1\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_CIPSEND "AT+CIPSEND\r\n" //主动关闭连接
#define AT_INS_ST_CIPMODE0 "AT+CIPMODE=0\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_<<<<<<<<<<<<<<<<<<<<<<<< ////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
enum _s_w600_mode enum _s_w600_mode
{ {
@ -37,9 +47,17 @@ enum _s_w600_mode
struct _s_task_gm35_gprs_ struct _s_task_gm35_gprs_
{ {
TS_task task; TS_task task;
vU8 send;
vU8 ins_ok; vU8 ins_ok;
vU8 wifi_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 mode;
vU8 send_lock; vU8 send_lock;
@ -62,6 +80,7 @@ struct _s_task_gm35_gprs_
vU8 ack_flag;//下行数据ack vU8 ack_flag;//下行数据ack
vU8 gm35_reboot_times; //gm35重启次数 vU8 gm35_reboot_times; //gm35重启次数
}; };
extern struct _s_task_gm35_gprs_ s_task_gm35_flow;
#define STATUS_GM35_INIT 0 #define STATUS_GM35_INIT 0
#define STATUS_GM35_MODULE_OK 1 #define STATUS_GM35_MODULE_OK 1
@ -71,14 +90,50 @@ struct _s_task_gm35_gprs_
#define STATUS_GM35_TCP_OK 5 #define STATUS_GM35_TCP_OK 5
#define BUF_SIZE 5 #define BUF_SIZE 5
#define BUF_MAX 32 //注意缓冲区的长度 #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 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 L3_task_gm35_flow_init(U8 mode);
extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s); extern void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s);
extern void L3_uart2_exp_protocol(TS_Handle_0d0a *p); 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 #endif

1
source/bsp/bsp_config.c

@ -81,4 +81,3 @@ void L0_board_config(void)
//Lp0_Sys_timer_extern_handler = L1_Sys_timer_extern_handler; //Lp0_Sys_timer_extern_handler = L1_Sys_timer_extern_handler;
} }

26
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* Lc_strcpy(U8* dst,const char* str)
{ {
U8 *p = dst; U8 *p = dst;
@ -56,6 +67,7 @@ void Lc_delay_nop(U8 i)
} }
// D_1ms_delay_para // D_1ms_delay_para
///22m 300 ///22m 300
/// 22M 100ns 5个100ns 20ns /// 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) //int Lc_strlen(char *str)
{ //{
char *tmp = str; // char *tmp = str;
while(*tmp++) // while(*tmp++)
; // ;
return tmp - str - 1; // return tmp - str - 1;
} //}
int Lc_memset(U8 *buf,U8 c,U16 len) int Lc_memset(U8 *buf,U8 c,U16 len)
{ {

2
source/clib/clib.h

@ -28,6 +28,7 @@ typedef struct
}TS_up_down_p_; }TS_up_down_p_;
extern U8 Lc_Hex2Char(U8 CharStr); extern U8 Lc_Hex2Char(U8 CharStr);
extern int Lc_strlen(const char *str);
extern U8* Lc_strcpy(U8* dst,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); //extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
// input: 123456d // 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 char *Lc_int2a(vS32 value, char *string, UN_TYPE radix);
extern void Lc_int2D(vS16 value, char *string,char bits); 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 char *strstr(const char *str1, const char *str2);
extern unsigned char catch_protocol (const char d_src[],char d_protocol[]) ; extern unsigned char catch_protocol (const char d_src[],char d_protocol[]) ;

2
source/msp/UART2.C

@ -57,7 +57,6 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#include "uart2.h" #include "uart2.h"
#include "../app/app_config.h" #include "../app/app_config.h"
#include "../msp/time.h" #include "../msp/time.h"
#include "../tpc/at0d0a.h"
//#define _USE_485 //#define _USE_485
@ -65,6 +64,7 @@ static volatile Ts_uart_send_buf idata ts_uart_send_shop;
TP_Handler_X s_uart2_rec; TP_Handler_X s_uart2_rec;
TS_PH4_modbus s_uart2_ack; TS_PH4_modbus s_uart2_ack;
struct _s_PC1_0D0A_ s_uart2_at; struct _s_PC1_0D0A_ s_uart2_at;
TS_Handle_PH3 s_uart2_tcp_rec;
void L0_uart2_init(void) void L0_uart2_init(void)
{ {

8
source/msp/UART2.h

@ -54,7 +54,10 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#define _uart2_H #define _uart2_H
#include "../bsp/bsp_config.h" #include "../bsp/bsp_config.h"
#include "../tpc/at0d0a.h"
#include "../tpc/ccmodbus.h" #include "../tpc/ccmodbus.h"
#include "uart_x.h" #include "uart_x.h"
#define uNum2 1 #define uNum2 1
@ -69,7 +72,7 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
void L0_uart2_buf_init(void); void L0_uart2_buf_init(void);
void L0_uart2_sendArray(U8 * buf, U16 len); 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_uc(X) L0_uartN_uc(uNum2,X)
#define L0_uart2_us(X) L0_uartN_us(uNum2,X) #define L0_uart2_us(X) L0_uartN_us(uNum2,X)
#define L0_uart2_ul(X) L0_uartN_ul(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) #define L0_uart2_sendstr(buf) L0_uartN_sendstr(uNum2,buf)
extern TP_Handler_X s_uart2_rec; extern TP_Handler_X s_uart2_rec;
extern TS_PH4_modbus s_uart2_ack; 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 #endif //#ifndef _uart2_H

1
source/tpc/at0d0a.c

@ -1,6 +1,7 @@
#include "at0d0a.h" #include "at0d0a.h"
#include "../clib/clib.h" #include "../clib/clib.h"
//#include <REG51.H>
void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant void L1_s2b_0d0a(struct _s_PC1_0D0A_ *p)// reentrant
{ {
if(p->head == 0) if(p->head == 0)

82
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; return bufsize + bytes + 2 + 2;
} }
#endif #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;i<bytes;i++)
{
pmodbus->buf[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) U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info)
{ {
pccmodbus->filter1 = D_CMD_Filter1_ff; pccmodbus->filter1 = D_CMD_Filter1_ff;
pccmodbus->filter2 = D_CMD_Filter2_fe; pccmodbus->filter2 = D_CMD_Filter2_fe;
pccmodbus->num = L3_pack_modbus((TS_PH4_modbus*)&pccmodbus->slaver, slaver_info); pccmodbus->num = L3_pack_modbus((TS_PH4_modbus*)&pccmodbus->slaver, slaver_info);
#if 0
switch(slaver_info->oper) switch(slaver_info->oper)
{ {
case MODBUS_OPER_READ: case MODBUS_OPER_READ:
@ -110,9 +164,10 @@ U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info)
break; break;
} }
pccmodbus->num = pkglen; pccmodbus->num = pkglen;
#endif
return pccmodbus->num + 3; return pccmodbus->num + 3;
} }
#endif
U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck) 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;
}
/****************************************************************************** /******************************************************************************

21
source/tpc/ccmodbus.h

@ -77,7 +77,23 @@ typedef struct
vU8 crc[2]; //crc16 vU8 crc[2]; //crc16
}TS_PH3_ccmodbus; }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 typedef struct
{ {
U16 slaver; U16 slaver;
@ -88,7 +104,8 @@ typedef struct
U8 *buf; U8 *buf;
U16 mask; U16 mask;
}CCMD_SLAVER_INFO; }CCMD_SLAVER_INFO;
#endif
extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, MD_SLAVER_INFO *slaver_info); 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 U16 L3_ccmodbus_slaver_ack(TS_PH3_ccmodbus *pccmodbus,TS_PH3_ccmodbus *pModbusAck);

Loading…
Cancel
Save