📄 protocol.c
字号:
FrameBuffer[FRM_DATA+3] = SystemTime[SPACE_OF_DAY];
FrameBuffer[FRM_DATA+4] = SystemTime[SPACE_OF_MONTH];
FrameBuffer[FRM_DATA+5] = SystemTime[SPACE_OF_YEAR];
FrameBuffer[FRM_DATA+6] = SystemTime[SPACE_OF_SECOND];
FrameBuffer[FRM_DATA+7] = SystemTime[SPACE_OF_MINUTE];
FrameBuffer[FRM_DATA+8] = SystemTime[SPACE_OF_HOUR];
FrameBuffer[FRM_DATA+9] = 0xAA;
FrameBuffer[FRM_DATALEN] = 8;
return(RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsReadProcC02x(void)
{
FrameBuffer[FRM_DATALEN]=1;
if(DI0_L==0)
{
FrameBuffer[FRM_DATA+2]=MeterRunningStateWord;
return(RET_SEND_RIGHT_RESPONSION);
}
else if(DI0_L==1)
{
FrameBuffer[FRM_DATA+2]=PowerNetStateWord;
return(RET_SEND_RIGHT_RESPONSION);
}
else if(DI0_L==2)
{
DI1DI0=ADDR_OF_WEEKEND_STATUS;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x0F )
{
FrameBuffer[FRM_DATA+2]=MeterRunningStateWord;
FrameBuffer[FRM_DATA+3]=PowerNetStateWord;
FramRead( ADDR_OF_WEEKEND_STATUS, &FrameBuffer[FRM_DATA+4], 1 );
FrameBuffer[FRM_DATA+5] = 0xAA;
FrameBuffer[FRM_DATALEN]=4;
return(RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsReadProcC03x(void)
{
if(DI0_L<2)
{
DI1DI0=ADDR_OF_METER_CONSTANT_A+DI0_L*3;
FrameBuffer[FRM_DATALEN]=3;
}
else if(DI0_L<5)
{
DI1DI0=ADDR_OF_METER_NUM+(DI0_L-2)*6;
FrameBuffer[FRM_DATALEN]=6;
}
else if( DI0_L == 0x0F )
{
FramRead( ADDR_OF_METER_CONSTANT_A, &FrameBuffer[FRM_DATA+2], 6 );
FramRead( ADDR_OF_METER_NUM, &FrameBuffer[FRM_DATA+8], 18 );
FrameBuffer[FRM_DATA+26] = 0xAA;
FrameBuffer[FRM_DATALEN] = 25;
return(RET_SEND_RIGHT_RESPONSION);
}
else
{
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
static unsigned char __SlvsWRProcC04x(void)
{
if( DI0_L <= 0x0D )
{
DI1DI0 = ADDR_OF_LI_IVAL+(DI0_L*3);
FrameBuffer[FRM_DATALEN] = 3;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsWRProcC05x(void)
{
if( DI0_L <= 0x0A )
{
DI1DI0 = ADDR_OF_LI_KEEP_LONG+DI0_L;
FrameBuffer[FRM_DATALEN] = 1;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsWRProcC07x(void)
{
if( DI0_L == 0x00 )
{
FrameBuffer[FRM_DATALEN] = SIZE_LOAD_CURVE_INTERVAL;
DI1DI0 = ADDR_OF_LOAD_CURVE_INTERVAL_START;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsWRProcC09x(void)
{
if( DI0_L <= 0x05 )
{
DI1DI0 = ADDR_OF_SUM_APOWER_FORMULA+DI0_L;
FrameBuffer[FRM_DATALEN] = 1;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
const unsigned char __slvs_wr_c0xx_di0_h_[]=
{
0x01,0x02,0x03,0x04,0x05,0x07,0x09,
ERROR
};
const COMM_PROC_PTR __slvs_rd_proc_c0xx_di0_h_[]=
{
__SlvsReadProcC01x,
__SlvsReadProcC02x,
__SlvsReadProcC03x,
__SlvsWRProcC04x,
__SlvsWRProcC05x,
__SlvsWRProcC07x,
__SlvsWRProcC09x,
};
static unsigned char _SlvsReadProcC0xx(void)
{
unsigned char idx;
idx=FindCmdItem(__slvs_wr_c0xx_di0_h_,DI0_H);
if(idx!=ERROR)
{
return(__slvs_rd_proc_c0xx_di0_h_[idx]());
}
return RET_NO_RESPONSION;
}
const unsigned char __slvs_wr_c11x_datalen_[]=
{
1,1,1,1,1,1,2,1,4,4
};
const unsigned short __slvs_wr_c11x_addr_[]=
{
ADDR_OF_REQ_CYCLE,
ADDR_OF_SLIP_TIME,
ADDR_OF_CYCDISP_TIME,
ADDR_OF_KEEPDISP_TIME,
ADDR_OF_PWRDISP_DECIMALDIG,
ADDR_OF_REQDISP_DECIMALDIG,
ADDR_OF_AUTO_RDDATA_DATE,
ADDR_OF_LOAD_REPREST_DAY,
ADDR_OF_STA_RDDATA_AP_S,
ADDR_OF_STA_RDDATA_RAP_S
};
static unsigned char __SlvsReadProcC11x(void)
{
unsigned char temp,i;
if( ( DI0_L >= 1 ) && ( DI0_L <= 10 ) )
{
temp = DI0_L-1;
DI1DI0 = __slvs_wr_c11x_addr_[temp];
FrameBuffer[FRM_DATALEN] = __slvs_wr_c11x_datalen_[temp];
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x0F )
{
temp = 0;
for( i = 0; i < 10; i++ )
{
FramRead( __slvs_wr_c11x_addr_[i], &FrameBuffer[FRM_DATA+2+temp], __slvs_wr_c11x_datalen_[i] );
temp += __slvs_wr_c11x_datalen_[i];
}
FrameBuffer[FRM_DATA+2+temp] = 0xAA;
FrameBuffer[FRM_DATALEN]=temp+1;
return(RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsReadProcC12x(void)
{
if(DI0_L<2)
{
DI1DI0=ADDR_OF_DISP_TYPE+DI0_L;
FrameBuffer[FRM_DATALEN]=1;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char __SlvsReadProcC13x(void)
{
if( DI0_L <= 1 )
{
DI1DI0 = DISP_CONTENT1+DI0_L*DISP_MAX_ITEM;
FrameBuffer[FRM_DATALEN] = 42;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
const unsigned char __slvs_wr_c14x_datalen_[]=
{
4,2,2,4
};
const unsigned short __slvs_wr_c14x_addr_[]=
{
ADDR_OF_MANUFACTURER_PAR,
ADDR_OF_RATED_UB,
ADDR_OF_RATED_IB,
ADDR_OF_SECURITY_CHK_IMAX
};
static unsigned char __SlvsWRProcC14x(void)
{
if( DI0_L <= 3 )
{
DI1DI0 = __slvs_wr_c14x_addr_[DI0_L];
FrameBuffer[FRM_DATALEN] = __slvs_wr_c14x_datalen_[DI0_L];
}
else if( DI0_L == 6 )
{
DI1DI0 = ADDR_OF_ALARM_RAYCTL_WORD1;
FrameBuffer[FRM_DATALEN] = 3;
}
else if( DI0_L == 0x0A )
{
DI1DI0 = ADDR_OF_ALARM_RAYCTL_WORD2;
FrameBuffer[FRM_DATALEN] = 3;
}
else if( DI0_L == 0x0B )
{
DI1DI0 = ADDR_OF_ALARM_RAYCTL_WORD3;
FrameBuffer[FRM_DATALEN] = 3;
}
else
{
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
const unsigned char __slvs_wr_c1xx_di0_h_[]=
{
0x01,0x02,0x03,0x04,
ERROR
};
const COMM_PROC_PTR __slvs_rd_proc_c1xx_di0_h_[]=
{
__SlvsReadProcC11x,
__SlvsReadProcC12x,
__SlvsReadProcC13x,
__SlvsWRProcC14x
};
static unsigned char _SlvsReadProcC1xx(void)
{
unsigned char idx;
idx=FindCmdItem(__slvs_wr_c1xx_di0_h_,DI0_H);
if(idx!=ERROR)
{
return(__slvs_rd_proc_c1xx_di0_h_[idx]());
}
return RET_NO_RESPONSION;
}
static unsigned char _SlvsWRProcC2xx(void)
{
if( DI0_H == 0x01 )
{
if( DI0_L == 0x01 )
{
DI1DI0=ADDR_OF_PULSE_WIDTH;
FrameBuffer[FRM_DATALEN]=2;
return(RET_READ_E2PROM_A|RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x02 )
{
DI1DI0 = ADDR_OF_METER_PASSWORD1;
FrameBuffer[FRM_DATALEN]=4;
return(RET_WRITE_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsReadProcC3xx(void)
{
unsigned char i,cnt,cnt1;
if( DI0_H == 1 )
{
if( DI0_L < 5 )
{
DI1DI0 = BASE_CNT+DI0_L;
FrameBuffer[FRM_DATALEN] = 1;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x0F )
{
FramRead( BASE_CNT, &FrameBuffer[FRM_DATA+2], 5 );
FrameBuffer[FRM_DATA+7] = 0xAA;
FrameBuffer[FRM_DATALEN] = 6;
return(RET_SEND_RIGHT_RESPONSION);
}
}
else if( DI0_H == 2 )
{
FramRead( ADDR_OF_TIMEZONE_COUNT, &cnt, 1 );
cnt = Bcd2HexChar(cnt);
if( ( DI0_L <= cnt ) && ( DI0_L > 0 ) )
{
DI1DI0 = BASE_ZTSTA+(DI0_L-1)*BASE_ZTSTA_OFFSET;
FrameBuffer[FRM_DATALEN] = BASE_ZTSTA_OFFSET;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else if( DI0_L == 0x0F )
{
for( i = 0; i < cnt; i++ )
{
FramRead( BASE_ZTSTA+i*BASE_ZTSTA_OFFSET, &FrameBuffer[FRM_DATA+2+i*BASE_ZTSTA_OFFSET], BASE_ZTSTA_OFFSET );
}
for( i = 0; i < ( 14-cnt )* BASE_ZTSTA_OFFSET; i++ )
{
FrameBuffer[FRM_DATA+2+cnt*BASE_ZTSTA_OFFSET+i] = 0xFF;
}
FrameBuffer[FRM_DATA+44] = 0xAA;
FrameBuffer[FRM_DATALEN] = 43;
return( RET_SEND_RIGHT_RESPONSION );
}
else
{
FrameBuffer[FRM_DATA] = RET_ERR_TIME_ZONE_OVER;
return RET_SEND_ERROR_RESPONSION;
}
}
else if( DI0_H <= 14 )
{
FramRead( ADDR_OF_POT_COUNT, &cnt, 1 );
cnt = Bcd2HexChar( cnt );
if( DI0_H-3 < cnt )
{
FramRead( ADDR_OF_POT_SWITCH_COUNT, &cnt1, 1 );
cnt1 = Bcd2HexChar( cnt1 );
if( DI0_L == 0x0F )
{
DI1DI0=BASE_POT_T+(ushort)(DI0_H-3)*BASE_POT_T_OFFSET;
for( i = 0; i < cnt1; i++ )
{
FramRead((ushort)(DI1DI0+i*BASE_POT_OFFSET), &FrameBuffer[FRM_DATA+2+i*BASE_POT_OFFSET], BASE_POT_OFFSET );
}
for( i = 0; i < ( 14-cnt1 )*BASE_POT_OFFSET; i++ )
{
FrameBuffer[FRM_DATA+2+cnt1*BASE_POT_OFFSET+i] = 0xFF;
}
FrameBuffer[FRM_DATA+44]=0xAA;
FrameBuffer[FRM_DATALEN] = 43;
return( RET_SEND_RIGHT_RESPONSION );
}
else if( ( DI0_L <= cnt1 ) && ( DI0_L > 0 ) )
{
DI1DI0=BASE_POT_T+(ushort)(DI0_H-3)*BASE_POT_T_OFFSET+(DI0_L-1)*BASE_POT_OFFSET;
FrameBuffer[FRM_DATALEN]=BASE_POT_OFFSET;
return(RET_READ_E2PROM_A|RET_SEND_RIGHT_RESPONSION);
}
else
{
FrameBuffer[FRM_DATA] = RET_ERR_POT_SWITCH_OVER;
return RET_SEND_ERROR_RESPONSION;
}
}
else
{
FrameBuffer[FRM_DATA] = RET_ERR_POT_SWITCH_OVER;
return RET_SEND_ERROR_RESPONSION;
}
}
FrameBuffer[FRM_DATA] = RET_ERR_ID;
return RET_SEND_ERROR_RESPONSION;
}
static unsigned char _SlvsWRProcC4xx(void)
{
unsigned char count,i;
if( DI0_H == 1 )
{
if( DI0_L == 0x00 )
{
DI1DI0 = ADDR_OF_SPRING_FEST;
FrameBuffer[FRM_DATALEN] = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -