⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 faketolcanview.cpp

📁 功能主要是串口通信和网络通信方面的
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					m_cNodeType = 0;
				}
				else if (str3 == "泵冲节点")
				{
					m_cNodeType = 1;
				}
				else if (str3 == "4-20mA模拟节点")
				{
					m_cNodeType = 2;
				}
				else if (str3 == "色谱节点")
				{
					m_cNodeType = 3;
				}

				BYTE m_cMonth = atoi(str2);
				USHORT m_uNodeNo = atoi(str1);
				BYTE NodeId[4];
				DWORD dwNodeId;
				memcpy(NodeId, &m_uNodeNo, 2);
				memcpy(NodeId + 2, &m_cMonth, 1);
				memcpy(NodeId + 3, &m_cNodeType, 1);
				memcpy(&dwNodeId, NodeId, 4);
				str.Format("%08X", dwNodeId);
			}
		}
		str4=m_NodeList.GetItemText(i,m+4);
		if (str4.IsEmpty())
		{
			str4 = "2";
		}
		str5=m_NodeList.GetItemText(i,m+5); //序号
		str6=m_NodeList.GetItemText(i,m+6);
		if (str6.IsEmpty())
		{
			str6 = "100";
		}
		str7=m_NodeList.GetItemText(i,m+7);
		CString strPackInterval;
		strPackInterval.Format("%d", m_PackInterval);
		if (str7 != strPackInterval)
		{
			str7 = strPackInterval;
		}
		str8=m_NodeList.GetItemText(i,m+8);
		if (str8.IsEmpty())
		{
			str8 = "1";
		}
		if(!str.IsEmpty() || !str1.IsEmpty() || !str2.IsEmpty())
		{
			//sql.Format("INSERT INTO lwx(NodeId,NodeNo,Month,NodeType,ByteNum,NodeOrder,SInterval,BInterval,ChannelNum) VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')",str,str1,str2,str3,str4,str5,str6,str7,str8);
			sql.Format("INSERT INTO Nodes VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s')",str,str1,str2,str3,str4,str5,str6,str7,str8);
			m_AdoConn.ExecuteSQL((_bstr_t)sql);
		}
	}
	m_AdoConn.ExitConnect();
	ModifyNodesOrder();
	m_bNodeChange = TRUE;
	m_NodeList.DeleteAllItems();
	UpdateNodeList();
//	m_NodeList.InsertItem(m_NodeList.row+1,0);
	int iNodeNum = ReturnNodeNum();
	m_NodeList.InsertItem(iNodeNum+1,0);

	CString strNum;
	strNum.Format("%d", iNodeNum);
	SetDlgItemText(IDC_STATIC_NODE_NUM, strNum);

	CString strTitle;
	strTitle = "模拟器-FakeTolCan";
	strTitle += "   (";
	strTitle += "当前节点个数:";
	strTitle += strNum;
	strTitle += ")";
	GetParent()->SetWindowText(strTitle);
}

void CFakeTolcanView::OnBtnAddNode() 
{
	// TODO: Add your control notification handler code here
	AddNode();
}

void CFakeTolcanView::AddNode()
{
	int num = m_NodeList.GetItemCount();
	num = num - 1;
	CNodeInfoDlg dlg;
	dlg.m_bModify = FALSE;
	dlg.m_PackInterval = m_PackInterval;
	int retval = dlg.DoModal();
	if (IDOK == retval)
	{
		m_NodeList.SetItemText(num, 0, dlg.m_strNodeId2);
		m_NodeList.SetItemText(num, 1, dlg.m_strNodeNo);
		m_NodeList.SetItemText(num, 2, dlg.m_strMonth);
		m_NodeList.SetItemText(num, 3, dlg.m_strNodeType);
		m_NodeList.SetItemText(num, 4, dlg.m_strByteNum);
//		m_NodeList.SetItemText(num, 5, dlg.m_strNodeOrder);
		m_NodeList.SetItemText(num, 6, dlg.m_strSmallInterval);
		m_NodeList.SetItemText(num, 7, dlg.m_strBigInterval);
		m_NodeList.SetItemText(num, 8, dlg.m_strWayNum);

		CNodeData *pNodeData = new CNodeData;
		pNodeData->m_strNodeType = dlg.m_strNodeType;
		pNodeData->m_iBase = atoi(dlg.m_strBase);
		pNodeData->m_iBound = atoi(dlg.m_strBound);
		pNodeData->m_iMinValue = atoi(dlg.m_strMinValue);
		pNodeData->m_iMaxValue = atoi(dlg.m_strMaxValue);
		pNodeData->m_iFirstValue = atoi(dlg.m_strFirstValue);
		pNodeData->m_iStep = atoi(dlg.m_strStep);
		pNodeData->m_iCurrentValue = pNodeData->m_iFirstValue;
		pNodeData->m_iCurrentStep = pNodeData->m_iStep;
		m_NodeDatas.SetAt(dlg.m_strNodeNo, pNodeData);
//		SaveParamInfo();
	}
	else if (IDCANCEL == retval)
	{
		return;
	}
	SaveNodes();
}

void CFakeTolcanView::ModifyNodesOrder()
{
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	CString sql;
//	sql.Format("select * from Nodes order by NodeId desc");
	sql.Format("select * from Nodes order by NodeId");
	_RecordsetPtr m_pRecordset;	
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
	int i = 0;
	while(!m_pRecordset->adoEOF)
	{
		CString str = (char*)(_bstr_t)m_pRecordset->GetCollect("NodeId");
		CString strOrder;
		strOrder.Format("%d", i);
		sql = "UPDATE Nodes set NodeOrder=";
		sql += "'"+strOrder+"'";
		sql += "where NodeId=";
		sql += "'"+str+"'";
		i++;
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
		m_pRecordset->MoveNext();
	}
	m_AdoConn.ExitConnect();
}

void CFakeTolcanView::ModifyBigInterval()
{
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	CString sql;
	//	sql.Format("select * from Nodes order by NodeId desc");
	sql.Format("select * from Nodes order by NodeId");
	_RecordsetPtr m_pRecordset;	
	m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
//	int i = 0;
	while(!m_pRecordset->adoEOF)
	{
		CString str = (char*)(_bstr_t)m_pRecordset->GetCollect("NodeId");
//		CString strOrder;
//		strOrder.Format("%d", i);
		CString strPackInterval;
		strPackInterval.Format("%d", m_PackInterval);
		sql = "UPDATE Nodes set BInterval=";
		sql += "'"+strPackInterval+"'";
		sql += "where NodeId=";
		sql += "'"+str+"'";
//		i++;
		m_AdoConn.ExecuteSQL((_bstr_t)sql);
		m_pRecordset->MoveNext();
	}
	m_AdoConn.ExitConnect();

	m_NodeList.DeleteAllItems();
	UpdateNodeList();
	m_NodeList.InsertItem(ReturnNodeNum()+1,0);
}

void CFakeTolcanView::OnBtnDeleteAllNodes() 
{
	// TODO: Add your control notification handler code here
	int iNodeNum = ReturnNodeNum();
	if (iNodeNum == 0)
	{
		MessageBox("没有任何节点可删除!", "提示");
		return;
	}
	if (IDCANCEL == MessageBox("确实要删除所有的节点吗",\
		"温馨提醒", MB_ICONEXCLAMATION | MB_ICONWARNING | MB_OKCANCEL))
	{
		return;
	}
	ADOConn m_AdoConn;
	m_AdoConn.OnInitADOConn();
	CString sql;
	sql= "delete from Nodes";
	m_AdoConn.ExecuteSQL((_bstr_t)sql);
	m_AdoConn.ExitConnect();
	m_NodeList.DeleteAllItems();
	UpdateNodeList();
	m_NodeList.InsertItem(1,0);
	m_bNodeChange = TRUE;
	CString strNum;
	strNum.Format("%d", 0);
	SetDlgItemText(IDC_STATIC_NODE_NUM, strNum);

	CString strTitle;
	strTitle = "模拟器-FakeTolCan";
	strTitle += "   (";
	strTitle += "当前节点个数:";
	strTitle += strNum;
	strTitle += ")";
	GetParent()->SetWindowText(strTitle);

	POSITION pos;
	CString strKey;
	CNodeData *pNodeData;
	pos = m_NodeDatas.GetStartPosition();
	while(NULL != pos)
	{
		m_NodeDatas.GetNextAssoc(pos, strKey, pNodeData);
		if (pNodeData)
		{
			m_NodeDatas.RemoveKey(strKey);
			delete pNodeData;
		}
	}
	ASSERT(NULL == m_NodeDatas.GetCount());
}

void CFakeTolcanView::OnBtnClerarRecvdata() 
{
	// TODO: Add your control notification handler code here
	m_strCmd.Empty();
	UpdateData(FALSE);
}

void CFakeTolcanView::Serialize(CArchive& ar) 
{
//	m_NodeDatas.Serialize(ar);
	if (ar.IsStoring())
	{	// storing code
		ar << m_nBaud;
		ar << m_nCom;
		ar << m_cParity;
		ar << m_nDatabits;
		ar << m_nStopbits;
		ar << m_nBufferSize;
		ar << m_dwPackId;
		ar << m_PackType;
		ar << m_PackInterval;
		ar << m_PackHeadLen;
		ar << m_iPort;
	}
	else
	{	// loading code
		ar >> m_nBaud;
		ar >> m_nCom;
		ar >> m_cParity;
		ar >> m_nDatabits;
		ar >> m_nStopbits;
		ar >> m_nBufferSize;
		ar >> m_dwPackId;
		ar >> m_PackType;
		ar >> m_PackInterval;
		ar >> m_PackHeadLen;
		ar >> m_iPort;
	}

	m_NodeDatas.Serialize(ar);
}

BOOL CFakeTolcanView::CanSerialize()
{
	return (0 == _access(DATA_FILE, 6));
}

void CFakeTolcanView::LoadParamInfo()
{
	if (CanSerialize())
	{		
		try
		{
			CFile file;
			CFileException fe;
			if (file.Open(DATA_FILE, CFile::typeBinary | CFile::modeRead, &fe))
			{
				CArchive ar(&file, CArchive::load);
				Serialize(ar);
			}
		}
		catch (CFileException* e)
		{
			e->ReportError();
			e->Delete();
		}
	}
}

void CFakeTolcanView::SaveParamInfo()
{
	BOOL bCanSave = FALSE;
	UINT nFlags = CFile::typeBinary | CFile::modeWrite;
	//if file doesn't exist, we create it
	if (_access(DATA_FILE, 0))
	{
		nFlags |= CFile::modeCreate;
		bCanSave = TRUE;
	}
	else
	{
		bCanSave = CanSerialize();
	}
	
	if (bCanSave)
	{
		CFile file;
		CFileException fe;
		if (file.Open(DATA_FILE, nFlags, &fe))
		{
			CArchive ar(&file, CArchive::store);
			Serialize(ar);
		}
	}
}

void CFakeTolcanView::OnDestroy() 
{

	CFormView::OnDestroy();
	
	// TODO: Add your message handler code here
	if (m_bCollectData)
	{
		KillTimer(1);
		m_bCollectData = FALSE;
	}
	if (m_bPortOpened)
	{
		m_SerialPort.ClosePort();
	}
/*
	if (m_bSP || m_bNW)
	{
		KillTimer(1);
	}*/

	CloseAllSocket();

	POSITION pos;
	CString strKey;
	CNodeData *pNodeData;
	pos = m_NodeDatas.GetStartPosition();
	while(NULL != pos)
	{
		m_NodeDatas.GetNextAssoc(pos, strKey, pNodeData);
		if (pNodeData)
		{
			m_NodeDatas.RemoveKey(strKey);
			delete pNodeData;
		}
	}
	ASSERT(NULL == m_NodeDatas.GetCount());
}


void CFakeTolcanView::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	if (m_bCollectData)
	{
		KillTimer(1);
		m_bCollectData = FALSE;
	}
	if (m_bPortOpened)
	{
		m_SerialPort.ClosePort();
	}

	CFormView::OnClose();
}

LRESULT CFakeTolcanView::OnEndLabelEditVariableCriteria(WPARAM wParam, LPARAM lParam) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)lParam;
	// TODO: Add your control notification handler code here
//	SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);
	int i = pDispInfo->item.iItem;
	int j = pDispInfo->item.iSubItem;
	if (j == 3)
	{
		CString str = pDispInfo->item.pszText;
		CString str2 = m_NodeTypes.GetAt(i);//p
		if (str != str2)
		{
			CSetDataDlg dlg;
			dlg.m_strNodeType = str;
			int retval = dlg.DoModal();
			if (IDOK == retval)
			{
				CString strNodeNo = m_NodeList.GetItemText(i, 1);
				int num = m_NodeList.GetItemCount();
				num -= 1;
//				if (strNodeNo == "")
				if (num == i)
				{
					strNodeNo ="100";
				}
				CNodeData *pNodeData = NULL;
				if (!m_NodeDatas.Lookup(str, pNodeData))
				{
					pNodeData = new CNodeData;
					m_NodeDatas.SetAt(strNodeNo, pNodeData);
				}
				if (pNodeData)
				{
					pNodeData->m_strNodeType = dlg.m_strNodeType;//
					pNodeData->m_iBase = atoi(dlg.m_strBase);
					pNodeData->m_iBound = atoi(dlg.m_strBound);
					pNodeData->m_iMinValue = atoi(dlg.m_strMinValue);
					pNodeData->m_iMaxValue = atoi(dlg.m_strMaxValue);
					pNodeData->m_iFirstValue = atoi(dlg.m_strFirstValue);
					pNodeData->m_iStep = atoi(dlg.m_strStep);
					pNodeData->m_iCurrentValue = pNodeData->m_iFirstValue;
					pNodeData->m_iCurrentStep = pNodeData->m_iStep;
				}
//				SaveParamInfo();
			}
			else if (IDCANCEL == retval)
			{
				m_NodeList.SetItemText(i, j, str2);
				return 1;
			}
		}
	}
	
	return 1;
}

LRESULT CFakeTolcanView::PopulateComboList(WPARAM wParam, LPARAM lParam)
{
	// Get the Combobox window pointer
	CComboBox* pInPlaceCombo = static_cast<CComboBox*> (GetFocus());
	
	// Get the inplace combbox top left
	CRect obWindowRect;
	
	pInPlaceCombo->GetWindowRect(&obWindowRect);
	CPoint obInPlaceComboTopLeft(obWindowRect.TopLeft()); 
	
	// Get the active list
	// Get the control window rect
	// If the inplace combobox top left is in the rect then
	// The control is the active control
	m_NodeList.GetWindowRect(&obWindowRect);
	
	int iColIndex = (int )wParam;
	
	CStringList* pComboList = reinterpret_cast<CStringList*>(lParam);
	pComboList->RemoveAll(); 
	
	if (obWindowRect.PtInRect(obInPlaceComboTopLeft)) 
	{				
		if(iColIndex==3)
		{
			pComboList->AddTail(_T("深度节点"));
			pComboList->AddTail(_T("泵冲节点"));		
			pComboList->AddTail(_T("4-20mA模拟节点"));		
			pComboList->AddTail(_T("色谱节点"));		
		}			
	}
	return true;
}

void CFakeTolcanView::GetLocalIP()
{
/*	char szHost[256];
	// 取得本地主机名称
	::gethostname(szHost, 256);
	// 通过主机名得到地址信息
	hostent *pHost = ::gethostbyname(szHost);
	// 打印出所有IP地址
	in_addr addr;
	for(int i = 0; ; i++)
	{
	char *p = pHost->h_addr_list[i];
	if(p == NULL)
	break;

	memcpy(&addr.S_un.S_addr, p, pHost->h_length);
	char *szIp = ::inet_ntoa(addr);
	}
	char *ch = pHost->h_addr_list[0];
	in_addr addr;
	memmove(&addr.S_un.S_addr, ch, pHost->h_length);
	char *szIp = inet_ntoa(addr);
	MessageBox(szIp);*/

	char *ip;
	char szHost[256];
	memset(szHost, 0, 256);
	gethostname(szHost, sizeof(szHost));
	HOSTENT *pHost = gethostbyname(szHost);
	ip = pHost->h_addr_list[0];
	in_addr addr;
	addr.S_un.S_addr = *((DWORD *)ip);
	//memmove(&addr.S_un.S_addr, ip, pHost->h_length); // the same as above.
	ip = inet_ntoa(addr);
	m_strLocalIp = ip;
//	MessageBox(m_strLocalIp);
}

BOOL CFakeTolcanView::InitSocket()
{
	m_socket=socket(AF_INET,SOCK_STREAM,0);
	if(INVALID_SOCKET==m_socket)
	{
		MessageBox("套接字创建失败!");
		return FALSE;
	}
	SOCKADDR_IN addrSock;
	addrSock.sin_family=AF_INET;
	addrSock.sin_port=htons(m_iPort);
	addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
	
	int retval;
	retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
	if(SOCKET_ERROR==retval)
	{
		closesocket(m_socket);
		MessageBox("绑定失败!");
		return FALSE;
	}
	listen(m_socket, 5);//

	return TRUE;	
}

void CFakeTolcanView::PumpData(int flag /* = 0 */)
{
	if (m_strRecvData.Left(2) != "89")
	{
		m_strRecvData.Empty();
		return ;
	}

	if (m_strRecvData == "8900")
	{
		if (flag == 0)
		{
			if (m_bSP == FALSE)
			{
				m_bSP = TRUE;
				if (m_bNW == FALSE)
				{
					SetTimer(1, m_PackInterval, NULL);
				}
			}
		}
		if (flag == 1)
		{
			if (m_bNW == FALSE)
			{
				m_bNW = TRUE;
				if (m_bSP == FALSE)
				{
					SetTimer(1, m_PackInterval, NULL);
				}
			}
		}

		m_bCollectData = TRUE;
		m_strCmd += m_strRecvData;
		m_strCmd += "\r\n";
		m_strRecvData = "";
	}

	if (m_strRecvData == "8901")
	{
		if (flag == 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -