📄 dlgcb.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 + -