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

📄 setbiaodlg.cpp

📁 645规约表计抄读设置软件 江苏省复费率表抄读设置 采用VC做得界面
💻 CPP
字号:
// Setbiaodlg.cpp : implementation file
//

#include "stdafx.h"
#include "DxManger.h"
#include "Setbiaodlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSetbiaodlg dialog


CSetbiaodlg::CSetbiaodlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSetbiaodlg::IDD, pParent)
{
	com=1;
	m_buad="1200";
	//{{AFX_DATA_INIT(CSetbiaodlg)
	m_biaonumber = _T("000000000001");
	m_mima = _T("123456");
	m_time = 0;
	m_date = 0;
	//}}AFX_DATA_INIT
}


void CSetbiaodlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetbiaodlg)
	DDX_Control(pDX, IDC_MSCOMM1, m_comm);
	DDX_Text(pDX, IDC_EDT_BIAONUMBER, m_biaonumber);
	DDV_MaxChars(pDX, m_biaonumber, 12);
	DDX_Text(pDX, IDC_EDT_MIMA, m_mima);
	DDV_MaxChars(pDX, m_mima, 6);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER1, m_time);
	DDX_DateTimeCtrl(pDX, IDC_DATETIMEPICKER2, m_date);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetbiaodlg, CDialog)
	//{{AFX_MSG_MAP(CSetbiaodlg)
	ON_BN_CLICKED(IDC_BTN_SET, OnBtnSet)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetbiaodlg message handlers

void CSetbiaodlg::initcom(int com)
{
 CString COMSetings;COMSetings=m_buad+",e,8,1";
    if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
	
	
    m_comm.SetCommPort(com);//设置端口
    m_comm.SetSettings(COMSetings);//设置波特率等参数
	m_comm.SetRThreshold(1);// 触发接收事件 
    m_comm.SetSThreshold(0);//不触发发送事件
    m_comm.SetInputLen(1);//每次读取一个字符
	m_comm.SetInputMode(1);//设置输入为二进制方式
	if(!m_comm.GetPortOpen())m_comm.SetPortOpen(TRUE);//打开串口
}

BOOL CSetbiaodlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	com=1;
	initcom(com);
	// TODO: Add extra initialization here
	CDateTimeCtrl *htimectr;
	htimectr=(CDateTimeCtrl *)this->GetDlgItem(IDC_DATETIMEPICKER1);
	htimectr->SetTime(COleDateTime::GetCurrentTime());

	htimectr=(CDateTimeCtrl *)this->GetDlgItem(IDC_DATETIMEPICKER2);
	htimectr->SetTime(COleDateTime::GetCurrentTime());
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


BOOL CSetbiaodlg::sendSetdata(CString bnumber, BYTE command, CString d0d1, 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);// 起始符
	
	BYTE tempchar[255];

	//////////////////////////////////////////////////////
	
		///////////////////修正表号////////////////////
	int  size=bnumber.GetLength();
	temp.Empty();
	for(int i=0;i<12-size;i++)
		temp+='0';
	if(size<12)
		bnumber.Insert(0,temp);
	m_biaonumber=bnumber;
	UpdateData(FALSE);
	//////////////////更新表号显示
	CEdit *hedit;	
	UpdateData(FALSE);
	hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
	hedit->RedrawWindow();
	
	///////////////////////////////////
	bnumber.MakeUpper();
	int j=0;
	BYTE hi,low;
	for( i=0;i<12;i+=2)
	{
		
		hi=bnumber[i+1]-'0';		
		low=bnumber[i]-'0';		
		tempchar[j]=hi+low*16;
		j++;		
	}
	for(i=5;i>=0;i--)
	{
     sendchar.Add(tempchar[i]);
	}
////////////////////////////////////////
	///////////////////////////////////////////////////////
	sendchar.Add(0x68);// 起始符
	sendchar.Add(command);	//命令码
	size=data.GetLength();
	sendchar.Add((BYTE)size/2+6);//数据长度
	d0d1.MakeUpper();
		for(i=0;i<4;i+=2)
	{
		tempchar[i]=d0d1[i];
		tempchar[i+1]=d0d1[i+1];
		if( tempchar[i]>'9')
			tempchar[i]=10+d0d1[i]-'A';
		else tempchar[i]=d0d1[i]-'0';
		if( tempchar[i+1]>'9')
			tempchar[i+1]=10+d0d1[i+1]-'A';
		else tempchar[i+1]=d0d1[i+1]-'0';
		tempchar[i]=tempchar[i]*16+tempchar[i+1];
		
		sendchar.Add(tempchar[i]);//采集选项
	}
	mima.MakeUpper();
	sendchar.Add(0x34);//密码
	j=0;
	for( i=0;i<6;i+=2)
	{
		
		hi=mima[i+1]-'0';		
		low=mima[i]-'0';		
		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;
		
	}
	
	//////////////////////////////
    varout=COleVariant(sendchar);
	
    if(m_comm.GetPortOpen())
		m_comm.SetOutput(varout);//发送
	else AfxMessageBox("串行口初始化失败!!!");

		////////////////////////////////
	int reccount=0;
//	BYTE te[2];
	BYTE *recchar;
//	recchar=te;
	m_comm.SetRThreshold(0);
	do{ 
		//Sleep(10);  
		
		if(m_comm.GetInBufferCount()>=1)
		{m_comm.SetInputLen(1);
		varin=m_comm.GetInput(); //读COM口
		temp.Empty();
		recchar=(unsigned char *)varin.parray->pvData; 
	
	
		
		reccount++;
		if(reccount%12==0)m_recstring+="\r\n" ;
		
		temp.Format("%02x,",recchar[0]);
		m_recstring+=temp;
		UpdateData(FALSE);
		if(recchar[0]==0x16)break;
		}
		else Sleep(10);
			limits++;
	//	temp.Format("%d",limits);
	//	m_count.SetWindowText(temp);
	}while(limits<200);
//	AfxMessageBox(m_recstring);
	if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
	EndWaitCursor();
	if(limits<200)return FALSE;		
	else
	return TRUE;

}

BYTE CSetbiaodlg::byte2bcd(BYTE bytedata)
{BYTE result;
result=(bytedata/10)*16+bytedata%10;
return result;

}
void CSetbiaodlg::OnBtnSet() 
{
	// TODO: Add your control notification handler code here
	SetDate(0);
}

BOOL CSetbiaodlg::SetDate(BOOL m_type)
{
	UpdateData(TRUE);
	
	m_recstring.Empty();
	CDateTimeCtrl *htimectr;
    if(m_type)
	{
		
		//htimectr=(CDateTimeCtrl *)this->GetDlgItem(IDC_DATETIMEPICKER1);
	//	htimectr->SetTime(COleDateTime::GetCurrentTime());
		BYTE hour,minute,second;
		hour=m_time.GetHour();
		minute=m_time.GetMinute();
		second=m_time.GetSecond();
		hour=byte2bcd(hour);
		minute=byte2bcd(minute);
		second=byte2bcd(second);
		CString temp;
		temp.Format("%02X%02X%02X",second+0x33,minute+0x33,hour+0x33);
//		AfxMessageBox(temp);
		sendSetdata(m_biaonumber,0x04,"44f3",m_mima,temp);
	}
	else
		{
		
	//	htimectr=(CDateTimeCtrl *)this->GetDlgItem(IDC_DATETIMEPICKER2);
	//	htimectr->SetTime(COleDateTime::GetCurrentTime());
		BYTE week,day,month,year;
		if(m_date.GetDayOfWeek()==1)
	    week=7;
		else week=m_date.GetDayOfWeek()-1;
		day=byte2bcd(m_date.GetDay());
		month=byte2bcd(m_date.GetMonth());
		year=byte2bcd(m_date.GetYear()-2000);
	
		CString temp;
		temp.Format("%02x%02X%02X%02X",week+0x33,day+0x33,month+0x33,year+0x33);
//		AfxMessageBox(temp);
		sendSetdata(m_biaonumber,0x04,"43f3",m_mima,temp);
	}
	return TRUE;
}

⌨️ 快捷键说明

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