📄 downcmd.cpp
字号:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
#include <bios.h>
#include "RS232X3.h"
#include "etr232i.h"
#include "gprsproc.h"
#include "macrodef.h"
#include "downcmd.h"
//////////////////////////for keypad
#include "keymenu.h"
extern int ComIdx;
extern int DTUAddress[3];
int DownFrame_Master_Proc( unsigned char *GetInFrameBuf, unsigned char RainfallBuff[3][6], unsigned char WaterLevelBuff[3][6] )
{
int i;
unsigned char datalen;
i = DownFrame_Identify( GetInFrameBuf );
if(i==1) DownFrame_Process( GetInFrameBuf, RainfallBuff, WaterLevelBuff );
else
{
if(GetKPState==LOCK) printf("DownFrame format erro!\n");
return 0;
}
return 1;
}
int DownFrame_Process( unsigned char *GetInFrameBuf, unsigned char RainfallBuff[3][6], unsigned char WaterLevelBuff[3][6] )
{
int i, j, m, thrnum, timenum;
long num;
unsigned char FunCode;
unsigned char datalen;
char string[10];
char HydryBuff[3][10];
FunCode = GetInFrameBuf[5];
switch( FunCode )
{
case 0x00:
break;
case 0x01:
break;
case 0x82: //采集器召测数据应答
datalen = GetInFrameBuf[6];
for( i=0; i<datalen; i++ )
{
if(GetInFrameBuf[7+i]!='0') break; //去掉最前面的字符'0';
}
for(j=0; j<datalen-i; j++)
WaterLevelBuff[0][j] = GetInFrameBuf[7+i+j];
WaterLevelBuff[0][datalen-i] = '\0'; //加字符串的结束符
break;
case 0x83: //自报数据
/*datalen = GetInFrameBuf[6];
for( i=0; i<datalen; i++ )
string[i] = GetInFrameBuf[7+i];
string[datalen] = '\0';
num = atoi(string); //把二进制字符型转换成整型
if(GetInFrameBuf[3]==0x01) //雨量数据
itoa(num,RainfallBuff,10); //把整型转换成十进制字符型,存放在Rainfall字符串中
else if(GetInFrameBuf[3]==0x02) //水位数据
itoa(num,WaterLevelBuff,10); //把整型转换成十进制字符型,存放在WaterLevel字符串中 */
datalen = GetInFrameBuf[6];
thrnum = GetInFrameBuf[7]- 0x30;
for(m=0; m<thrnum; m++ )
{
for( i=0; i<4; i++ )
{
if(GetInFrameBuf[8+5*m+i]!='0') break; //去掉最前面的字符'0';
}
for(j=0; j<5-i; j++)
HydryBuff[m][j] = GetInFrameBuf[8+5*m+i+j];
HydryBuff[m][5-i] = '\0'; //加字符串的结束符
}
if(GetInFrameBuf[3]==0x01) //雨量数据
{
if(thrnum==1)
strcpy( RainfallBuff[0], HydryBuff[0] );
else if(thrnum==2)
{
strcpy( RainfallBuff[0], HydryBuff[0] );
strcpy( RainfallBuff[1], HydryBuff[1] );
}
}
else if(GetInFrameBuf[3]==0x02) //水位数据
{
if(thrnum==1)
strcpy( WaterLevelBuff[0], HydryBuff[0] );
else if(thrnum==2)
{
strcpy( WaterLevelBuff[0], HydryBuff[0] );
strcpy( WaterLevelBuff[1], HydryBuff[1] );
}
}
break;
case 0x84: //读数据采集间隔时间
break;
case 0x87: //读加报数据发送条件
break;
case 0x88: //加报数据
datalen = GetInFrameBuf[6];
timenum = GetInFrameBuf[7]-48;
ConverttoARTimeUnit( timenum );
for( i=0; i<datalen; i++ )
string[i] = GetInFrameBuf[8+i];
string[datalen] = '\0';
num = atoi(string); //把二进制字符型转换成整型
if(GetInFrameBuf[3]==0x01) //雨量数据
itoa(num,RainfallBuff[0],10); //把整型转换成十进制字符型,存放在Rainfall字符串中
else if(GetInFrameBuf[3]==0x02) //水位数据
itoa(num,WaterLevelBuff[0],10); //把整型转换成十进制字符型,存放在WaterLevel字符串中
else { if(GetKPState==LOCK) printf("DownFrame format erro!\n");}
break;
case 0x89:
break;
case 0x8A:
break;
case 0x8B:
break;
case 0x8C:
break;
default: break;
}
return 1;
}
int ARTimeUnit=5;
void ConverttoARTimeUnit( int num )
{
switch(num)
{
case 0x01:
ARTimeUnit = 0x0001;
break;
case 0x02:
ARTimeUnit = 0x0005;
break;
case 0x03:
ARTimeUnit = 0x000a;
break;
case 0x04:
ARTimeUnit = 0x000f;
break;
case 0x05:
ARTimeUnit = 0x001e;
break;
case 0x06:
ARTimeUnit = 0x003c;
break;
case 0x07:
ARTimeUnit = 0x0078;
break;
case 0x08:
ARTimeUnit = 0x00b4;
break;
case 0x09:
ARTimeUnit = 0x0168;
break;
case 0x10:
ARTimeUnit = 0x02d0;
break;
case 0x11:
ARTimeUnit = 0x05a0;
break;
default: break;
}
}
int DownFrame_Identify(unsigned char *GetInFrameBuf)
{
int i;
unsigned char checksum = 0;
unsigned char cs_bytecount;
unsigned char FrameCheck = START_CHECK;
switch(FrameCheck)
{
case START_CHECK:
if(GetInFrameBuf[0]!=FRAME_START_CHAR)
{
if(GetKPState==LOCK) printf("\n 1Frame erro!\n");
return 0;
}
case DTUAddress_CHECK:
/*if((GetInFrameBuf[3]!=0x01)&&(GetInFrameBuf[3]!=0x02)&&(GetInFrameBuf[5]!=0x89))
return 0;*/
case HEADER_CHECK:
if(GetInFrameBuf[4]!=FRAME_START_CHAR)
{
if(GetKPState==LOCK) printf("\n 2Frame erro!\n");
return 0;
}
case CS_CHECK:
cs_bytecount = GetInFrameBuf[6] + 7;
for( i=0; i < cs_bytecount; i++ )
checksum += GetInFrameBuf[i];
if(checksum != GetInFrameBuf[cs_bytecount])
{
if(GetKPState==LOCK) printf("\n 3Frame erro!\n");
return 0;
}
case END_CHECK:
if(GetInFrameBuf[cs_bytecount+1]!=FRAME_END_CHAR)
{
if(GetKPState==LOCK) printf("\n 4Frame erro!\n");
return 0;
}
default: break;
}
return 1;
}
void Send_Ivtime_to_GatherMachine( unsigned char *CmdDataBuf )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -