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

📄 rytestdlg.cpp

📁 MODBUS TCP的通讯管理机程序,用以和组态软件进行数据接口!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
             TerminateThread(hCOM5Thread->m_hThread,LpExit[5]);
			 hCOM5Thread->m_hThread=NULL;

			 //写DO信号
             Sleep(1000);
			 if(hCOM5Thread->m_hThread==NULL)
			 {
				 LPVOID COM5hWnd=NULL;
                 hCOM5Thread=AfxBeginThread(COM5Thread,COM5hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
			 }
		 }
	  }
	  else num[5]=0;*/
   
      /*if(watch[6]==count[6])
	  {
          num[6]++;

          if(num[6]>=3)
		  {
              GetExitCodeThread(hCOM6Thread->m_hThread,&LpExit[6]);
              ExitThread(LpExit[6]);
              CloseHandle(m_hPort6);
              CloseHandle(hCOM6Thread->m_hThread);
			  hCOM6Thread->m_hThread=NULL;

              //写DO信号
              Sleep(1000);
			  if(hCOM6Thread->m_hThread==NULL)
			  {
				  LPVOID COM6hWnd=NULL;
                  hCOM6Thread=AfxBeginThread(COM6Thread,COM6hWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
			  }
		  }
	  }
	  else num[6]=0;*/

	  l1=serflag[132]+serflag[133];
	  l2=serflag[134]+serflag[135];
	  l3=serflag[136]+serflag[141];
	  l4=serflag[137]+serflag[138];
	  l5=serflag[139];
	  l6=serflag[140];

	  if(serflag[16]==1||serflag[18]==1||serflag[20]==1||serflag[22]==1||serflag[24]==1||
	  serflag[26]==1||serflag[28]==1||serflag[30]==1||(l1>=serflag[49])||(l2>=serflag[55])
	  ||(l3>=serflag[61])||(l4>=serflag[67])||(l5>=serflag[73])||(l6>=serflag[79]))
	  {
		  
		  COM1flag=0,COM2flag=0,COM3flag=0,COM5flag=0,COM4flag=0;
	      COM7flag=0,COM8flag=0;
		  send1flag=0,send2flag=0;  //???
		  serflag[3]=0xaa;
		  serflag[7]=0xaa;
		  serflag[11]=0xaa;
		  serflag[5]=0x04;
		  serflag[30]=1;
		  
          SingalRead(0xDE021,0);  //清除DO信号
		  SingalRead(0xDE020,0);
		  Sleep(6000);
		  sendflag=0,Rysflag=0;
		  LPVOID RyrhWnd=NULL;
		  Ryrflag=1,revflag=1;
		  watdog(0x01);
		  Ryr=AfxBeginThread(RyRThread,RyrhWnd,THREAD_PRIORITY_NORMAL,0,0,NULL);
		  Monitorflag=0;
		  CloseHandle(Monitor->m_hThread);
		  return 0;
	  }
	  //Sleep(2000);
	  //watdog(0x00);
  }
  
	CloseHandle(Monitor->m_hThread);
	return 0;
}

UINT RySThread(LPVOID pArg)
{
	WSADATA Data;
	SOCKET destSocket=INVALID_SOCKET,newSocket=INVALID_SOCKET;
	SOCKADDR_IN destSockAddr,RemoteAddr;
    unsigned long destAddr;
    int status,addrlen;
	unsigned char readbuf[26],id;
	int  i,n=0,l,numbytes;
	char reg[1024];
	unsigned short saveaddr;
	Rysflag=1;
	
	status=WSAStartup(MAKEWORD(2, 2),&Data);
    if(status!=0)
		exit(1);

	 destAddr=inet_addr(DEST_IP_ADDR2);
	 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)
		    exit(1);
     }

	 if((bind(destSocket,(struct sockaddr*)&destSockAddr,sizeof(destSockAddr)))==SOCKET_ERROR)
	 {
		 status=closesocket(destSocket);
         if(status==SOCKET_ERROR)
            status=WSACleanup();
         if(status==SOCKET_ERROR)
		    exit(1);
	 }
 
	 if(listen(destSocket,SOMAXCONN)==SOCKET_ERROR)
	 {
		 status=closesocket(destSocket);
         if(status == SOCKET_ERROR)
            status=WSACleanup();
         if(status == SOCKET_ERROR)
            exit(1);
	 }

    while(Rysflag)
	{
	   addrlen=sizeof(SOCKADDR_IN);
	   if(newSocket==INVALID_SOCKET)
	   {
	       newSocket=accept(destSocket,(SOCKADDR*)&RemoteAddr,&addrlen);
	       if(newSocket==INVALID_SOCKET)
		   {
		       status=closesocket(newSocket);
		   }

		   else sendflag=1;
	       //else if(newSocket!=INVALID_SOCKET)
		   {
	           while(sendflag)
			   {
			       if(newSocket!=INVALID_SOCKET)
				   {
				       memset(readbuf,0,sizeof(readbuf));		
	                   numbytes=recv(newSocket,(char*)readbuf,22,0);
                       readbuf[numbytes]=0;

	                  if(numbytes!=SOCKET_ERROR&&numbytes!=0)
					  {
				          serflag[15]=0x00;
		                  if(numbytes>=8)
						  { 
					          if((readbuf[0]==0xff)&&(readbuf[1]==0xff))
							  {
								  id=readbuf[2];
						          switch(readbuf[3])
								  {
				                       case 3:
                                       memset(reg,0,sizeof(reg));
							           reg[0]=readbuf[0];
			                           reg[1]=readbuf[1];
			                           reg[2]=readbuf[2];
	         	                       reg[3]=readbuf[3];
							           reg[4]=readbuf[4];
			                           reg[5]=readbuf[5];
			                           reg[6]=readbuf[6];
	         	                       reg[7]=readbuf[7];
							           l=readbuf[6]*256+readbuf[7];

							           if(id==0)
									   {
								           //dev.Lock();
					                       for(i=0;i<l;i++)
					                           reg[i+8]=serflag[i];
					                       //dev.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									   }

							           if(id==1)
									   {
								           grc2041.Lock();
					                       for(i=0;i<l;i++)
					                          reg[i+8]=COM1Send[0][i];
					                       grc2041.Unlock();
			                               send(newSocket,reg,l+8,0);
                                           break;
									   }

							           if(readbuf[2]==2)
									   {
								          grc2042.Lock();
					                      for(i=0;i<l;i++)
					                          reg[i+8]=COM1Send[1][i];
					                      grc2042.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									   }

							          if(readbuf[2]==3)
									  {
								          mmpr.Lock();
					                      for(i=0;i<l;i++)
					                          reg[i+8]=COM2Send[0][i];
					                      mmpr.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									  }

							          if(readbuf[2]==4)
									  {
								          mlpr.Lock();
					                      for(i=0;i<l;i++)
					                          reg[i+8]=COM2Send[1][i];
					                      mlpr.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									  }

							          if(readbuf[2]==5)
									  {
								          lsa1146.Lock();
					                      for(i=0;i<l;i++)
					                          reg[i+8]=COM3Send[0][i];
					                      lsa1146.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									  }

							          if(readbuf[2]==6)
									  {
								          ejw2000.Lock();
					                      for(i=0;i<l;i++)
					                          reg[i+8]=COM7Send[i];
					                      ejw2000.Unlock();
			                              send(newSocket,reg,l+8,0);
                                          break;
									  }

							         if(readbuf[2]==7)
									 {
								         pt.Lock();
					                     for(i=0;i<l;i++)
					                        reg[i+8]=COM4Send[0][i];
					                     pt.Unlock();
			                             send(newSocket,reg,l+8,0);
                                         break;
									 }

							         if(readbuf[2]==8)
									 {
								         chymlx.Lock();
					                     for(i=0;i<l;i++)
					                         reg[i+8]=COM5Send[0][i];
					                     chymlx.Unlock();
			                             send(newSocket,reg,l+8,0);
                                         break;
									 }

							         if(readbuf[2]==9)
									 {
								        lsa1145.Lock();
					                    for(i=0;i<l;i++)
					                         reg[i+8]=COM3Send[1][i];
					                    lsa1145.Unlock();
			                            send(newSocket,reg,l+8,0);
                                        break;
									 }

							         case 6:
								     send(newSocket,(char*)readbuf,8,0);
								     saveaddr=readbuf[5];
								     serflag[13]=0xAA;

								     if(id==1)
									 {
					                      if(saveaddr==1||saveaddr==2||saveaddr==3)
										  {
                                              grc2041.Lock();
					                          COM1Send[id-1][saveaddr*2]=readbuf[6],COM1Send[id-1][saveaddr*2+1]=readbuf[7];
					                          grc2041.Unlock();
										  }
									      break;
									 }

								     else if(id==2)
									 {			
					                       if(saveaddr==2||saveaddr==3)
										   {
                                                grc2042.Lock();
					                            COM1Send[id-1][saveaddr*2]=readbuf[6],COM1Send[id-1][saveaddr*2+1]=readbuf[7];
					                            grc2042.Unlock();		
										   }
									       break;
									 }

								     else if(id==3)
									 {
					                       if(saveaddr==1||saveaddr==3)
										   {
                                               mmpr.Lock();
					    	                   COM2Send[id-3][saveaddr*2]=readbuf[6],COM2Send[id-3][saveaddr*2+1]=readbuf[7];
							                   mmpr.Unlock();
										   }
									       break;
									 }

							         else if(id==4)
									 {
						                  if(saveaddr==1||saveaddr==3)
										  {
                                              mlpr.Lock();
							                  COM2Send[id-3][saveaddr*2]=readbuf[6],COM2Send[id-3][saveaddr*2+1]=readbuf[7];
							                  mlpr.Unlock();
										  }
								          break;
									 }

							         else if(id==5)
									 {
					                  	  //if(saveaddr!=1||saveaddr!=17)
						                  //break;
						                  if(saveaddr==1)
										  {
                                              lsa1146.Lock();
							                  COM3Send[id-5][saveaddr*2]=readbuf[6],COM3Send[id-5][saveaddr*2+1]=readbuf[7];
							                  lsa1146.Unlock();
										  }
									      break;
									 }

								     else if(id==7)
									 {
						                    //if(saveaddr!=1||saveaddr!=17)
							               //break;
					                       if(saveaddr==3)
										   {
                                               pt.Lock();
						                       COM4Send[id-7][saveaddr*2]=readbuf[6],COM4Send[id-7][saveaddr*2+1]=readbuf[7];
						                       pt.Unlock();
										   }
									        break;
									 }	

								     else if(id==9)
									 {
						                 //if(saveaddr!=1||saveaddr!=17)
						                 //break;
						                   if(saveaddr==1)
										   {
                                               lsa1145.Lock();
							                   COM3Send[id-8][saveaddr*2]=readbuf[6],COM3Send[id-8][saveaddr*2+1]=readbuf[7];
							                   lsa1145.Unlock();
										   }
								        	break;
									 }
								 }
							 }
						 }
					 }

				     else if(numbytes==0||numbytes==SOCKET_ERROR)
					 {
					       serflag[15]=0xAA;   //冗余网口故障
		                   closesocket(newSocket);
                           newSocket=INVALID_SOCKET;
					       sendflag=0;
					 }    	
				 }
			 }
		  }
	   }
   }  //while(1)
    closesocket(newSocket);
    newSocket=INVALID_SOCKET;
	CloseHandle(Rys->m_hThread);
	return 0;	 

⌨️ 快捷键说明

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