⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtwnd.cpp

📁 1553B板卡的源代码,只有购买板卡才能得到的好资料
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -