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