📄 df9000wh.c
字号:
WH_FileList(p->rxbuf+6,port);
break;
case WH_EXT_FILE_RENAME: //重命名
WHACK(port);
break;
case WH_EXT_FILE_MKDIR: //建立目录
WHACK(port);
break;
case WH_EXT_FILE_DELDIR: //删除目录
WHACK(port);
break;
case WH_EXT_FILE_MODIFYATTRIB: //修改属性
WHACK(port);
break;
case WH_EXT_FILE_REMOTE_UP: //文件上装
WHACK(port);
break;
case WH_EXT_FILE_REMOTE_DOWN: //文件下装
WHACK(port);
break;
case WH_EXT_FILE_FORMAT_DISK: //格式化盘
WHACK(port);
break;
case WH_EXT_FILE_CLEARUP_DISK: //清理磁盘
WHACK(port);
break;
default:
WHNAK(port,1);
break;
}
break;
case WH_OPERATE:
switch(cmd_ext)
{
case WH_EXT_OPR_DOWN_DSP:
KillProg(RESET_DD, RESET_CLR, FALSE);
WHACK(port);
break;
case WH_EXT_OPR_POSITIVE_CHK: //常温+45整定
CalYcPara(0);
WHACK(port);
break;
case WH_EXT_OPR_REVERSE45_CHK: //常温-45整定
CalYcPara(90);
WHACK(port);
break;
case WH_EXT_OPR_ZEROFLOAT_CHK:
WHACK(port);
break;
case WH_EXT_OPR_ACCUMULATOR: //常温直流整定
WHACK(port);
break;
case WH_EXT_OPR_LOCALE_CHK: //现场整定
// myding++;
WHACK(port);
break;
case WH_EXT_OPR_CHANNEL: //常温通道整定
WHACK(port);
break;
case WH_EXT_OPR_SHOWRESULT: //常温显示通道整定结果
WHACK(port);
break;
case WH_EXT_OPR_SAMPLECURVE: //采样曲线
WH_Sample(p->rxbuf[6],port);
break;
case WH_EXT_OPR_DC_BYVALUE: //常温基准值直流整定
// value = MERGE(p->rxbuf[7],p->rxbuf[6]);
CalYcPara(100);
WHACK(port);
break;
case WH_EXT_OPR_POSITIVE45_HITEMP://高温+45整定
WHACK(port);
break;
case WH_EXT_OPR_POSITIVE45_LOTEMP://低温+45整定
WHACK(port);
break;
case WH_EXT_OPR_REVERSE45_HITEMP://高温+45整定
WHACK(port);
break;
case WH_EXT_OPR_REVERSE45_LOTEMP://低温-45整定
WHACK(port);
break;
case WH_EXT_OPR_ZEROFLOAT_HITEMP:
WHACK(port);
break;
case WH_EXT_OPR_ZEROFLOAT_LOTEMP:
WHACK(port);
break;
case WH_EXT_OPR_ACCUMULATOR_HITEMP://高温直流整定
WHACK(port);
break;
case WH_EXT_OPR_ACCUMULATOR_LOTEMP://低温直流整定
WHACK(port);
break;
case WH_EXT_OPR_CHANNEL_HITEMP: //高温通道整定
WHACK(port);
break;
case WH_EXT_OPR_CHANNEL_LOTEMP: //低温通道整定
#ifdef BOOT_PROG
for(i=2; i<7; i++) //格式化错误参数扇区
{
FlashErase(FLASH_BASE, i);
}
for(i=19; i<23; i++) //格式化错误参数扇区
{
FlashErase(FLASH_BASE, i);
}
#endif
WHACK(port);
break;
case WH_EXT_OPR_SHOWRESULT_HITEMP: //高温显示通道整定结果
WHACK(port);
break;
case WH_EXT_OPR_SHOWRESULT_LOTEMP: //低温显示通道整定结果
WHACK(port);
break;
case WH_EXT_OPR_DC_BYVALUE_HITEMP://高温基准值直流整定
value = MERGE(p->rxbuf[7],p->rxbuf[6]);
WHACK(port);
break;
case WH_EXT_OPR_DC_BYVALUE_LOTEMP://低温基准值直流整定
WHACK(port);
break;
default:
WHNAK(port,1);
break;
}
break;
case WH_WHEND:
WHACK(port); //结束远程维护
KillProg(RESET_DD, RESET_DD, TRUE);
break;
default:
WHNAK(port,1);
break; //其他
}
}
/*------------------------------------------------------------------------
Procedure: WHRes ID:1
Purpose: 填写帧头和CRC码.
Input: cmd:功能码;cmd_ext:功能扩展;len:数据长度;
Output:
Errors:
------------------------------------------------------------------------*/
void WHRes(INT8U port, INT8U cmd, INT8U cmd_ext, INT16U len)
{
ProtocolBuf *p=NULL;
INT16U CRC16,Length;
INT8U CRC8;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
p->txbuf[0] = p->rxbuf[0]; //
p->txbuf[1] = LOW(len); //长度低位
p->txbuf[2] = HIGH(len); //长度高位
p->txbuf[3] = (cmd|0x80); //功能码
p->txbuf[4] = (cmd_ext|0x80); //扩展功能码
CRC8 = SendVerifyHead(&p->txbuf[0], 5);
p->txbuf[5] = CRC8; //帧头校验码
CRC16 = WHCRC16(&p->txbuf[1], 5+len);
p->txbuf[6+len] = LOW(CRC16);
p->txbuf[7+len] = HIGH(CRC16);
Length = 8+len;
WriteX(p->txbuf,Length, port);
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WH_FileHead ID:1
Purpose: 填充文件头.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_FileHead(INT8U port,struct FileInfo* pFile)
{
ProtocolBuf *p=NULL;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
memcpy (p->txbuf+6, (INT8U*)pFile->Name, MAXFILENAMELEN);
p->txbuf[39] = LOW(pFile->Length);
p->txbuf[40] = HIGH(pFile->Length);
p->txbuf[41] = DLOW(pFile->Length);
p->txbuf[42] = DHIGH(pFile->Length);
p->txbuf[43] = LOW(pFile->CreateTime);
p->txbuf[44] = HIGH(pFile->CreateTime);
p->txbuf[45] = DLOW(pFile->CreateTime);
p->txbuf[46] = DHIGH(pFile->CreateTime);
p->txbuf[47] = LOW(pFile->Attr);
p->txbuf[48] = HIGH(pFile->Attr);
p->txbuf[49] = DLOW(pFile->Attr);
p->txbuf[50] = DHIGH(pFile->Attr);
p->txbuf[51] = LOW(pFile->Crc);
p->txbuf[52] = HIGH(pFile->Crc);
memset (p->txbuf+53, 0 ,sizeof(struct FileInfo));
WHRes(port, p->rxbuf[3], p->rxbuf[4], 2*sizeof(struct FileInfo));
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WH_FileList ID:1
Purpose: 列表文件.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_FileList(void *FileName,INT8U port)
{
INT8U FileHead[68*47];
INT32U FileNum,i;
struct WHFileInfo *WHFileInfo;
struct FileInfo *FileInfo;
ProtocolBuf *p=NULL;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
FileNum = FReadInfos((void *)FileHead, FileName);
memcpy (p->txbuf+6, (INT8U*)&FileNum, 4);
memset (p->txbuf+10, 0 , 4);
for(i=0;i<FileNum;i++)
{
FileInfo = (struct FileInfo*)((struct FileInfo*)FileHead + i);
WHFileInfo = (struct WHFileInfo*)((struct WHFileInfo*)(p->txbuf+14) + i);
memcpy ((INT8U *)WHFileInfo->Name, (INT8U *)FileInfo->Name, MAXFILENAMELEN);
WHFileInfo->Length = FileInfo->Length;
WHFileInfo->CreateTime = FileInfo->CreateTime;
WHFileInfo->Attr = FileInfo->Attr;
}
WHRes(port, p->rxbuf[3], p->rxbuf[4], FileNum*sizeof(struct WHFileInfo)+8);
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WH_FileRead ID:1
Purpose: 上传文件.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_FileRead(INT8U port,INT16U packetnum,struct FileInfo* pFile)
{
INT16U DataLength;
INT16U packetlength;
ProtocolBuf *p=NULL;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
memcpy (p->txbuf+6, (INT8U*)pFile->Name, MAXFILENAMELEN);
p->txbuf[39] = LOW(Pos);
p->txbuf[40] = HIGH(Pos);
p->txbuf[41] = DLOW(Pos);
p->txbuf[42] = DHIGH(Pos);
DataLength = FRead(p->txbuf+44, packetnum, WH_DATA_MAXLENGTH, pFile);
if(DataLength != WH_DATA_MAXLENGTH)
{
Pos = 0;
p->txbuf[43] = 1;
FilePacketNum = 0;
}
else
{
Pos += WH_DATA_MAXLENGTH;
p->txbuf[43] = 0;
}
packetlength = 38+DataLength;
WHRes(port, p->rxbuf[3], WH_EXT_FILE_CONTENT, packetlength);
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WHSAMPLE ID:1
Purpose: 采样曲线传送.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_Sample(INT8U Num,INT8U port)
{
ProtocolBuf *p=NULL;
INT8U *quxian = NULL;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
quxian = MakeQuxian(Num);
if (quxian == NULL)
WHNAK(port, 1);
else
{
p->txbuf[6] = Num;
p->txbuf[7] = 5;
memcpy(p->txbuf+8,quxian,320);
WHRes(port, p->rxbuf[3], p->rxbuf[4], 322);
}
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WHYC ID:1
Purpose: 遥测传送.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_Send_YC(INT8U port)
{
ProtocolBuf *p=NULL;
INT8U num;
INT8U value[200];
INT32U Name;
struct DBInfo info;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
Name = DMERGE(p->rxbuf[9],p->rxbuf[8],p->rxbuf[7],p->rxbuf[6]);
p->txbuf[6] = '9';
p->txbuf[7] = '3';
p->txbuf[8] = '1';
p->txbuf[9] = '1';
p->txbuf[10] = p->rxbuf[10];
info.SuperID = ROOTID;
info.DevID = GetDevIDOfName(Name);
info.Type = YCDATA;
info.Start = 0;
info.Num = DBCfgs[info.DevID].YCNum;
DBRead(value, &info);
num = info.Num;
memcpy (p->txbuf+15, value, num * 2);
p->txbuf[11] = LOW(0x0);
p->txbuf[12] = HIGH(0x0);
p->txbuf[13] = LOW(num-1);
p->txbuf[14] = HIGH(num-1);
WHRes(port, p->rxbuf[3], p->rxbuf[4], num*2+9);
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WHYX ID:1
Purpose: 遥信,SOE,COS传送.
Input:
Output:
Errors:
------------------------------------------------------------------------*/
void WH_Send_YX(INT8U port)
{
ProtocolBuf *p=NULL;
INT8U yxnum;
INT8U yxstatus[200],whyxstatus[10],j;
INT16U i,Begin,Length,soenum,cosnum,num;
INT32U Name;
struct DBInfo info;
struct SOE_Data whSOE;
struct SOE_t SoeStruct;
struct COS_Data whCOS;
struct COS_t CosStruct;
if(port == COM1) p=COM1Buf;
else if(port == COM2) p=COM2Buf;
Name = DMERGE(p->rxbuf[9],p->rxbuf[8],p->rxbuf[7],p->rxbuf[6]);
p->txbuf[6] = '9';
p->txbuf[7] = '3';
p->txbuf[8] = '1';
p->txbuf[9] = '1';
p->txbuf[10] = p->rxbuf[10];
info.SuperID = GetDevIDOfName(Name);
info.DevID = info.SuperID;
if ((p->rxbuf[10] == YX_REAL) ||(p->rxbuf[10] == YX_LOGIC))
info.Type = YXDATA;
else if ((p->rxbuf[10] == SOE_LOGIC) ||(p->rxbuf[10] == SOE_REAL))
info.Type = SOEDATA;
else if ((p->rxbuf[10] == COS_LOGIC) ||(p->rxbuf[10] == COS_REAL))
info.Type = COSDATA;
else
info.Type = 0xFFFF;
if (info.Type == YXDATA)
{
info.Start = 0;
info.Num = DBCfgs[info.DevID].YXNum;
DBRead(yxstatus, &info);
yxnum = DBCfgs[info.DevID].YXNum;
if(yxnum%8==0)
num = yxnum/8;
else
num = yxnum/8+1;
for(i=0;i<num;i++)
{
for(j=0;j<8;j++)
{
if((yxstatus[i*8+j]&0x80) == 0x80)
whyxstatus[i] |= (1<<j);
else
whyxstatus[i] &= ~(1<<j);
}
}
p->txbuf[11] = LOW(0x0);
p->txbuf[12] = HIGH(0x0);
p->txbuf[13] = LOW(yxnum-1);
p->txbuf[14] = HIGH(yxnum-1);
for(i=0;i<num;i++)
p->txbuf[15+i] = whyxstatus[i];
WHRes(port, p->rxbuf[3], p->rxbuf[4], num+9);
}
else if (info.Type == SOEDATA)
{
Begin = MERGE(p->rxbuf[12],p->rxbuf[11]);
Length = MERGE(p->rxbuf[14],p->rxbuf[13]);
if(Begin > SOELIMIT) Begin = SOELIMIT;
if((Begin+Length) > SOELIMIT) Length = SOELIMIT - Begin;
info.Start = 0;
info.Num = 1;
DBRead((INT8U*)&whSOE, &info);
soenum = whSOE.CurPos;
p->txbuf[11] = LOW(Begin);
p->txbuf[12] = HIGH(Begin);
p->txbuf[13] = LOW(Length);
p->txbuf[14] = HIGH(Length);
p->txbuf[15] = LOW(soenum);
p->txbuf[16] = HIGH(soenum);
p->txbuf[17] = LOW(SOELIMIT);
p->txbuf[18] = HIGH(SOELIMIT);
for(i=Begin;i<(Begin+Length);i++)
{
info.Start = i;
info.Num = 1;
DBRead((INT8U*)&whSOE, &info);
p->txbuf[19+(i-Begin)*sizeof(SoeStruct)] = LOW(whSOE.Soe.No);
p->txbuf[20+(i-Begin)*sizeof(SoeStruct)] = HIGH(whSOE.Soe.No);
p->txbuf[21+(i-Begin)*sizeof(SoeStruct)] = whSOE.Soe.Status;
p->txbuf[22+(i-Begin)*sizeof(SoeStruct)] = LOW(whSOE.Soe.Time.Minute);
p->txbuf[23+(i-Begin)*sizeof(SoeStruct)] = HIGH(whSOE.Soe.Time.Minute);
p->txbuf[24+(i-Begin)*sizeof(SoeStruct)] = DLOW(whSOE.Soe.Time.Minute);
p->txbuf[25+(i-Begin)*sizeof(SoeStruct)] = DHIGH(whSOE.Soe.Time.Minute);
p->txbuf[26+(i-Begin)*sizeof(SoeStruct)] = LOW(whSOE.Soe.Time.Msecond);
p->txbuf[27+(i-Begin)*sizeof(SoeStruct)] = HIGH(whSOE.Soe.Time.Msecond);
}
num = Length*sizeof(SoeStruct)+13;
WHRes(port, p->rxbuf[3], p->rxbuf[4], num);
}
else if (info.Type == COSDATA)
{
Begin = MERGE(p->rxbuf[12],p->rxbuf[11]);
Length = MERGE(p->rxbuf[14],p->rxbuf[13]);
if(Begin > COSLIMIT) Begin = COSLIMIT;
if((Begin+Length) > COSLIMIT) Length = COSLIMIT - Begin;
info.Start = 0;
info.Num = 1;
DBRead((INT8U*)&whCOS, &info);
cosnum = whCOS.CurPos;
p->txbuf[11] = LOW(Begin);
p->txbuf[12] = HIGH(Begin);
p->txbuf[13] = LOW(Length);
p->txbuf[14] = HIGH(Length);
p->txbuf[15] = LOW(cosnum);
p->txbuf[16] = HIGH(cosnum);
p->txbuf[17] = LOW(COSLIMIT);
p->txbuf[18] = HIGH(COSLIMIT);
for(i=Begin;i<(Begin+Length);i++)
{
info.Start = i;
info.Num = 1;
DBRead((INT8U*)&whCOS, &info);
p->txbuf[19+(i-Begin)*sizeof(CosStruct)] = LOW(whCOS.Cos.No);
p->txbuf[20+(i-Begin)*sizeof(CosStruct)] = HIGH(whCOS.Cos.No);
p->txbuf[21+(i-Begin)*sizeof(CosStruct)] = whCOS.Cos.Status;
}
num = Length*sizeof(CosStruct)+13;
WHRes(port, p->rxbuf[3], p->rxbuf[4], num);
}
}
/*------------------------------------------------------------------------
Procedure: CWH9000::WHDD ID:1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -