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

📄 setbchdlg.cpp

📁 一个增加数据库字段的例子
💻 CPP
字号:
// SetBchDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SetYt.h"
#include "SetBchDlg.h"

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

extern ADDR		Addr;
extern int com;

//extern HANDLE	g_hEventComTX;
extern BYTE bStopFlag; 	
extern BYTE bStopFlag1; 	
BYTE bchcode[256];	// BCH校验码表
BYTE ytbuf[18];
BYTE timebuf[18];
BYTE tempbuf[5];
SYSTEMTIME	st;
//WORD	txpt1;
/////////////////////////////////////////////////////////////////////////////
// CSetBchDlg dialog
void GenBCHTable(LPSTR buf)
{
	unsigned char	code,code1;
	for ( int i=0; i<256; i++ )
	{
		code = (unsigned char)i;
		for ( int j=0; j<8; j++ )
		{
			code1 = code;
			code = code << 1;

			if ( code1 & 0x80 )code ^= 0x07;
		}
		buf[i] = code;
	}
}

BYTE GenBch(BYTE *buf)
{
	BYTE	bch = 0x00;
	for ( BYTE i=0; i<5; i++ )
	{
		bch ^= buf[i];//异或
		bch = bchcode[bch];
	}
	bch ^= 0xff;//取反
	return bch;
}

/////////////////////////////////////////////////////////////
CSetBchDlg::CSetBchDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSetBchDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSetBchDlg)
	m_PORTNO = 1;
	Flag = FALSE;
	//}}AFX_DATA_INIT
}


void CSetBchDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetBchDlg)
	DDX_Control(pDX, IDC_DATETIMEPICKER1, m_SENDTIME);
	DDX_Control(pDX, IDC_BAUD, m_BAUD);
	DDX_Text(pDX, IDC_PORTNO, m_PORTNO);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetBchDlg, CDialog)
	//{{AFX_MSG_MAP(CSetBchDlg)
	ON_CBN_SELCHANGE(IDC_BAUD, OnSelchangeBaud)
	ON_EN_CHANGE(IDC_PORTNO, OnChangePortno)
	ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETIMEPICKER1, OnDatetimechangeDatetimepicker1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSetBchDlg message handlers

void CSetBchDlg::OnSelchangeBaud() 
{
	// TODO: Add your control notification handler code here
	baud = m_BAUD.GetCurSel();
	Flag = TRUE;
}

void CSetBchDlg::OnChangePortno() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	com = portno = m_PORTNO;	
	Flag = TRUE;
}

void CSetBchDlg::OnDatetimechangeDatetimepicker1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CTime time;
	DWORD dwResult = m_SENDTIME.GetTime(time);
	if(dwResult != GDT_VALID)
	{
      // the user unmarked the "none" box
	   AfxMessageBox(_T("Time not set!"));
	}
	year1 = time.GetYear();
	month1 = time.GetMonth();
	day1 = time.GetDay();
//	Read();
	*pResult = 0;
}

BOOL CSetBchDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
//	txpt1=0;
	GenBCHTable((LPSTR)&bchcode[0]);
	m_BAUD.AddString("300BPS");		
	m_BAUD.AddString("600BPS");		
	m_BAUD.AddString("1200BPS");	
	m_BAUD.AddString("1800BPS");	
	m_BAUD.AddString("2400BPS");	

	CWinApp* pApp = AfxGetApp();
	if( pApp == NULL )	return FALSE;

	baud = pApp->GetProfileInt("设置通道","COM",1);
	portno = pApp->GetProfileInt("设置通道","PORTNO",2);

	if (baud < 4 )
			m_BAUD.SetCurSel(baud);
	else	m_BAUD.SetCurSel(1);

	m_PORTNO = portno;
	com = portno;
	CTime time = CTime::GetCurrentTime();
	year1 = time.GetYear();
	month1 = time.GetMonth();
	day1 = time.GetDay();
	tablename.Format("YTDATA%04d%02d%02d",year1,month1,day1);
	num = GetDataBaseRecordCount(&Addr , "SCADAData", tablename,"");	
	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CSetBchDlg::OnOK() 
{
	// TODO: Add extra validation here
/*	CWinApp* pApp = AfxGetApp();
	if( pApp == NULL )	return;
	if (Flag&&Addr.RUN->passwordflag[0])
	{
		if(MessageBox("参数已经修改,要存盘吗?","提示信息",
			MB_OKCANCEL|MB_ICONQUESTION)==IDOK)
		{
			pApp->WriteProfileInt("设置通道","COM",baud);
			pApp->WriteProfileInt("设置通道","PORTNO",portno);
		}
		Flag =0;
	}
*/
	if(Addr.RUN->passwordflag[0])
	{
		sio_close(portno);
		int	ret = sio_open (portno);
		if ( ret != SIO_OK )	return;
		
		int	mode = BIT_8;
		mode |= STOP_1;
		mode |= P_NONE;
		int boud;
		switch(baud)
		{
		case 0:
			boud=5;
			break;
		case 1:
			boud=6;
			break;
		case 2:
			boud=7;
			break;
		case 3:
			boud=8;
			break;
		case 4:
			boud=9;
			break;
		default:
			boud=6;
			break;
		}
		
		if( sio_ioctl(portno,boud, mode) < 0 )	return ;
		ret = sio_flowctrl(com,0);
		bStopFlag = TRUE;
		bStopFlag1 = TRUE;
//		SetEvent(g_hEventComTX);
		Addr.RUN->passwordflag[0] = 0;
	}
	else	AfxMessageBox("请选择允许修改!");
	CDialog::OnOK();
}

void CSetBchDlg::OnCancel() 
{
// TODO: Add extra cleanup here
//	SetEvent(g_hEventComTX);
	if(Addr.RUN->passwordflag[0])
	{
		bStopFlag = FALSE;
		bStopFlag1 = FALSE;
	}
	CDialog::OnCancel();
}
BOOL CSetBchDlg::TxBCH(BYTE no)
{
	int k;
	int value=0;
	int value1=0;
	GetLocalTime(&st);
	hour = st.wHour;
	minute = st.wMinute;
/*	if(hour==0 && minute<30)
	{
		hour=24;
	}
*/
	No = hour*2+minute/30;
	if(num<=0)	return FALSE;
	p_setytdata = new SETYTDATA[num];
	ReadAllSetYtData(&Addr,num,tablename,p_setytdata,-1);

	switch(no)
	{
	case 1:
		{
			ytbuf[0] = 0xEB;				//同步字头
			ytbuf[1] = 0x90;
			ytbuf[2] = 0xEB;
			ytbuf[3] = 0x90;
			ytbuf[4] = 0xEB;
			ytbuf[5] = 0x90;
			
			ytbuf[6] = 0x71;				//控制字
			ytbuf[7] = 0xA8;
			ytbuf[8] = 0x01;
			ytbuf[9] = 0x01;
			ytbuf[10] = 0x01;

			for(int i=0;i<6;i++)
			{
				tempbuf[i] = ytbuf[6+i];
			}
			ytbuf[11] = GenBch(tempbuf);
			ytbuf[12] = 0xE9;
			if(p_setytdata[0].validf)
			{
				value = p_setytdata[0].value[No]*(1+p_setytdata[0].coef[No]);
				if(value>200)	value=200;
				ytbuf[13] = LOBYTE((WORD)value*2048*2/256);
				ytbuf[14] = HIBYTE((WORD)value*2048*2/256);
			}
			else
			{
				ytbuf[13] = 0x00;
				ytbuf[14] = 0x00;
			}
			ytbuf[17] = GenBch(&ytbuf[12]);
			break;
		}
	case 2:
		{
			timebuf[0] = 0xEB;				//同步字头
			timebuf[1] = 0x90;
			timebuf[2] = 0xEB;
			timebuf[3] = 0x90;
			timebuf[4] = 0xEB;
			timebuf[5] = 0x90;
			timebuf[6] = 0x71;				//控制字
			timebuf[7] = 0xA8;
			timebuf[8] = 0x01;
			timebuf[9] = 0x01;
			timebuf[10] = 0x01;
			for(int i=0;i<6;i++)
			{
				tempbuf[i] = timebuf[6+i];
			}
			
			timebuf[11] = GenBch(tempbuf);
			timebuf[12] = 0xEA;
			if(num==1)	k=0;
			else   k=1;
			if(p_setytdata[k].validf)
			{
				value1 = p_setytdata[k].value[No]*(1+p_setytdata[k].coef[No]);
				if(value1>200)	value1=200;
				timebuf[13] = LOBYTE((WORD)value1*2048*2/256);
				timebuf[14] = HIBYTE((WORD)value1*2048*2/256);
			}
			else
			{
				timebuf[13] = 0x00;
				timebuf[14] = 0x00;
			}
			timebuf[17] = GenBch(&timebuf[12]);
			
			/*
			timebuf[0] = 0xEB;				//同步字头
			timebuf[1] = 0x90;
			timebuf[2] = 0xEB;
			timebuf[3] = 0x90;
			timebuf[4] = 0xEB;
			timebuf[5] = 0x90;
			
			  GetLocalTime(&st);
			  timebuf[6] = 0x7A;//帧类别
			  timebuf[7] = 0x0A;//数据域长度
			  timebuf[8] = HIBYTE(st.wMilliseconds);
			  timebuf[9] = LOBYTE(st.wMilliseconds);
			  timebuf[10] = (BYTE)st.wSecond;
			timebuf[11] = (BYTE)st.wMinute;
			timebuf[12] = (BYTE)st.wHour;
//			timebuf[13] = (BYTE)st.wDayOfWeek;
			timebuf[13] = (BYTE)st.wDay;
			timebuf[14] = (BYTE)st.wMonth;
			timebuf[15] = HIBYTE(st.wYear);
			timebuf[16] = LOBYTE(st.wYear);
			timebuf[17] = 0x11;
*/
			break;
		}
	}
	if(p_setytdata)		delete[] p_setytdata;

	return TRUE;
}


⌨️ 快捷键说明

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