|
|
@ -48,74 +48,68 @@ void L3_task_485_handle(TS_485 *s) |
|
|
|
L2_task_go(D_task_485_wait_modbus_ack); |
|
|
|
|
|
|
|
TTSS_Task_step(D_task_485_wait_modbus_ack) |
|
|
|
if(s_nos_tick.t_5ms - s->sendStamp >= 8) |
|
|
|
if(s_uart2_rec.ok)//接收到ack
|
|
|
|
{ |
|
|
|
if(s_uart2_rec.ok) |
|
|
|
s_uart2_rec.ok = 0; |
|
|
|
s->pAckPkg = (TS_PH4_modbus*)(s_uart2_rec.buf); |
|
|
|
if((s->pAckPkg->salver != G.md_slaver_info[s->slaverIndex].slaver) || |
|
|
|
(s->pAckPkg->oper != G.md_slaver_info[s->slaverIndex].oper)) |
|
|
|
{ |
|
|
|
s_uart2_rec.ok = 0; |
|
|
|
s->pAckPkg = (TS_PH4_modbus*)(s_uart2_rec.buf); |
|
|
|
if(s->pAckPkg->salver == G.md_slaver_info[s->slaverIndex].slaver) |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if(G.md_slaver_info[s->slaverIndex].mask == 1) |
|
|
|
{ |
|
|
|
G.md_slaver_info[s->slaverIndex].mask = 0; |
|
|
|
} |
|
|
|
|
|
|
|
switch(s->slaverIndex) |
|
|
|
{ |
|
|
|
case 0: |
|
|
|
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]); |
|
|
|
|
|
|
|
G.jing_weight = (G.total_weight <= G.pi_weight) ? (0) :(G.total_weight - G.pi_weight) ; |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
G.asga.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); |
|
|
|
G.asga.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); |
|
|
|
G.asga.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
if(s->pAckPkg->buf[2] != G._keyled) //按键发生改变
|
|
|
|
{ |
|
|
|
s->ackFlag = 1; |
|
|
|
if(G.md_slaver_info[s->slaverIndex].mask == 1) |
|
|
|
G._keyled = s->pAckPkg->buf[2]; |
|
|
|
L0_uart0_uchex(G._keyled); |
|
|
|
if(G._keyled == 0) |
|
|
|
{ |
|
|
|
G.md_slaver_info[s->slaverIndex].mask = 0; |
|
|
|
//TODO
|
|
|
|
} |
|
|
|
|
|
|
|
//TODO 这里可以根据modbus协议让代码通用
|
|
|
|
if(s->pAckPkg->oper == MODBUS_OPER_READ) |
|
|
|
else if(G._keyled == 0x28) |
|
|
|
{ |
|
|
|
if(s->pAckPkg->salver == G.md_slaver_info[0].slaver) |
|
|
|
{ |
|
|
|
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]); |
|
|
|
|
|
|
|
if(G.total_weight <= G.pi_weight){ |
|
|
|
G.jing_weight = 0; |
|
|
|
}else |
|
|
|
{ |
|
|
|
G.jing_weight = G.total_weight - G.pi_weight; |
|
|
|
} |
|
|
|
} |
|
|
|
else if(s->pAckPkg->salver == G.md_slaver_info[1].slaver) |
|
|
|
{ |
|
|
|
G.asga.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); |
|
|
|
G.asga.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); |
|
|
|
G.asga.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); |
|
|
|
} |
|
|
|
else if(s->pAckPkg->salver == G.md_slaver_info[4].slaver) |
|
|
|
{ |
|
|
|
if(s->pAckPkg->buf[2] != G._keyled) //按键发生改变
|
|
|
|
{ |
|
|
|
G._keyled = s->pAckPkg->buf[2]; |
|
|
|
L0_uart0_uchex(G._keyled); |
|
|
|
if(G._keyled == 0) |
|
|
|
{ |
|
|
|
//TODO
|
|
|
|
} |
|
|
|
else if(G._keyled == 0x28) |
|
|
|
{ |
|
|
|
L0_uart0_uc('#'); |
|
|
|
G.pi_weight = G.total_weight; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
G.rfid = G._keyled; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if(s->pAckPkg->salver == G.md_slaver_info[5].slaver) |
|
|
|
{ |
|
|
|
G.asga_02.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); |
|
|
|
G.asga_02.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); |
|
|
|
G.asga_02.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); |
|
|
|
} |
|
|
|
L0_uart0_uc('#'); |
|
|
|
G.pi_weight = G.total_weight; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
G.rfid = G._keyled; |
|
|
|
} |
|
|
|
break; |
|
|
|
case 5: |
|
|
|
G.asga_02.xaxis = (U16)(s->pAckPkg->buf[1]) << 8 | (U16)(s->pAckPkg->buf[2]); |
|
|
|
G.asga_02.yaxis = (U16)(s->pAckPkg->buf[3]) << 8 | (U16)(s->pAckPkg->buf[4]); |
|
|
|
G.asga_02.zaxis = (U16)(s->pAckPkg->buf[5]) << 8 | (U16)(s->pAckPkg->buf[6]); |
|
|
|
break; |
|
|
|
} |
|
|
|
s->retryTimes++; |
|
|
|
if(s->ackFlag || s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME) |
|
|
|
//TODO 这里可以根据modbus协议让代码通用
|
|
|
|
} |
|
|
|
else if(s_nos_tick.t_5ms - s->sendStamp >= 8) //超时
|
|
|
|
{ |
|
|
|
if(++s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME) |
|
|
|
{ |
|
|
|
L2_task_go(D_task_485_switch_next_slaver); |
|
|
|
} |
|
|
@ -124,7 +118,10 @@ void L3_task_485_handle(TS_485 *s) |
|
|
|
L2_task_go(D_task_485_send_modbus_pkg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
else//未收到未超时
|
|
|
|
{ |
|
|
|
//继续等待
|
|
|
|
} |
|
|
|
TTSS_Task_step(D_task_485_switch_next_slaver) |
|
|
|
if(++ s->slaverIndex >= MD_SLAVER_INFO_MAX) |
|
|
|
{ |
|
|
|