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

📄 setbiaomangerdlg.cpp

📁 645规约表计抄读设置软件 江苏省复费率表抄读设置 采用VC做得界面
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   
	if(m_setpage1.m_chk_setdbnumber)
		if(SetDbnumber())
		{
		m_biaonumber=m_setpage1.m_edt_setdbnumber;
			            UpdateData(FALSE);
			
			AddStatusItem("设置电表号码","成功");
			
		}
		else
			AddStatusItem("设置电表号码","失败");
		
		if(m_setpage1.m_chk_setprg_mima)
			if(SetPrgMima())
			{	
				m_mima=m_setpage1.m_edt_setprg_mima;
				UpdateData(FALSE);
				
				UpdateData(FALSE);
				hedit=(CEdit *)this->GetDlgItem(IDC_EDT_MIMA);
				hedit->RedrawWindow();
				AddStatusItem("设置编程密码","成功");
				
			}
			else  
				AddStatusItem("设置编程密码","失败");
			
			if(m_setpage1.m_chk_setclear_mima)
				if(SetClearMima())
				{
					//m_clear_mima=m_setpage1.m_edt_setclear_mima;
				//	UpdateData(FALSE);
					
					UpdateData(FALSE);
					hedit=(CEdit *)this->GetDlgItem(IDC_EDT_CLEAR_MIMA);
					hedit->RedrawWindow();
					AddStatusItem("设置清零密码","成功");
				}
				else
					AddStatusItem("设置清零密码","失败");
				
				if(m_setpage1.m_chk_date)
				{
					if(SetDate(0))//set date	
						AddStatusItem("设置日期","成功");
					else
						AddStatusItem("设置日期","失败");
					
				}
				if(m_setpage1.m_chk_time)
				{  
					if(SetDate(1))//set time
						AddStatusItem("设置时钟","成功");
					else 
						AddStatusItem("设置时钟","失败");
					
				}
				if(m_setpage1.m_chk_autocbday)
				{
					if(SetAutocbDay())
						AddStatusItem("设置抄表日","成功");
					else
						AddStatusItem("设置抄表日","失败");
					
				}

					if(m_setpage1.m_chk_broadcast)
				{
					SetBroadCast();
					Sleep(100);
						AddStatusItem("广播校时","完毕");
					
				}
				if(m_setpage1.m_chk_setjvnumber)
				{
					if(SetjvNumber())
					{	m_biaonumber=m_setpage1.m_edt_setjvnumber;
			            UpdateData(FALSE);
						
		            	UpdateData(FALSE);
		          	    hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
			            hedit->RedrawWindow();
						AddStatusItem("设置局编号","成功");
					}
					else
						AddStatusItem("设置局编号","失败");
					
				}
				if(m_setpage1.m_chk_setdaytimes)
				{
					if(SetDayTimes())
						AddStatusItem("设置日时段","成功");
					else
						AddStatusItem("设置日时段","失败");
					
				}
				if(m_setpage1.m_chk_clear)
				{
					if(SetClear())
						AddStatusItem("电表清零","成功");
					
					else 	AddStatusItem("电表清零","失败");
					
				}
				if(m_setpage1.m_chk_dbconst)
   {
	   if(SetDbConst())
         AddStatusItem("设置电表常数","成功");
			
	
		else
			AddStatusItem("设置电表常数","失败");
   }
}


BOOL CSetbiaoMangerdlg::SetPrgData(CString bnumber, BYTE command, CString mima, CString data)
{
	if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
	if(!m_comm.GetPortOpen())m_comm.SetPortOpen(TRUE);//打开串口
	
	BeginWaitCursor();
	
	COleVariant varin,varout;
    CString temp;
	CByteArray sendchar;
    int limits=0;	
	sendchar.RemoveAll();
	//FE FE FE FE 68 00 00 00 00 00 00 68 01 02 43 F3 09 16 	
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	
	sendchar.Add(0x68);// 起始符
	//	AfxMessageBox(bnumber);
	BYTE tempchar[255];
	int  size,i;
	  	int j=0;
		BYTE hi,low;
		//////////////////////////////////////////////////////
		if(command==0x0a)
			for(int i=0;i<6;i++)
				sendchar.Add(0x99);
			else//设置表号
			{
			
				
				bnumber.MakeUpper();
				
				for( i=0;i<12;i+=2)
				{
					 
					if(bnumber[i+1]<='9')

					hi=bnumber[i+1]-'0';	
					else 	hi=10+bnumber[i+1]-'A';
                    if(bnumber[i]<='9')
					low=bnumber[i]-'0';
					else low =10+bnumber[i]-'A';
					tempchar[j]=hi+low*16;
					j++;		
				}
				for(i=5;i>=0;i--)
				{
					sendchar.Add(tempchar[i]);
				}
			}
			////////////////////////////////////////
			///////////////////////////////////////////////////////
			sendchar.Add(0x68);// 起始符
			sendchar.Add(command&0x0f);	//命令码
			size=data.GetLength();
			if(command==0x0a)
				sendchar.Add((BYTE)size/2);//数据长度
			else	sendchar.Add((BYTE)size/2+4);//数据长度
			
			////////////////////////////////////////////////
			if(command!=0x0a)
			{
				mima.MakeUpper();
				size=mima.GetLength();
				temp.Empty();
				for(i=0;i<6-size;i++)
					temp+='0';
				if(size<6)
					mima.Insert(0,temp);
				if(command==0x0f)
				{
					if(m_mimaFlag)
					sendchar.Add(0x34);//密码
					else
                       	sendchar.Add(0x33);//密码
				}
				else	
				sendchar.Add(0x34);//密码
				
				//	AfxMessageBox(mima);
				j=0;
				for( i=0;i<6;i+=2)
				{
					if(mima[i+1]<='9')
					{
					hi=mima[i+1]-'0';		
					}
					else 
					{
						hi=10+mima[i+1]-'A';
					}
					if(mima[i]<'9')
					{
					low=mima[i]-'0';		
					}
					else 
					{
						low=10+mima[i]-'A';
					}
					tempchar[j]=hi+low*16;
					j++;		
				}
				
				for(i=2;i>=0;i--)
				{
					sendchar.Add(tempchar[i]+0X33);//密码
				}
			}
			///////////////////////////////////////////////
			
			data.MakeUpper();
			size=data.GetLength();
			for(i=0;i<size;i+=2)
			{
				tempchar[i]=data[i];
				tempchar[i+1]=data[i+1];
				if( tempchar[i]>'9')
					tempchar[i]=10+data[i]-'A';
				else tempchar[i]=data[i]-'0';
				if( tempchar[i+1]>'9')
					tempchar[i+1]=10+data[i+1]-'A';
				else tempchar[i+1]=data[i+1]-'0';
				tempchar[i]=tempchar[i]*16+tempchar[i+1];
				
				sendchar.Add(tempchar[i]);//地址域
			}
			BYTE sum=0;
			for(i=4;i<sendchar.GetSize();i++)
			{
				tempchar[0]=sendchar.GetAt(i);
				sum+=sendchar.GetAt(i);
			}
			sendchar.Add(sum);
			sendchar.Add(0x16);	//结束符
			
			///////////////测试代码/////////////
			CString xx;
			for(i=0;i<sendchar.GetSize();i++)
			{
				temp.Format("%02X ",sendchar.GetAt(i));
				xx+=temp;
				
			}
//				AfxMessageBox(xx);//测试语句
			
			//////////////////////////////
			varout=COleVariant(sendchar);
			
			if(m_comm.GetPortOpen())
				m_comm.SetOutput(varout);//发送
			else AfxMessageBox("串行口初始化失败!!!");
			
			////////////////////////////////
			//////////////////接收数据//////////////

			
			EndWaitCursor();
			if(Receive645Data())return TRUE;		
			else
				return FALSE;
}

void CSetbiaoMangerdlg::ModifySetDbnumber()
{
	
	CString temp;
	int size,i;
	//BYTE tempchar[255];
	///////////////////修正表号////////////////////
	size=m_biaonumber.GetLength();
	temp.Empty();
	for( i=0;i<12-size;i++)
		temp+='0';
	if(size<12)
		m_biaonumber.Insert(0,temp);
	
	UpdateData(FALSE);
	//////////////////更新表号显示
	CEdit *hedit;	
	UpdateData(FALSE);
	hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
	hedit->RedrawWindow();
	
	///////////////////////////////////
	///////////////////修正局编号////////////////////
	size=m_setpage1.m_edt_setdbnumber.GetLength();
	temp.Empty();
	for(i=0;i<12-size;i++)
		temp+='0';
	if(size<12)
		m_setpage1.m_edt_setdbnumber.Insert(0,temp);
	//////////////////更新局编号显示
	
	m_setpage1.UpdatJvnumber();
}

void CSetbiaoMangerdlg::ModifyDbnumber()
{
	UpdateData();
	CString temp;
	CEdit *hedit;	
	///////////////////修正表号////////////////////
	int  size=m_biaonumber.GetLength();
	temp.Empty();
	for(int i=0;i<12-size;i++)
		temp+='0';
	if(size<12)
		m_biaonumber.Insert(0,temp);
	
	UpdateData(FALSE);
	//////////////////更新表号显示
	
	hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
	hedit->RedrawWindow();
	///////////////////////////////////
	size=m_mima.GetLength();
	temp.Empty();
	for(i=0;i<6-size;i++)
		temp+='0';
	if(size<6)
		m_mima.Insert(0,temp);
	UpdateData(FALSE);
	hedit=(CEdit *)this->GetDlgItem(IDC_EDT_MIMA);
	hedit->RedrawWindow();
	///////////////////////////////
	size=m_clear_mima.GetLength();
	temp.Empty();
	for(i=0;i<6-size;i++)
		temp+='0';
	if(size<6)
		m_clear_mima.Insert(0,temp);
	UpdateData(FALSE);
	hedit=(CEdit *)this->GetDlgItem(IDC_EDT_CLEAR_MIMA);
	hedit->RedrawWindow();
}

void CSetbiaoMangerdlg::OnBtnClear() 
{
	// TODO: Add your control notification handler code here
	m_lst_status.DeleteAllItems();
	m_status_count=0;
}

void CSetbiaoMangerdlg::SetPage2()
{
	CString temp;
	
	if(m_setpage2.update())
	{
		
	//	temp.Format("%02X",byte2bcd(m_setpage2.m_edit_num)+0x33);
		//if(sendSetdata(m_biaonumber,0x04,"45f6",m_mima,temp))
		//	AddStatusItem("设置时段","成功");
	//	else 
		//	AddStatusItem("设置时段","失败");
		
		if(sendSetdata(m_biaonumber,0x04,"72f6",m_mima,m_setpage2.m_data))
			AddStatusItem("设置费率","成功");
		else 
			AddStatusItem("设置费率","失败");
		
	}
	else AfxMessageBox("请指定费率");
	
}

void CSetbiaoMangerdlg::SetPage3()
{
	if(m_setpage3.update())
	{
		if(sendSetdata(m_biaonumber,0x04,"48f4",m_mima,m_setpage3.m_data))
			AddStatusItem("设置循显","成功");
		else 
			AddStatusItem("设置循显","失败");
	}
	else  AfxMessageBox("请选者循显设置项");
}

void CSetbiaoMangerdlg::SetBroadCast()
{

		if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
	if(!m_comm.GetPortOpen())m_comm.SetPortOpen(TRUE);//打开串口
	
	BeginWaitCursor();
	
	COleVariant varin,varout;
    CString temp;
	CByteArray sendchar;
    int limits=0;	
	sendchar.RemoveAll();
	//FE FE FE FE 68 00 00 00 00 00 00 68 01 02 43 F3 09 16 	
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	sendchar.Add(0xfe);
	
	sendchar.Add(0x68);// 起始符
	
BYTE tempchar[200];
			for(int i=0;i<6;i++)
				sendchar.Add(0x99);
		
			///////////////////////////////////////////////////////
			sendchar.Add(0x68);// 起始符
			sendchar.Add(0x08);	//命令码
			
			sendchar.Add(0x06);//数据长度
			CTime t=CTime::GetCurrentTime();
			BYTE year,month,day,hour,minute,second;
			year=byte2bcd(t.GetYear()-2000)+0x33;
			month=byte2bcd(t.GetMonth())+0x33;
			day=byte2bcd(t.GetDay())+0x33;
			hour=byte2bcd(t.GetHour())+0x33;
			minute=byte2bcd(t.GetMinute())+0x33;
			second=byte2bcd(t.GetSecond())+0x33;
			sendchar.Add(second);
			sendchar.Add(minute);
			sendchar.Add(hour);
			sendchar.Add(day);
			sendchar.Add(month);
			sendchar.Add(year);


			BYTE sum=0;
			for(i=4;i<sendchar.GetSize();i++)
			{
				tempchar[0]=sendchar.GetAt(i);
				sum+=sendchar.GetAt(i);
			}

			sendchar.Add(sum);
			sendchar.Add(0x16);	//结束符
			
		
			//////////////////////////////
			varout=COleVariant(sendchar);
			
			if(m_comm.GetPortOpen())
				m_comm.SetOutput(varout);//发送
			else AfxMessageBox("串行口初始化失败!!!");
			
			////////////////////////////////
			
			if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);			
}

BOOL CSetbiaoMangerdlg::Receive645Data()
{
   	COleVariant varin;
    BYTE *recchar;
	CString temp;
	BYTE sum=0;
	int recstatus=0;
	int recptr=0;
	int limits=0;
	BeginWaitCursor();
	m_bRecData[0]=0xfe;
	m_bRecData[1]=0xfe;
	m_bRecData[2]=0xfe;
	m_bRecData[3]=0xfe;
	for(int j=0;j<255;j++)
          m_bRecData[j]=0;
	//////////////////////////////////
	do{ 
		
		Sleep(5);
		if(m_comm.GetInBufferCount()>=1)
		{
			m_comm.SetInputLen(1);
			varin=m_comm.GetInput(); //读COM口
			temp.Empty();
			recchar=(unsigned char *)varin.parray->pvData; 
			
			m_bRecData[recptr]=recchar[0];
			if(recptr<255)//控制缓冲溢出
			switch(m_bRecData[recptr])
			{
			 case 0xfe:
				 if(recptr>14&&recstatus!=0xff)
				 {
					 if(14+m_bRecData[13]==recptr)//如果为校验和位则接收
					 	 recptr++; 
					 else //否则清除接收缓冲
					 {
						 recptr=4;
						 recstatus=0;
					 }
				 }
				 else
				 {
					 recptr=4;
					 recstatus=0;
				 }
				 
				 break;
			 case 0x68:
				 if(recstatus==0||recstatus==0xff)
				 {
					 m_bRecData[4]=0x68;
					 recptr=5;
					 recstatus=1;
				 }
				 else recptr++; 
				 
				 break;
			 case 0x16:  
				 if(recptr>14&&recstatus!=0xff)
				 {
					 if(recptr<=14+m_bRecData[13])//如果为校验和位则接收
						 recptr++;
					 else //否则接收缓冲满
						 recstatus=0xff;
					 
				 }
				 else recptr++;
				 break;
			 default: if(recstatus==1)
						  recptr++;	                      
				 break;                               
			}
		}
		limits++;

		
	}while(recstatus!=0xff&&limits<200);
	EndWaitCursor();
	
	  for(int i=4;i<recptr-1;i++)
	{
	
	sum+=m_bRecData[i];
	  }
	
	  	if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);

	if(recstatus==0xff&&limits<200&&sum==m_bRecData[recptr-1]&&(m_bRecData[12]&0x80))
		
		return TRUE;
	
	else return FALSE;

}

BOOL CSetbiaoMangerdlg::SetDbConst()
{
CString temp;
	BYTE tempchar[255];
		m_setpage1.update();
	///////////////////修电表常数////////////////////
	int  size=m_setpage1.m_edt_str_dbconst.GetLength();

	temp.Empty();
	for(int i=0;i<6-size;i++)
		temp+='0';
	if(size<6)
	m_setpage1.m_edt_str_dbconst=temp+m_setpage1.m_edt_str_dbconst;
	//	AfxMessageBox(m_setpage1.m_edt_str_dbconst);
	//////////////////更电表常数

	///////////////////////////////////
	m_setpage1.m_edt_str_dbconst.MakeUpper();
	int j=0;
	BYTE hi,low;
	for(  i=0;i<6;i+=2)
	{
		
		hi=m_setpage1.m_edt_str_dbconst[i+1]-'0';		
		low=m_setpage1.m_edt_str_dbconst[i]-'0';		
		tempchar[j]=hi+low*16;
		j++;		
	}
	temp.Empty();
	CString m_data;
	for(i=2;i>=0;i--)
	{temp.Format("%02x",tempchar[i]+0x33);
	m_data+=temp;
	}
	//AfxMessageBox(m_data);
	////////////////////////////////////////
	if(sendSetdata(m_biaonumber,0x04,"63f3",m_mima,m_data))
		return TRUE;
	else return FALSE;
	
}

⌨️ 快捷键说明

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