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

📄 projectpmudlg.cpp

📁 VC++6.0基于CAN协议的车辆控制
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=3;     //车厢号英文
	m_EDIDInit[19]=0x24;
	m_EDIDInit[20]=0x00;
	m_EDIDInit[21]=0x18;
	m_EDIDInit[22]=0x00;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();

	//全列车次英文初始化
	m_EDIDInit[16]=0x13;     //初始化
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=4;     //车次英文
	m_EDIDInit[19]=0x78;
	m_EDIDInit[20]=0x44;
	m_EDIDInit[21]=0x18;
	m_EDIDInit[22]=0x05;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();


	//全列区间英文初始化
	m_EDIDInit[16]=0x13;     //初始化
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=5;     //区间英文
	m_EDIDInit[19]=0x78;
	m_EDIDInit[20]=0x00;
	m_EDIDInit[21]=0x30;
	m_EDIDInit[22]=0x18;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();
   
	//外屏显示车厢号中文
	m_VehicleNumMaster[18]=0;  //中文
	for(int n=1;n<=8;n++)
	{
		m_VehicleNumMaster[1]=n;
		m_VehicleNumMaster[26]=n;
		CRCchecksum=pFunCRC16(( char *)&m_VehicleNumMaster[0],28);
		m_VehicleNumMaster[28]=CRCchecksum&0x00FF;
		m_VehicleNumMaster[29]=(CRCchecksum&0xFF00)>>8;
		m_Com2.Write((unsigned char*)&m_VehicleNumMaster[0],31);
		wait();
	}

	//外屏显示车厢号英文
	m_VehicleNumMaster[18]=3;  
	for(n=1;n<=8;n++)
	{
		m_VehicleNumMaster[1]=n;
		m_VehicleNumMaster[26]=n;
		CRCchecksum=pFunCRC16(( char *)&m_VehicleNumMaster[0],28);
		m_VehicleNumMaster[28]=CRCchecksum&0x00FF;
		m_VehicleNumMaster[29]=(CRCchecksum&0xFF00)>>8;
		m_Com2.Write((unsigned char*)&m_VehicleNumMaster[0],31);
		wait();
	}
	
	//发送车次显示帧中文
	m_ucVecSequenceMaster[18]=1;
	CRCchecksum=pFunCRC16(( char *)&m_ucVecSequenceMaster[0],m_iVecSequenceNum-3);
	m_ucVecSequenceMaster[m_iVecSequenceNum-3]=CRCchecksum&0x00FF;
	m_ucVecSequenceMaster[m_iVecSequenceNum-2]=(CRCchecksum&0xFF00)>>8;
	m_ucVecSequenceMaster[m_iVecSequenceNum-1]=0x0D;
	m_Com2.Write((unsigned char*)&m_ucVecSequenceMaster[0],m_iVecSequenceNum);
	wait();


	//发送车次显示帧英文
    m_ucVecSequenceMaster[18]=4;
	CRCchecksum=pFunCRC16(( char *)&m_ucVecSequenceMaster[0],m_iVecSequenceNum-3);
	m_ucVecSequenceMaster[m_iVecSequenceNum-3]=CRCchecksum&0x00FF;
	m_ucVecSequenceMaster[m_iVecSequenceNum-2]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_ucVecSequenceMaster[0],m_iVecSequenceNum);
	wait();



	//wait();
	//发送区间信息主幀中文
	m_Com2.Write((unsigned char*)&m_ucIntervalMasterCh[0],m_iIntervalNumCh);
    wait();


	//全列区间中文滚动
	m_IntervalRoll[17]=1;  //车外
	m_IntervalRoll[18]=2;  //区间中文模式
	m_IntervalRoll[25]=2;  //滚屏速度
	CRCchecksum=pFunCRC16(( char *)&m_IntervalRoll[0],26);
	m_IntervalRoll[26]=CRCchecksum&0x00FF;
	m_IntervalRoll[27]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_IntervalRoll[0],29);

	wait();

	


	//全列区间英文文滚动
	m_IntervalRoll[17]=1;  //车外
	m_IntervalRoll[18]=5;  //区间英文模式
	m_IntervalRoll[25]=2;  //滚屏速度
	CRCchecksum=pFunCRC16(( char *)&m_IntervalRoll[0],26);
	m_IntervalRoll[26]=CRCchecksum&0x00FF;
	m_IntervalRoll[27]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_IntervalRoll[0],29);
	wait();


	//区间英文
	m_Com2.Write((unsigned char*)&m_ucIntervalMasterEn[0],m_iIntervalNumEn);
	wait();


	//全列交替
	m_EDIDInit[16]=0x18;     //交替
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=2;     //区间中文
	m_EDIDInit[19]=0x10;
	m_EDIDInit[20]=0x27;
	m_EDIDInit[21]=0x00;
	m_EDIDInit[22]=0x00;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	//wait(0.2);

/*
	KillTimer(5);
			CString temp;
	temp.Format("%x,%x,%d",m_EDInit[23],m_EDInit[24],m_iIntervalNumCh);
	MessageBox(temp);
	*/	


	//	KillTimer(5);
	
}

/*##########################################
车内显示发送函数
 ###############################################333*/
void CPROJECTPMUDlg::IDSend()
{
	KillTimer(6);
	int CRCchecksum;

	//清空外屏 
	ClearID();

	//初始化############################
	//全列车内中文初始化
	m_EDIDInit[16]=0x13;     //初始化
    m_EDIDInit[17]=2;     //车内
	m_EDIDInit[18]=0;     //中文
	m_EDIDInit[19]=0x90;
	m_EDIDInit[20]=0x00;
	m_EDIDInit[21]=0x18;
	m_EDIDInit[22]=0x00;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();

	//全列车内英文初始化
	m_EDIDInit[16]=0x13;     //初始化
    m_EDIDInit[17]=2;     //车内
	m_EDIDInit[18]=3;     //英文
	m_EDIDInit[19]=0x90;
	m_EDIDInit[20]=0x00;
	m_EDIDInit[21]=0x18;
	m_EDIDInit[22]=0x00;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();

	//全列中文滚动
	m_IntervalRoll[17]=2;  //车内
	m_IntervalRoll[18]=0;  //中文
	m_IntervalRoll[25]=0x0B;  //滚屏速度
	CRCchecksum=pFunCRC16(( char *)&m_IntervalRoll[0],26);
	m_IntervalRoll[26]=CRCchecksum&0x00FF;
	m_IntervalRoll[27]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_IntervalRoll[0],29);
	wait();

	//全列英文滚动
	m_IntervalRoll[17]=2;  //车内
	m_IntervalRoll[18]=3;  //英文
	m_IntervalRoll[25]=0x04;  //滚屏速度
	CRCchecksum=pFunCRC16(( char *)&m_IntervalRoll[0],26);
	m_IntervalRoll[26]=CRCchecksum&0x00FF;
	m_IntervalRoll[27]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_IntervalRoll[0],29);
	wait();

	//全列交替
	m_EDIDInit[16]=0x18;     //交替
    m_EDIDInit[17]=2;     //车内
	m_EDIDInit[18]=2;     
	m_EDIDInit[19]=0x20;
	m_EDIDInit[20]=0x4E;
	m_EDIDInit[21]=0x00;
	m_EDIDInit[22]=0x00;
	CRCchecksum=pFunCRC16(( char *)&m_EDIDInit[0],23);
	m_EDIDInit[23]=CRCchecksum&0x00FF;
	m_EDIDInit[24]=(CRCchecksum&0xFF00)>>8;
	m_Com2.Write((unsigned char*)&m_EDIDInit[0],26);
	wait();

	//车内中文
	m_Com2.Write((unsigned char*)&m_ucIDMasterCh[0],m_iIDNumCh);
	wait();
	wait();
	wait();

	//车内英文
	m_Com2.Write((unsigned char*)&m_ucIDMasterEn[0],m_iIDNumEn);
	wait();



}


void CPROJECTPMUDlg::ReportNextStation()
{
	CString strSql,sTemp1,sTemp2;
	int i,n;
	CAdoRecordSet pRS0;
	unsigned char ucOriginalStationQ,ucOriginalStationW;
	
	if (m_pConnection.ConnectAccess(mMDB_Path,"sri"))
	{
		
		//	
		pRS0.SetAdoConnection(&m_pConnection);
		strSql="SELECT StationNameEn,StationNameCh FROM StationInfo ";
		if (b_IsChinese)
			strSql+="where StationNameCh='";
		else
			strSql+="where StationNameEn='";
		strSql+=m_nextstation;			
		strSql+="' ";
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("StationNameCh",sTemp1);	
			pRS0.GetCollect("StationNameEn",sTemp2);			
            sTemp1.TrimRight();
			sTemp2.TrimRight();
		}
		else
		{
		
		}
        pRS0.Close();
	}
	m_pConnection.Close();


	//车内赋值
	unsigned char   UcDataL,UcDataH;
	unsigned short  UcData;
	CString strTemp;

	memset(m_ucIDMasterCh,0,sizeof(m_ucIDMasterCh));
	memset(m_ucIDMasterEn,0,sizeof(m_ucIDMasterEn));
	//strcpy(m_ucVecSequenceMaster,m_ucVecSequenceHead);
	for(i=0;i<22;i++)
	{
		m_ucIDMasterCh[i]=m_ucVecSequenceHead[i];
		m_ucIDMasterEn[i]=m_ucVecSequenceHead[i];
	}

	strTemp=_T("即将到达下一个站");
	strTemp+=sTemp1;

	////中文赋值
    int	ID_len=strTemp.GetLength();
	n=0;
	for(i=0;i<ID_len-1;i=i+2)
	{ 
		unsigned char str=strTemp[i];
		if(str>0x80)
		{
			//取得字符串是从第0个开始的
			ucOriginalStationQ=strTemp[i];
			ucOriginalStationW=strTemp[i+1];
			UcData=0x2A9+(ucOriginalStationQ-0xB0)*0x5E+(ucOriginalStationW-0xA1);
			UcDataL=UcData&0x00FF;
			UcDataH=(UcData&0xFF00)>>8;
			//赋值
			m_ucIDMasterCh[23+3*n]=UcDataL;
			m_ucIDMasterCh[24+3*n]=UcDataH;
			n++;
		}
		else
		{
		    m_ucIDMasterCh[23+3*n]=strTemp[i]+0x84;
			i--;
			n++;
		}
	}

	{   //后面加3个空格
		for(i=0;i<3;i++)  
		{
			m_ucIDMasterCh[23+3*n]=0x14;
		    m_ucIDMasterCh[24+3*n]=0x1D;
			n++;
		}
		
	}

	n=n-1;
	m_iIDNumCh=22+n*3;

	m_ucIDMasterCh[10]=n*3+4;
	m_ucIDMasterCh[14]=n*3+4;
    m_ucIDMasterCh[17]=2;  //车内
	m_ucIDMasterCh[18]=0;  //中文
	m_ucIDMasterCh[21]=n;

	//算出CRC
	int	Qujian_checksum=pFunCRC16(( char *)&m_ucIDMasterCh[0],m_iIDNumCh);
	m_ucIDMasterCh[m_iIDNumCh]=Qujian_checksum&0x00FF;
	m_ucIDMasterCh[m_iIDNumCh+1]=(Qujian_checksum&0xFF00)>>8;
	m_ucIDMasterCh[m_iIDNumCh+2]=0x0D;

	m_iIDNumCh=m_iIDNumCh+3;




	strTemp=_T("The next station is");
    strTemp+=sTemp2;


	////车内英文赋值
    ID_len=strTemp.GetLength();
	n=0;
	for(i=0;i<ID_len;i++)
	{ 
		m_ucIDMasterEn[22+n*3]=0x0F;
		m_ucIDMasterEn[23+n*3]=strTemp[i]; 
		n++;
	}
	//if(n<=8)
	{   //后面加6个空格
		for(i=0;i<6;i++)  
		{
			m_ucIDMasterEn[22+3*n]=0x0F;
		    m_ucIDMasterEn[23+3*n]=0x20;
			n++;
		}
	}

	n=n-1;
	m_iIDNumEn=22+n*3;

	m_ucIDMasterEn[10]=n*3+4;
	m_ucIDMasterEn[14]=n*3+4;
	m_ucIDMasterEn[17]=2;  //车外
	m_ucIDMasterEn[18]=3;  //英文
	m_ucIDMasterEn[21]=n;

	//算出CRC
	Qujian_checksum=pFunCRC16(( char *)&m_ucIDMasterEn[0],m_iIDNumEn);
	m_ucIDMasterEn[m_iIDNumEn]=Qujian_checksum&0x00FF;
	m_ucIDMasterEn[m_iIDNumEn+1]=(Qujian_checksum&0xFF00)>>8;
	m_ucIDMasterEn[m_iIDNumEn+2]=0x0D;

	m_iIDNumEn=m_iIDNumEn+3;

	SetTimer(6,1000,NULL);

}


void CPROJECTPMUDlg::ChangeNextStation()
{
	int iCount=((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetCount();//取得目前已经有的行数

	int n=((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetCurSel();
	if(iCount > n+1)
	{
		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetLBText(n+1,m_nextstation);
		
		((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->SetCurSel(n+1);
		SetDlgItemText(IDC_STATIC_NSTATION_TEXT, m_nextstation);

        NextStationInit();


	}

}


void CPROJECTPMUDlg::NextStationInit()
{

	if (m_pConnection.ConnectAccess(mMDB_Path,"sri"))
	{
		CString sTemp1,sTemp2,strSql;
		CAdoRecordSet pRS0;
			//从数据库表StationInfo得到下一个站的经纬度
		strSql="SELECT Longitude,Latitude,EnglishWave,ChineseWave FROM StationInfo ";		
		if (b_IsChinese)
			strSql+="where StationNameCh='";
		else
			strSql+="where StationNameEn='";
		strSql+=m_nextstation;
		strSql+="'";
		//MessageBox(strSql);
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("Longitude",sTemp1);
			pRS0.GetCollect("Latitude",sTemp2);
			sTemp1.TrimRight();
			sTemp2.TrimRight();
			SetDlgItemText(IDC_STATIC_NSTATIONJD_TEXT, sTemp1);
			SetDlgItemText(IDC_STATIC_NSTATIONWD_TEXT, sTemp2); 
			m_dNextJd = atof(sTemp1);
			m_dNextWd = atof(sTemp2);
		}
		else
		{
			SetDlgItemText(IDC_STATIC_NSTATIONJD_TEXT, "");
			SetDlgItemText(IDC_STATIC_NSTATIONWD_TEXT, ""); 
		}
		pRS0.Close();

		

		//从数据库表RouteInfo得到离下一个站的报站距离
		strSql="SELECT AnnouncementDistanceThreshold FROM RouteInfo ";		
		if (b_IsChinese)
			strSql+="where NextStationCh='";
		else
			strSql+="where NextStationEn='";
		strSql+=m_nextstation;
		strSql+="'";
		//MessageBox(strSql);
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("AnnouncementDistanceThreshold",m_iBaoZhanJuLi);
		}
		pRS0.Close();

	}
	m_pConnection.Close();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -