📄 rtwnd.cpp
字号:
this->m_Grid.SetCol(5); // CMD
sprintf(c, "%04x", cmd);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(6); // CNT/MC
if ((sa==0)||(sa==31))
sprintf(c, "MC%d", mc);
else
{
if (wc==0)
sprintf(c, "32");
else
sprintf(c, "%d", wc);
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(7); // CH-A/B
if ((bsw&RTMS_CH_BORA)==RTMS_CH_BORA)
this->m_Grid.SetText(TEXT("B"));
else
this->m_Grid.SetText(TEXT("A"));
this->m_Grid.SetCol(8); // DATA
//len = this->OwnBlockDataLen(cmd);
memset(c, 0, sizeof(c));
strcpy(c, " ");
i = 0;
while ((i < 37) && (g_RunStat.blRTRunning))
{
sprintf(s, " %04x", g_RTRxMsg.MSGBlock[i]);
strcat(c, s);
i++;
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(9); // Comment
if ((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG)
{
this->m_Grid.SetText(TEXT("消息出错"));
}
else
{
if ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT)
{
this->m_Grid.SetText(TEXT("RT-RT"));
}
else
{
if (((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG) && ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT))
{
this->m_Grid.SetText(TEXT("RT-RT (消息出错)"));
}
else
{
this->m_Grid.SetText(TEXT(""));
}
}
}
} // end of if (blRxOrTx[chno]) // Tx
}
else // Recv Cnt > 0
{
if(g_RunStat.blRTRxOrTx)
{
bsw = g_RTTxMsg.BSW; // Block Status Word
cmd = g_RTTxMsg.MSGBlock[0]; // Command Word
rt = ::OwnRTAddr(cmd);
tr = ::OwnTR(cmd);
sa = ::OwnSubAddr(cmd);
wc = ::OwnWordCount(cmd);
mc = ::OwnModeCode(cmd);
ultoa((this->MsgRecvCnt)+1, c, 10);
this->m_Grid.AddItem(c, (COleVariant)a); // ID
this->m_Grid.SetRow(1);
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
sprintf(c, "%04x", bsw);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(2); // TIMETAG
ultoa(g_RTTxMsg.TimeTag, c, 10);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(3); // From
if (rt==31) // Broadcast
{
// data or mode code
if ((sa==0)||(sa==31))
sprintf(c, "RT(s),Mod(%d)", sa); // mode code
else
sprintf(c, "RT(s),Sa%d", sa); // data
}
else
{
// data or mode code
if ((sa==0)||(sa==31))
sprintf(c, "RT%d,Mod(%d)", rt, sa); // mode code
else
sprintf(c, "RT%d,Sa%d", rt, sa); // data
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(4); // To
if ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT)
this->m_Grid.SetText(TEXT(""));
else
this->m_Grid.SetText(TEXT("BC"));
this->m_Grid.SetCol(5); // CMD
sprintf(c, "%04x", cmd);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(6); // CNT/MC
if ((sa==0)||(sa==31))
sprintf(c, "MC%d", mc);
else
{
if (wc==0)
sprintf(c, "32");
else
sprintf(c, "%d", wc);
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(7); // CH-A/B
if ((bsw&RTMS_CH_BORA)==RTMS_CH_BORA)
this->m_Grid.SetText(TEXT("B"));
else
this->m_Grid.SetText(TEXT("A"));
this->m_Grid.SetCol(8); // DATA
//len = this->OwnBlockDataLen(cmd);
memset(c, 0, sizeof(c));
strcpy(c, " ");
i = 0;
while ((i < 37) && (g_RunStat.blRTRunning))
{
sprintf(s, " %04x", g_RTTxMsg.MSGBlock[i]);
strcat(c, s);
i++;
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(9); // Comment
if ((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG)
{
this->m_Grid.SetText(TEXT("消息出错"));
}
else
{
if ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT)
{
this->m_Grid.SetText(TEXT("RT-RT"));
}
else
{
if (((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG) && ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT))
{
this->m_Grid.SetText(TEXT("RT-RT (消息出错)"));
}
else
{
this->m_Grid.SetText(TEXT(""));
}
}
}
}
else // Rx
{
bsw = g_RTRxMsg.BSW; // Block Status Word
cmd = g_RTRxMsg.MSGBlock[i]; // Command Word
rt = ::OwnRTAddr(cmd);
tr = ::OwnTR(cmd);
sa = ::OwnSubAddr(cmd);
wc = ::OwnWordCount(cmd);
mc = ::OwnModeCode(cmd);
ultoa((this->MsgRecvCnt)+1, c, 10);
this->m_Grid.AddItem(c, (COleVariant)a); // ID
this->m_Grid.SetRow(1);
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
sprintf(c, "%04x", bsw);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(2); // TIMETAG
ultoa(g_RTRxMsg.TimeTag, c, 10);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(3); // From
if ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT)
this->m_Grid.SetText(TEXT(""));
else
this->m_Grid.SetText(TEXT("BC"));
this->m_Grid.SetCol(4); // To
if (rt==31) // Broadcast
{
// data or mode code
if ((sa==0)||(sa==31))
sprintf(c, "RT(s),Mod(%d)", sa); // mode code
else
sprintf(c, "RT(s),Sa%d", sa); // data
}
else
{
// data or mode code
if ((sa==0)||(sa==31))
sprintf(c, "RT%d,Mod(%d)", rt, sa); // mode code
else
sprintf(c, "RT%d,Sa%d", rt, sa); // data
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(5); // CMD
sprintf(c, "%04x", cmd);
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(6); // CNT/MC
if ((sa==0)||(sa==31))
sprintf(c, "MC%d", mc);
else
{
if (wc==0)
sprintf(c, "32");
else
sprintf(c, "%d", wc);
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(7); // CH-A/B
if ((bsw&RTMS_CH_BORA)==RTMS_CH_BORA)
this->m_Grid.SetText(TEXT("B"));
else
this->m_Grid.SetText(TEXT("A"));
this->m_Grid.SetCol(8); // DATA
//len = this->OwnBlockDataLen(cmd);
memset(c, 0, sizeof(c));
strcpy(c, " ");
i = 0;
while (( i < 37) && (g_RunStat.blRTRunning))
{
sprintf(s, " %04x", g_RTRxMsg.MSGBlock[i]);
strcat(c, s);
i++;
}
this->m_Grid.SetText(TEXT(c));
this->m_Grid.SetCol(9); // Comment
if ((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG)
{
this->m_Grid.SetText(TEXT("消息出错"));
}
else
{
if ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT)
{
this->m_Grid.SetText(TEXT("RT-RT"));
}
else
{
if (((bsw&RTMS_ERR_FLAG)==RTMS_ERR_FLAG) && ((bsw&RTMS_RT_RT_FMT)==RTMS_RT_RT_FMT))
{
this->m_Grid.SetText(TEXT("RT-RT (消息出错)"));
}
else
{
this->m_Grid.SetText(TEXT(""));
}
}
}
} // end of if (blRxOrTx[chno]) // Tx
} // end of if ((this->MsgRecvCnt)==0)
(this->MsgRecvCnt)++;
}
void CRTWnd::OnFileOpen()
{
// TODO: Add your command handler code here
if (g_RunStat.blRTRunning)
{
MessageBox(TEXT("请先停止对本通道RT的接收操作!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
return;
}
if (fileOptNow)
{
MessageBox(TEXT("请先等待当前数据文件操作结束!"), TEXT("信息提示"), MB_OK | MB_ICONWARNING);
return;
}
CString strpath;
char extstr[1024];
char keyval[80];
long num=0, l=0, id=0;
memset(extstr, 0, sizeof(extstr));
memset(keyval, 0, sizeof(keyval));
// Get File Name
//
CFileDialog OpenDlg(TRUE, TEXT(".rtd"), NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
TEXT("RT数据文件 (*.rtd)|*.rtd|所有文件 (*.*)|*.*||"),
NULL);
if ((OpenDlg.DoModal())!=IDOK)
{
return;
}
strpath = OpenDlg.GetPathName(); // create file
// Read File and Resume Data
//
// function : GetPrivateProfileString("TYPE", "keyname", "", extstr, sizeof(extstr), strpath);
// function : GetPrivateProfileString("DATA", "keyname", "", extstr, sizeof(extstr), strpath);
//---------- Section TYPE ----------
//
GetPrivateProfileString("TYPE", "mode", "", extstr, sizeof(extstr), strpath); // mode
if (strlen(extstr)==0)
{
MessageBox(TEXT("无法识别数据文件格式!"), TEXT("警告"), MB_OK | MB_ICONERROR);
return;
}
strupr(extstr);
if (strcmp(extstr, "RT")!=0)
{
MessageBox(TEXT("无法识别数据类型!"), TEXT("警告"), MB_OK | MB_ICONERROR);
return;
}
// don't use
GetPrivateProfileString("TYPE", "num", "0", extstr, sizeof(extstr), strpath); // num
num = atol(extstr);
if (num==0)
{
MessageBox(TEXT("数据长度为0!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
return;
}
this->OnRtClearview();
this->isFileOptNow = TRUE;
fileOptNow = this->isFileOptNow;
this->m_Grid.EnableWindow(FALSE);
// Progress Dlg
pgbarOpt = 0;
dwbarmax = num;
dwbarmin = 0;
dwbarpos = 0;
CProgressDlg dlgProgress;
dlgProgress.Create(IDD_PROGRESSDLG, this);
//---------- Section DATA ----------
//
this->m_Grid.SetRows(num+1); // num+1fixed
id = num;
l = 0;
while ((l<num)&&(!(g_RunStat.blRTRunning)))
{
DoEvents();
this->m_Grid.SetRow(id);
this->m_Grid.SetCol(0); // ID
sprintf(keyval, "ID%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
sprintf(keyval, "BSW%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(2); // TIMETAG
sprintf(keyval, "TIMETAG%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(3); // From
sprintf(keyval, "FROM%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(4); // To
sprintf(keyval, "TO%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(5); // CMD
sprintf(keyval, "CMD1%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(6); // CNT/MC
sprintf(keyval, "CNTMC%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(7); // CH-A/B
sprintf(keyval, "CHAB%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(8); // DATA
sprintf(keyval, "DATAS%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
this->m_Grid.SetCol(9); // Comment
sprintf(keyval, "COMMENT%d", l);
GetPrivateProfileString("DATA", keyval, "", extstr, sizeof(extstr), strpath);
this->m_Grid.SetText(extstr);
id--;
l++;
dwbarpos++;
::PostMessage(dlgProgress.m_hWnd, CWM_PGB_DEXT, 0, 0); // close progress dlg
DoEvents();
}
this->MsgRecvCnt = num;
pgbarOpt = 1;
::PostMessage(dlgProgress.m_hWnd, CWM_PGB_DEXT, 0, 0); // close progress dlg
this->m_Grid.EnableWindow(TRUE);
this->isFileOptNow = FALSE;
fileOptNow = this->isFileOptNow;
MessageBox(TEXT("数据加载完成!"), TEXT("RT 信息提示"), MB_OK | MB_ICONINFORMATION);
}
void CRTWnd::OnFileSave()
{
// TODO: Add your command handler code here
if (g_RunStat.blRTRunning)
{
MessageBox(TEXT("请先停止对本通道RT的接收操作!"), TEXT("警告"), MB_OK | MB_ICONWARNING);
return;
}
if (fileOptNow)
{
MessageBox(TEXT("请先等待当前数据文件操作结束!"), TEXT("信息提示"), MB_OK | MB_ICONWARNING);
return;
}
if (this->MsgRecvCnt==0)
{
MessageBox(TEXT("没有数据需要保存!"), TEXT("信息提示"), MB_OK | MB_ICONINFORMATION);
return;
}
FILE *pf;
CString strpath;
CFileDialog OpenDlg(FALSE, TEXT(".rtd"), TEXT("RT Data.rtd"),
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
TEXT("RT数据文件 (*.rtd)|*.rtd||"), NULL);
if ((OpenDlg.DoModal())!=IDOK)
{
return;
}
strpath = OpenDlg.GetPathName(); // create file
pf = fopen(strpath, "w+");
if (pf==NULL)
{
MessageBox("创建文件失败!", "错误", MB_OK | MB_ICONERROR);
return;
}
this->isFileOptNow = TRUE;
fileOptNow = this->isFileOptNow;
this->m_Grid.EnableWindow(FALSE);
// Save data to file
//
long i=0, id=0;
long x=0, y=0;
CString str;
y = this->m_Grid.GetRows();
// Progress Dlg
pgbarOpt = 0;
dwbarmax = y-1;
dwbarmin = 0;
dwbarpos = 0;
CProgressDlg dlgProgress;
dlgProgress.Create(IDD_PROGRESSDLG, this);
// configure file format to .Ini type
//
fprintf(pf, "[TYPE]\n"); // section TYPE
fprintf(pf, "mode=RT\n"); // key mode
fprintf(pf, "num=%ld\n\n\n", y-1); // key num
fprintf(pf, "[DATA]\n");
y--;
i = y;
while ((i>0)&&(!(g_RunStat.blRTRunning)))
{
DoEvents();
this->m_Grid.SetRow(i);
this->m_Grid.SetCol(0); // ID
str = this->m_Grid.GetText();
fprintf(pf, "ID%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(1); // BLOCK_STATUS_WORD
str = this->m_Grid.GetText();
fprintf(pf, "BSW%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(2); // TIMETAG
str = this->m_Grid.GetText();
fprintf(pf, "TIMETAG%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(3); // From
str = this->m_Grid.GetText();
fprintf(pf, "FROM%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(4); // To
str = this->m_Grid.GetText();
fprintf(pf, "TO%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(5); // CMD
str = this->m_Grid.GetText();
fprintf(pf, "CMD1%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(6); // CNT/MC
str = this->m_Grid.GetText();
fprintf(pf, "CNTMC%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(7); // CH-A/B
str = this->m_Grid.GetText();
fprintf(pf, "CHAB%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(8); // DATA
str = this->m_Grid.GetText();
fprintf(pf, "DATAS%ld=%s\n", id, str.GetBuffer(str.GetLength()));
this->m_Grid.SetCol(9); // Comment
str = this->m_Grid.GetText();
fprintf(pf, "COMMENT%ld=%s\n", id, str.GetBuffer(str.GetLength()));
id++;
i--;
dwbarpos++;
::PostMessage(dlgProgress.m_hWnd, CWM_PGB_DEXT, 0, 0); // close progress dlg
DoEvents();
}
fclose(pf); // close file
pgbarOpt = 1;
::PostMessage(dlgProgress.m_hWnd, CWM_PGB_DEXT, 0, 0); // close progress dlg
this->m_Grid.EnableWindow(TRUE);
this->isFileOptNow = FALSE;
fileOptNow = this->isFileOptNow;
MessageBox(TEXT("数据保存完成!"), TEXT("RT 信息提示"), MB_OK | MB_ICONINFORMATION);
}
void CRTWnd::OnMenuTime()
{
// TODO: Add your command handler code here
CTimeSetDlg tDlg;
tDlg.DoModal();
}
void CRTWnd::OnMenuDio()
{
// TODO: Add your command handler code here
CDIODlg dDlg;
dDlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -