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

📄 rytestdlg.cpp

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

UINT RyRThread(LPVOID pArg)
{
	WSADATA Data;
    SOCKADDR_IN destSockAddr;
    SOCKET destSocket=INVALID_SOCKET;
    unsigned long destAddr;
    int i,j,status,l;
    int numbytes,ErrNum;
	BYTE readbuf[1024];
	BYTE fun1[8]={0xFF,0xFF,0x00,0x03,0x00,0x00,0x00,0x00};
	BYTE fun2[8]={0xFF,0xFF,0x00,0x06,0x00,0x00,0x00,0x00};
	BYTE id[40]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
	Ryrflag=1;

     while(Ryrflag)
	 {
	     status=WSAStartup(MAKEWORD(2,2),&Data);
         if(status!=0)
		     return 0;

	     destAddr=inet_addr(DEST_IP_ADDR3);
	     memcpy(&destSockAddr.sin_addr,&destAddr,sizeof(destAddr));
	     destSockAddr.sin_port=htons(PORT2);
	     destSockAddr.sin_family=AF_INET;

         destSocket=socket(AF_INET,SOCK_STREAM,0);
	     if(destSocket==INVALID_SOCKET)
		 { 
            status=WSACleanup();
            if(status == SOCKET_ERROR)
                return(1);
		 }
	  
	     status=connect(destSocket,(struct sockaddr*)&destSockAddr,sizeof(struct sockaddr));
		 //status=WSAGetLastError();
         if(status==SOCKET_ERROR)
		 { 
             status=closesocket(destSocket);
             if(status == SOCKET_ERROR)
                status=WSACleanup();
	       	 revflag=0;
			 ErrNum++;
		 }
		 else revflag=1;

		 if(ErrNum>=20)
		 {
			 ErrNum=0;
			 AfxMessageBox(_T("Connect fail more than 20 times!"));
		 }
	  
	  while(revflag)
	  {
		  
		  //SingalRead(0xDE020,1);    //写DO信号给主服务器
		  for(i=0;i<10;i++)
		  {
			  fun1[2]=id[i];
			  if(i==0)
				   fun1[6]=220/256,fun1[7]=220%256;
			  else if(i==6)
				   fun1[6]=40/256,fun1[7]=40%256;
			  else fun1[6]=800/256,fun1[7]=800%256;

              numbytes=send(destSocket,(char*)fun1,8,0);
             
			  l=fun1[6]*256+fun1[7];
		      numbytes=recv(destSocket,(char*)readbuf,l+8,0);

			  if(numbytes!=SOCKET_ERROR&&numbytes!=0)
			  {
				 serflag[15]=0x00;
		         if(numbytes>=l+8)
				 { 
		 	        if((readbuf[0]==0xff)&&(readbuf[1]==0xff))
					{
						switch(readbuf[2])
						{
						     case 0:
							{
							   for(j=0;j<l;j++)
							      serflag[j]=readbuf[j+8];
                               if(readbuf[3]==0xaa||readbuf[7]==0xaa||readbuf[11]==0xaa)
							   {
									SingalRead(0xDE011,5);  //读DI信号
								    if(DI[1]==1)            //无信号   
									{
										//冗余服务器变为主服务器
				                        SingalRead(0xDE020,1);  //写DO信号
				                        revflag=0,Ryrflag=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;
				                       closesocket(destSocket);
                                       destSocket=INVALID_SOCKET;
                                       CloseHandle(Ryr->m_hThread);
                                       return 0;
									}
								}
								else   serflag[3]=0xAA;
									   serflag[5]=0x04;
									 break;
							}
							 case 1:
							{
								 for(j=0;j<l;j++)
								     COM1Send[0][j]=readbuf[j+8];
								 break;
							}
							case  2:
							{
								 for(j=0;j<l;j++)
								     COM1Send[1][j]=readbuf[j+8];
								 break;
							}
						    case  3:
							{
								 for(j=0;j<l;j++)
								     COM2Send[0][j]=readbuf[j+8];
								 break;
							}
							case  4:
							{
								 for(j=0;j<l;j++)
								    COM2Send[1][j]=readbuf[j+8];
								 break;
							}
							case  5:
							{
								 for(j=0;j<l;j++)
								    COM3Send[0][j]=readbuf[j+8];
								break;
							}
							case  6:
							{
								 for(j=0;j<l;j++)
								    COM7Send[j]=readbuf[j+8];
								 break;
							}
							case  7:
							{
								for(j=0;j<l;j++)
								    COM4Send[0][j]=readbuf[j+8];
								break;
							}
							case  8:
							{
								for(j=0;j<l;j++)
								    COM5Send[0][j]=readbuf[j+8];
								break;
							}
							case  9:
							{
							    for(j=0;j<l;j++)
								    COM3Send[1][j]=readbuf[j+8];
								break;
							}
						}  //switch
					}     //if(readbuf[0]==0xff)
				 }        //if(numbytes>=l+8)
			  }           //if(numbytes!=0)

			  else if((numbytes==0)||(numbytes==SOCKET_ERROR))
			  {
				   serflag[15]=0xAA;   //冗余网口故障
		           closesocket(destSocket);
                   destSocket=INVALID_SOCKET;
				   revflag=0;
				   break;
				  
			  }
		  }    //for(i)

		  if((newSocket1!=INVALID_SOCKET)||(newSocket2!=INVALID_SOCKET)
			||(newSocket3!=INVALID_SOCKET)
			||(newSocket4!=INVALID_SOCKET)
			||(newSocket5!=INVALID_SOCKET))
		  {
			  for(i=1;i<3;i++)
			  {
				  fun2[2]=i;
				  if(COM1Send[i-1][3]==0xf0||COM1Send[i-1][3]==0x0f)
				  {
					  fun2[5]=0x01;
			  		  fun2[6]=0x00,fun2[7]=COM1Send[i-1][3];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM1Send[i-1][3]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }

				  if(COM1Send[i-1][5]==0x0f)
				  {
					  fun2[5]=0x02;
			  		  fun2[6]=0x00,fun2[7]=COM1Send[i-1][5];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM1Send[i-1][5]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }

				  if(COM1Send[i-1][7]==0x0f)
				  {
					  fun2[5]=0x03;
			  		  fun2[6]=0x00,fun2[7]=COM1Send[i-1][7];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM1Send[i-1][7]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }
			  }

			  for(i=3;i<5;i++)
			  {
				  fun2[2]=i;
				  if(COM2Send[i-3][3]!=0x00&&COM2Send[i-3][3]!=0x01)
				  {
					  fun2[5]=0x01;
			  		  fun2[6]=COM2Send[i-3][2],fun2[7]=COM2Send[i-3][3];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM2Send[i-3][3]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					     serflag[15]=0xAA;   //冗余网口故障
		                 closesocket(destSocket);
                         destSocket=INVALID_SOCKET;
					     revflag=0;
					 }
				  }

				  if(COM2Send[i-3][7]!=0x00&&COM2Send[i-3][7]!=0x01)
				  {
					  fun2[5]=0x03;
			  		  fun2[6]=COM1Send[i-3][6],fun2[7]=COM1Send[i-3][7];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM2Send[i-3][7]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }
			  }

			  for(i=5;i<6;i++)
			  {
				  fun2[2]=i;
				  if(COM3Send[i-5][3]!=0x00&&COM2Send[i-5][3]!=0x01)
				  {
					  fun2[5]=0x01;
			  		  fun2[6]=COM3Send[i-5][2],fun2[7]=COM3Send[i-5][3];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM3Send[i-5][3]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }	
			  }

			  for(i=7;i<8;i++)
			  {
				  fun2[2]=i;
				  if(COM4Send[i-7][7]==0x0F)
				  {
					  fun2[5]=0x03;
			  		  fun2[6]=COM4Send[i-7][6],fun2[7]=COM4Send[i-7][7];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM4Send[i-7][7]=0x01;
					  }

				     else if((numbytes==0)||(numbytes==SOCKET_ERROR))
					 {
					      serflag[15]=0xAA;   //冗余网口故障
		                  closesocket(destSocket);
                          destSocket=INVALID_SOCKET;
					      revflag=0;
					 }	
				  }	
			  }

			  for(i=9;i<10;i++)
			  {
				  fun2[2]=i;
				  if(COM3Send[i-8][3]!=0x00&&COM2Send[i-8][3]!=0x01)
				  {
					  fun2[5]=0x01;
			  		  fun2[6]=COM3Send[i-8][2],fun2[6]=COM3Send[i-8][3];
				      send(destSocket,(char*)fun2,8,0);
				      numbytes=recv(destSocket,(char*)readbuf,8,0);
				      if(numbytes==8)
					  {
				          serflag[15]=0x00;
					      if(readbuf[0]==0xFF&&readbuf[1]==0xFF&&readbuf[2]==0x01&&readbuf[3]==0x06)
					  	      COM3Send[i-8][3]=0x01;

⌨️ 快捷键说明

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