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

📄 dlgcb.cpp

📁 基于WIN CE 的抄表系统,环境wince .net
💻 CPP
字号:
// DlgCb.cpp : implementation file
//

#include "stdafx.h"
#include "Cbsystem.h"
#include "DlgCb.h"

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

extern HANDLE hPort;
extern int  ByteToHex(BYTE b);
extern BYTE* Recbuf;
extern BYTE  IntToByte(int i);
extern BOOL WhMultiUpdateDB(LPWSTR lpbh,LPWSTR lpport,long lpower); 
extern int  HexToInt(BYTE lb,BYTE hb);
extern unsigned long  DHexToInt(BYTE b0,BYTE b1,BYTE b2,BYTE b3);
/////////////////////////////////////////////////////////////////////////////
// CDlgCb dialog


CDlgCb::CDlgCb(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCb::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgCb)
	m_month = _T("");
	m_bh = _T("");
	//}}AFX_DATA_INIT
}


void CDlgCb::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgCb)
	DDX_CBString(pDX, IDC_COMBO1, m_month);
	DDX_CBString(pDX, IDC_COMBO2, m_bh);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgCb, CDialog)
	//{{AFX_MSG_MAP(CDlgCb)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgCb message handlers

void CDlgCb::OnOK() 
{
	// TODO: Add extra validation here
	BYTE* SendBuff=new BYTE[7];
	UpdateData(TRUE);
	if((m_month=="")||(m_month.IsEmpty()))
	{
		
		AfxMessageBox(_T("请填写要抄表的月份"));
		return;
	}
	else
	{
		if(m_month=="上月")
			SendBuff[3]=0x01;
		else
			SendBuff[6]=0x02;
	}
	if((m_bh=="")||(m_bh.IsEmpty()))
	{
		
		AfxMessageBox(_T("请填写要抄表的表号"));
		return;
	}
	//{0xEB,0x90,0xEB,0x90}+控制字{0x02}+采集器地址(1byte)+采集月份(0x02:本月;0x01:上月)

	SendBuff[0]=0xEB;
	SendBuff[1]=0x90;
	SendBuff[2]=0xEB;
	SendBuff[3]=0x90;
	SendBuff[4]=0x02;
	SendBuff[5]=IntToByte(atoi((LPSTR)(LPCTSTR)m_bh));

	if(hPort)
	{
		serialCom->WritePort(SendBuff,7);
		Sleep(3000);
		//得到返回数据
		BYTE* buff=serialCom->ReadData(hPort);
		if(buff[0]==0XEB && buff[1]==0X90 && buff[2]==0XEB && buff[3] ==0X90)
		//if(Recbuf[0]==0XEB && Recbuf[1]==0X90 && Recbuf[2]==0XEB && Recbuf[3] ==0X90)
		{
			
			//调用线程函数处理数据
			//采集器号
			CString szBh=CString(ByteToHex(buff[4]));
			//信息字长度
			int iLength=HexToInt(buff[5],buff[6]);
			//信息字
			BYTE *buf=new BYTE[iLength];
			for(int k=0;k<iLength;k++)
			{
				buf[k]=buf[7+k];
			}
			//DHexToInt(BYTE b0,BYTE b1,BYTE b2,BYTE b3)
			for(int j=0;j<iLength/5;j++)
			{
				
				LPWSTR lpPort  = (LPWSTR)(LPCTSTR)itoa(ByteToHex(buf[j*5]));
				long lpPower = DHexToInt(buf[j*5+1],buf[j*5+2],buf[j*5+3],buf[j*5+4]);
				if(WhMultiUpdateDB((LPWSTR)(LPCTSTR)szBh,lpPort,lpPower))
				{
					BYTE* b=new BYTE[4];
					b[0]=0xFF;
					b[1]=SendBuff[5];
					b[2]=0x02;
					b[3]=0x01;
					serialCom->WritePort(b,4);
					AfxMessageBox(_T("抄表成功"));
				}
				else
				{
					BYTE* b=new BYTE[4];
					b[0]=0xFF;
					b[1]=SendBuff[5];
					b[2]=0x02;
					b[3]=0x02;
					serialCom->WritePort(b,4);
					AfxMessageBox(_T("抄表失败"));
				}
			}
			
		}
		else
		{
			//(0xFF+采集器地址+控制字(0x02)+0x01):成功;
			//(0xFF +采集器地址+控制字(0x02)+0x02):失败。
			BYTE* b=new BYTE[4];
			b[0]=0xFF;
			b[1]=SendBuff[5];
			b[2]=0x02;
			b[3]=0x02;
			serialCom->WritePort(b,4);
			AfxMessageBox(_T("抄表失败"));
		}
	}
	else
	{
		AfxMessageBox(_T("通讯端口没有打开,无法抄表!"));
	}


	//CDialog::OnOK();
}

BOOL CDlgCb::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	if(hPort != INVALID_HANDLE_VALUE)
	{
		CString pstr0,pstr1,pstr2,pstr3;
		pstr0	= ((CWinApp*)AfxGetApp())->GetProfileString(TEXT("Lgkj\\com"), TEXT("Port"));
		pstr1	= ((CWinApp*)AfxGetApp())->GetProfileString(TEXT("Lgkj\\com"), TEXT("Band"));
		pstr2	= ((CWinApp*)AfxGetApp())->GetProfileString(TEXT("Lgkj\\com"), TEXT("BitData"));
		pstr3	= ((CWinApp*)AfxGetApp())->GetProfileString(TEXT("Lgkj\\com"), TEXT("StopBit"));
		//AfxMessageBox(pstr0+"-"+pstr1+"-"+pstr2+"-"+pstr3);
		serialCom->OpenPort((LPWSTR)(LPCTSTR)pstr0,atoi((LPSTR)(LPCTSTR)pstr1),atoi((LPSTR)(LPCTSTR)pstr2),atoi((LPSTR)(LPCTSTR)pstr3));
		
	}
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

CString CDlgCb::itoa(int i)
{
	CString str;
	str.Format(_T("%d"),i);
	return str;
}

⌨️ 快捷键说明

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