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

📄 projectpmudlg.cpp

📁 VC++6.0基于CAN协议的车辆控制
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	    if(i % 3 ==0) m_ucVecSequenceMaster[22+i]=0x0F;
        if(i % 3 ==1) m_ucVecSequenceMaster[22+i]=m_checi[i/3];
		if(i % 3 ==2) m_ucVecSequenceMaster[22+i]=0x00;
	}
	m_iVecSequenceNum=22+checi_len*3;
	m_iVecSequenceNum=m_iVecSequenceNum+3;


    //区间发送串赋值
	unsigned char UnicodeDataL[12],UnicodeDataH[12],UnicodeDataL1[12],UnicodeDataH1[12];
	unsigned short  UnicodeData[12],UnicodeData1[12];
	int OriginalStation_len;//=m_sOriginalStationCh.GetLength( );//求出选择的区间的字符串的长度;
	int LastStation_len;//=m_sLastStationCh.GetLength( );
	unsigned char ucOriginalStationQ,ucOriginalStationW,ucLastStationQ,ucLastStationW;



	////中文区间赋值
	OriginalStation_len=m_strOriginalStationCh.GetLength();
	LastStation_len=m_strLastStationCh.GetLength();

	n=0;
	for(i=0;i<OriginalStation_len-1;i=i+2)
	{ 
		unsigned char str=m_strOriginalStationCh[i];
		if(str>0x80)
		{
			//取得字符串是从第0个开始的
			ucOriginalStationQ=m_strOriginalStationCh[i];
			ucOriginalStationW=m_strOriginalStationCh[i+1];
			UnicodeData[i]=0x2A9+(ucOriginalStationQ-0xB0)*0x5E+(ucOriginalStationW-0xA1);
			UnicodeDataL[i]=UnicodeData[i]&0x00FF;
			UnicodeDataH[i]=(UnicodeData[i]&0xFF00)>>8;
			//赋值
			m_ucIntervalMasterCh[23+3*n]=UnicodeDataL[i];
			m_ucIntervalMasterCh[24+3*n]=UnicodeDataH[i];
			n++;
		}
		else
		{
		    m_ucIntervalMasterCh[23+3*n]=m_strOriginalStationCh[i]+0x84;
			i--;
			n++;
		}
	}
	m_ucIntervalMasterCh[23+3*n]=0xB1;
	m_ucIntervalMasterCh[24+3*n]=0x00;
	n++;
	for(i=0;i<LastStation_len-1;i=i+2)
	{ 
    	//取得字符串是从第0个开始的	
		unsigned char str=m_strLastStationCh[i];
		if(str>0x80)
		{
			ucLastStationQ=m_strLastStationCh[i];
			ucLastStationW=m_strLastStationCh[i+1];
			UnicodeData1[i]=0x2A9+(ucLastStationQ-0xB0)*0x5E+(ucLastStationW-0xA1);
			UnicodeDataL1[i]=UnicodeData1[i]&0x00FF;
			UnicodeDataH1[i]=(UnicodeData1[i]&0xFF00)>>8;
			//赋值
			m_ucIntervalMasterCh[23+3*n]=UnicodeDataL1[i];
			m_ucIntervalMasterCh[24+3*n]=UnicodeDataH1[i];
			n++;
		}
		else
		{
			m_ucIntervalMasterCh[23+3*n]=m_strLastStationCh[i]+0x84;
			i--;
			n++;
		}
	}

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

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

	m_ucIntervalMasterCh[10]=n*3+4;
	m_ucIntervalMasterCh[14]=n*3+4;
	m_ucIntervalMasterCh[18]=2;
	m_ucIntervalMasterCh[21]=n;

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

	m_iIntervalNumCh=m_iIntervalNumCh+3;

	
	////////区间英文赋值
	OriginalStation_len=m_strOriginalStationEn.GetLength();
	LastStation_len=m_strLastStationEn.GetLength();

	n=0;
	for(i=0;i<OriginalStation_len;i++)
	{ 
		m_ucIntervalMasterEn[22+n*3]=0x0F;
		m_ucIntervalMasterEn[23+n*3]=m_strOriginalStationEn[i]; 
		n++;
	}
	m_ucIntervalMasterEn[23+3*n]=0xB1;
	m_ucIntervalMasterEn[24+3*n]=0x00;
	n++;
	for(i=0;i<LastStation_len;i++)
	{ 
		m_ucIntervalMasterEn[22+n*3]=0x0F;
		m_ucIntervalMasterEn[23+n*3]=m_strLastStationEn[i]; 
		n++;
	}

	//if(n<=8)
	{   //后面加6个空格
		for(i=0;i<6;i++)  
		{
			m_ucIntervalMasterEn[22+3*n]=0x0F;
		    m_ucIntervalMasterEn[23+3*n]=0x20;
			n++;
		}
	}

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

	m_ucIntervalMasterEn[10]=n*3+4;
	m_ucIntervalMasterEn[14]=n*3+4;
	m_ucIntervalMasterEn[18]=5;
	m_ucIntervalMasterEn[21]=n;

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

	m_iIntervalNumEn=m_iIntervalNumEn+3;
	//发送车外
//	EDSend();
	SetTimer(5,4000,NULL);//设定2秒钟
 




 //////////////////////////////////////////////
 //取中途经由车站

	if (m_pConnection.ConnectAccess(mMDB_Path,"sri"))
	{
		strSql="SELECT PassStationEn,PassStationCh FROM RouteList ";		
		strSql+="where TrainCode='";
		strSql+=m_checi;
		strSql+="'";
		pRS0.SetAdoConnection(&m_pConnection);
		pRS0.Open(strSql,adCmdText);
		if(!pRS0.IsEOF())
		{
			pRS0.GetCollect("PassStationEn",sTemp1);
			pRS0.GetCollect("PassStationCh",sTemp2);
			sTemp1.TrimRight();
			sTemp2.TrimRight();			
		}
		else
		{
			sTemp1=_T("");
			sTemp2=_T("");
		}
		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=strTemp+m_strOriginalStationCh+_T("开往")+m_strLastStationCh;
    strTemp=strTemp+_T("的")+m_checi+_T("次列车");
	m_strIDch=strTemp;

	////中文赋值
    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
	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("Welcome on board our ");
    strTemp=strTemp+m_checi+_T(" train. ");
    //strTemp=strTemp+_T("This train is travelling from ")+m_strOriginalStationEn+_T(" to ")+m_strLastStationEn;

	m_strIDen=strTemp;

	////车内英文赋值
    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,12000,NULL);




}


/*#######################################
   当在combo_nextstation中选择下一站时
############################################*/
void CPROJECTPMUDlg::OnSelchangeComboNextstation() 
{
	// TODO: Add your control notification handler code here
	int n=((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetCurSel();
	((CComboBox*)GetDlgItem(IDC_COMBO_NEXTSTATION))->GetLBText(n,m_nextstation);

	SetDlgItemText(IDC_STATIC_NSTATION_TEXT, m_nextstation);

	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); 
		}
		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();
	*/
}


void CPROJECTPMUDlg::wait()
{
	Sleep(200);
}


//清空外屏
void CPROJECTPMUDlg::ClearED()
{ 
	int CRCchecksum;
    m_EDIDInit[16]=0x05;     //清空
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=0x90;
	m_EDIDInit[19]=0x10;
	m_EDIDInit[20]=0x08;
	m_EDIDInit[21]=0x08;
	m_EDIDInit[22]=0xD8;
	//算出CRC
	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();
}

//清空内屏
void CPROJECTPMUDlg::ClearID()
{ 
	int CRCchecksum;
    m_EDIDInit[16]=0x05;     //清空
    m_EDIDInit[17]=2;     //车内
	m_EDIDInit[18]=0x90;
	m_EDIDInit[19]=0x10;
	m_EDIDInit[20]=0x08;
	m_EDIDInit[21]=0x08;
	m_EDIDInit[22]=0xD8;
	//算出CRC
	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();
}


/*##########################################
车外显示发送函数
 ###############################################333*/
void CPROJECTPMUDlg::EDSend()
{
	int CRCchecksum;

	KillTimer(5);

	//清空外屏 
	ClearED();

	//初始化############################
	//全列车厢号中文初始化
	m_EDIDInit[16]=0x13;     //初始化
    m_EDIDInit[17]=1;     //车外
	m_EDIDInit[18]=0;     //车厢号中文
	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]=1;     //车次中文
	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]=2;     //区间中文
	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_EDIDInit[16]=0x13;     //初始化

⌨️ 快捷键说明

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