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

📄 plc_other.c

📁 以前做的一个仿PLC程序
💻 C
📖 第 1 页 / 共 2 页
字号:
				 LPC_GPIO1->FIOSET=O2;
				 IO_CMD=0;}
			 }
		}
	}


#define  X_DIY	10 //滤波时间
uint8 X_FilterDiy[40];
unsigned long long X_FilterData;
void PLC_X_Filter(void)
{if((LPC_GPIO2->FIOPIN&X0)!=X0){if(X_FilterDiy[0]<X_DIY){X_FilterDiy[0]++;}else{X_FilterData|=0x0000000001;}}//X00
 else{X_FilterDiy[0]=0;X_FilterData&=0xFFFFFFFFFE;}
 if((LPC_GPIO2->FIOPIN&X1)!=X1){if(X_FilterDiy[1]<X_DIY){X_FilterDiy[1]++;}else{X_FilterData|=0x0000000002;}}//X01
 else{X_FilterDiy[1]=0;X_FilterData&=0xFFFFFFFFFD;}
 if((LPC_GPIO2->FIOPIN&X2)!=X2){if(X_FilterDiy[2]<X_DIY){X_FilterDiy[2]++;}else{X_FilterData|=0x0000000004;}}//X02
 else{X_FilterDiy[2]=0;X_FilterData&=0xFFFFFFFFFB;}
 if((LPC_GPIO2->FIOPIN&X3)!=X3){if(X_FilterDiy[3]<X_DIY){X_FilterDiy[3]++;}else{X_FilterData|=0x0000000008;}}//X03
 else{X_FilterDiy[3]=0;X_FilterData&=0xFFFFFFFF7;}
 if((LPC_GPIO0->FIOPIN&X4)!=X4){if(X_FilterDiy[4]<X_DIY){X_FilterDiy[4]++;}else{X_FilterData|=0x0000000010;}}//X04
 else{X_FilterDiy[4]=0;X_FilterData&=0xFFFFFFFFEF;}
 if((LPC_GPIO0->FIOPIN&X5)!=X5){if(X_FilterDiy[5]<X_DIY){X_FilterDiy[5]++;}else{X_FilterData|=0x0000000020;}}//X05
 else{X_FilterDiy[5]=0;X_FilterData&=0xFFFFFFFFDF;}
 if((LPC_GPIO0->FIOPIN&X6)!=X6){if(X_FilterDiy[6]<X_DIY){X_FilterDiy[6]++;}else{X_FilterData|=0x0000000040;}}//X06
 else{X_FilterDiy[6]=0;X_FilterData&=0xFFFFFFFFBF;}
 if((LPC_GPIO0->FIOPIN&X7)!=X7){if(X_FilterDiy[7]<X_DIY){X_FilterDiy[7]++;}else{X_FilterData|=0x0000000080;}}//X07
 else{X_FilterDiy[7]=0;X_FilterData&=0xFFFFFFFF7F;}

 if(MyD_I_DATA&0x00000001){if(X_FilterDiy[0x08]<X_DIY){X_FilterDiy[0x08]++;}else{X_FilterData|=0x0000000100;}}//X10
 else{X_FilterDiy[0x08]=0;X_FilterData&=0xFFFFFFFEFF;}
 if(MyD_I_DATA&0x00000002){if(X_FilterDiy[0x09]<X_DIY){X_FilterDiy[0x09]++;}else{X_FilterData|=0x0000000200;}}//X11
 else{X_FilterDiy[0x09]=0;X_FilterData&=0xFFFFFFFDFF;}
 if(MyD_I_DATA&0x00000004){if(X_FilterDiy[0x0A]<X_DIY){X_FilterDiy[0x0A]++;}else{X_FilterData|=0x0000000400;}}//X12
 else{X_FilterDiy[0x0A]=0;X_FilterData&=0xFFFFFFFBFF;}
 if(MyD_I_DATA&0x00000008){if(X_FilterDiy[0x0B]<X_DIY){X_FilterDiy[0x0B]++;}else{X_FilterData|=0x0000000800;}}//X13
 else{X_FilterDiy[0x0B]=0;X_FilterData&=0xFFFFFFF7FF;}
 if(MyD_I_DATA&0x00000010){if(X_FilterDiy[0x0C]<X_DIY){X_FilterDiy[0x0C]++;}else{X_FilterData|=0x0000001000;}}//X14
 else{X_FilterDiy[0x0C]=0;X_FilterData&=0xFFFFFFEFFF;}
 if(MyD_I_DATA&0x00000020){if(X_FilterDiy[0x0D]<X_DIY){X_FilterDiy[0x0D]++;}else{X_FilterData|=0x0000002000;}}//X15
 else{X_FilterDiy[0x0D]=0;X_FilterData&=0xFFFFFFDFFF;}
 if(MyD_I_DATA&0x00000040){if(X_FilterDiy[0x0E]<X_DIY){X_FilterDiy[0x0E]++;}else{X_FilterData|=0x0000004000;}}//X16
 else{X_FilterDiy[0x0E]=0;X_FilterData&=0xFFFFFFBFFF;}
 if(MyD_I_DATA&0x00000080){if(X_FilterDiy[0x0F]<X_DIY){X_FilterDiy[0x0F]++;}else{X_FilterData|=0x0000008000;}}//X17
 else{X_FilterDiy[0x0F]=0;X_FilterData&=0xFFFFFF7FFF;}

 if(MyD_I_DATA&0x00000100){if(X_FilterDiy[0x10]<X_DIY){X_FilterDiy[0x10]++;}else{X_FilterData|=0x0000010000;}}//X20
 else{X_FilterDiy[0x10]=0;X_FilterData&=0xFFFFFEFFFF;}
 if(MyD_I_DATA&0x00000200){if(X_FilterDiy[0x11]<X_DIY){X_FilterDiy[0x11]++;}else{X_FilterData|=0x0000020000;}}//X21
 else{X_FilterDiy[0x11]=0;X_FilterData&=0xFFFFFDFFFF;}
 if(MyD_I_DATA&0x00000400){if(X_FilterDiy[0x12]<X_DIY){X_FilterDiy[0x12]++;}else{X_FilterData|=0x0000040000;}}//X22
 else{X_FilterDiy[0x12]=0;X_FilterData&=0xFFFFFBFFFF;}
 if(MyD_I_DATA&0x00000800){if(X_FilterDiy[0x13]<X_DIY){X_FilterDiy[0x13]++;}else{X_FilterData|=0x0000080000;}}//X23
 else{X_FilterDiy[0x13]=0;X_FilterData&=0xFFFFF7FFFF;}
 if(MyD_I_DATA&0x00001000){if(X_FilterDiy[0x14]<X_DIY){X_FilterDiy[0x14]++;}else{X_FilterData|=0x0000100000;}}//X24
 else{X_FilterDiy[0x14]=0;X_FilterData&=0xFFFFEFFFFF;}
 if(MyD_I_DATA&0x00002000){if(X_FilterDiy[0x15]<X_DIY){X_FilterDiy[0x15]++;}else{X_FilterData|=0x0000200000;}}//X25
 else{X_FilterDiy[0x15]=0;X_FilterData&=0xFFFFDFFFFF;}
 if(MyD_I_DATA&0x00004000){if(X_FilterDiy[0x16]<X_DIY){X_FilterDiy[0x16]++;}else{X_FilterData|=0x0000400000;}}//X26
 else{X_FilterDiy[0x16]=0;X_FilterData&=0xFFFFBFFFFF;}
 if(MyD_I_DATA&0x00008000){if(X_FilterDiy[0x17]<X_DIY){X_FilterDiy[0x17]++;}else{X_FilterData|=0x0000800000;}}//X27
 else{X_FilterDiy[0x17]=0;X_FilterData&=0xFFFF7FFFFF;}

 if(MyD_I_DATA&0x00010000){if(X_FilterDiy[0x18]<X_DIY){X_FilterDiy[0x18]++;}else{X_FilterData|=0x0001000000;}}//X30
 else{X_FilterDiy[0x18]=0;X_FilterData&=0xFFFEFFFFFF;}
 if(MyD_I_DATA&0x00020000){if(X_FilterDiy[0x19]<X_DIY){X_FilterDiy[0x19]++;}else{X_FilterData|=0x0002000000;}}//X31
 else{X_FilterDiy[0x19]=0;X_FilterData&=0xFFFDFFFFFF;}
 if(MyD_I_DATA&0x00040000){if(X_FilterDiy[0x1A]<X_DIY){X_FilterDiy[0x1A]++;}else{X_FilterData|=0x0004000000;}}//X32
 else{X_FilterDiy[0x1A]=0;X_FilterData&=0xFFFBFFFFFF;}
 if(MyD_I_DATA&0x00080000){if(X_FilterDiy[0x1B]<X_DIY){X_FilterDiy[0x1B]++;}else{X_FilterData|=0x0008000000;}}//X33
 else{X_FilterDiy[0x1B]=0;X_FilterData&=0xFFF7FFFFFF;}
 if(MyD_I_DATA&0x00100000){if(X_FilterDiy[0x1C]<X_DIY){X_FilterDiy[0x1C]++;}else{X_FilterData|=0x0010000000;}}//X34
 else{X_FilterDiy[0x1C]=0;X_FilterData&=0xFFEFFFFFFF;}
 if(MyD_I_DATA&0x00200000){if(X_FilterDiy[0x1D]<X_DIY){X_FilterDiy[0x1D]++;}else{X_FilterData|=0x0020000000;}}//X35
 else{X_FilterDiy[0x1D]=0;X_FilterData&=0xFFDFFFFFFF;}
 if(MyD_I_DATA&0x00400000){if(X_FilterDiy[0x1E]<X_DIY){X_FilterDiy[0x1E]++;}else{X_FilterData|=0x0040000000;}}//X36
 else{X_FilterDiy[0x1E]=0;X_FilterData&=0xFFBFFFFFFF;}
 if(MyD_I_DATA&0x00800000){if(X_FilterDiy[0x1F]<X_DIY){X_FilterDiy[0x1F]++;}else{X_FilterData|=0x0080000000;}}//X37
 else{X_FilterDiy[0x1F]=0;X_FilterData&=0xFF7FFFFFFF;}

 if(MyD_I_DATA&0x01000000){if(X_FilterDiy[0x20]<X_DIY){X_FilterDiy[0x20]++;}else{X_FilterData|=0x0100000000;}}//X40
 else{X_FilterDiy[0x20]=0;X_FilterData&=0xFEFFFFFFFF;}
 if(MyD_I_DATA&0x02000000){if(X_FilterDiy[0x21]<X_DIY){X_FilterDiy[0x21]++;}else{X_FilterData|=0x0200000000;}}//X41
 else{X_FilterDiy[0x21]=0;X_FilterData&=0xFDFFFFFFFF;}
 if(MyD_I_DATA&0x04000000){if(X_FilterDiy[0x22]<X_DIY){X_FilterDiy[0x22]++;}else{X_FilterData|=0x0400000000;}}//X42
 else{X_FilterDiy[0x22]=0;X_FilterData&=0xFBFFFFFFFF;}
 if(MyD_I_DATA&0x08000000){if(X_FilterDiy[0x23]<X_DIY){X_FilterDiy[0x23]++;}else{X_FilterData|=0x0800000000;}}//X43
 else{X_FilterDiy[0x23]=0;X_FilterData&=0xF7FFFFFFFF;}
 if(MyD_I_DATA&0x10000000){if(X_FilterDiy[0x24]<X_DIY){X_FilterDiy[0x24]++;}else{X_FilterData|=0x1000000000;}}//X44
 else{X_FilterDiy[0x24]=0;X_FilterData&=0xEFFFFFFFFF;}
 if(MyD_I_DATA&0x20000000){if(X_FilterDiy[0x25]<X_DIY){X_FilterDiy[0x25]++;}else{X_FilterData|=0x2000000000;}}//X45
 else{X_FilterDiy[0x25]=0;X_FilterData&=0xDFFFFFFFFF;}
 if(MyD_I_DATA&0x40000000){if(X_FilterDiy[0x26]<X_DIY){X_FilterDiy[0x26]++;}else{X_FilterData|=0x4000000000;}}//X46
 else{X_FilterDiy[0x26]=0;X_FilterData&=0xBFFFFFFFFF;}
 if(MyD_I_DATA&0x80000000){if(X_FilterDiy[0x27]<X_DIY){X_FilterDiy[0x27]++;}else{X_FilterData|=0x8000000000;}}//X47
 else{X_FilterDiy[0x27]=0;X_FilterData&=0x7FFFFFFFFF;}
}

void PLC_IO_BREAK(void)
{PLC_RAM32(PLC_R_START_ADD+0x0080)=X_FilterData;
 PLC_RAM8 (PLC_R_START_ADD+0x0084)=X_FilterData/0x100000000;
 if(Y0_H_OE==0)
   {if(PLC_BIT_TEST(0x0500)){LPC_GPIO2->FIOCLR =Y0;}
    else{LPC_GPIO2->FIOSET =Y0;}}
 else {if((LPC_GPIO2->FIOPIN&Y0)!=Y0){PLC_BIT_ON(0x0500);}
       else{PLC_BIT_OFF(0x0500);}
	  }	  
 if(Y1_H_OE==0)
   {if(PLC_BIT_TEST(0x0501)){LPC_GPIO2->FIOCLR =Y1;}
    else{LPC_GPIO2->FIOSET =Y1;}}
 else {if((LPC_GPIO2->FIOPIN&Y1)!=Y1){PLC_BIT_ON(0x0501);}
       else{PLC_BIT_OFF(0x0501);}
	  }
 if(PLC_BIT_TEST(0x0502)){LPC_GPIO2->FIOCLR =Y2;}
 else{LPC_GPIO2->FIOSET =Y2;}
 if(PLC_BIT_TEST(0x0503)){LPC_GPIO2->FIOCLR =Y3;}
 else{LPC_GPIO2->FIOSET =Y3;}
 if(PLC_BIT_TEST(0x0504)){LPC_GPIO2->FIOCLR =Y4;}
 else{LPC_GPIO2->FIOSET =Y4;}
 if(PLC_BIT_TEST(0x0505)){LPC_GPIO2->FIOCLR =Y5;}
 else{LPC_GPIO2->FIOSET =Y5;}
 if(PLC_BIT_TEST(0x0506)){LPC_GPIO2->FIOCLR =Y6;}
 else{LPC_GPIO2->FIOSET =Y6;}
 if(PLC_BIT_TEST(0x0507)){LPC_GPIO2->FIOCLR =Y7;}
 else{LPC_GPIO2->FIOSET =Y7;}
 MyD_O_DATA=PLC_RAM8(PLC_R_START_ADD+0x00A1)+(PLC_RAM8(PLC_R_START_ADD+0x00A2)<<8)+(PLC_RAM8(PLC_R_START_ADD+0x00A3)<<16)+(PLC_RAM8(PLC_R_START_ADD+0x00A4)<<24);
}


void PLC_AllInit(void)
{PLC_Init();
 PLC_PowerUpReset();
 UARTInit(0, 9600);	 
 LPC_TIM0->MR0 = SystemFrequency/4/999;
 LPC_TIM0->MCR = 3;				
 NVIC_EnableIRQ(TIMER0_IRQn);
 LPC_TIM0->TCR = 1;

 bod_init();
 PLC_IO_INIT();
 BOT_BIT=0x55;
}

void PLC_PWM_RUN(uint16 PWM_Width,uint16 PWM_Cycle,uint16 Y_num)
{if (Y_num==0x0500)
  {if(PWM_Width<PWM_Cycle&&Y0_H_OE==0)
     {Y0_H_OE=1;
      LPC_TIM2->TCR = 2;
	  PWM_Y0_ON_TIMER=PWM_Width;
      PWM_Y0_CYCLE=PWM_Cycle;
	  LPC_TIM2->MR0 =SystemFrequency/4/(999+D8138);
      LPC_TIM2->MCR = 3;			
      NVIC_EnableIRQ(TIMER2_IRQn);
	  LPC_TIM2->TCR = 1;
	  return;
	  }
  }
 else if(Y_num==0x0501)
  {if(PWM_Width<PWM_Cycle&&Y1_H_OE==0)
     {Y1_H_OE=1;
	  LPC_TIM3->TCR = 2;
      PWM_Y1_ON_TIMER=PWM_Width;
      PWM_Y1_CYCLE=PWM_Cycle;
      LPC_TIM3->MR0 =SystemFrequency/4/(999+D8139);
      LPC_TIM3->MCR = 3;			
      NVIC_EnableIRQ(TIMER3_IRQn);
	  LPC_TIM3->TCR = 1;
	  return;
	  }
   }
}

void PLC_PWM_STOP(uint16 Y_num)
{if (Y_num==0x0500&&Y0_H_OE==1)
  {Y0_H_OE=3;
   LPC_TIM2->TCR = 2;
   LPC_TIM2->TCR = 0;
   LPC_GPIO2->FIOSET =Y0;
   PLC_BIT_OFF(0x0500);
   LPC_GPIO2->FIOSET =Y0;
   PLC_BIT_OFF(0x0500);
   Y0_H_OE=0;
   return;}
 else if(Y_num==0x0501&&Y1_H_OE==1)
  {Y1_H_OE=3;
   LPC_TIM3->TCR = 2;
   LPC_TIM3->TCR = 0;
   LPC_GPIO2->FIOSET =Y1;
   PLC_BIT_OFF(0x0501);
   LPC_GPIO2->FIOSET =Y1;
   PLC_BIT_OFF(0x0501);
   Y1_H_OE=0;
   return;}
}

void PLC_PLSY_RUN(uint32 PLSY_Frequency,uint32 PLSY_Count,uint16 Y_num)
{if (Y_num==0x0500)
  {if(Y0_H_OE==0)
     {Y0_H_OE=2;
	  LPC_TIM2->TCR = 2;
	  PLSY_Y0_COUNT=PLSY_Count;
	  if(PLSY_Frequency==0){PLSY_Frequency=2;}
	  else if(PLSY_Frequency>20000){PLSY_Frequency=20000;}
	  LPC_TIM2->MR0 =SystemFrequency/4/(PLSY_Frequency*2);
      LPC_TIM2->MCR = 3;			
      NVIC_EnableIRQ(TIMER2_IRQn);
	  LPC_TIM2->TCR = 1;
	  }
  if(PLSY_Count==0){PLSY_Y0_COUNT=0x1000000;}
  if(PLSY_Count!=0&&PLSY_Y0_COUNT==0){PLC_BIT_ON(M8029);}
  return;}
 else if(Y_num==0x0501)
  {if(Y1_H_OE==0)
     {Y1_H_OE=2;
	  LPC_TIM3->TCR = 2;
	  PLSY_Y1_COUNT=PLSY_Count;
	  if(PLSY_Frequency==0){PLSY_Frequency=2;}
	  else if(PLSY_Frequency>20000){PLSY_Frequency=20000;}
      LPC_TIM3->MR0 =SystemFrequency/4/(PLSY_Frequency*2);
      LPC_TIM3->MCR = 3;			
      NVIC_EnableIRQ(TIMER3_IRQn);
	  LPC_TIM3->TCR = 1;
	  }
   if(PLSY_Count==0){PLSY_Y1_COUNT=0x1000000;}
   if(PLSY_Count!=0&&PLSY_Y1_COUNT==0){PLC_BIT_ON(M8029);}
   return;}	
}

void PLC_PLSY_STOP(uint16 Y_num)
{if (Y_num==0x0500&&Y0_H_OE==2)
  {Y0_H_OE=3;
   LPC_TIM2->TCR = 2;
   LPC_TIM2->TCR = 0;
   //if(LPC_GPIO2->FIOPIN&Y0!=Y0)
     /*{*/LPC_GPIO2->FIOSET =Y0;
      PLC_BIT_OFF(0x0500);
	  //D8140_1++;}
   Y0_H_OE=0;
   return;}
 else if(Y_num==0x0501&&Y1_H_OE==2)
  {Y1_H_OE=3;
   LPC_TIM3->TCR = 2;
   LPC_TIM3->TCR = 0;
   if(LPC_GPIO2->FIOPIN&Y1!=Y1)
     {LPC_GPIO2->FIOSET =Y1;
      PLC_BIT_OFF(0x0501);
	  D8142_3++;}
   Y1_H_OE=0;
   return;}
}

void H_Y0_Y1_STOP(void)
{if(Y0_H_OE!=0)
   {LPC_TIM2->TCR = 2;
    LPC_TIM2->TCR = 0;
    LPC_GPIO2->FIOSET =Y0;
    PLC_BIT_OFF(0x0500);}
 if(Y1_H_OE!=0)
   {LPC_TIM3->TCR = 2;
    LPC_TIM3->TCR = 0;
    LPC_GPIO2->FIOSET =Y1;
    PLC_BIT_OFF(0x0501);}
}
uint32 PLC_MMS_TIME;
void PLC_M_MS(void)
{PLC_MMS_TIME++;
 if(PLC_MMS_TIME%5==0)     {if(PLC_BIT_TEST(M8011)){PLC_BIT_OFF(M8011);}else{PLC_BIT_ON(M8011);}}
 if(PLC_MMS_TIME%50==0)    {if(PLC_BIT_TEST(M8012)){PLC_BIT_OFF(M8012);}else{PLC_BIT_ON(M8012);}}
 if(PLC_MMS_TIME%500==0)   {if(PLC_BIT_TEST(M8013)){PLC_BIT_OFF(M8013);}else{PLC_BIT_ON(M8013);}}
 if(PLC_MMS_TIME%30000==0) {PLC_MMS_TIME=0;if(PLC_BIT_TEST(M8014)){PLC_BIT_OFF(M8014);}else{PLC_BIT_ON(M8014);}}
}

⌨️ 快捷键说明

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