Browse Source

dw20,asga03,show测试通过

master
zhangsan 5 years ago
parent
commit
745934ec83
  1. 25
      keilp/cc_as_stc02_gsm_main.uvproj
  2. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym
  3. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.sip_xc
  4. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.sip_xf
  5. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm
  6. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.sip_xr
  7. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.siproj
  8. BIN
      si4/soft_gsm_main.si4project/soft_gsm_main.siwork
  9. 228
      source/app/app_common.c
  10. 51
      source/app/app_common.h
  11. 29
      source/app/app_drv.c
  12. 2
      source/app/app_drv.h
  13. 34
      source/app/app_task_485.c
  14. 20
      source/app/app_task_485_control.c
  15. 52
      source/app/app_task_gm35.c
  16. 2
      source/app/app_task_gm35.h
  17. 93
      source/app/app_task_tcp.c
  18. 26
      source/app/app_task_tcp.h
  19. 56
      source/app/app_task_tcp_control.c
  20. 20
      source/app/app_task_tcp_control.h
  21. 18
      source/app/main.c
  22. 3
      source/app/main.h
  23. 2
      source/bsp/bsp_config.c
  24. 3
      source/bsp/bsp_config.h
  25. 168
      source/tpc/tpc_ccmodbus.c
  26. 113
      source/tpc/tpc_ccmodbus.h
  27. 28
      source/tpc/tpc_uart.c
  28. 12
      source/tpc/tpc_uart.h

25
keilp/cc_as_stc02_gsm_main.uvproj

@ -401,6 +401,21 @@
<FileType>1</FileType>
<FilePath>..\source\app\app_task_485_control.c</FilePath>
</File>
<File>
<FileName>app_task_tcp.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_task_tcp.c</FilePath>
</File>
<File>
<FileName>app_task_tcp_control.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_task_tcp_control.c</FilePath>
</File>
<File>
<FileName>app_task_gm35.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_task_gm35.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -471,6 +486,11 @@
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_config.c</FilePath>
</File>
<File>
<FileName>bsp_gm35.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_gm35.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -506,6 +526,11 @@
<FileType>1</FileType>
<FilePath>..\source\tpc\tpc_modbus.c</FilePath>
</File>
<File>
<FileName>tpc_ccmodbus.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\tpc\tpc_ccmodbus.c</FilePath>
</File>
</Files>
</Group>
<Group>

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.sip_sym

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.sip_xc

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.sip_xf

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.sip_xm

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.sip_xr

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.siproj

Binary file not shown.

BIN
si4/soft_gsm_main.si4project/soft_gsm_main.siwork

Binary file not shown.

228
source/app/app_common.c

@ -11,7 +11,7 @@
#define LEN_GPRS_TCP_DATA_ACK 8
struct printer_maintenance_global G;
TS_PH3_ccmodbus_ack ccmodbus_ack;
//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};
@ -19,82 +19,133 @@ vU8 gprsdataack[LEN_GPRS_TCP_DATA_ACK] = {0xFF,0xFE,0x0,0x4,0x11,0x95,0x8F,0xCD}
void Lu_register_init()
{
U8 i = 0;
G.total_weight = 0;
G.p.slaverId = 0x10;
G.p.wisdom_car_no = 0x01;
G.p.thrombolytic_ratio = 9; //0.9
G.p.bolus_ratio = 9; //0.9
G.p.hold_ratio = 1; //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.rfid = 0;
for(i=0;i<MD_SLAVER_INFO_MAX;i++)
{
G.slaver_info[i].mask = 0;
G.md_slaver_info[i].mask = 0;
}
G.md_slaver_info[0].slaver = SLAVER_DW20_ID;
G.md_slaver_info[0].oper = MODBUS_OPER_READ;
G.md_slaver_info[0].reg = 0x02;
G.md_slaver_info[0].regnum = 0x02;
G.md_slaver_info[0].mask = 2; //0->无效 1:暂时有效 2->永久有效
G.md_slaver_info[1].slaver = SLAVER_ASGA03_ID; //倾角XYZ
G.md_slaver_info[1].oper = MODBUS_OPER_READ;
G.md_slaver_info[1].reg = 0x04;
G.md_slaver_info[1].regnum = 0x03;
G.md_slaver_info[1].mask = 2;
G.md_slaver_info[2].slaver = SLAVER_SHOW01_ID; //��2,溶栓,团注,维�
G.md_slaver_info[2].oper = MODBUS_OPER_WRITE_M;
G.md_slaver_info[2].reg = 0x02;
G.md_slaver_info[2].regnum = 0x05;
G.md_slaver_info[2].bytes = G.md_slaver_info[2].regnum * 2;
G.md_slaver_info[2].buf = (U8*)&G.total_weight;
G.md_slaver_info[2].mask = 0;
G.md_slaver_info[3].slaver = SLAVER_SHOW01_ID; //RFID
G.md_slaver_info[3].oper = MODBUS_OPER_WRITE_M;
G.md_slaver_info[3].reg = 0x07;
G.md_slaver_info[3].regnum = 0x01;
G.md_slaver_info[3].bytes = G.md_slaver_info[3].regnum * 2;
G.md_slaver_info[3].buf = (U8*)&G.rfid;
G.md_slaver_info[3].mask = 0;
for(i=0;i<CCMD_SLAVER_INFO_MAX;i++)
{
G.ccmd_slaver_info[i].mask = 0;
}
G.slaver_info[0].slaver = 0x11;
G.slaver_info[0].oper = MODBUS_OPER_READ;
G.slaver_info[0].reg = 0x02;
G.slaver_info[0].regnum = 0x02;
G.slaver_info[0].mask = 2; //0->无效 1:暂时有效 2->永久有效
G.slaver_info[1].slaver = 0x12;
G.slaver_info[1].oper = MODBUS_OPER_WRITE_M;
G.slaver_info[1].reg = 0x02;
G.slaver_info[1].regnum = 0x02;
G.slaver_info[1].bytes = 4;
G.slaver_info[1].buf = (U8*)&G.total_weight;
G.slaver_info[1].mask = 0;
G.slaver_info[2].slaver = 0x12;
G.slaver_info[2].oper = MODBUS_OPER_WRITE_M;
G.slaver_info[2].reg = 0x04;
G.slaver_info[2].regnum = 0x01;
G.slaver_info[2].bytes = 2;
G.slaver_info[2].buf = (U8*)&G.rfid;
G.slaver_info[2].mask = 0;
G.slaver_info[3].slaver = 0x13;
G.slaver_info[3].oper = MODBUS_OPER_WRITE_M;
G.slaver_info[3].reg = 0x02;
G.slaver_info[3].regnum = 0x02;
G.slaver_info[3].bytes = 4;
G.slaver_info[3].buf = (U8*)&G.total_weight;
G.slaver_info[3].mask = 0;
G.slaver_info[4].slaver = 0x13;
G.slaver_info[4].oper = MODBUS_OPER_WRITE_M;
G.slaver_info[4].reg = 0x04;
G.slaver_info[4].regnum = 0x01;
G.slaver_info[4].bytes = 2;
G.slaver_info[4].buf = (U8*)&G.rfid;
G.slaver_info[4].mask = 0;
G.modbusstmp = 0;
#if 0
for(i = 0; i < PAPER_BOX_NUM; i++)
{
G.paperCalibs[i].num0 = 0;
G.paperCalibs[i].angle0 = 0x23F0;
G.ccmd_slaver_info[0].slaver = SLAVER_TCP_SERVER_ID; //�务器 //登陆包,写平车编�
G.ccmd_slaver_info[0].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[0].reg = 0x01;
G.ccmd_slaver_info[0].regnum = 0x01;
G.ccmd_slaver_info[0].bytes = G.ccmd_slaver_info[5].regnum * 2;
G.ccmd_slaver_info[0].buf = (U8*)&G.p.wisdom_car_no;
G.ccmd_slaver_info[0].mask = 0;
G.ccmd_slaver_info[1].slaver = SLAVER_TCP_SERVER_ID; //�务器 //心跳包,写心跳寄存器
G.ccmd_slaver_info[1].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[1].reg = 0x02;
G.ccmd_slaver_info[1].regnum = 0x01;
G.ccmd_slaver_info[1].bytes = G.ccmd_slaver_info[6].regnum * 2;
G.ccmd_slaver_info[1].buf = (U8*)&G.p.reserved1;
G.ccmd_slaver_info[1].mask = 0;
G.ccmd_slaver_info[2].slaver = SLAVER_TCP_SERVER_ID; //�务器 //�程开始包
G.ccmd_slaver_info[2].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[2].reg = 0x03;
G.ccmd_slaver_info[2].regnum = 0x01;
G.ccmd_slaver_info[2].bytes = G.ccmd_slaver_info[6].regnum * 2;
G.ccmd_slaver_info[2].buf = (U8*)&G.flowStart;
G.ccmd_slaver_info[2].mask = 0;
G.ccmd_slaver_info[3].slaver = SLAVER_TCP_SERVER_ID; //�务器
G.ccmd_slaver_info[3].oper = MODBUS_OPER_WRITE_M;
G.ccmd_slaver_info[3].reg = 0x10;
G.ccmd_slaver_info[3].regnum = 0x11;
G.ccmd_slaver_info[3].bytes = G.ccmd_slaver_info[4].regnum * 2;
G.ccmd_slaver_info[3].buf = (U8*)&G.total_weight;
G.ccmd_slaver_info[3].mask = 0;
G.paperCalibs[i].num1 = 400;
G.paperCalibs[i].angle1 = 0x20C4;
G.modbusstmp = 0;
G.flowStart = 0;
}
G.currentSensorVal[i] = 0;
G.papers[i].version = APP_VERSION_HEX;
G.papers[i].LowPower = 0x00;
G.papers[i].cameraNotWorking = 0x00;
void L3_protocol_handler_uart4_fun(U8 *pPara,U8 from)
{
from = 0;
G.papers[i].cameraIndex = 0x00;
G.papers[i].paperNum = 0x00;
}
G.boardstatus.a9RecvDataInterval = 0;
G.boardstatus.a9Status = 0;
G.boardstatus.wdtStatus = 0;
G.lastResetToISPCmdTimeInSeconds = 0;
//G.irthreshold[0] = 7;
//G.irthreshold[1] = 5;
G.runmode = MODE_RUN;
//G.runmode = DEBUG_IR;
//G.runmode = DEBUG_A9;
//G.runmode = DEBUG_CAMER;
#endif
if(StrStartsWith(pPara,"OK")) //module ok
{
g_at_send_status.module_ok = 1;
}
else if(StrStartsWith(pPara,"+CCID")) //sim ok
{
L0_uart0_uc('s');
libc_memcpy(G.ccid,pPara+7,20);
//getPwd(G.ccid, G.ccid_passwd);
g_at_send_status.sim_ok = 1;
}
else if(StrStartsWith(pPara,"+CREG: 1,1")) //net ok
{
L0_uart0_uc('n');
g_at_send_status.net_ok = 1;
}
else if(StrStartsWith(pPara,"+CGATT:1")) //gprs ok
{
L0_uart0_uc('g');
g_at_send_status.gprs_ok = 1;
}
else if(StrStartsWith(pPara,"CONNECT OK") || StrStartsWith(pPara,"STATE:CONNECT OK")) //conn ok
{ //ALREAY CONNECT??????????????¡§???????????????????????¡§????????????????????¡§?¡è???????
if(g_at_send_status.conn_ok == 0)
{
L0_uart0_uc('c');
g_at_send_status.conn_ok = 1;
}
}
else if(StrStartsWith(pPara,"CLOSE") || StrStartsWith(pPara,"STATE:CLOSED")) //conn close //CLOSE OK / CLOSED
{
if(g_at_send_status.conn_ok == 1)
{
L0_uart0_uc('d');
g_at_send_status.conn_ok = 0;
g_at_send_status.tcp_close_stmp = s_nos_tick.t_1s;
}
}
}
#if 0
@ -380,47 +431,4 @@ void L3_protocol_handler_uart0_fun(TS_PH3_ccmodbus *p,U8 from) //0?????
};
}
void L3_protocol_handler_uart4_fun(U8 *pPara,U8 from)
{
from = 0;
if(StrStartsWith(pPara,"OK")) //module ok
{
g_at_send_status.module_ok = 1;
}
else if(StrStartsWith(pPara,"+CCID")) //sim ok
{
L0_uart0_uc('s');
libc_memcpy(G.ccid,pPara+7,20);
getPwd(G.ccid, G.ccid_passwd);
g_at_send_status.sim_ok = 1;
}
else if(StrStartsWith(pPara,"+CREG: 1,1")) //net ok
{
L0_uart0_uc('n');
g_at_send_status.net_ok = 1;
}
else if(StrStartsWith(pPara,"+CGATT:1")) //gprs ok
{
L0_uart0_uc('g');
g_at_send_status.gprs_ok = 1;
}
else if(StrStartsWith(pPara,"CONNECT OK") || StrStartsWith(pPara,"STATE:CONNECT OK")) //conn ok
{ //ALREAY CONNECT??????????????¡§???????????????????????¡§????????????????????¡§?¡è???????
if(g_at_send_status.conn_ok == 0)
{
L0_uart0_uc('c');
g_at_send_status.conn_ok = 1;
}
}
else if(StrStartsWith(pPara,"CLOSE") || StrStartsWith(pPara,"STATE:CLOSED")) //conn close //CLOSE OK / CLOSED
{
if(g_at_send_status.conn_ok == 1)
{
L0_uart0_uc('d');
g_at_send_status.conn_ok = 0;
g_at_send_status.tcp_close_stmp = s_nos_tick.t_1s;
}
}
}
#endif

51
source/app/app_common.h

@ -4,6 +4,7 @@
#include "../clib/type.h"
#include "../tpc/tpc_uart.h"
#include "../tpc/tpc_modbus.h"
#include "../tpc/tpc_ccmodbus.h"
#define APP_VERSION_HEX 0x12 //高4位主版本,低4位次版本
@ -156,29 +157,61 @@ typedef struct
/**
* Register Memory Map
*/
#define SLAVER_DW20_ID 0x11
#define SLAVER_ASGA03_ID 0x12
#define SLAVER_SHOW01_ID 0x13
#define SLAVER_TCP_SERVER_ID 0x14
#define MD_SLAVER_INFO_MAX 6
#define MD_SLAVER_INFO_MAX 4
#define CCMD_SLAVER_INFO_MAX 4
//需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
typedef struct global_param_changable
{
U16 slaverId; //从设备ID
U16 wisdom_car_no; //平车编号
U16 thrombolytic_ratio; //溶栓重量比 x 10
U16 bolus_ratio; //团注计量比 x 100
U16 hold_ratio; //维持计量比 x 100
U16 reserved1[16-5]; //保留
}GlobalNeedPersistParam;
typedef struct cc_asga_info
{
U16 xaxis;
U16 yaxis;
U16 zaxis;
}CCAsGaInfo;
typedef struct printer_maintenance_global
{
U16 reserved;
GlobalNeedPersistParam p;
S32 total_weight;
U16 thrombolytic_val;
U16 bolus_val;
U16 hold_val;
CCAsGaInfo asga;
U16 rfid;
U16 reserved2[16 - 9];
MD_SLAVER_INFO slaver_info[MD_SLAVER_INFO_MAX];
MD_SLAVER_INFO md_slaver_info[MD_SLAVER_INFO_MAX];
CCMD_SLAVER_INFO ccmd_slaver_info[CCMD_SLAVER_INFO_MAX];
vU32 modbusstmp;
U16 flowStart;
#if 1
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];
TS_BoardStatus boardstatus;
U8 runmode; //运行模式
U32 lastResetToISPCmdTimeInSeconds; //isp reset time
U8 ccid[21]; //保存ccid卡号空间 20+'\0'
U8 ccid_passwd[22]; //保存ccid密码空间 21+'\0'
#endif
}PMGlobal;
@ -187,9 +220,9 @@ typedef struct printer_maintenance_global
//寄存器内存基地址
#define REG_MEM_BASE ((U16*)(&G)) //寄存器基础地址(本文件外部不应该使用该宏定义)
//变量地址转寄存器
#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地址开始
extern struct printer_maintenance_global G;
@ -198,7 +231,7 @@ 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 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);

29
source/app/app_drv.c

@ -32,20 +32,6 @@ TS_drv_ ts_drv[TS_DRV_MAX]=
#endif
#if 0
void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p)
{
if (1 == p->ok )
{
U8 array[D_s_SSTR_0D0A_len+1];
U8 num = p->buf[0];
byte_copy_uc(array,p->buf+1,num);
p->ok = 0;
array[num] = 0;
L3_protocol_handler_uart4_fun(array,0);
}
}
void L3_task_a9_rcv_handle(TS_Handle_PH3 *p)
{
@ -61,6 +47,20 @@ void L3_task_a9_rcv_handle(TS_Handle_PH3 *p)
}
#endif
void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p)
{
if (1 == p->ok )
{
U8 array[D_s_SSTR_0D0A_len+1];
U8 num = p->buf[0];
byte_copy_uc(array,p->buf+1,num);
p->ok = 0;
array[num] = 0;
L3_protocol_handler_uart4_fun(array,0);
}
}
void L3_UARTcom3_exp_protocol(TS_Handle_PH3 *p)
{
if (1 == p->ok)
@ -126,3 +126,4 @@ void L3_UARTcom2_exp_protocol(TS_Handle_PH1A *p)
}
}
#endif

2
source/app/app_drv.h

@ -26,7 +26,7 @@ typedef struct
extern TS_drv_ ts_drv[TS_DRV_MAX];
extern void L3_UARTcom2_exp_protocol(TS_Handle_PH1A *p);
//extern void L3_UARTcom2_exp_protocol(TS_Handle_PH1A *p);
extern void L3_UARTcom0_exp_protocol(TS_Handle_PH3 *p);
extern void L3_UARTcom3_exp_protocol(TS_Handle_PH3 *p);
extern void L3_UARTcom4_exp_protocol(TS_Handle_0d0a *p);

34
source/app/app_task_485.c

@ -3,8 +3,8 @@
#include "../msp/uart2.h"
#include "../app/app_common.h"
#define MODBUS_SLAVER_DW20_REG_START 0x02
#define MODBUS_SLAVER_DW20_REG_NUM 0x02
//#define MODBUS_SLAVER_DW20_REG_START 0x02
//#define MODBUS_SLAVER_DW20_REG_NUM 0x02
#define MODBUS_SLAVER_RETRY_MAX_TIME 3
TS_485 ts_485;
@ -30,9 +30,27 @@ 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(G.slaver_info[s->slaverIndex].mask > 0)
#if 0
if(s->slaverIndex == 1)
{
s->pkglen = L3_pack_modbus(&s->loopPkg,G.slaver_info + s->slaverIndex);
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);
s->ackFlag = 0;
s->retryTimes = 0;
L2_task_go(D_task_485_send_modbus_pkg);
@ -57,10 +75,10 @@ void L3_task_485_handle(TS_485 *s)
{
s_uart2_rec.ok = 0;
s->pAckPkg = (TS_PH4_modbus*)(s_uart2_rec.buf);
if(s->pAckPkg->salver == G.slaver_info[s->slaverIndex].slaver)
if(s->pAckPkg->salver == G.md_slaver_info[s->slaverIndex].slaver)
{
s->ackFlag = 1;
if(s->pAckPkg->salver == G.slaver_info[0].slaver && s->pAckPkg->oper == MODBUS_OPER_READ)
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
@ -71,9 +89,9 @@ void L3_task_485_handle(TS_485 *s)
s->retryTimes++;
if(s->ackFlag || s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME)
{
if(G.slaver_info[s->slaverIndex].mask == 1)
if(G.md_slaver_info[s->slaverIndex].mask == 1)
{
G.slaver_info[s->slaverIndex].mask = 0;
G.md_slaver_info[s->slaverIndex].mask = 0;
}
L2_task_go(D_task_485_switch_next_slaver);
}

20
source/app/app_task_485_control.c

@ -2,10 +2,6 @@
#include "../msp/uart0.h"
#include "../app/app_common.h"
#define MODBUS_SLAVER_DW20_REG_START 0x02
#define MODBUS_SLAVER_DW20_REG_NUM 0x02
#define MODBUS_SLAVER_RETRY_MAX_TIME 3
TS_485_control ts_485_control;
void L3_task_485_control_init(void)
@ -24,23 +20,19 @@ void L3_task_485_control_handle(TS_485_control *s)
L2_task_go(D_task_485_control_01);
TTSS_Task_step(D_task_485_control_01)
//L0_uart0_ulhex(s->total_weight_pool);
//Lc_delay_ms(70);// 2000--7s
//L0_uart0_uc(' ');L0_uart0_uc(' ');L0_uart0_uc(' ');
//Lc_delay_ms(70);// 2000--7s
//L0_uart0_0d0a();
//L0_uart0_ulhex(G.total_weight);
if(s->total_weight_pool != G.total_weight)
{
G.slaver_info[1].mask = 1;
//G.slaver_info[3].mask = 1;
G.thrombolytic_val = G.total_weight / 100 * G.p.thrombolytic_ratio;
G.bolus_val = G.thrombolytic_val / 10 * G.p.bolus_ratio;
G.hold_val = G.thrombolytic_val / 10 * G.p.hold_ratio;
G.md_slaver_info[2].mask = 1;
s->total_weight_pool = G.total_weight;
}
if(s->rfid_pool != G.rfid)
{
G.slaver_info[2].mask = 1;
//G.slaver_info[4].mask = 1;
G.md_slaver_info[3].mask = 1;
s->rfid_pool = G.rfid;
}
L2_task_go(D_task_485_control_01);

52
source/app/app_task_gm35.c

@ -88,21 +88,12 @@ void L3_task_gm35_flow_init(void)
g_at_send_status.heart_flag = 0;
g_at_send_status.data_flag = 0;
g_at_send_status.ack_flag = 0;
// g_at_send_status.pending_flag = 0;
g_at_send_status.ins_flag = 0;
// g_at_send_status.ccid[20] = 0;
// g_at_send_status.ccid_passwd[21] = 0;
g_at_send_status.tcp_close_stmp = s_nos_tick.t_1s; //重新上电和检测到断开时设置
g_at_send_status.ins_stmp = 0; //每次发送指令时设置
g_at_send_status.tcp_last_recv_stmp = 0; //连接成功和接收到数据时设置
//缓冲区清0
// for(i=0;i<BUF_SIZE;i++)
// {
// g_at_send_status.pendingLengths[i] = 0;
// }
}
void L3_task_gm35_daemon_init(void)
@ -205,7 +196,7 @@ void L2_task_gm35_daemon_handle(struct _s_task_gm35_gprs_ *s)
L2_task_go_Tdelay(TTSS_TASK_GM35_DAEMON_CIPSTATUS,D_Tdelay_3s);
TTSS_Task_step(TTSS_TASK_BOARD_REBOOT)
s_task_wdt.seed_flag = FLAG_WDT_hunger; //饿死看门狗
//s_task_wdt.seed_flag = FLAG_WDT_hunger; //饿死看门狗
L2_task_go_Tdelay(TTSS_TASK_GM35_DAEMON_CIPSTATUS,D_Tdelay_3s);
TTSS_Task_end();
@ -273,7 +264,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
L0_uart0_sendArray(G.ccid,20);
Lc_delay_ms(100);// 2000--7s
L0_uart0_uc('S');
L0_uart0_sendArray(G.ccid_passwd,21);
//L0_uart0_sendArray(G.ccid_passwd,21);
//Lc_print_buf("%s\r\n",G.ccid_passwd);
G.boardstatus.a9Status = STATUS_GM35_SIM_OK;//修改状态
@ -377,39 +368,7 @@ void L2_task_gm35_flow_handle(struct _s_task_gm35_gprs_ *s)
}
TTSS_Task_step(TTSS_TASK_GM35_FLOW_CIPSTART_SUCCESS)
if(1 == g_at_send_status.conn_ok)
{
U8 pkglen = 0;
if(g_at_send_status.sign_flag == 1) //发送登陆包
{
L0_uart0_uc('l');
g_at_send_status.sign_flag = 0; //只发一次
L2_gprs_send_signin_pkg();
}
else if(g_at_send_status.ack_flag == 1)
{
L0_uart0_uc('z');
g_at_send_status.ack_flag = 0;
L2_gprs_send_ack_pkg();
}
else if(s_nos_tick.t_1s - g_at_send_status.heart_stmp >= GM35_SEND_HEART_INTERVAL) //每隔60s发送心跳
{
L0_uart0_uc('x');
g_at_send_status.heart_stmp = s_nos_tick.t_1s;
L2_gprs_send_heart_pkg();
}
else if(s_nos_tick.t_1s - g_at_send_status.data_stmp >= GM35_SEND_DATA_INTERVAL) //每隔300s发送数据
{
L0_uart0_uc('y');
g_at_send_status.data_stmp = s_nos_tick.t_1s;
L2_gprs_send_report_pkg();
}
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_CIPSTART_SUCCESS,D_Tdelay_1s);
}
else
if(0 == g_at_send_status.conn_ok)
{
L0_uart4_uc(0x1a); //关闭send
L2_task_go_Tdelay(TTSS_TASK_GM35_FLOW_CIPSTART,D_Tdelay_300ms); //断线重连
@ -424,14 +383,13 @@ void L3_task_gm35_core_init(void)
{
g_at_send_status.gm35_reboot_times = 0;
L3_task_gm35_daemon_init();
//L3_task_gm35_daemon_init();
L3_task_gm35_flow_init();
//L3_task_gm35_send_init();
}
void L3_task_gm35_core_handle()
{
L2_task_gm35_daemon_handle(&s_task_gm35_daemon);
//L2_task_gm35_daemon_handle(&s_task_gm35_daemon);
L2_task_gm35_flow_handle(&s_task_gm35_flow);
}

2
source/app/app_task_gm35.h

@ -24,7 +24,7 @@
#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\",\"wx.yinzhimeng.com.cn\",9999\r\n"
#define AT_INS_CIPSTART "AT+CIPSTART=\"TCP\",\"test.tall.wiki\",8195\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" //发送数据

93
source/app/app_task_tcp.c

@ -0,0 +1,93 @@
#include "app_task_tcp.h"
#include "../msp/uart0.h"
#include "../msp/uart4.h"
#include "../app/app_common.h"
#define MODBUS_SLAVER_DW20_REG_START 0x02
#define MODBUS_SLAVER_DW20_REG_NUM 0x02
#define MODBUS_SLAVER_RETRY_MAX_TIME 3
TS_tcp ts_tcp;
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;
}
#define D_task_tcp_constructor_modbus_pkg 0x51
#define D_task_tcp_send_modbus_pkg 0x52
#define D_task_tcp_wait_modbus_ack 0x53
#define D_task_tcp_switch_next_slaver 0x54
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(G.ccmd_slaver_info[s->slaverIndex].mask > 0)
{
s->pkglen = L3_pack_ccmodbus(&s->loopPkg,G.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)
L0_uart4_sendArray((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_uart4_tcp_rec.ok)
{
s_uart4_tcp_rec.ok = 0;
s->pAckPkg = (TS_PH3_ccmodbus*)(s_uart4_tcp_rec.sp);
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++;
if(s->ackFlag || s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME)
{
if(G.ccmd_slaver_info[s->slaverIndex].mask == 1)
{
G.ccmd_slaver_info[s->slaverIndex].mask = 0;
}
L2_task_go(D_task_tcp_switch_next_slaver);
}
else
{
L2_task_go(D_task_tcp_send_modbus_pkg);
}
}
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();
}

26
source/app/app_task_tcp.h

@ -0,0 +1,26 @@
#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;
}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

56
source/app/app_task_tcp_control.c

@ -0,0 +1,56 @@
#include "app_task_tcp_control.h"
#include "../msp/uart0.h"
#include "../app/app_common.h"
#include "../app/app_task_gm35.h"
TS_tcp_control ts_tcp_control;
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;
}
#define D_task_tcp_control_01 0x51
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 != g_at_send_status.conn_ok)
{
if(g_at_send_status.conn_ok)
{
//发送认证包
G.ccmd_slaver_info[0].mask = 1;
//发送流程开始包
if(G.flowStart == 0)
{
G.flowStart = 1;
G.ccmd_slaver_info[2].mask = 1;
}
ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
}
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)
{
G.ccmd_slaver_info[3].mask = 1;
ts_tcp_control.tcp_send_stmp = s_nos_tick.t_1s;
}
}
L2_task_go(D_task_tcp_control_01);
TTSS_Task_end();
}

20
source/app/app_task_tcp_control.h

@ -0,0 +1,20 @@
#ifndef APP_TASK_TCP_CONTROL
#define APP_TASK_TCP_CONTROL
#include "../ctask/task.h"
#include "../tpc/tpc_ccmodbus.h"
#include "app_common.h"
typedef struct
{
TS_task task;
vU8 conn_ok_pool;
vU32 tcp_send_stmp;
}TS_tcp_control;
extern TS_tcp_control ts_tcp_control;
extern void L3_task_tcp_control_init();
extern void L3_task_tcp_control_handle(TS_tcp_control *s);
#endif

18
source/app/main.c

@ -92,6 +92,9 @@ void L0_main_init(void)
L3_task_gm35_core_init();
L3_task_wdt_init(); //看门狗任务初始化
#endif
L2_gm35_init();
L3_task_gm35_core_init();
L3_task_485_init(); //485轮询任务初始化
L3_task_485_control_init();
}
@ -125,7 +128,7 @@ void main(void)
{
s_nos_tick.t1s_heatbeart = 0;
//L0_uart0_uc('.');
L0_uart0_sendArray("abcdefg", 7);
//L0_uart0_sendArray("abcdefg", 7);
}
//串口3 RFID接收
L3_UARTcom3_exp_protocol(&s_uart3_rec);
@ -135,6 +138,19 @@ 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);
//tcp发送
L3_task_tcp_handle(&ts_tcp);
//master->slaver发送逻辑控制
L3_task_tcp_control_handle(&ts_tcp_control);
#endif
#if 0
//看门狗
L3_task_wdt_handle(&s_task_wdt);

3
source/app/main.h

@ -80,11 +80,12 @@
#include "../app/app_task_wdt.h"
#include "../app/app_task_485.h"
#include "../app/app_task_485_control.h"
#include "../app/app_task_tcp.h"
#include "../app/app_task_tcp_control.h"
#include "../app/app_task_relay.h"
#include "../app/app_common.h"
#include "../app/app_paraid.h"
//////////////////////////////////////////////////////////////////

2
source/bsp/bsp_config.c

@ -230,7 +230,7 @@ void L1_s2b_PH3_3(unsigned char sbufreg)
void L1_s2b_gm35(unsigned char sbufreg)
{
s_uart4_tcp_rec.reg = sbufreg;
L1_a9_PH3(&s_uart4_tcp_rec);
L1_s2b_PH3(&s_uart4_tcp_rec);
if(0 == s_uart4_tcp_rec.head)
{

3
source/bsp/bsp_config.h

@ -24,7 +24,8 @@
#include "../clib/bit.h"
#include "../tpc/tpc_modbus.h"
#include "../tpc/tpc_uart.h"
#include "../tpc/tpc_ccmodbus.h"
//#include "../tpc/tpc_uart.h"
#include "../tpc/tpc_0d0a.h"
//#define D_iic_inspect

168
source/tpc/tpc_ccmodbus.c

@ -0,0 +1,168 @@
/*****************************************************************************
update by cc @201501101001
.
uartcom/uartlib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
uartcom/uartcom0
uart相关的通讯协议 com + n
uart口来对应
typedef struct _ts_lcm_pro_; ? LCM的协议------------
L3_UARTcom0_exp_protocol
-----------------------------------------------------------------------------------------
uartcom/uprotocol: uartcom + n服务的
struct _s_protocol_ ()------struct _s_protocol_
void L1_uart_2buf(struct _s_protocol_ *p)
--------------------------------------------------------------------------------------------
msp/uartx.c cpu相关
L0_UART0_Init
UART0_IRQHandler
L0_Usend_uc----------s_at0
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "tpc_ccmodbus.h"
#include "../clib/clib.h"
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;
}
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;
}
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
/// 0 1 2 3 4 5 6 7 8 9 10
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
void L1_s2b_PH3(TS_Handle_PH3 *p)// reentrant
{
p->cashe[1] = p->cashe[0];
p->cashe[0] = p->reg;//
if (0 == p->head)
{
if ((p->cashe[1] == p->head_0)&&(p->cashe[0] == p->head_1))
{
p->head = 1;
p->max = D_s_PH3_ccmodbus_max - 1;
p->sp = (unsigned char *)&(p->ts_ccmodbus);
p->sp[0] = p->head_0;
p->sp[1] = p->head_1;
p->num = 1;
//p->ok = 1;
}
}else
{
p->num ++;
p->sp[p->num] = p->cashe[0];
if(p->num == 2)//数量 第3个数据
{
p->max = p->reg + 2;//
if(p->max >= D_s_PH3_ccmodbus_max)
{
p->max = D_s_PH3_ccmodbus_max - 1;
p->sp[p->num] = p->max - 2;
}
}
if(p->num >= p->max)
{
crc16(p->crc,&p->ts_ccmodbus.slaver,p->ts_ccmodbus.num - 2);
if(/*p->crc[0] == p->ts_ccmodbus.crc[1] && p->crc[1] == p->ts_ccmodbus.crc[0]*/ 1)
{
if (p->ok != 1)
{
//byte_copy_uc((U8*)&p->ts_ccmodbus,(U8*)&p->__ts_ccmodbus,p->max + 1);
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
}
}
p->num = 0; //放在if (p->ok != 1) 外
p->head = 0; //放在if (p->ok != 1) 外
}
}
}
/******************************************************************************
** End Of File
******************************************************************************/

113
source/tpc/tpc_ccmodbus.h

@ -0,0 +1,113 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file tpc_fsk.c
/// @brief transaction protocol control of fsk
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// @version 1.2 CCsens technology
/// @author CC
/// @date 20180308
/// @info 整理
//
//////////////////////////////////////////////////////////////////////////
/*****************************************************************************
@version 1.2
update by cc @201501101001
.
clib/uartlib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------
msp/uartx.c cpu相关
L0_UART0_Init
UART0_IRQHandler
L0_Usend_uc----------s_at0
-----------------------------------------------------------------------------------------
********************************************************************************/
#ifndef __TPC_CCMODBUS_H_
#define __TPC_CCMODBUS_H_
#include "../clib/Type.h"
#define D_CMD_Filter1_ff 0xFF
#define D_CMD_Filter2_fe 0xFE
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
///协议类型: 十六进制协议3->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/// 发送的数据为有ff fe开头的十六进制的长协议,内包含标准的modbus协议
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
/// 校验码的范围为
#define D_s_PH3_ccmodbus_max 64
#define D_s_PH3_ccmodbus_min 4
typedef struct
{//8byte
vU8 filter1;
vU8 filter2;
vU8 num; //接收到的数据的计数, 随着数据接收而变化注意数据长度的范围
vU8 slaver; //发送方的地址或命令
vU8 oper; //命令
vU8 buf[D_s_PH3_ccmodbus_max-2];//--->_s_P_pc_dat_
vU8 crc[2]; //crc16
}TS_PH3_ccmodbus;
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;
U16 oper;
U16 reg;
U16 regnum;
U16 bytes;
U8 *buf;
U16 mask;
}CCMD_SLAVER_INFO;
extern U8 L3_pack_ccmodbus(TS_PH3_ccmodbus *pccmodbus, CCMD_SLAVER_INFO *slaver_info);
extern void L1_s2b_PH3(TS_Handle_PH3 *p);// reentrant;
#endif /* end __TPC_CCMODBUS_H_ */

28
source/tpc/tpc_uart.c

@ -93,6 +93,7 @@ void L1_s2b_PH1 (struct _s_PH1_FX_ *p)// reentrant
#endif
#if 0
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
/// 0 1 2 3 4 5 6 7 8 9 10
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
@ -143,8 +144,10 @@ void L1_s2b_PH3(TS_Handle_PH3 *p)// reentrant
}
}
}
#endif
#if 1
#if 0
void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
{
@ -157,7 +160,7 @@ void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
{
p->head = 1;
p->max = D_s_PH3_ccmodbus_max - 1;
p->sp = (unsigned char *)&(p->__ts_ccmodbus);
p->sp = (unsigned char *)&(p->ts_ccmodbus);
p->sp[0] = p->head_0;
p->sp[1] = p->head_1;
p->num = 1;
@ -169,15 +172,6 @@ void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
p->sp[p->num] = p->cashe[0];
if(p->num == 2)//数量 第3个数据
{
if(p->cashe[0] == 0)
{
if(p->len_retry == 0) //丢弃本字节,探测下一个字节作为长度,以兼容:长度为0E和00 0E的协议
{
p->len_retry = 1;
p->num--;
return;
}
}
p->max = p->cashe[0] + 2;//
if((p->max > D_s_PH3_ccmodbus_max) || (p->max < D_s_PH3_ccmodbus_min)) //无效协议
{
@ -203,7 +197,7 @@ void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
}
}
#else
void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
{
p->cashe[1] = p->cashe[0];
@ -256,7 +250,6 @@ void L1_a9_PH3(TS_Handle_PH3 *p)// reentrant
}
}
}
#endif
///FF FE 08 52 16 11 22 33 44 F5 9F 发送了一个modbus协议包(8个数据52 16 11 22 33 44 F5 9F )
@ -362,6 +355,8 @@ void L1_a9_PH3_1(TS_Handle_PH3 *p)// reentrant
}
}
#endif
#if 0 //相关功能移动到 tpc_ffee.c
//NUM: 0 1 2 3 4 5 6 7
@ -460,6 +455,7 @@ void L1_s2b_PC1(struct _s_PC1_0D0A_ *p)// reentrant
#endif
#if 0
/// 在串口中断中调用 uart hardware to buffer 串口到缓存中
void L1_s2b_PC2(struct _s_protocol_ *p)
{
@ -508,13 +504,14 @@ void L1_s2b_PC2(struct _s_protocol_ *p)
}
else {}
}
#endif
#if 0
int checkCRC16(TS_PH3_ccmodbus *pCcmodbus)
{
U8 crc[2],dataCrc[2],num;
num = pCcmodbus->num;
crc16(crc,&(pCcmodbus->addr),num - 2);
crc16(crc,&(pCcmodbus->slaver),num - 2);
dataCrc[1] = (pCcmodbus->buf[num - 4]) & 0xFF;
dataCrc[0] = (pCcmodbus->buf[num - 3]) & 0xFF;
@ -522,6 +519,7 @@ int checkCRC16(TS_PH3_ccmodbus *pCcmodbus)
return 1;
return 0;
}
#endif

12
source/tpc/tpc_uart.h

@ -67,10 +67,6 @@ msp/uartx.c 底层代码 和cpu相关
#define D_CMD_Filter1 0x0a
#define D_CMD_Filter2 0x0d
#define D_CMD_Filter1_ff 0xFF
#define D_CMD_Filter2_fe 0xFE
///协议类型: 十六进制协议1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/// 发送的数据为有fx开头的十六进制的短协议,和长协议的区别除了帧头简化为1个字节外,数据的长度也是比较精简,大部分按位操作的,适合低波特率rf433之类的传播
@ -220,9 +216,14 @@ extern void L1_s2b_PH2(struct _s_PH2_FFFE_ *p);// reentrant;
/// 协议表达的意思为地址为0x52的从机, 功能码16 数据为11 22 33 44,校验码 F5 9F
/// 校验码的范围为
#define D_s_PH3_ccmodbus_max 32
#if 0
#define D_s_PH3_ccmodbus_max 64
#define D_s_PH3_ccmodbus_min 4
#define D_CMD_Filter1_ff 0xFF
#define D_CMD_Filter2_fe 0xFE
typedef struct
{//8byte
vU8 filter1;
@ -272,6 +273,7 @@ typedef struct
extern void L1_s2b_PH3(TS_Handle_PH3 *p);// reentrant;
extern void L1_a9_PH3(TS_Handle_PH3 *p);
extern int checkCRC16(TS_PH3_ccmodbus *pCcmodbus);
#endif
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
///协议类型: 字符型协议1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Loading…
Cancel
Save