📄 fmain.cs
字号:
rtb_Info.AppendText(sHexData);
SetTextColor(ColorBak);
}
private void ShowPackage()
{
int i;
string sHexData = "";
Color ColorBak = rtb_Info.SelectionColor;
SetTextColor(Color.Blue);
for (i = 0; i < (PackageBuf[POS_INFOBYTENUM] * INFOBYTE_SIZE + 12);i++ )
{
sHexData += PackageBuf[i].ToString("X2");
if (((i + 1) % 6) == 0)
sHexData += " ";
}
rtb_Info.AppendText(sHexData + "\r\n");
if (rtb_Info.TextLength > 10240)
{
rtb_Info.Select(0, 4096);
rtb_Info.Cut();
rtb_Info.Select(rtb_Info.Text.Length, 0);
rtb_Info.ScrollToCaret();
}
SetTextColor(ColorBak);
}
private void mi_ShowData_Click(object sender, EventArgs e)
{
pFDataShow.ShowDialog();
}
private void SetTextColor(Color _color)
{
rtb_Info.Select(rtb_Info.Text.Length, 0);
rtb_Info.SelectionColor = _color;
}
private void ParseYCFrame()
{
int i;
uint uiInfoFun;
for (i = 0; i < PackageBuf[POS_INFOBYTENUM]; i++)
{
uiInfoFun = PackageBuf[INFOBYTE_SIZE*2+i*INFOBYTE_SIZE];
if (uiInfoFun >= 0xF0)//遥信插帧
{
ShowInfo("\r\n遥信插帧 ");
ShowInfoWord(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
ParseYX(INFOBYTE_SIZE*2+i*INFOBYTE_SIZE);
}
else if (uiInfoFun == 0xE0)//处理遥控插帧
{
//
}
else
{
if(CheckCRC8(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE) )
ParseYC(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
}
}
private void ParseYXFrame()
{
int i;
uint uiInfoFun;
for (i = 0; i < PackageBuf[POS_INFOBYTENUM]; i++)
{
uiInfoFun = PackageBuf[INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE];
if (uiInfoFun < 0xF0)
{
ShowErrInfo("遥信信息字功能号不正确!\r\n");
ShowInfoWord(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
else
{
if (CheckCRC8(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE))
ParseYX(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
}
}
private void ParseDNFrame()
{
int i;
uint uiInfoFun;
for (i = 0; i < PackageBuf[POS_INFOBYTENUM]; i++)
{
uiInfoFun = PackageBuf[INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE];
if (uiInfoFun >= 0xF0)//遥信插帧
{
ShowInfo("\r\n遥信插帧 ");
ShowInfoWord(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
ParseYX(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
else if (uiInfoFun == 0xE0)//处理遥控插帧
{
//
}
else
{
if (CheckCRC8(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE))
ParseDN(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
}
}
private void ParseSOEFrame()
{
int i,j;
int iOffset;
uint uiInfoFun;
bool bLeagal = true;
for (i = 0; i < 2; i++)
{
iOffset = INFOBYTE_SIZE * 2+INFOBYTE_SIZE*i;
for (j = 0; j < 6; j++)
{
if (PackageBuf[iOffset + j] == PackageBuf[iOffset + INFOBYTE_SIZE*2 + j] &&
PackageBuf[iOffset + INFOBYTE_SIZE*2 + j] == PackageBuf[iOffset + INFOBYTE_SIZE * 4 + j])
{
continue;
}
else
{
bLeagal = false;
break;
}
}
if (!bLeagal)
break;
}
if (!bLeagal)
{
ShowErrInfo("SOE信息字没有连续重复三遍\r\n");
}
else
{
ParseSOE(INFOBYTE_SIZE * 2);
}
for (i = 6; i < PackageBuf[POS_INFOBYTENUM]; i++)
{
uiInfoFun = PackageBuf[INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE];
if (uiInfoFun >= 0xF0)//遥信插帧
{
ShowInfo("\r\n遥信插帧 ");
ShowInfoWord(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
if (CheckCRC8(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE))
ParseYX(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
else if (uiInfoFun == 0xE0)//处理遥控插帧
{
//
}
else
{
ShowErrInfo("不合适的功能号");
ShowInfoWord(INFOBYTE_SIZE * 2 + i * INFOBYTE_SIZE);
}
}
}
private void ParseYC(int iBaseAddr)
{
int iXH;
int iYC_RTU;
byte uiHeigh, uiLow;
iXH = PackageBuf[iBaseAddr] * 2;
uiLow = PackageBuf[iBaseAddr + 1];
uiHeigh = PackageBuf[iBaseAddr + 2];
if ((uiHeigh & 0x80) != 0)
{
ShowErrInfo(iXH.ToString() + "遥测点数值无效");
ShowInfoWord(iBaseAddr);
return;
}
else if ((uiHeigh & 0x40) != 0)
{
ShowErrInfo(iXH.ToString() + "遥测点数值溢出");
ShowInfoWord(iBaseAddr);
return;
}
else
{
iYC_RTU = (uiHeigh << 8) | uiLow;
if ((uiHeigh & 0x08) != 0)
{
iYC_RTU = ~iYC_RTU;
iYC_RTU++;
iYC_RTU &= 0x00000FFF;
iYC_RTU = -iYC_RTU;
}
}
pFDataShow.UpdateYC(iXH,iYC_RTU);
iXH++;
uiLow = PackageBuf[iBaseAddr + 3];
uiHeigh = PackageBuf[iBaseAddr + 4];
if ((uiHeigh & 0x80) != 0)
{
ShowErrInfo(iXH.ToString() + "遥测点数值无效");
ShowInfoWord(iBaseAddr);
return;
}
else if ((uiHeigh & 0x40) != 0)
{
ShowErrInfo(iXH.ToString() + "遥测点数值溢出");
ShowInfoWord(iBaseAddr);
return;
}
else
{
iYC_RTU = (uiHeigh << 8) | uiLow;
if ((uiHeigh & 0x08) != 0)
{
iYC_RTU = ~iYC_RTU;
iYC_RTU++;
iYC_RTU &= 0x00000FFF;
iYC_RTU = -iYC_RTU;
}
}
pFDataShow.UpdateYC(iXH, iYC_RTU);
}
private void ParseYX(int iBaseAddr)
{
int i,j;
int iXH;
byte bStatus;
iXH = PackageBuf[iBaseAddr] & 0x0F;
iXH *= 32;
for (i = 0; i < 4; i++)
{
bStatus = PackageBuf[iBaseAddr + i+1];
for (j = 0; j < 8; j++)
{
if ((bStatus & 0x01) != 0)
pFDataShow.UpdateYX(iXH, true);
else
pFDataShow.UpdateYX(iXH, false);
bStatus = (byte)(bStatus >> 1);
iXH ++;
}
}
}
private void ParseDN(int iBaseAddr)
{
int i;
int iXH;
uint iDN_RTU = 0;
byte bDN_Temp;
iXH = PackageBuf[iBaseAddr] - 0xA0;
if ((PackageBuf[iBaseAddr + 4] & 0x80) != 0)
{
ShowErrInfo(iXH.ToString() + "遥脉数值无效");
ShowInfoWord(iBaseAddr);
return;
}
else if ((PackageBuf[iBaseAddr + 4] & 0x80) != 0)//BCD
{
for (i = 0; i < 3; i++)
{
bDN_Temp = PackageBuf[iBaseAddr + i+1];
iDN_RTU += (uint)((bDN_Temp & 0x0F) * (10 ^ i));
iDN_RTU += (uint)(((bDN_Temp >> 4) & 0x0F) * (10 ^ (i + 1)));
}
}
else //二进制值
{
iDN_RTU = iDN_RTU |
(PackageBuf[iBaseAddr + 1]) |
((uint)PackageBuf[iBaseAddr + 2]<<8) |
((uint)PackageBuf[iBaseAddr + 3]<<16);
}
pFDataShow.UpdateDN(iXH, iDN_RTU);
}
private void ParseSOE(int iBaseAddr)
{
int iXH;
bool bStatus;
int iMillisecond,iSecond,iMinute,iHour,iDay;
if (!CheckCRC8(iBaseAddr))
return;
if (PackageBuf[iBaseAddr] != 0x80)
{
ShowErrInfo("不是用于SOE帧的功能号");
ShowInfoWord(iBaseAddr);
return;
}
else
{
iMillisecond = ((int)(PackageBuf[iBaseAddr+2]<<8)|(int)PackageBuf[iBaseAddr+1])&0x000003FF;
iSecond = ((int)PackageBuf[iBaseAddr+3])&0x0000003F;
iMinute = ((int)PackageBuf[iBaseAddr+4])&0x0000003F;
}
if(!CheckCRC8(iBaseAddr+6))
return;
if(PackageBuf[iBaseAddr+6]!=0x81)
{
ShowErrInfo("不是用于SOE帧的功能号");
ShowInfoWord(iBaseAddr);
return;
}
else
{
iHour = ((int)PackageBuf[iBaseAddr+6+1])&0x0000001F;
iDay = ((int)PackageBuf[iBaseAddr+6+2])&0x0000001F;
iXH = ((((int)PackageBuf[iBaseAddr+6+4])&0x0F)<<8)|PackageBuf[iBaseAddr+6+3];
if((PackageBuf[iBaseAddr+6+4]&0x80)!=0)
bStatus = true;
else
bStatus = false;
}
pFDataShow.UpdateSoe(iXH,bStatus, iMillisecond, iSecond, iMinute, iHour, iDay);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -