📄 modem3dlg.cpp
字号:
{
// TODO: Add your command handler code here
UINT i;
CBehaoDialog dlg;
i=dlg.DoModal();
if(i==IDOK)
{
if(m_str=="挂断")
{
CDC * pDCC=this->GetDC();
CFont* newFont;
newFont=new CFont();
newFont->CreatePointFont(180,"宋体",pDCC);
GetDlgItem(IDC_TIT)->SetWindowText("BCT16——制冷");
GetDlgItem(IDC_TIT)->SetFont(newFont);
ReleaseDC(pDCC);
SetTimer(1,400,NULL);
CMenu* m_Menu=this->GetMenu();
m_Menu->ModifyMenu(ID_ZJTS,MF_UNCHECKED,ID_ZJTS,"整机调试");
m_Menu->ModifyMenu(ID_BJTS,MF_UNCHECKED,ID_BJTS,"部件调试");
m_Menu->ModifyMenu(ID_AUTO,MF_CHECKED,ID_AUTO,"自动运行");
m_Menu->ModifyMenu(ID_SHIWAIJI1,MF_CHECKED,ID_SHIWAIJI1,"1#室外机");
}
else if(m_str=="拨号")
{
KillTimer(1);
}
}
}
void CModem3Dlg:: addRecordset()
{
_variant_t m_Tim,m_Ktr,m_Ktc,m_Gfwd,m_Gfyw,m_Ktsb,m_Lqb,m_Lqfj,m_Ryb,m_Zkb,m_Ktrsj;
int i;
m_Time=COleDateTime::GetCurrentTime();
i=m_Time.GetMinute();
if(i!=m_Minute)
{
m_Minute=i;
m_Tim=m_Time;
m_Ktr=(float)30;
m_Ktc=(float)60;
m_Gfwd=(float)45;
m_Gfyw="2#";
m_Ktsb="开";
m_Lqb="低速";
m_Lqfj="中速";
m_Ryb="开";
m_Zkb="开";
m_Ktrsj="小火";
m_pRecord->AddNew();
m_pRecord->PutCollect("历史时间",m_Tim);
m_pRecord->PutCollect("空调水入口",m_Ktr);
m_pRecord->PutCollect("空调水出口",m_Ktc);
m_pRecord->PutCollect("高发温度",m_Gfwd);
m_pRecord->PutCollect("高发液位",m_Gfyw);
m_pRecord->PutCollect("空调水泵",m_Ktsb);
m_pRecord->PutCollect("冷却泵",m_Lqb);
m_pRecord->PutCollect("冷却风机",m_Lqfj);
m_pRecord->PutCollect("溶液泵",m_Ryb);
m_pRecord->PutCollect("真空泵",m_Zkb);
m_pRecord->PutCollect("空调燃烧机",m_Ktrsj);
}
}
//通讯处理
void CModem3Dlg::communcation()
{
if(send_flag==1)
immediate_communcation(); //及时查寻
else
gongkuang_communcation(); //工况查寻
receive(); //数据接受
data_dealwith();
}
void CModem3Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
time_over++;
if(time_over>1000)
time_over=0;
AfxBeginThread(ThreadFunc,(LPVOID)this); //启动工作者线程 //工况数据处理
CDialog::OnTimer(nIDEvent);
}
void CModem3Dlg::immediate_communcation(void)
{
int i;
if(send_over==1) //上一命令已发送完
{
send_over=0;
send_timer++;
if(send_timer>3)
{
send_flag=0;
send_timer=0;
}
switch(send_data[3])
{
case 0x01: //室外机发送次数
if(shiwaiji_send_timer[send_data[4]-1]>1000)
shiwaiji_send_timer[send_data[4]-1]=0;
else
shiwaiji_send_timer[send_data[4]-1]++;
break;
case 0x02: //室内机发送次数
if(shineiji_send_timer[send_data[4]-1]>1000)
shineiji_send_timer[send_data[4]-1]=0;
else
shineiji_send_timer[send_data[4]-1]++;
break;
case 0x04: //热水罐发送次数
if(reshueiguan_send_timer[send_data[4]-1]>1000)
reshueiguan_send_timer[send_data[4]-1]=0;
else
reshueiguan_send_timer[send_data[4]-1]++;
break;
}
CByteArray array;
array.RemoveAll();
array.SetSize(50);
for(i = 0; i < 50; i++)
array.SetAt(i, send_data[i]);
m_Com.SetOutput(COleVariant(array));
}
}
void CModem3Dlg::gongkuang_communcation()
{
int i;
unsigned char Tx_data[100]; //
if(send_over==1)
{
send_over=0;
switch(send_owner)
{
case 1: /* 室外机查寻 ( 工况和故实时故障) */
switch(shiwaiji_command_no)
{
case 1: //工况查寻
Tx_data[0]=0xf7;
Tx_data[1]=0xf8;
Tx_data[2]=0x04;
Tx_data[3]=0x01;
Tx_data[4]=shiwaiji_owner_no;
Tx_data[5]=0x10;
Tx_data[6]=0x00;
for( i=2;i<6;i++)
Tx_data[6]+=Tx_data[i];
Tx_data[7]=0xfd;
shiwaiji_send_timer[shiwaiji_owner_no-1]++;
shiwaiji_command_no++;
break;
case 2: //实时故障
Tx_data[0]=0xf7;
Tx_data[1]=0xf8;
Tx_data[2]=0x04;
Tx_data[3]=0x01;
Tx_data[4]=shiwaiji_owner_no;
Tx_data[5]=0x11;
Tx_data[6]=0x00;
for(i=2;i<6;i++)
Tx_data[6]+=Tx_data[i];
Tx_data[7]=0xfd;
shiwaiji_send_timer[shiwaiji_owner_no-1]++;
shiwaiji_command_no++;
case 3:
Tx_data[0]=0xf7;
Tx_data[1]=0xf8;
Tx_data[2]=0x04;
Tx_data[3]=0x01;
Tx_data[4]=shiwaiji_owner_no;
Tx_data[5]=0x0A;
Tx_data[6]=0x00;
for(i=2;i<6;i++)
Tx_data[6]+=Tx_data[i];
Tx_data[7]=0xfd;
shiwaiji_send_timer[shiwaiji_owner_no-1]++;
shiwaiji_command_no=1;
shiwaiji_owner_no++; //室外机发送所有权增加
break;
}
//
if(shiwaiji_owner_no>=3)
{
send_owner=2;
shiwaiji_owner_no=1;
}
break;
case 2: //室内机工况查寻
Tx_data[0]=0xf7;
Tx_data[1]=0xf8;
Tx_data[2]=0x04;
Tx_data[3]=0x02;
Tx_data[4]=shineiji_owner_no;
Tx_data[5]=0x27;
Tx_data[6]=0x00;
for(i=2;i<6;i++)
Tx_data[6]+=Tx_data[i];
Tx_data[7]=0xfd;
shineiji_send_timer[shineiji_owner_no-1]++;
shineiji_owner_no++;
if(shineiji_owner_no>=80)
{
shineiji_owner_no=1;
send_owner=3;
}
break;
case 3: //热水罐工况查寻
Tx_data[0]=0xf7;
Tx_data[1]=0xf8;
Tx_data[2]=0x04;
Tx_data[3]=0x04;
Tx_data[4]=reshueiguan_owner_no;
Tx_data[5]=0x29;
Tx_data[6]=0x00;
for(i=2;i<6;i++)
Tx_data[6]+=Tx_data[i];
Tx_data[7]=0xfd;
reshueiguan_send_timer[reshueiguan_owner_no-1]++;
reshueiguan_owner_no++;
if(reshueiguan_owner_no>=17)
{
send_owner=1;
reshueiguan_owner_no=1;
}
break;
}
CByteArray array;
array.RemoveAll();
array.SetSize(8);
for(i = 0; i < 8; i++)
array.SetAt(i, Tx_data[i]);
m_Com.SetOutput(COleVariant(array));
}
}
void CModem3Dlg::OnOnCommMscomm2()
{
// TODO: Add your control notification handler code here
VARIANT vResponse;
int nEvent;
nEvent=m_Com.GetCommEvent();
switch(nEvent)
{
case 1:
send_over=1;
break;
case 2:
vResponse=m_Com.GetInput();
receive_data[m_count]=vResponse.bVal;
switch(m_count)
{
case 0:
if(receive_data[0]==0xf7) m_count++;
else m_count=0;
break;
case 1:
if(receive_data[1]==0xf8) m_count++;
else m_count=0;
break;
case 2:
m_long=receive_data[2]+4;
if(m_long>60) m_count=0;
else m_count++;
break;
default:
m_count++;
break;
}
if(m_count>=m_long&&m_long>0)
{ receive_flag=1;
m_long=0;
m_count=0;
}
}
}
void CModem3Dlg::receive(void)
{
int i,sum;
if(receive_flag==1) //数据收完
{
receive_flag=0;
for(i=2;i<receive_data[2]+2;i++)
sum+=receive_data[i];
if(sum!=receive_data[receive_data[2]+2]) //校验和
return;
switch(receive_data[5])
{
case 0x10: //室外机工况
for(i=0;i<receive_data[2]+4;i++)
shiwaiji_gongkuang[receive_data[4]-1][i]=receive_data[i];
shiwaiji_send_timer[receive_data[4]-1]=0;
break;
case 0x11:
for(i=0;i<receive_data[2]+4;i++) //室外机故障
shiwaiji_guzhang[receive_data[4]-1][i]=receive_data[i];
shiwaiji_send_timer[receive_data[4]-1]=0;
break;
case 0x0A:
m_gzzt=receive_data[7]&&0x03;
shiwaiji_send_timer[receive_data[4]-1]=0;
break;
case 0x27: //室内机工况
for(i=0;i<receive_data[2]+4;i++)
shineiji_gongkuang[receive_data[4]-1][i]=receive_data[i];
shineiji_send_timer[receive_data[4]-1]=0;
break;
case 0x29:
for(i=0;i<receive_data[2]+4;i++)
reshueiguan_gongkuang[receive_data[4]-1][i]=receive_data[i];
reshueiguan_send_timer[receive_data[4]-1]=0;
break;
default:
for(i=0;i<receive_data[2]+4;i++)
//immediate_data[receive_data[4]-1][i]=receive_data[i];
send_timer=0; //清除立即查寻的发送次数
send_flag=0; //清除立即查寻的发送标志
break;
}
receive_flag=0;
}
}
void CModem3Dlg::data_dealwith()
{
unsigned char j;
CString str;
/* for(i=2;i<rx_data[2]+4-2;i++)
sum+=rx_data[i];
if(sum==rx_data[rx_data[2]+2])
{
switch(rx_data[5])
{
case 0x10: //室外机工况
if(rx_data[4]==shiwaiji_xuanze)
{
*/
parameter_dealwith(); //工况参数
auto_dealwith(); //自动运行
zb_dealwith(); //数据显示之部件
guzhang_dealwith(); //数据显示之故障
//液位更新
CWnd* pWnd= GetDlgItem(IDC_STATICGAOFAYEWEI);
CDC * pDCC=pWnd->GetDC();
CBrush newbrush(RGB (140, 255, 120));
j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&0x1e;
switch(j)
{
case 0x02:
m_high=25;
break;
case 0x04:
m_high=50;
break;
case 0x08:
m_high=75;
break;
case 0x10:
m_high=100;
break;
default:
m_high=0;
break;
}
if(ye1!=j)
{
ye1=j;
pWnd->Invalidate();
pWnd->UpdateWindow();
CBrush * oldbrush=pDCC->SelectObject(&newbrush);
pDCC->Rectangle(0,100-m_high,50,100);
pDCC->SelectObject(oldbrush);
pWnd->ReleaseDC(pDCC);
}
j=shiwaiji_gongkuang[shiwaiji_xuanze][32]&0x07;
switch(j)
{
case 0x01:
m_high=40;
break;
case 0x02:
m_high=80;
break;
case 0x04:
m_high=125;
break;
default:
m_high=0;
break;
}
if(ye2!=j)
{ye2=j;
pWnd=GetDlgItem(IDC_STATICLJYW);
pDCC=pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
CBrush newbrush2(RGB(123,222,125));
CBrush* oldbrush2=pDCC->SelectObject(&newbrush2);
pDCC->Rectangle(0,125-m_high,68,125);
pDCC->SelectObject(oldbrush2);
pWnd->ReleaseDC(pDCC);
}
j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x20;
if(j==0x20)
GetDlgItem(IDC_DFYW)->SetWindowText("满");
else
GetDlgItem(IDC_DFYW)->SetWindowText("未满");
j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x40;
if(j==0x40)
GetDlgItem(IDC_CQYW)->SetWindowText("满");
else
GetDlgItem(IDC_CQYW)->SetWindowText("未满");
j=shiwaiji_gongkuang[shiwaiji_xuanze][31]&&0x80;
if(j==0x80)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -