河北水利局项目
This commit is contained in:
289
shuangjia/sjrecv.c
Normal file
289
shuangjia/sjrecv.c
Normal file
@@ -0,0 +1,289 @@
|
||||
//#include "stdafx.h"
|
||||
#include "sjframe.h"
|
||||
#include "metertable.h"
|
||||
#include "meterseltable.h"
|
||||
#include "rptime.h"
|
||||
|
||||
extern void rp_recvack();
|
||||
extern u8 * get_uart_send();
|
||||
extern void sj_frame_data_ack(u8 * val,u16 * len,u8 * meter,u8 * data);
|
||||
extern void controlkeyaddr(u8 *str1,u8 val);
|
||||
extern void simul_plc_rx_addr(u8 *str1);
|
||||
extern void metertable_add(const u8 * addr,const u8 type);
|
||||
extern void metertable_write();
|
||||
extern void ClearMeterInfo();
|
||||
extern bool get_dl_task_state();
|
||||
extern void dl_start();
|
||||
extern void ClearMeterInfo_realdl( void );
|
||||
extern void ctl_start(u8 flag);
|
||||
extern afn04_F3_st comm_04F3_param;
|
||||
|
||||
extern void ctl_sel_start(u8 flag);
|
||||
extern void dl_task_set_rp();
|
||||
extern void mbus_master_tx_begin();
|
||||
|
||||
extern u8 smt_get_len();
|
||||
extern u8 * smt_get_val();
|
||||
extern void amt_task(u8 * val);
|
||||
extern void concent_send_uart(u8 * val,u16 len);
|
||||
extern void amt_frame_data(u8 * val,u16 * len,u8 * amtval,u8 amtlen);
|
||||
extern u8 sj_get_recvser();
|
||||
|
||||
|
||||
void control_key_ack(u8 key)
|
||||
{
|
||||
u16 len = 0;
|
||||
u8 * q = get_uart_send();
|
||||
sj_frame_ack(q,&len,key);
|
||||
concent_send_uart(q,len);
|
||||
}
|
||||
|
||||
void sj_data_ack(u8 * meter,u8 * data)
|
||||
{
|
||||
u16 len = 0;
|
||||
u8 * q = get_uart_send();
|
||||
sj_frame_data_ack(q,&len,meter,data);
|
||||
concent_send_uart(q,len);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
static bool is_ctl_flag = false;
|
||||
static u16 is_ctl_count = 0;
|
||||
u8 ctladdr[7];
|
||||
u8 ctlflag = 0;
|
||||
void sj_ctl_process()
|
||||
{
|
||||
if(is_ctl_flag)
|
||||
{
|
||||
is_ctl_count++;
|
||||
|
||||
if(is_ctl_count>6)
|
||||
{
|
||||
is_ctl_flag = false;
|
||||
is_ctl_count = 0;
|
||||
|
||||
//
|
||||
printf("等待多个点开关阀时间到\r\n");
|
||||
|
||||
ctl_sel_start(ctlflag);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool sj_frame_recv(u8 * val,u16 vallen)
|
||||
{
|
||||
u8 * p = val;
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||
//68 71 00 71 00 68 40 12 34 56 78 00 93 71 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 59 16
|
||||
|
||||
u8 fn = p[12];
|
||||
u8 * q = get_uart_send();
|
||||
u16 len = 0;
|
||||
|
||||
sj_set_recvser(p[13]);
|
||||
|
||||
switch(fn)
|
||||
{
|
||||
default:
|
||||
break;
|
||||
case 0x93: //1.集中器初始化
|
||||
{
|
||||
metertable_init();
|
||||
metertable_write();
|
||||
|
||||
sj_frame_ack(q,&len,0x93);
|
||||
concent_send_uart(q,len);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x8C: //2.上报时间
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
||||
//68 8D 00 8D 00 68 40 07 55 00 08 00 8C 72 00 00 01 00 81 05 04 02 25 10 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7D 16
|
||||
|
||||
//
|
||||
rptime_set(&p[18]);
|
||||
rptime_write();
|
||||
sj_frame_ack(q,&len,0x8C);
|
||||
concent_send_uart(q,len);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x81: //3.关阀
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
||||
//68 99 00 99 00 68 40 12 34 56 78 00 81 71 00 00 01 00 00 00 00 96 25 10 08 19 00 00 00 00 00 00 00 AA 00 00 00 00 00 00 00 00 00 00 DD 16
|
||||
|
||||
control_key_ack(0x81);
|
||||
|
||||
ctlflag = METER_CLOSE;
|
||||
|
||||
is_ctl_flag = true;
|
||||
|
||||
is_ctl_count = 0;
|
||||
|
||||
meterseltable_add(&p[21],METER_CLOSE);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x82: //4.开阀
|
||||
{
|
||||
|
||||
control_key_ack(0x82);
|
||||
|
||||
ctlflag = METER_OPEN;
|
||||
|
||||
is_ctl_flag = true;
|
||||
|
||||
is_ctl_count = 0;
|
||||
|
||||
meterseltable_add(&p[21],METER_OPEN);
|
||||
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x84: //5.单个抄表
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//68 55 00 55 00 68 40 12 34 56 78 00 84 71 00 00 01 00 00 01 00 59 02 81 90 11 11 D9 16
|
||||
//sj_frame_ack(q,&len,0x82);
|
||||
//concent_send_uart(q,len);
|
||||
|
||||
//清除数据
|
||||
|
||||
ClearMeterInfo_realdl();
|
||||
|
||||
//因为涉及到延长30秒,特地加这个。
|
||||
mbus_master_tx_begin();
|
||||
|
||||
simul_plc_rx_addr(&p[21]);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x9D: //6.集抄
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//68 31 00 31 00 68 40 12 34 56 78 00 9D 71 00 00 01 00 63 16
|
||||
|
||||
// 5秒后启动定时上报
|
||||
sj_frame_ack(q,&len,0x9D);
|
||||
concent_send_uart(q,len);
|
||||
|
||||
//不仅抄表还需要上报
|
||||
dl_task_set_rp();
|
||||
|
||||
dl_start();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case 0x51: //7.批量关阀
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//68 31 00 31 00 68 40 12 34 56 78 00 51 73 00 00 01 00 19 16
|
||||
|
||||
// 批量关阀
|
||||
sj_frame_ack(q,&len,0x51);
|
||||
concent_send_uart(q,len);
|
||||
ctl_start(METER_CLOSE);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 0x52: //8.批量开阀
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//68 31 00 31 00 68 40 12 34 56 78 00 52 74 00 00 01 00 1B 16
|
||||
|
||||
// 批量开阀
|
||||
sj_frame_ack(q,&len,0x52);
|
||||
concent_send_uart(q,len);
|
||||
ctl_start(METER_OPEN);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
case 0x85: //9.下发档案
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
// 68 40 12 34 56 78 00 85 71 00 00 01 00 02 00
|
||||
//01 00 48 20 10 08 19 00 00 01
|
||||
//02 00 96 25 10 08 19 00 00 01
|
||||
//00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D7 16
|
||||
// 批量开阀
|
||||
sj_frame_ack(q,&len,0x85);
|
||||
//
|
||||
u8 num = p[18];
|
||||
u8 * pp = &p[20];
|
||||
|
||||
for(u8 i = 0;i<num;i++)
|
||||
{
|
||||
metertable_add(&pp[2],0);
|
||||
pp = pp + 10;
|
||||
}
|
||||
|
||||
metertable_write();
|
||||
|
||||
concent_send_uart(q,len);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
case 0x96: //10.上报回应
|
||||
{
|
||||
rp_recvack();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 0x88: //10.修改ip
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
||||
//68 55 01 55 01 68 40 07 55 00 08 00 88 73 00 00 01 00 00 78 4C E5 35 DC 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 4D 4E 45 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F1 16
|
||||
|
||||
|
||||
//comm_04F3_param.primary.ip1 = ip1[0];
|
||||
//comm_04F3_param.primary.ip2 = ip1[1];
|
||||
//comm_04F3_param.primary.ip3 = ip1[2];
|
||||
//comm_04F3_param.primary.ip4 = ip1[3];
|
||||
//comm_04F3_param.primary.port = port1;
|
||||
|
||||
|
||||
comm_04F3_param.reserve.ip1 = p[19];
|
||||
comm_04F3_param.reserve.ip2 = p[20];
|
||||
comm_04F3_param.reserve.ip3 = p[21];
|
||||
comm_04F3_param.reserve.ip4 = p[22];
|
||||
comm_04F3_param.reserve.port = (p[24]<<8)|p[23];
|
||||
|
||||
|
||||
ipport_write();
|
||||
|
||||
ipport_init();
|
||||
|
||||
|
||||
sj_frame_ack(q,&len,0x88);
|
||||
concent_send_uart(q,len);
|
||||
|
||||
//rp_recvack();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x9E: //11.透明传输
|
||||
{
|
||||
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
//68 31 00 31 00 68 40 12 34 56 78 00 9E 74 00 00 01 00 1B 16
|
||||
|
||||
amt_task(p);
|
||||
amt_frame_data(q,&len, smt_get_val(),smt_get_len());
|
||||
concent_send_uart(q,len);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user