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

📄 momentvaluedlg.cpp

📁 シリアル通信のプログラム、初学者により、いいです。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	int err = 0, iLen,send;
	CString strSndXml,strCustomerID,strSndTmp,strBranch,strFileBranch,strSndData,strRec;
	CSocket sock;

	GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
	// (1)make socket
    if (!err) if (!sock.Create()) err = 1;
	// (2)connet to socket
    if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
	//(3)send infomation
	if(!err)
	{
		strSndXml.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"measure\"><customer handle=\"%s\">00</customer><items>", strCustomerID);
		for(int i=0; i<D_KYOKUNUMS; i++)
		{
			if(m_dKyoku[i].iCnt)
			{
				strBranch.Format("strBranch%d",i+1);
				strFileBranch.Format("Branch%d",i+1);
				GetPrivateProfileString("ConfigSet",strFileBranch,"",strBranch.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
//				memcpy(&chBranch[i][0],strBranch,4);
//				TRACE("chBranch[%d][]==%s\n",i,&chBranch[i][0]);
				strSndTmp.Format("<item id=\"%s\" handle=\"%d\"><data><value>%8ld</value><datetime>%s +0900</datetime></data></item>", strBranch, atoi(strBranch),(long)(m_dKyoku[i].dElectricityAve+0.5),chTime);
				TRACE("strSndTmp==%s\n",strSndTmp);
				strSndXml += strSndTmp;
				TRACE("strSndXml==%s\n",strSndXml);
			}
		}
		strSndXml += "</items></report>";
		TRACE("strSndXml==%s\n",strSndXml);
		iLen = strSndXml.GetLength();
		strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
		//(3)サーバーに送信
		send = sock.Send(strSndData,  strSndData.GetLength());
		if (send == SOCKET_ERROR) {err=1;}

		if(!err)
		{
			char *p = new char[1024];
			if(p)
			{
				int n = 0;
				memset(p, 0, 1024);
				while((n = sock.Receive(p, 1023)) > 0)
				{
					strRec += p;
					memset(p, 0, 1024);
				}
				delete p;
			}
		}
		//to make XML file
		FILE *fpCsv=NULL;
		fpCsv=fopen("sample.xml", "a");
		int fint = strRec.Find("<?xml");
		int fint2 = strRec.Find("</report>");
		strRec = strRec.Mid(fint,(fint2-fint+9));
		fprintf(fpCsv,strRec);
		fclose(fpCsv);	
	}
	Sleep(1);
	//(4)close socket
	sock.Close();
	return 0;
}

void CMomentValueDlg::XMLDOMParserToData()
{
	typedef MSXML2::IXMLDOMNodeListPtr	INodeListPtr;
	typedef MSXML2::IXMLDOMNodePtr	INodePtr;
	typedef MSXML2::IXMLDOMElementPtr	IElementPtr;

	HRESULT  nResult;

	CoInitialize(NULL);

	MSXML2::IXMLDOMDocument2Ptr pDoc;
	nResult = pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument40) );
	(nResult == 0) ? 0: throw nResult;

	pDoc->async = VARIANT_FALSE; 

	//	to load XML file
	nResult = pDoc->load("sample.xml");

	INodeListPtr plName = pDoc->getElementsByTagName("item");

	for(int p=0;p<D_KYOKUNUMS;p++)
	{
		if(!(m_timeValueList[p].IsEmpty())){
			m_timeValueList[p].RemoveAll();
		}
	}

	int k = plName->Getlength();

	for(int i=0; i<k; i++)
	{
		
		IElementPtr	peName = plName->Getitem(i);//to get peName<item>

		int len = peName->Getattributes()->Getlength();//to get the property of item

		_variant_t id = peName->Getattributes()->Getitem(0)->Gettext();//get id
		_variant_t handle = peName->Getattributes()->Getitem(1)->Gettext();//get handle

		CString tempIdStr =(LPCSTR)_bstr_t(id.bstrVal);//get id
		CString tempHandleStr =(LPCSTR)_bstr_t(handle.bstrVal);//get handle
		
		int q = peName->GetchildNodes()->Getlength();

		INodeListPtr data = peName->getElementsByTagName("data");//to get parameter<data>
		int m = data->Getlength();//get the number of <data>

		for(int n=0;n<m;n++)
		{
			_variant_t datatime = data->Getitem(n)->GetfirstChild()->Gettext();//get parameter<datatime>
			_variant_t interval = data->Getitem(n)->GetlastChild()->Gettext();//get parameter<interval>

			CString tempDataStr =(LPCSTR)_bstr_t(datatime.bstrVal);//get parameter<datatime>
			CString tempinterval =(LPCSTR)_bstr_t(interval.bstrVal);//get parameter<interval>
			
			D_TIMEVALUE_DATA TimeValueData;
			TimeValueData.dTime = tempDataStr;
			TimeValueData.dValue = 0;

			m_timeValueList[atoi(tempIdStr)-1].AddTail(TimeValueData);//put analysised data(xml) to List
		}	
	}
}


void CMomentValueDlg::ToGetLostData()
{
	POSITION positionSend,positionReceive;
	int  nSendData,nReceiveData;
	D_TIMEVALUE_DATA  tempSendDataStruct,tempReceiveStruct;
	CString sendTimeStr,receiveTimeStr;
	for(int q=0;q<D_KYOKUNUMS;q++)
	{
		if((this->m_tempTimeValueList[q].GetCount())>=288)
		{
			//this->m_tempTimeValueList[q].RemoveAll();
			POSITION posi = this->m_tempTimeValueList[q].FindIndex(0);
			this->m_tempTimeValueList[q].RemoveAt(posi);
		}
	}
	
	for(int w=0;w<D_KYOKUNUMS;w++)
	{
		int m = this->m_pastTimeValueList[w].GetCount();
		if(this->m_pastTimeValueList[w].GetCount()>=288)
		{
			 POSITION pos = this->m_pastTimeValueList[w].FindIndex(0);
			 this->m_pastTimeValueList[w].RemoveAt(pos);
			//m_pSubEcoPowerMeter->m_pastTimeValueList[0].RemoveAll();
		}
	}

	for(int k=0;k<D_KYOKUNUMS;k++)
	{
		//サーバーに送信のList先头要素取得
		positionSend = this->m_pastTimeValueList[k].GetHeadPosition();
		nSendData = this->m_pastTimeValueList[k].GetCount();
		TRACE("送信回数==%d\n",nSendData);
		//receive
		nReceiveData = this->m_timeValueList[k].GetCount();
		TRACE("受信回数==%d\n",nReceiveData);
		if(nSendData != 0 && nReceiveData != 0)
		{
			for(int i = 0;i<nSendData;i++)
			{
				tempSendDataStruct = this->m_pastTimeValueList[k].GetNext(positionSend);
				sendTimeStr = tempSendDataStruct.dTime;
				//サーバーに受信のList先头要素取得
				positionReceive = this->m_timeValueList[k].GetHeadPosition();
				for(int j = 0;j<nReceiveData;j++)
				{
					tempReceiveStruct = (this->m_timeValueList[k]).GetNext(positionReceive);
					receiveTimeStr = tempReceiveStruct.dTime;
					receiveTimeStr.Replace(" +0900","");
					if(sendTimeStr.Compare(receiveTimeStr) == 0){
						//ringbuffer保存
						this->m_tempTimeValueList[k].AddTail(tempSendDataStruct);
					}
				}
			}
		}
	}
}

void CMomentValueDlg::SendTcpIpLostData()
{
	CString strCustomerID,strSndXmlHead,strBranch,strFileBranch,strSndItem,strSndItems(""),strTime,strTemp,strSndXmlData(""),strSndXmlTail,strSndXml,strSndData;
	D_TIMEVALUE_DATA tempStruct;
	long sendValue;
	int err = 0,iLen,send;
	CSocket sock;

	GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
	//Xml header
	strSndXmlHead.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"measure\"><customer handle=\"%s\">00</customer><items>",strCustomerID);
	
	for(int i=0;i<D_KYOKUNUMS;i++)
	{
		POSITION posionHead = m_tempTimeValueList[i].GetHeadPosition();
		if(m_dKyoku[i].iCnt)
		{
			strBranch.Format("strBranch%d",i+1);
			strFileBranch.Format("Branch%d",i+1);
			GetPrivateProfileString("ConfigSet",strFileBranch,"",strBranch.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
			strSndItem.Format("<item id=\"%s\" handle=\"%d\">",strBranch,atoi(strBranch));		

			while(posionHead){
				tempStruct = m_tempTimeValueList[i].GetNext(posionHead);
				sendValue = tempStruct.dValue;
				strTime = tempStruct.dTime;
				TRACE("SendketsusonData2------->sendValue(i==%d)==%ld\n",i,sendValue);
				strTemp.Format("<data><value>%8ld</value><datetime>%s +0900</datetime></data>\n",sendValue,strTime);
				strSndXmlData += strTemp;
			}
			strSndXmlData = strSndItem + strSndXmlData + "</item>" ;
			strSndItems += strSndXmlData;
			strSndXmlData.Empty();
		}
	}
	//XML tail
	strSndXmlTail = "</items></report>";
	strSndXml = strSndXmlHead + strSndItems + strSndXmlTail;
	// (1)make sock
	if (!err) if (!sock.Create()) err = 1;
	// (2)connect to sock
	if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
	//(3)send data
	if(!err)
	{
		iLen = strSndXml.GetLength();
		strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
		send = sock.Send(strSndData,  strSndData.GetLength());	
		//------------------------------------------------------------------------------------------------
		FILE *file = NULL;
		file = fopen("test.txt","a");
		fprintf(file,strSndXml);
		fclose(file);
		//------------------------------------------------------------------------------------------------
		if (send == SOCKET_ERROR) {err=1;}
	}
	Sleep(1);
	//(4)close sock
	sock.Close();
}

void CMomentValueDlg::OnButtonClose() 
{
	// TODO: Add your control notification handler code here
	CString strTime;
	char chTime[200];
	CTime    cTime;
	int      year, month, day, hour, min, sec;
	cTime = CTime::GetCurrentTime();     
	year  = cTime.GetYear();             
	month = cTime.GetMonth();            
	day   = cTime.GetDay();             
	hour  = cTime.GetHour();            
	min   = cTime.GetMinute();         
	sec   = cTime.GetSecond(); 

	strTime.Format("%04d-%02d-%02d %02d:%02d:00",year,month,day,hour,min); 
	memset(chTime,0,sizeof(chTime));
	strncpy(chTime,strTime,strTime.GetLength()+1);//get time
	this->SendTcpIpStop(chTime);
	this->m_serial->Close();
	KillTimer(1);
	KillTimer(2);
}

int CMomentValueDlg::SendTcpIpStop(char chTime[])
{
	CString strSndXmlHead,strCustomerID,strBranch,strItem,strSndXmlTail,strSndXml,strSndData,strItems("");
	GetPrivateProfileString("ConfigSet","CustomerID","",strCustomerID.GetBuffer(MAX_PATH),MAX_PATH,".\\ConfigSet.ini");
	int err=0,iLen,send;
	CSocket sock;
	if (!err) if (!sock.Create()) err = 1;
	if (!err) if (!sock.Connect(strIpAdress, intPort)) err = 1;
	if(!err)
	{
		//Xml header
		strSndXmlHead.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><report version=\"1.00\" command=\"stop\"><customer handle=\"%s\">00</customer><items>",strCustomerID);
		for(int i=0; i<D_KYOKUNUMS; i++)
		{
//			strBranch = (LPTSTR)(&chBranch[i][0]);
//			TRACE("strBranch = %s\n",strBranch);
			strBranch = strBranchUsed[i];
			TRACE("strBranch = %s\n",strBranch);
			if(!strBranch.IsEmpty()&&strBranch!="")
			{
				TRACE("strBranch = %s\n",strBranch);
				CString strTemp ;
				strTemp.Format("%d",i);
				TRACE("%s\n",strTemp);
				strItem.Format("<item id=\"%s\" handle=\"%d\"><data><datetime>%s +0900</datetime></data></item>",strBranch,atoi(strBranch),chTime);
				strItems+=strItem;
				strItem.Empty();
			}
		}
		strSndXmlTail = "</items></report>";
		strSndXml = strSndXmlHead + strItems + strSndXmlTail;
		iLen = strSndXml.GetLength();
		strSndData.Format("POST /cosmolife/public/request.php HTTP/1.1\r\nUser-Agent: Trust System\r\nHost: 219.117.235.157\r\nContent-Type: text/xml\r\nContent-length: %d\r\n\r\n%s", iLen, strSndXml);
		//----------------------------------------------------------------------------
		FILE *file = NULL;
		file = fopen("SendTcpIpStop.txt","a");
		fprintf(file,strSndData);
		fclose(file);
		//----------------------------------------------------------------------------
		//(3)send data to server
		send = sock.Send(strSndData,  strSndData.GetLength());
		if (send == SOCKET_ERROR) {err=1;}
	}
	Sleep(1);
	//(4)close sock
	sock.Close();
	return 0;
}

⌨️ 快捷键说明

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