📄 setbiaomangerdlg.cpp
字号:
if(m_setpage1.m_chk_setdbnumber)
if(SetDbnumber())
{
m_biaonumber=m_setpage1.m_edt_setdbnumber;
UpdateData(FALSE);
AddStatusItem("设置电表号码","成功");
}
else
AddStatusItem("设置电表号码","失败");
if(m_setpage1.m_chk_setprg_mima)
if(SetPrgMima())
{
m_mima=m_setpage1.m_edt_setprg_mima;
UpdateData(FALSE);
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_MIMA);
hedit->RedrawWindow();
AddStatusItem("设置编程密码","成功");
}
else
AddStatusItem("设置编程密码","失败");
if(m_setpage1.m_chk_setclear_mima)
if(SetClearMima())
{
//m_clear_mima=m_setpage1.m_edt_setclear_mima;
// UpdateData(FALSE);
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_CLEAR_MIMA);
hedit->RedrawWindow();
AddStatusItem("设置清零密码","成功");
}
else
AddStatusItem("设置清零密码","失败");
if(m_setpage1.m_chk_date)
{
if(SetDate(0))//set date
AddStatusItem("设置日期","成功");
else
AddStatusItem("设置日期","失败");
}
if(m_setpage1.m_chk_time)
{
if(SetDate(1))//set time
AddStatusItem("设置时钟","成功");
else
AddStatusItem("设置时钟","失败");
}
if(m_setpage1.m_chk_autocbday)
{
if(SetAutocbDay())
AddStatusItem("设置抄表日","成功");
else
AddStatusItem("设置抄表日","失败");
}
if(m_setpage1.m_chk_broadcast)
{
SetBroadCast();
Sleep(100);
AddStatusItem("广播校时","完毕");
}
if(m_setpage1.m_chk_setjvnumber)
{
if(SetjvNumber())
{ m_biaonumber=m_setpage1.m_edt_setjvnumber;
UpdateData(FALSE);
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
hedit->RedrawWindow();
AddStatusItem("设置局编号","成功");
}
else
AddStatusItem("设置局编号","失败");
}
if(m_setpage1.m_chk_setdaytimes)
{
if(SetDayTimes())
AddStatusItem("设置日时段","成功");
else
AddStatusItem("设置日时段","失败");
}
if(m_setpage1.m_chk_clear)
{
if(SetClear())
AddStatusItem("电表清零","成功");
else AddStatusItem("电表清零","失败");
}
if(m_setpage1.m_chk_dbconst)
{
if(SetDbConst())
AddStatusItem("设置电表常数","成功");
else
AddStatusItem("设置电表常数","失败");
}
}
BOOL CSetbiaoMangerdlg::SetPrgData(CString bnumber, BYTE command, 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);// 起始符
// AfxMessageBox(bnumber);
BYTE tempchar[255];
int size,i;
int j=0;
BYTE hi,low;
//////////////////////////////////////////////////////
if(command==0x0a)
for(int i=0;i<6;i++)
sendchar.Add(0x99);
else//设置表号
{
bnumber.MakeUpper();
for( i=0;i<12;i+=2)
{
if(bnumber[i+1]<='9')
hi=bnumber[i+1]-'0';
else hi=10+bnumber[i+1]-'A';
if(bnumber[i]<='9')
low=bnumber[i]-'0';
else low =10+bnumber[i]-'A';
tempchar[j]=hi+low*16;
j++;
}
for(i=5;i>=0;i--)
{
sendchar.Add(tempchar[i]);
}
}
////////////////////////////////////////
///////////////////////////////////////////////////////
sendchar.Add(0x68);// 起始符
sendchar.Add(command&0x0f); //命令码
size=data.GetLength();
if(command==0x0a)
sendchar.Add((BYTE)size/2);//数据长度
else sendchar.Add((BYTE)size/2+4);//数据长度
////////////////////////////////////////////////
if(command!=0x0a)
{
mima.MakeUpper();
size=mima.GetLength();
temp.Empty();
for(i=0;i<6-size;i++)
temp+='0';
if(size<6)
mima.Insert(0,temp);
if(command==0x0f)
{
if(m_mimaFlag)
sendchar.Add(0x34);//密码
else
sendchar.Add(0x33);//密码
}
else
sendchar.Add(0x34);//密码
// AfxMessageBox(mima);
j=0;
for( i=0;i<6;i+=2)
{
if(mima[i+1]<='9')
{
hi=mima[i+1]-'0';
}
else
{
hi=10+mima[i+1]-'A';
}
if(mima[i]<'9')
{
low=mima[i]-'0';
}
else
{
low=10+mima[i]-'A';
}
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;
}
// AfxMessageBox(xx);//测试语句
//////////////////////////////
varout=COleVariant(sendchar);
if(m_comm.GetPortOpen())
m_comm.SetOutput(varout);//发送
else AfxMessageBox("串行口初始化失败!!!");
////////////////////////////////
//////////////////接收数据//////////////
EndWaitCursor();
if(Receive645Data())return TRUE;
else
return FALSE;
}
void CSetbiaoMangerdlg::ModifySetDbnumber()
{
CString temp;
int size,i;
//BYTE tempchar[255];
///////////////////修正表号////////////////////
size=m_biaonumber.GetLength();
temp.Empty();
for( i=0;i<12-size;i++)
temp+='0';
if(size<12)
m_biaonumber.Insert(0,temp);
UpdateData(FALSE);
//////////////////更新表号显示
CEdit *hedit;
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
hedit->RedrawWindow();
///////////////////////////////////
///////////////////修正局编号////////////////////
size=m_setpage1.m_edt_setdbnumber.GetLength();
temp.Empty();
for(i=0;i<12-size;i++)
temp+='0';
if(size<12)
m_setpage1.m_edt_setdbnumber.Insert(0,temp);
//////////////////更新局编号显示
m_setpage1.UpdatJvnumber();
}
void CSetbiaoMangerdlg::ModifyDbnumber()
{
UpdateData();
CString temp;
CEdit *hedit;
///////////////////修正表号////////////////////
int size=m_biaonumber.GetLength();
temp.Empty();
for(int i=0;i<12-size;i++)
temp+='0';
if(size<12)
m_biaonumber.Insert(0,temp);
UpdateData(FALSE);
//////////////////更新表号显示
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_BIAONUMBER);
hedit->RedrawWindow();
///////////////////////////////////
size=m_mima.GetLength();
temp.Empty();
for(i=0;i<6-size;i++)
temp+='0';
if(size<6)
m_mima.Insert(0,temp);
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_MIMA);
hedit->RedrawWindow();
///////////////////////////////
size=m_clear_mima.GetLength();
temp.Empty();
for(i=0;i<6-size;i++)
temp+='0';
if(size<6)
m_clear_mima.Insert(0,temp);
UpdateData(FALSE);
hedit=(CEdit *)this->GetDlgItem(IDC_EDT_CLEAR_MIMA);
hedit->RedrawWindow();
}
void CSetbiaoMangerdlg::OnBtnClear()
{
// TODO: Add your control notification handler code here
m_lst_status.DeleteAllItems();
m_status_count=0;
}
void CSetbiaoMangerdlg::SetPage2()
{
CString temp;
if(m_setpage2.update())
{
// temp.Format("%02X",byte2bcd(m_setpage2.m_edit_num)+0x33);
//if(sendSetdata(m_biaonumber,0x04,"45f6",m_mima,temp))
// AddStatusItem("设置时段","成功");
// else
// AddStatusItem("设置时段","失败");
if(sendSetdata(m_biaonumber,0x04,"72f6",m_mima,m_setpage2.m_data))
AddStatusItem("设置费率","成功");
else
AddStatusItem("设置费率","失败");
}
else AfxMessageBox("请指定费率");
}
void CSetbiaoMangerdlg::SetPage3()
{
if(m_setpage3.update())
{
if(sendSetdata(m_biaonumber,0x04,"48f4",m_mima,m_setpage3.m_data))
AddStatusItem("设置循显","成功");
else
AddStatusItem("设置循显","失败");
}
else AfxMessageBox("请选者循显设置项");
}
void CSetbiaoMangerdlg::SetBroadCast()
{
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[200];
for(int i=0;i<6;i++)
sendchar.Add(0x99);
///////////////////////////////////////////////////////
sendchar.Add(0x68);// 起始符
sendchar.Add(0x08); //命令码
sendchar.Add(0x06);//数据长度
CTime t=CTime::GetCurrentTime();
BYTE year,month,day,hour,minute,second;
year=byte2bcd(t.GetYear()-2000)+0x33;
month=byte2bcd(t.GetMonth())+0x33;
day=byte2bcd(t.GetDay())+0x33;
hour=byte2bcd(t.GetHour())+0x33;
minute=byte2bcd(t.GetMinute())+0x33;
second=byte2bcd(t.GetSecond())+0x33;
sendchar.Add(second);
sendchar.Add(minute);
sendchar.Add(hour);
sendchar.Add(day);
sendchar.Add(month);
sendchar.Add(year);
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); //结束符
//////////////////////////////
varout=COleVariant(sendchar);
if(m_comm.GetPortOpen())
m_comm.SetOutput(varout);//发送
else AfxMessageBox("串行口初始化失败!!!");
////////////////////////////////
if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
}
BOOL CSetbiaoMangerdlg::Receive645Data()
{
COleVariant varin;
BYTE *recchar;
CString temp;
BYTE sum=0;
int recstatus=0;
int recptr=0;
int limits=0;
BeginWaitCursor();
m_bRecData[0]=0xfe;
m_bRecData[1]=0xfe;
m_bRecData[2]=0xfe;
m_bRecData[3]=0xfe;
for(int j=0;j<255;j++)
m_bRecData[j]=0;
//////////////////////////////////
do{
Sleep(5);
if(m_comm.GetInBufferCount()>=1)
{
m_comm.SetInputLen(1);
varin=m_comm.GetInput(); //读COM口
temp.Empty();
recchar=(unsigned char *)varin.parray->pvData;
m_bRecData[recptr]=recchar[0];
if(recptr<255)//控制缓冲溢出
switch(m_bRecData[recptr])
{
case 0xfe:
if(recptr>14&&recstatus!=0xff)
{
if(14+m_bRecData[13]==recptr)//如果为校验和位则接收
recptr++;
else //否则清除接收缓冲
{
recptr=4;
recstatus=0;
}
}
else
{
recptr=4;
recstatus=0;
}
break;
case 0x68:
if(recstatus==0||recstatus==0xff)
{
m_bRecData[4]=0x68;
recptr=5;
recstatus=1;
}
else recptr++;
break;
case 0x16:
if(recptr>14&&recstatus!=0xff)
{
if(recptr<=14+m_bRecData[13])//如果为校验和位则接收
recptr++;
else //否则接收缓冲满
recstatus=0xff;
}
else recptr++;
break;
default: if(recstatus==1)
recptr++;
break;
}
}
limits++;
}while(recstatus!=0xff&&limits<200);
EndWaitCursor();
for(int i=4;i<recptr-1;i++)
{
sum+=m_bRecData[i];
}
if(m_comm.GetPortOpen())m_comm.SetPortOpen(FALSE);
if(recstatus==0xff&&limits<200&&sum==m_bRecData[recptr-1]&&(m_bRecData[12]&0x80))
return TRUE;
else return FALSE;
}
BOOL CSetbiaoMangerdlg::SetDbConst()
{
CString temp;
BYTE tempchar[255];
m_setpage1.update();
///////////////////修电表常数////////////////////
int size=m_setpage1.m_edt_str_dbconst.GetLength();
temp.Empty();
for(int i=0;i<6-size;i++)
temp+='0';
if(size<6)
m_setpage1.m_edt_str_dbconst=temp+m_setpage1.m_edt_str_dbconst;
// AfxMessageBox(m_setpage1.m_edt_str_dbconst);
//////////////////更电表常数
///////////////////////////////////
m_setpage1.m_edt_str_dbconst.MakeUpper();
int j=0;
BYTE hi,low;
for( i=0;i<6;i+=2)
{
hi=m_setpage1.m_edt_str_dbconst[i+1]-'0';
low=m_setpage1.m_edt_str_dbconst[i]-'0';
tempchar[j]=hi+low*16;
j++;
}
temp.Empty();
CString m_data;
for(i=2;i>=0;i--)
{temp.Format("%02x",tempchar[i]+0x33);
m_data+=temp;
}
//AfxMessageBox(m_data);
////////////////////////////////////////
if(sendSetdata(m_biaonumber,0x04,"63f3",m_mima,m_data))
return TRUE;
else return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -