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

📄 plc_demo.c

📁 该原代码应用在cpu(st89le516AD+)上,控制GPRS模块sim100,通过检测系统状态(通电状态,运行状态,AD采样值),通过GPRS模块的短信功能,实现无线报警.
💻 C
📖 第 1 页 / 共 5 页
字号:
	unsigned char len;

	xsla = EEPRom_SLA;
	xsuba= EEPRom_SUBA;
	xsuba1=SMS_SEND_TINE_ADDR;
	len = IRcvChar(xsla,xsuba,xsuba1,len);
	return len;
}




/*-----------------------------------------
main
主函数
------------------------------------------*/
void main(void)
{
	unsigned char PowerOffSendTimes;
	unsigned char DisconnectSendTimes;
	unsigned char SendSmsType;
	unsigned char i, j, k;
	
	Initialize();	

	LedFlashFlag = 0;
	DelayCount = 0;
 	while( DelayCount < 10000 );
 	DelayCount = 0;
 
	Display_LCD( Gsm_Title );
	strcpy( PCTxBuffer, "NF:InitSysOk\r\n" );
	SendStringToPC();

 	i = 0;
	while( Initialized <= 8 )
	{
		if(ModuleWaitFlag == 0 || DelayCount > 10000 )
		{
			if( ModuleTxBuffer[0] == 0 )
			{
				DelayCount = 0;
				strcpy( ModuleTxBuffer, Module_AT[Initialized] );	//re-send
			}

			if( DelayCount > 10000 )
			{
				i ++;
				if( i > 9 )
				{
					i = 0;
//					WDTD = 0x10;
//					WDRE = 1;
//					WDT  = 1;
//					SWDT = 1;
//					WDOUT= 1;
				}
			}
		}
	
		SendStringToModule(  );

		//if( RXReg_data == 0x0a )
		if( DelayCount > 2000 && ModuleWaitFlag == 1 )
		{
			JudgeModuleString(  );
		}

//		SendStringToPC(  );
	}

	LedFlashFlag = 0;
	// Initiliaze finished
	//delay 5 s
	
	LCDRefreshFlag = 1;
	
	while( DelayCount < 1000 );
	memset(PCTxBuffer, 0, LINE_LENGTH);
	memset(PCRxBuffer, 0, LINE_LENGTH);
	memset(ModuleTxBuffer, 0, LINE_LENGTH);
	memset(ModuleRxBuffer, 0, LINE_LENGTH);
	PowerOffSendTimes = 0;
	DisconnectSendTimes = 0;
	ModuleWaitFlag = 0;
	DelayCount = 0;
	PCConnectCount = 0;
	strcpy( PCTxBuffer, "NF:InitGsmOk\r\n" );
	SendStringToPC();
	
	while(1)
	{
		/*电源中断处理 */
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( PowerOffDelayCount > 2000 )
		{
			PowerOffFlag = 1;
			PowerOffDelayCount = 0;
		}
		else
		{
			PowerOffFlag = 0;
		}
		
		if( PowerOffFlag && NetFoxPowerOpenFlag && PowerSmsHasSent == 0 )
		{
			/*如果电源中断*/
			strcpy( PCTxBuffer, "NF:Alarm(AC)\r\n" );
			SendStringToPC();
			LedFlashFlag = 2;

			PowerOffSendTimes = EEPR_AT_data*2;
			ModuleWaitFlag = 0;
			PowerOffFlag = 0;
			Sms_send_type = 1;
			PowerSmsHasSent = 1;
			SendSmsType = 1;		
			if(NetFoxConnectOpenFlag == 0 )
			{
				Display_LCD( Wait_Title );
			}
			else
			{
				Display_LCD( ACErr_Title );
			}
			
		}
		if ( PowerOffSendTimes && ModuleWaitFlag == 0 && SendSmsType == 1 )
		{
			if( ModuleTxBuffer[0] == 0 && ModuleSendDelayCount > 6000 )
			{
				DelayCount = 0;
				strcpy( ModuleTxBuffer, Sms_PowerOff1 );
				
				if(PowerOffSendTimes > EEPR_AT_data)
					ConventPhoneNo2USC2( Phone1, ModuleTxBuffer +9 );
				else
					ConventPhoneNo2USC2( Phone2, ModuleTxBuffer +9 );
				
				strcat( ModuleTxBuffer, "\"\r\n");
				if( NetFoxUseNameOpenFlag)
					strcat( ModuleTxBuffer, Name );
				strcat( ModuleTxBuffer, Sms_PowerOff2 );
				StrCatChar( ModuleTxBuffer, 0x1a );
				
				Sms_edit_mode = 1;
				ModuleSendDelayCount = 0;
			}
		}
		
		/*电源恢复处理 */
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( RePowerOffFlag && NetFoxPowerOpenFlag )
		{
			/*如果电源恢复*/
			LedFlashFlag = 2;
			LCDRefreshFlag = 1;
			PowerOffSendTimes = EEPR_AT_data*2;
			ModuleWaitFlag = 0;
			RePowerOffFlag = 0;
			Sms_send_type = 1;
			SendSmsType = 2;
		}
		if ( PowerOffSendTimes && ModuleWaitFlag == 0 && SendSmsType == 2)
		{
			if( ModuleTxBuffer[0] == 0 && ModuleSendDelayCount > 6000 )
			{
				DelayCount = 0;
				strcpy( ModuleTxBuffer, Sms_PowerOff1 );
				
				if(PowerOffSendTimes > EEPR_AT_data)
					ConventPhoneNo2USC2( Phone1, ModuleTxBuffer +9 );
				else
					ConventPhoneNo2USC2( Phone2, ModuleTxBuffer +9 );
				
				strcat( ModuleTxBuffer, "\"\r\n");
				if( NetFoxUseNameOpenFlag)
					strcat( ModuleTxBuffer, Name );
				strcat( ModuleTxBuffer, Sms_PowerOff4 );
				StrCatChar( ModuleTxBuffer, 0x1a );
				
				Sms_edit_mode = 1;
				ModuleSendDelayCount = 0;
			}
		}
		
		
		
		
		
		/* 通讯中断处理*/
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( PCConnectCount > (unsigned long )(EEPR_DT_data*120000) )
		{
			PCDisconnectFlag = 1;
			PCConnectCount = 0;
			
		}
		else
		{
			PCDisconnectFlag = 0;
		}
		
		if( PCDisconnectFlag && NetFoxConnectOpenFlag && ConnectSmsHasSent == 0 )
		{
			/*如果与PC通讯中断*/
			strcpy( PCTxBuffer, "NF:Alarm(CON)\r\n" );
			SendStringToPC();
			LedFlashFlag = 2;

			DisconnectSendTimes = EEPR_AT_data*2;

			ModuleWaitFlag = 0;
			PCDisconnectFlag = 0;
			Sms_send_type = 2;
			ConnectSmsHasSent = 1;
			SendSmsType = 3;
			if(NetFoxPowerOpenFlag == 0 )
			{
				Display_LCD( Wait_Title );
			}
			else
			{
				Display_LCD( LinkErr_Title );
			}
	
//			led2 = 1;
		}
		if ( DisconnectSendTimes && ModuleWaitFlag == 0 && SendSmsType == 3) 
		{
			if( ModuleTxBuffer[0] == 0 && ModuleSendDelayCount > 6000 )
			{
				DelayCount = 0;
				strcpy( ModuleTxBuffer, Sms_PowerOff1 );
				
				if(DisconnectSendTimes > EEPR_AT_data)
					ConventPhoneNo2USC2( Phone1, ModuleTxBuffer +9 );
				else
					ConventPhoneNo2USC2( Phone2, ModuleTxBuffer +9 );
				
				strcat( ModuleTxBuffer, "\"\r\n");
				if( NetFoxUseNameOpenFlag)
					strcat( ModuleTxBuffer, Name );
				strcat( ModuleTxBuffer, Sms_PowerOff3 );
				StrCatChar( ModuleTxBuffer, 0x1a );
				Sms_edit_mode = 1;
				ModuleSendDelayCount = 0;
			}
		}


		/* 通讯中断恢复*/
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( RePCDisconnectFlag && NetFoxConnectOpenFlag)
		{
			/*如果与PC通讯恢复*/
			LedFlashFlag = 2;
			LCDRefreshFlag = 1;
			DisconnectSendTimes = EEPR_AT_data*2;

			ModuleWaitFlag = 0;
			RePCDisconnectFlag = 0;
			Sms_send_type = 2;
			SendSmsType = 4;
	
//			led2 = 1;
		}
		if ( DisconnectSendTimes && ModuleWaitFlag == 0 && SendSmsType == 4) 
		{
			if( ModuleTxBuffer[0] == 0 && ModuleSendDelayCount > 6000 )
			{
				DelayCount = 0;
				strcpy( ModuleTxBuffer, Sms_PowerOff1 );
				
				if(DisconnectSendTimes > EEPR_AT_data)
					ConventPhoneNo2USC2( Phone1, ModuleTxBuffer +9 );
				else
					ConventPhoneNo2USC2( Phone2, ModuleTxBuffer +9 );
				
				strcat( ModuleTxBuffer, "\"\r\n");
				if( NetFoxUseNameOpenFlag)
					strcat( ModuleTxBuffer, Name );
				strcat( ModuleTxBuffer, Sms_PowerOff5 );
				StrCatChar( ModuleTxBuffer, 0x1a );
				Sms_edit_mode = 1;
				ModuleSendDelayCount = 0;
			}
		}






		/*发送字串给模块*/
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( ModuleWaitFlag == 0 )
		{
			SendStringToModule(  );
		}









		/*Judge receive sms*/
/*		
		if( ReceiveSMSFlag == 1 )
		{
			
			if(ModuleRxBuffer[0] != 0 )
			{
				Display_LCD(ModuleRxBuffer);
				if( StrStr( ModuleRxBuffer, "CMGR"))
				{
					i = 40;
					while( 1)
					{
						if( ModuleRxBuffer[i] == 0x0a)
						{
							ModuleRxBuffer[i] = 0x20;
							break;
						}
						else if(ModuleRxBuffer[i] == 0x0d )
							ModuleRxBuffer[i] = 0x20;
						else if(ModuleRxBuffer[i] == 0 || i > 1000 )
							break;
						i ++;
					}
					
					 
					strcpy(PCTxBuffer, "NF:SMRCV(");
					strcpy(PCTxBuffer+9, ModuleRxBuffer+10 );
					strcat( PCTxBuffer, ")\r\n");
					SendStringToPC();
					ReceiveSMSFlag = 0;
				}
			}
		}
*/
		/*判断来自模块的字符串*/
		/************************************************************/
		/************************************************************/
		/************************************************************/

		if( DelayCount > 1000 )
		{
			/* Judge Module string */
			
			if(ModuleRxBuffer[0] != 0 )
			{
				if( ModuleWaitFlag == 1 )
				{
					//Display_LCD(ModuleRxBuffer);
					if( StrStr( ModuleRxBuffer, "+CMGS") )
					{
						strcpy( PCTxBuffer, "NF:SENDOK\r\n\0");
						SendStringToPC();
					}
					else if( StrStr( ModuleRxBuffer, "+CSQ" ) )
					{
						//Display_LCD("QWE");
						strcpy( PCTxBuffer, "NF:NFCSQ(");
						memcpy( PCTxBuffer+9, ModuleRxBuffer+8, 4 );
						memcpy( PCTxBuffer+13, ")\r\n\0\0", 4 );
						SendStringToPC();
					}
					else if( StrStr( ModuleRxBuffer, "+CSCA" ) )
					{
						//Display_LCD("QWE");
						strcpy( PCTxBuffer, "NF:NFCSCA(");
						memcpy( PCTxBuffer+10, ModuleRxBuffer+10, 14 );
						memcpy( PCTxBuffer+24, ")\r\n\0\0", 4 );
						SendStringToPC();
					}
					if( StrStr( ModuleRxBuffer, "OK") )
					{
						ModuleWaitFlag = 0;
						ReceiveSMSFlag = 0;
						memset( ModuleRxBuffer, 0, LINE_LENGTH );
						ModuleReceiveCount = 0;
						if( Sms_send_type == 1 && PowerOffSendTimes > 0 )
							PowerOffSendTimes --;
						else if( Sms_send_type == 2 && DisconnectSendTimes > 0 )
							DisconnectSendTimes --;						
					}
					
	/*				else// if( StrStr( ModuleRxBuffer, "ERROR") || StrStr( ModuleRxBuffer, "500") )
					{
						ModuleWaitFlag = 0;
						memset( ModuleRxBuffer, 0, LINE_LENGTH );
						ModuleReceiveCount = 0;
						
						ModuleTxCount = 0;
						memset( ModuleTxBuffer, 0, LINE_LENGTH );
						Sms_edit_mode = 0;
					}
	*/				
					ModuleTxCount = 0;
					memset( ModuleTxBuffer, 0, LINE_LENGTH );
				}
				else
				{
					if( StrStr( ModuleRxBuffer, "+CMGS") )
					{
						strcpy( PCTxBuffer, "NF:SENDOK\r\n\0");
						SendStringToPC();
					}
					if( StrStr( ModuleRxBuffer, module_reply[4]) )
					{
						ReceiveSMSFlag = 1;
						strcpy( ModuleTxBuffer, "AT+CMGR=" );
						i = strlen(ModuleRxBuffer);
						i --;
						j = 0;
						while( ModuleRxBuffer[i] != 0x20 && i > 0)
						{
							i --;
							j ++;
						}
						i++;
						j--;
						for( k = 0; k < j; k ++ )
						{
							ModuleTxBuffer[8+k] = ModuleRxBuffer[i+k];
						}
						ModuleTxBuffer[8+k] = '\r';
						ModuleTxBuffer[8+k+1] = '\n';
						ModuleTxBuffer[8+k+2] = 0;
						ModuleSendDelayCount = 0;
						//Display_LCD(ModuleTxBuffer);
					}
				}
				memset( ModuleRxBuffer, 0, LINE_LENGTH );
				ModuleReceiveCount = 0;
				
				Sms_edit_mode = 0;
			
			}
			DelayCount = 0;
			
			/* time out in 8 seconds */
			if( ModuleSendDelayCount > 16000 )
			{
				ModuleWaitFlag = 0;
				ReceiveSMSFlag = 0;
			}
		}

	

		/*判断来自pc 的字符串*/
		/************************************************************/
		/************************************************************/
		/************************************************************/

		if( PCWaitFlag == 1 )
		{
			JudgePCString(  );
			PCRxBuffer[0] = 0;
			PCReceiveCount = 0;
			PCWaitFlag = 0;
		}
		
		/*led 刷新处理*/
		/************************************************************/
		/************************************************************/
		/************************************************************/
		if( LCDRefreshFlag )
		{
			if(NetFoxPowerOpenFlag == 0 && NetFoxConnectOpenFlag == 0 )
			{
				Display_LCD( Wait_Title );
			}
			else if( NetFoxPowerOpenFlag == 1 && NetFoxConnectOpenFlag == 1)
			{
				Display_LCD( Work_Title );
			}
			else if( NetFoxPowerOpenFlag == 1 )
			{
				Display_LCD( WorkAC_Title );
			}
			else
			{
				Display_LCD( WorkLink_Title );
			}
			LCDRefreshFlag = 0;
			LedFlashFlag = 0;
		}
		
	}// while (1)
}

                                                                                                                                                                                                                                                                                                                                                              

⌨️ 快捷键说明

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