📄 testicandlldlg.cpp
字号:
// TODO: Add your message handler code here and/or call default
if(nIDEvent==TIMERID_REFRESHDATA)
{
LISTDATA* pdata;
int sz=m_ctlListData.GetItemCount();
DWORD len=32;
BYTE buff[32];
CString strtm=m_global.ConvertTimeToStr(m_global.GetTime());
CString strtmp1;
for(int i=0;i<sz;i++)
{
pdata=(LISTDATA*)m_ctlListData.GetItemData(i);
len=32;
if(pdata->bai==1)
{
Slave_GetAIData(pdata->hSlave,buff,&len);
if(len>0)
{
m_ctlListData.SetItemText(i,2,strtm);
m_ctlListData.SetItemText(i,3,m_global.DatatoStr(buff,len));
}
}
else if(pdata->bai==0)
{
Slave_GetDIData(pdata->hSlave,buff,&len);
if(len>0)
{
m_ctlListData.SetItemText(i,2,strtm);
m_ctlListData.SetItemText(i,3,m_global.DatatoStr(buff,len));
}
}
else
{
if(!Slave_IsConnected(pdata->hSlave))
{
DisconnectItem(i);
return;
}
}
}
}
CDialog::OnTimer(nIDEvent);
}
void CTesticandllDlg::ClearList()
{
int sz=m_ctlListData.GetItemCount();
for(int i=0;i<sz;i++)
{
delete (LISTDATA*)m_ctlListData.GetItemData(i);
}
m_ctlListData.DeleteAllItems();
}
void CTesticandllDlg::OnButtonConnect()
{
// TODO: Add your control notification handler code here
int isel=m_ctlComboDisconnectSlaveID.GetCurSel();
int slaveid=m_ctlComboDisconnectSlaveID.GetItemData(isel);
HANDLE hSlave;
int ret=Route_AddSlave(m_global.m_hRoute,slaveid,&hSlave);
if(ret==ICANOK||ret==ICANERR_ITEMEXIST)
{
Route_GetSlavebyID(m_global.m_hRoute,slaveid,&hSlave);
if(Slave_Connect(hSlave)==ICANOK)
{
m_ctlComboDisconnectSlaveID.DeleteString(isel);
AddConnectedItem(hSlave);
}
else
MessageBox("连接从站失败");
}
else
{
MessageBox("添加从站失败");
}
}
void CTesticandllDlg::AddConnectedItem(HANDLE hSlave)
{
AddItemToCombo(m_ctlComboConnectedSlaveID,Slave_GetID(hSlave));
AddItemToList(hSlave);
}
void CTesticandllDlg::DelItemFromCombo(CComboBox &combo,int ind)
{
CString str1;
str1.Format("%d",ind);
int ifind=combo.FindStringExact(0,str1);
if(ifind!=-1)
combo.DeleteString(ifind);
if(combo.GetCurSel()==-1)
combo.SetCurSel(0);
}
void CTesticandllDlg::AddItemToCombo(CComboBox &combo,int ind)
{
CString str1;
str1.Format("%d",ind);
int sz=combo.GetCount();
for(int i=0;i<sz;i++)
{
if(combo.GetItemData(i)>ind)
{
combo.SetItemData(combo.InsertString(i,str1),ind);
break;
}
else if(combo.GetItemData(i)==ind)
break;
}
if(i==sz)
combo.SetItemData(combo.AddString(str1),ind);
}
void CTesticandllDlg::AddItemToList(HANDLE hSlave)
{
CString str1;
LISTDATA* pdata=new LISTDATA;
pdata->hSlave=hSlave;
pdata->bai=2;
str1.Format("%d",Slave_GetID(hSlave));
int ind=m_ctlListData.InsertItem(m_ctlListData.GetItemCount(),str1);
m_ctlListData.SetItemText(ind,1,"设备信息");
m_ctlListData.SetItemText(ind,2,"00:00:00");
DWORD iolen[4];
Slave_GetIODataLen(hSlave,iolen,iolen+1,iolen+2,iolen+3);
str1.Format("DI=%d DO=%d AI=%d AO=%d\n",iolen[0],iolen[1],iolen[2],iolen[3]);
m_ctlListData.SetItemText(ind,3,str1);
m_ctlListData.SetItemData(ind,(DWORD)pdata);
pdata=new LISTDATA;
pdata->hSlave=hSlave;
pdata->bai=0;
str1.Format("%d",Slave_GetID(hSlave));
ind=m_ctlListData.InsertItem(m_ctlListData.GetItemCount(),str1);
m_ctlListData.SetItemText(ind,1,"DI");
m_ctlListData.SetItemText(ind,2,"00:00:00");
m_ctlListData.SetItemData(ind,(DWORD)pdata);
pdata=new LISTDATA;
pdata->hSlave=hSlave;
pdata->bai=1;
str1.Format("%d",Slave_GetID(hSlave));
ind=m_ctlListData.InsertItem(m_ctlListData.GetItemCount(),str1);
m_ctlListData.SetItemText(ind,1,"AI");
m_ctlListData.SetItemText(ind,2,"00:00:00");
m_ctlListData.SetItemData(ind,(DWORD)pdata);
}
void CTesticandllDlg::OnRclickListData(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* psub=menu.GetSubMenu(0);
CPoint pt;
GetCursorPos(&pt);
psub->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
*pResult = 0;
}
void CTesticandllDlg::OnMenuDisconnect()
{
// TODO: Add your command handler code here
int* parr;
int len=0;
GetSelItemArr(parr,len);
if(len==0)
return;
LISTDATA* pdata;
vector<HANDLE> vecslave;
for(int i=len-1;i>=0;i--)
{
pdata=(LISTDATA*)m_ctlListData.GetItemData(parr[i]);
for(int j=0;j<vecslave.size();j++)
{
if(vecslave[j]==pdata->hSlave)
break;
}
if(vecslave.size()==j)
vecslave.push_back(pdata->hSlave);
}
for(i=0;i<vecslave.size();i++)
{
Slave_Disconnect(vecslave[i]);
DelItemFromCombo(m_ctlComboConnectedSlaveID,Slave_GetID(vecslave[i]));
AddItemToCombo(m_ctlComboDisconnectSlaveID,Slave_GetID(vecslave[i]));
int sz=m_ctlListData.GetItemCount();
for(int j=sz-1;j>=0;j--)
{
pdata=(LISTDATA*)m_ctlListData.GetItemData(j);
if(pdata->hSlave==vecslave[i])
{
delete pdata;
m_ctlListData.DeleteItem(j);
}
}
}
delete []parr;
}
void CTesticandllDlg::OnUpdateMenuDisconnect(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_ctlListData.GetSelectedCount()>0);
}
int CTesticandllDlg::GetSelItemArr(int *& parr, int &len)
{
len=m_ctlListData.GetSelectedCount();
if(len==0)
return 0;
parr=new int[len];
POSITION pos=m_ctlListData.GetFirstSelectedItemPosition();
int ind=0;
while(pos!=NULL)
{
parr[ind++]=m_ctlListData.GetNextSelectedItem(pos);
}
return len;
}
void CTesticandllDlg::DelAllFromList()
{
int sz=m_ctlListData.GetItemCount();
for(int i=0;i<sz;i++)
{
LISTDATA* pdata=(LISTDATA*)m_ctlListData.GetItemData(i);
delete pdata;
}
m_ctlListData.DeleteAllItems();
m_ctlComboConnectedSlaveID.ResetContent();
m_ctlComboDisconnectSlaveID.ResetContent();
WORD wMasterid=m_global.m_syscfg.routecfg.wMasterID;
CString str1;
for(i=0;i<wMasterid;i++)
{
str1.Format("%d",i);
m_ctlComboDisconnectSlaveID.SetItemData(m_ctlComboDisconnectSlaveID.AddString(str1),i);
}
for(i=wMasterid+1;i<0xff;i++)
{
str1.Format("%d",i);
m_ctlComboDisconnectSlaveID.SetItemData(m_ctlComboDisconnectSlaveID.AddString(str1),i);
}
m_ctlComboDisconnectSlaveID.SetCurSel(0);
}
int CTesticandllDlg::GetByteArr(BYTE* pbyte, int &len)
{
CString str;
GetDlgItem(IDC_EDIT_DATA)->GetWindowText(str);
if(str.GetLength()>len*3)
return 0;
len=str.GetLength()/3;
if(len==0)
return 0;
char* p=str.GetBuffer(len*3+1);
char sztmp1[3]={0};
int itmp1;
for(int i=0;i<len;i++)
{
memcpy(sztmp1,p,2);
sscanf(sztmp1,"%x",&itmp1);
pbyte[i]=(BYTE)itmp1;
p+=3;
}
str.ReleaseBuffer();
return 1;
}
void CTesticandllDlg::OnButtonSenddata()
{
// TODO: Add your control notification handler code here
int ind=m_ctlComboConnectedSlaveID.GetCurSel();
if(ind==-1)
{
MessageBox("请选择从站");
return;
}
int id=m_ctlComboConnectedSlaveID.GetItemData(ind);
HANDLE hSlave;
Route_GetSlavebyID(m_global.m_hRoute,id,&hSlave);
BYTE addrarr[2]={0x20,0x60};
BYTE buf[32];
int len=32;
GetByteArr(buf,len);
if(len==0)
{
MessageBox("请输入发送数据");
return;
}
if(Slave_SendData(hSlave,addrarr[m_ctlComboDataType.GetCurSel()],buf,len)!=
ICANOK)
{
MessageBox("发送数据失败");
}
}
void CTesticandllDlg::OnSelchangeComboMasterid()
{
// TODO: Add your control notification handler code here
}
void CTesticandllDlg::DisconnectItem(int ind)
{
LISTDATA* pdata=(LISTDATA*)m_ctlListData.GetItemData(ind);
HANDLE hSlave=pdata->hSlave;
Slave_Disconnect(hSlave);
DelItemFromCombo(m_ctlComboConnectedSlaveID,Slave_GetID(hSlave));
AddItemToCombo(m_ctlComboDisconnectSlaveID,Slave_GetID(hSlave));
int sz=m_ctlListData.GetItemCount();
for(int j=sz-1;j>=0;j--)
{
LISTDATA* ptmpdata=(LISTDATA*)m_ctlListData.GetItemData(j);
if(ptmpdata->hSlave==hSlave)
{
m_ctlListData.DeleteItem(j);
delete ptmpdata;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -