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

📄 rytestdlg.cpp

📁 MODBUS TCP的通讯管理机程序,用以和组态软件进行数据接口!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					  }

				     else if(numbytes==0||numbytes==SOCKET_ERROR)
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }
				  }	
			   }
		    }//if(socket)	
			
			if(serflag[15]==0xAA)
			{
				SingalRead(0xDE011,5);
			
			    if(DI[1]==1)
			   {
				   //冗余服务器变为主服务器
				   SingalRead(0xDE020,1);
				   Ryrflag=0,revflag=0;

                   LPVOID COM1hWnd=NULL,COM2hWnd=NULL,COM3hWnd=NULL,COM7hWnd=NULL,COM4hWnd=NULL,
		               COM5hWnd=NULL,MBTCPSlave1Wnd=NULL,RyshWnd=NULL,MonitorhWnd=NULL;
	               COM1flag=TRUE,COM2flag=TRUE,COM3flag=TRUE,COM5flag=TRUE,COM4flag=TRUE;
	               COM7flag=TRUE,COM8flag=TRUE;
	               //send1flag=TRUE,send2flag=TRUE;
	               SOCKflag=1,Rysflag=1,Monitorflag=1,sendflag=1;
	               hCOM1Thread=AfxBeginThread(COM1Thread,COM1hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
	               hCOM2Thread=AfxBeginThread(COM2Thread,COM2hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
	               hCOM3Thread=AfxBeginThread(COM3Thread,COM3hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
                   hCOM7Thread=AfxBeginThread(COM7Thread,COM7hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
	               hCOM4Thread=AfxBeginThread(COM4Thread,COM4hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
	               hCOM5Thread=AfxBeginThread(COM5Thread,COM5hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
	               Rys=AfxBeginThread(RySThread,RyshWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
				    Sleep(5000);
	               Monitor=AfxBeginThread(MonitorThread,MonitorhWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
		           serflag[3]=0x00,serflag[5]=0x03;
				   SingalRead(0xDE021,1);

				  closesocket(destSocket);
                  destSocket=INVALID_SOCKET;
                  CloseHandle(Ryr->m_hThread);
                  return 0;
			   }
			}
		 }  //while(revflag)
    }//while(Rysflag)
	closesocket(destSocket);
    destSocket=INVALID_SOCKET;
    CloseHandle(Ryr->m_hThread);
    return 0;
}

UINT COM1Thread(LPVOID pArg)
{

	HWND hWnd;
    hWnd=(HWND)pArg;
    DCB PortDCB1;
    COMMTIMEOUTS CommTimeouts1;
	DWORD dwBytesWritten=0,dwByteRead=0;
	BYTE fun1[21]={0xEB,0x90,0xEB,0x90,0x02,0xFF,0x47,0x01,0x00,0x0C,0x00,0x00,0x00,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x03};   // check time
	BYTE fun2[13]={0xEB,0x90,0xEB,0x90,0x02,0x02,0x46,0x01,0x00,0x04,0x00,0x00,0x03};  //FU GUI
	BYTE fun3[13]={0xEB,0x90,0xEB,0x90,0x02,0x02,0x40,0x01,0x00,0x04,0x00,0x00,0x03};  //C1
    BYTE fun4[13]={0xEB,0x90,0xEB,0x90,0x02,0x02,0x06,0x01,0x00,0x04,0x0d,0x00,0x03};  // ACK
	BYTE fun5[13]={0xEB,0x90,0xEB,0x90,0x02,0x02,0x43,0x01,0x00,0x04,0x00,0x00,0x03};  // MO NI LIANG
	BYTE fun6[13]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x50,0x01,0x00,0x04,0x00,0x00,0x03};  // YAO CE
	BYTE fun7[13]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x54,0x01,0x00,0x04,0x00,0x00,0x03};  // YAO XIN
	BYTE fun8[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x52,0x01,0x00,0x0A,0x00,0xCC,0xFF,
		0x33,0x00,0xCC,0x00,0x00,0x03};  // YAO KONG HE
	BYTE fun9[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x53,0x01,0x00,0x0A,0x00,0xCC,0xFF,
		0x33,0x00,0xCC,0x00,0x00,0x03};  // YAO KONG HE ACK
	BYTE fun10[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x57,0x01,0x00,0x0A,0x00,0xCC,0xFF,
		0x33,0x00,0xCC,0x00,0x00,0x03};  // YAO KONG HE CANEL
	BYTE fun11[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x52,0x01,0x00,0x0A,0x00,0x33,0xFF,
		0xCC,0x00,0x33,0x00,0x00,0x03};  // YAO KONG FEN
	BYTE fun12[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x53,0x01,0x00,0x0A,0x00,0x33,0xFF,
		0xCC,0x00,0x33,0x00,0x00,0x03};  // YAO KONG FEN ACK
	BYTE fun13[19]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x57,0x01,0x00,0x0A,0x00,0x33,0xFF,
		0xCC,0x00,0x33,0x00,0x00,0x03};  // YAO KONG FEN CANEL
	BYTE fun14[13]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x41,0x01,0x00,0x04,0x00,0x00,0x03}; //DING ZHI
	BYTE fun15[13]={0xEB,0x90,0xEB,0x90,0x02,0x01,0x51,0x01,0x00,0x04,0x00,0x00,0x03}; //DIAN DU LIANG

	BYTE Readbuf[80],codebuf[80],addr[5]={0x01,0x02,0x01,0x02,0x02},Col=0x01,flag=0x01;
	unsigned short cs=0;
	int i,j,n=0,l;
	char DevErr[5]={0,0,0,0,0};
    SYSTEMTIME time;
	COM1Send[0][118]=COM1Send[1][118]=0;
	COM1Send[0][119]=COM1Send[1][119]=0;
	COM1flag=1;

	
	while(COM1flag)
	{
		//watdog(0x04);
		if(m_hPort1==INVALID_HANDLE_VALUE)
	   {
	      for(i=0;i<3;i++)
		  {
	           m_hPort1=CreateFile(_T("COM2:"),
                      GENERIC_READ | GENERIC_WRITE, // Access (read-write) mode
                                    // Access (read-write) mode
                      0,            // Share mode
                      NULL,         // Pointer to the security attribute
                      OPEN_EXISTING,// How to open the serial port
                      0,            // Port attributes
                      NULL);
  
               if ( m_hPort1!=INVALID_HANDLE_VALUE)
			   {     
                    PortDCB1.DCBlength=sizeof(DCB);

                    // Get the default port setting information.
                    GetCommState(m_hPort1,&PortDCB1);

                    // Change the DCB structure settings.
                    PortDCB1.fBinary=TRUE;
                    PortDCB1.fParity=TRUE;
                    PortDCB1.BaudRate = 4800;           // Current baud
                    PortDCB1.ByteSize = 8;                 // Number of bits
                    PortDCB1.Parity = NOPARITY;
                    PortDCB1.StopBits = ONESTOPBIT;
                    SetCommState (m_hPort1, &PortDCB1);

                    // Configure the port according to the specifications of the DCB
                    GetCommTimeouts(m_hPort1, &CommTimeouts1);

                    CommTimeouts1.ReadIntervalTimeout=MAXWORD;   
                    CommTimeouts1.ReadTotalTimeoutMultiplier=200;
                    CommTimeouts1.ReadTotalTimeoutConstant=200;
                    CommTimeouts1.WriteTotalTimeoutMultiplier=0;
                    CommTimeouts1.WriteTotalTimeoutConstant=0;
                    SetCommTimeouts (m_hPort1,&CommTimeouts1);
   
                    DWORD Inbuff1=80,Outbuff1=80;
                    SetupComm(m_hPort1,Inbuff1,Outbuff1);
					serflag[16]=0;
                    break;
			   }
		  }  //for(i)

	if(i==3)
	{
		 Sleep(300000);
		 //串口故障;
		 serflag[16]=1;
	}
	   } 
		
		if(count[0]>=200)
			count[0]=0;
		if(count[0]==0)
		{   
			cs=0;
			PurgeComm(m_hPort1,PURGE_TXCLEAR);
	        
	        GetLocalTime(&time);

	        fun1[10]=time.wYear%100;
	        fun1[11]=time.wMonth;
	        fun1[12]=time.wDay;
	        fun1[13]=time.wHour;
	        fun1[14]=time.wMinute;
	        fun1[15]=time.wSecond;
	        fun1[16]=time.wMilliseconds%256;
	        fun1[17]=time.wMilliseconds/256;
		    for(i=0;i<13;i++)
		      cs=cs+fun1[5+i];
	        fun1[18]=cs%256;
	        fun1[19]=cs/256;
            WriteFile(m_hPort1,fun1,sizeof(fun1),&dwBytesWritten, NULL);
			FlashCol(Col,flag);
              
		}

	for(i=0;i<1;i++)
		{
			fun3[5]=fun4[5]=fun5[5]=fun6[5]=fun7[5]=fun14[5]=fun15[5]=addr[i];
			
			fun3[10]=(fun3[5]+fun3[6]+fun3[7]+fun3[8]+fun3[9])%256;
			fun3[11]=(fun3[5]+fun3[6]+fun3[7]+fun3[8]+fun3[9])/256;
			fun4[10]=(fun4[5]+fun4[6]+fun4[7]+fun4[8]+fun4[9])%256;
			fun4[11]=(fun4[5]+fun4[6]+fun4[7]+fun4[8]+fun4[9])/256;
			fun5[10]=(fun5[5]+fun5[6]+fun5[7]+fun5[8]+fun5[9])%256;
			fun5[11]=(fun5[5]+fun5[6]+fun5[7]+fun5[8]+fun5[9])/256;
			fun6[10]=(fun6[5]+fun6[6]+fun6[7]+fun6[8]+fun6[9])%256;
			fun6[11]=(fun6[5]+fun6[6]+fun6[7]+fun6[8]+fun6[9])/256;
			fun7[10]=(fun7[5]+fun7[6]+fun7[7]+fun7[8]+fun7[9])%256;
			fun7[11]=(fun7[5]+fun7[6]+fun7[7]+fun7[8]+fun7[9])/256;
			fun15[10]=(fun15[5]+fun15[6]+fun15[7]+fun15[8]+fun15[9])%256;
			fun15[11]=(fun15[5]+fun15[6]+fun15[7]+fun15[8]+fun15[9])/256;
			
			//FU GUI DEVICE
			if(COM1Send[i][7]==0x0f)
			{
			      fun2[5]=addr[i];
				  fun2[10]=(fun2[5]+fun2[6]+fun2[7]+fun2[8]+fun2[9])%256;
			      fun2[11]=(fun2[5]+fun2[6]+fun2[7]+fun2[8]+fun2[9])/256;
				  PurgeComm(m_hPort1,PURGE_TXCLEAR);
			      WriteFile(m_hPort1,fun2,sizeof(fun2), &dwBytesWritten,NULL);
				  FlashCol(Col,flag);
				  COM1Send[i][7]=0x00;
			}

					
		//request
		do
		{
			PurgeComm(m_hPort1,PURGE_TXCLEAR);
			WriteFile(m_hPort1,fun3, sizeof(fun3), &dwBytesWritten, NULL);
			if(dwBytesWritten==13)
			{
				FlashCol(Col,flag);
	            flag=~flag;
				ReadFile(m_hPort1,Readbuf,10,&dwByteRead,NULL);
				if(dwByteRead==10)  
				{
					FlashCol(Col,flag);
	            	l=Readbuf[9];
					ReadFile(m_hPort1,codebuf,l-1,&dwByteRead,NULL);
					if(dwByteRead==l-1)
					{
						FlashCol(Col,flag);
	                    flag=~flag;
						if(Readbuf[6]==0x46)   //XIN GU ZHANG
						{
					       for(j=0;j<l-1;j++)
						       Readbuf[j+10]=codebuf[j];
					       cs=0;
					       for(j=0;j<l+1;j++)
						       cs=cs+Readbuf[j+5];
					       if(((cs%256)==Readbuf[l+6])&&((cs/256)==Readbuf[l+7]))
						   {
						       WriteFile(m_hPort1,fun4,sizeof(fun4),&dwBytesWritten,NULL);
							   FlashCol(Col,flag);
	                           flag=~flag;
							   grc2041.Lock();
							   if(COM1Send[i][119]>=30)
				                   COM1Send[i][119]=30;
			                   else	
							   {
								   n=COM1Send[i][119]*22;
					        
					    	       COM1Send[i][120+n]=0x00,COM1Send[i][120+n+1]=Readbuf[10];
					               COM1Send[i][120+n+2]=Readbuf[11],COM1Send[i][120+n+3]=Readbuf[12];
					               COM1Send[i][120+n+4]=Readbuf[13],COM1Send[i][120+n+5]=Readbuf[14];
					               COM1Send[i][120+n+6]=(Readbuf[15]*1000+Readbuf[16]+Readbuf[17]*256)/256;
					               COM1Send[i][120+n+7]=(Readbuf[15]*1000+Readbuf[16]+Readbuf[17]*256)%256;
					               COM1Send[i][120+n+8]=0x00,COM1Send[i][120+n+9]=0x00;
					               COM1Send[i][120+n+10]=Readbuf[19],COM1Send[i][120+n+11]=Readbuf[18];
					               COM1Send[i][120+n+12]=0x00,COM1Send[i][120+n+13]=Readbuf[22];
					               COM1Send[i][120+n+14]=Readbuf[21],COM1Send[i][120+n+15]=Readbuf[20];
					               COM1Send[i][120+n+16]=0x00,COM1Send[i][120+n+17]=0x00;
							       COM1Send[i][120+n+18]=0x00,COM1Send[i][120+n+19]=0xff;

					               COM1Send[i][119]=COM1Send[i][119]+1;
							   }

							   grc2041.Unlock();
							   DevErr[i]=0;
							   serflag[132+i]=0;
						   }
						}

						if(Readbuf[6]==0x47)
						{
							for(j=0;j<l-1;j++)
						        Readbuf[j+10]=codebuf[j];
				         	cs=0;
					        for(j=0;j<l+1;j++)
						        cs=cs+Readbuf[j+5];
					        if(((cs%256)==Readbuf[l+6])&&((cs/256)==Readbuf[l+7]))
							{
							   WriteFile(m_hPort1,fun4, sizeof(fun4), &dwBytesWritten, NULL);
							   FlashCol(Col,flag);
	                           flag=~flag;
							   grc2041.Lock();
							   if(COM1Send[i][119]>=30)
				                   COM1Send[i][119]>=30;
			                   else	
							   {
								   n=COM1Send[i][119]*22;

					    	       COM1Send[i][120+n]=0x00,COM1Send[i][120+n+1]=Readbuf[10];
					               COM1Send[i][120+n+2]=Readbuf[11],COM1Send[i][120+n+3]=Readbuf[12];
					               COM1Send[i][120+n+4]=Readbuf[13],COM1Send[i][120+n+5]=Readbuf[14];
					               COM1Send[i][120+n+6]=(Readbuf[15]*1000+Readbuf[16]+Readbuf[17]*256)/256;
					               COM1Send[i][120+n+7]=(Readbuf[15]*1000+Readbuf[16]+Readbuf[17]*256)%256;
					               COM1Send[i][120+n+8]=0x00,COM1Send[i][120+n+9]=0x01;
					               COM1Send[i][120+n+10]=Readbuf[20],COM1Send[i][120+n+11]=Readbuf[19];
					               COM1Send[i][120+n+12]=0x00,COM1Send[i][120+n+13]=0x00;
					               COM1Send[i][120+n+14]=0x00,COM1Send[i][120+n+15]=0x00;
							       COM1Send[i][120+n+16]=0x00,COM1Send[i][120+n+17]=0x00;
					               COM1Send[i][120+n+18]=0x00,COM1Send[i][120+n+19]=0xff;

					               COM1Send[i][119]=COM1Send[i][119]+1;
							   }
			
							   grc2041.Unlock();
							   DevErr[i]=0;
							   serflag[132+i]=0;
							}
						
						}//if(Readbuf[6]==0x47)									        						   					  
					}
					if(dwByteRead==0)
						DevErr[i]++;
				}	
			}  //if(dwBytesWritten==13)
		}while(Readbuf[6]==0x46||Readbuf[6]==0x47||Readbuf[6]==0x40);

			//YAO CE
			PurgeComm(m_hPort1,PURGE_RXCLEAR&PURGE_TXCLEAR);
			WriteFile(m_hPort1,fun6, sizeof(fun6), &dwBytesWritten, NULL);
			if(dwBytesWritten==13)
			{
				FlashCol(Col,flag);
	            flag=~flag;
				ReadFile(m_hPort1,Readbuf,10,&dwByteRead,NULL);
				if(dwByteRead==10&&Readbuf[6]==0x50)   
				{
					FlashCol(Col,flag);
	                l=Readbuf[9];
					ReadFile(m_hPort1,codebuf,l-1,&dwByteRead,NULL);
					if(dwByteRead==l-1)
					{
						FlashCol(Col,flag);
	                    flag=~flag;
						
					    for(j=0;j<l-1;j++)
						     Readbuf[j+10]=codebuf[j];
					    cs=0;
					    for(j=0;j<l+1;j++)
						     cs=cs+Readbuf[j+5];
					    if(((cs%256)==Readbuf[l+6])&&((cs/256)==Readbuf[l+7]))
						{
					        grc2041.Lock();
					        for(j=0;j<12;j=j+2)
					           COM1Send[i][88+j]=Readbuf[10+j+1],COM1Send[i][88+j+1]=Readbuf[10+j];
					        grc2041.Unlock();
					        DevErr[i]=0;
					       serflag[132+i]=0;
						}
					}
				}

				if(dwByteRead==10&&Readbuf[6]==0x46)   
				{
					FlashCol(Col,flag);
					l=Readbuf[9];
					ReadFile(m_hPort1,codebuf,l-1,&dwByteRead,NULL);
					if(dwByteRead==l-1)
					{
						FlashCol(Col,flag);
						flag=~flag;
					    for(j=0;j<l-1;j++)
						    Readbuf[j+10]=codebuf[j];
					    cs=0;
					    for(j=0;j<l+1;j++)
						    cs=cs+Readbuf[j+5];
					    if(((cs%256)==Readbuf[l+6])&&((cs/256)==Readbuf[l+7]))
						{
						  WriteFile(m_hPort1,fun4, sizeof(fun4), &dwBytesWritten, NULL);
						  FlashCol(Col,flag);
	                      flag=~flag;
						  grc2041.Lock();
						  if(COM1Send[i][119]>=30)
				               COM1Send[i][119]=30;
			              else		
						  {
							  n=COM1Send[i][119]*22;
					        
					    	  COM1Send[i][120+n]=0x00,COM1Send[i][120+n+1]=Readbuf[10];
							  COM1Send[i][120+n+2]=Readbuf[11],COM1Send[i][120+n+3]=Readbuf[12];

⌨️ 快捷键说明

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