📄 processwbs.cpp
字号:
goto exit_c5;
}
else if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x28)//value
{
//gen event fu gui ok
if (rtupara->SetCommand[1] == RESET)
{
FERTEVENT event;
event.cause = 6;
event.type = rtupara->SetCommand[0];
event.state = 2;
event.rtuno = rtupara->rtuno;
GenCommonEvent(&event);
}
iRet = ChanBufRead(iChNo,&RecBuf[7],1);
if (iRet == 1)
{
RecLen += 1;
int iLen =RecBuf[7]-2+3;
// Sleep(10);
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuValue(iRtuNo,&RecBuf[6],iRet+2) == true)
iStatus = 0;
else
iStatus = 1;
}
else
iStatus = 1;
}
goto exit_c5;
}
else
iStatus = 1;
}
//gen event fu gui error
if (rtupara->SetCommand[1] == RESET)
{
FERTEVENT event;
event.cause = 6;
event.type = rtupara->SetCommand[0];
event.state = 1;
event.rtuno = rtupara->rtuno;
GenCommonEvent(&event);
}
exit_c5:
DispBufData(iChNo,iRtuNo,1,RecBuf,RecLen,iStatus);
rtupara->SetCommand[1] = 255;
}
else if (rtupara->CommandSendFlag[3] == true)//取定值
{
// if (rtupara->AskTimers >= 3) return;
rtupara->CommandSendFlag[3] = false;
if (rtupara->SetCommand[1] == GETPROT)
{
FERTEVENT event;
event.cause = 8;
event.type = rtupara->SetCommand[0];
event.state = 0;
event.rtuno = rtupara->rtuno;
GenCommonEvent(&event);
}
SendBuf[6] = 0x53;
ChanBufRead(iChNo,RecBuf,1024);
iRet = ChanBufWrite(iChNo,SendBuf,7);
SendLen = 7;
DispBufData(iChNo,iRtuNo,0,SendBuf,SendLen,0);
if (iRet == 7)
{
Sleep(1000);//
iRet = ChanBufRead(iChNo,RecBuf,8);
RecLen = iRet;
if (iRet == 8)
{
if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x53)
{
int iLen =RecBuf[7]-2+3;
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
// Sleep(100);//
RecLen += iLen;
if (iRet == iLen)
{
WORD wSum = Check_Add(&RecBuf[6],RecBuf[7]);
if ((wSum % 256) == RecBuf[6+RecBuf[7]] && (wSum / 256) == RecBuf[6+RecBuf[7]+1])//check right
{
for (int j = 0;j < (RecBuf[7] - 2) / 3;j++)
{
int index = RecBuf[8 + j * 3] % 52;
WORD wProV = RecBuf[8 + j * 3 + 1] + RecBuf[8 + j * 3 + 2] * 256;
rtupara->ProValue [j] = (float)wProV * (float)rtupara->ProXiaoShu[j];
}
//gen event protect value success
if (rtupara->SetCommand[1] == GETPROT)
{
FERTEVENT event;
event.cause = 8;
event.type = rtupara->SetCommand[0];
event.state = 2;
event.rtuno = rtupara->rtuno;
GenCommonEvent(&event);
}
iStatus = 0;
goto exit_c3;
}
else
iStatus = 1;
}
else
iStatus = 1;
}
else
iStatus = 1;
}
else
iStatus = 1;
}
//gen event protect value no success
if (rtupara->SetCommand[1] == GETPROT)
{
FERTEVENT event;
event.cause = 8;
event.type = rtupara->SetCommand[0];
event.state = 1;
event.rtuno = rtupara->rtuno;
GenCommonEvent(&event);
}
exit_c3:
DispBufData(iChNo,iRtuNo,1,RecBuf,RecLen,iStatus);
rtupara->SetCommand[1] = 255;
}
else if(rtupara->CommandSendFlag[2] == true)//取事件
{
if (rtupara->AskTimers >= 3) return;
rtupara->CommandSendFlag[2] = false;
SendBuf[6] = 0x40;
ChanBufRead(iChNo,RecBuf,1024);
iRet = ChanBufWrite(iChNo,SendBuf,7);
SendLen = 7;
DispBufData(iChNo,iRtuNo,0,SendBuf,SendLen,0);
if (iRet != 7) return;
Sleep(100);
iRet = ChanBufRead(iChNo,RecBuf,8);
RecLen = iRet;
if (iRet == 8)
{
if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x40)//event
{
int iLen =RecBuf[7]-2+3;
// Sleep(40);
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuEvent(iChNo,iRtuNo,&RecBuf[6],RecBuf[7]+3) == true)
iStatus = 0;
else
iStatus = 1;
}
}
else
iStatus = 1;
SendBuf[6] = 0x06;
ChanBufWrite(iChNo,SendBuf,7);
DispBufData(iChNo,iRtuNo,0,SendBuf,7,0);
}
DispBufData(iChNo,iRtuNo,1,RecBuf,RecLen,iStatus);
}
else if(rtupara->CommandSendFlag[1] == true)//查询
{
SendBuf[6] = 0x48;
ChanBufRead(iChNo,RecBuf,1024);
// Sleep(100);
iRet = ChanBufWrite(iChNo,SendBuf,7);
SendLen = 7;
DispBufData(iChNo,iRtuNo,0,SendBuf,SendLen,0);
// if (iRet != 7) return;
Sleep(100);//
iRet = ChanBufRead(iChNo,RecBuf,7);
RecLen = iRet;
if (iRet == 7)
{
if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x06)//ack
{
rtupara->CommandSendFlag[1] = false;
if (rtupara->bWorking == false)
ChannelEvent(iRtuNo,2);
rtupara->bWorking = true;
rtupara->bFault = false;
rtupara->AskTimers = 0;
iStatus = 0;
}
else if(RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x40)//evnet
{
rtupara->CommandSendFlag[1] = false;
iRet = ChanBufRead(iChNo,&RecBuf[7],1);
if (iRet == 1)
{
RecLen += 1;
int iLen =RecBuf[7]-2+3;
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
// Sleep(100);//
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuEvent(iChNo,iRtuNo,&RecBuf[6],RecBuf[7]+3) == true)
iStatus = 0;
else
iStatus = 1;
}
else
iStatus = 1;
}
SendBuf[6] = 0x06;
ChanBufWrite(iChNo,SendBuf,7);
DispBufData(iChNo,iRtuNo,0,SendBuf,7,0);
if (rtupara->bWorking == false)
{
ChannelEvent(iRtuNo,2);
rtupara->CommandSendFlag[5] = true;
rtupara->CommandSendFlag[7] = true;
rtupara->CommandSendFlag[3] = true;
rtupara->CommandSendFlag[4] = true;
}
rtupara->bWorking = true;
rtupara->bFault = false;
rtupara->AskTimers = 0;
}
else if(RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x28)//value
{
rtupara->CommandSendFlag[1] = false;
iRet = ChanBufRead(iChNo,&RecBuf[7],1);
if (iRet == 1)
{
RecLen += 1;
int iLen =RecBuf[7]-2+3;
// Sleep(10);
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
// Sleep(100);//
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuValue(iRtuNo,&RecBuf[6],iRet+2) == true)
iStatus = 0;
else
iStatus = 1;
}
else
iStatus = 1;
}
if (rtupara->bWorking == false)
ChannelEvent(iRtuNo,2);
rtupara->bWorking = true;
rtupara->bFault = false;
rtupara->AskTimers = 0;
}
else
{
iStatus = 1;
rtupara->AskTimers++;
}
}
else
rtupara->AskTimers++;
DispBufData(iChNo,iRtuNo,1,RecBuf,RecLen,iStatus);
if (rtupara->AskTimers > 100)// > 10 chan err
{
if (rtupara->bFault == false)
{
ChannelEvent(iRtuNo,1);
rtupara->bFault = true;
}
rtupara->bWorking = false;
rtupara->state = 1;
//置节点通讯异常
if (rtupara->AskTimers > 250)
{
rtupara->CommandSendFlag[5] = true;
rtupara->AskTimers = 100;
}
}
else
{
rtupara->bWorking = true;
rtupara->state = 2;
}
}
else if(rtupara->CommandSendFlag[4] == true)//取测量值
{
if (rtupara->AskTimers >= 3) return;
rtupara->CommandSendFlag[1] = true;
SendBuf[6] = 0x4d;
ChanBufRead(iChNo,RecBuf,1024);
iRet = ChanBufWrite(iChNo,SendBuf,7);
SendLen = 7;
DispBufData(iChNo,iRtuNo,0,SendBuf,SendLen,0);
if (iRet != 7) return;
Sleep(100);
iRet = ChanBufRead(iChNo,RecBuf,8);
// Sleep(100);
RecLen = iRet;
if (iRet == 8)
{
if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x28)//测量值
{
int iLen =RecBuf[7]-2+3;
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
// Sleep(200);
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuValue(iRtuNo,&RecBuf[6],iRet+2) == true)
iStatus = 0;
else
iStatus = 1;
rtupara->CommandSendFlag[1] = false;
}
else
iStatus = 1;
}
else if (RecBuf[0]==0xeb && RecBuf[1]==0x90 && RecBuf[2]==0xeb && RecBuf[3]==0x90
&& RecBuf[4]==0x02 && RecBuf[5]==rtupara->rtuaddr && RecBuf[6] == 0x40)//事件
{
int iLen =RecBuf[7]-2+3;
iRet = ChanBufRead(iChNo,&RecBuf[8],iLen);
// Sleep(100);
RecLen += iRet;
if (iRet == iLen)
{
if (HandleRtuEvent(iChNo,iRtuNo,&RecBuf[6],RecBuf[7]+3) == true)
iStatus = 0;
else
iStatus = 1;
rtupara->CommandSendFlag[1] = false;
}
else
iStatus = 1;
SendBuf[6] = 0x06;
ChanBufWrite(iChNo,SendBuf,7);
DispBufData(iChNo,iRtuNo,0,SendBuf,7,0);
}
else
iStatus = 1;
}
DispBufData(iChNo,iRtuNo,1,RecBuf,RecLen,iStatus);
}
else//如果没有下发命令,则查询
{
rtupara->CommandSendFlag[5] = true;
rtupara->CommandSendFlag[1] = true;
rtupara->CommandSendFlag[7] = true;
rtupara->CommandSendFlag[3] = true;
rtupara->CommandSendFlag[4] = true;
}
}
bool HandleRtuValue(int iRtuNo,BYTE *buf,int iLen)
{
RTUPARA *rtupara = GetRtuParaPt(Addr,iRtuNo);
STATION *station = Addr->Station_addr;
if (!rtupara) return false;
if (rtupara->rtuaddr == 31)//中央信号单元
{
WORD yxvalue = buf[2] + buf[3] * 256;
if (rtupara->RecFullYx == 255)
rtupara->RecFullYx = 0;
else if (rtupara->RecFullYx == 0)
rtupara->RecFullYx = 1;
for (int i =0 ;i < 16;i++)
{
BYTE iTemp = ((yxvalue & (1<<i)) >> i);
rtupara->YxValue[i] = iTemp;
}
for (i = 0;i < ((iLen - 4 - 3) / 2);i++)
rtupara->YcValue[i] = buf[2*i+4] + buf[2*i+5] * 256;
}
else
{
WORD wSum = Check_Add(buf,iLen-3);
if (((wSum % 256) == buf[iLen-3] && (wSum / 256) == buf[iLen-2])
|| (buf[iLen-3]==0x03 && buf[iLen-2]==0x00 && buf[iLen-1]==0xaa)
|| (buf[iLen-3]==0x03 && buf[iLen-2]==0x01 && buf[iLen-1]==0xaa)
|| (buf[iLen-3]==0x03 && buf[iLen-2]==0x02 && buf[iLen-1]==0xaa)
|| (buf[iLen-3]==0x03 && buf[iLen-2]==0x03 && buf[iLen-1]==0xaa))//check right
{
WORD yxvalue = buf[2] + buf[3] * 256;
if (rtupara->RecFullYx == 255)
rtupara->RecFullYx = 0;
else if (rtupara->RecFullYx == 0)
rtupara->RecFullYx = 1;
for (int i =0 ;i < 16;i++)
{
BYTE iTemp = ((yxvalue & (1<<i)) >> i);
/* bool bFind = false;
if (i == 10)//第10个遥信
{
if (rtupara->rtutype == 6 && iTemp == 1)
//如果本单元为线路保护单元,则判断其小电流接地是否动作,
//第10号遥信(在线路保护单元中)表示接地,目前的判断方式为,如果本单元箱接地动作,
//则需要判断是否在这之前还有线路保护单元箱的接地已经动作,有则本单元箱的动作忽略.
{
for (int k = 0;k < station->rtunum;k++)
{
RTUPARA *para = Addr->RtuPara_addr + k;
if (para->rtutype == 6)//线路保护单元箱
{
if (para->YxValue [10] == 1)
{
bFind = true;
break;
}
}
}
}
}
if (bFind)
rtupara->YxValue[i] = 0;
else */
rtupara->YxValue[i] = iTemp;
if (i == 10) rtupara->YxValue [i] = 0;
}
for (i = 0;i < ((iLen - 4 - 3) / 2);i++)
{
rtupara->YcValue[i] = buf[2*i+4] + buf[2*i+5] * 256;
}
}
else
return false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -