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