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

📄 md142asn.c

📁 64输入32输出单片机程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//-------------------------------------------------------------------------
//	Filename :  Md142AS.C
//	Language :  C for AT89S8252
//	Revision :  1.0
//  Initial Date :  13/03/2003
//   Last Modify :  scratch comm for one time
//  System clock :  24.00MHZ
//   Description :  ARMATURE EPOXY COATING
//-------------------------------------------------------------------------

#include <reg8252.h>
#include "plc64i32.h"
#include "serial.h"

//define input signal
enum {LOAD_VERTUP=1,LOAD_VERTDN,LOAD_HORNFD,LOAD_HORNBD,INDUCTION1FD,INDUCTION1BD,
      ARM1UP=7,ARM1DN,ARM2UP,ARM2DN,ARM3UP,ARM3DN,AIR_MAGNET1UP,ARMAT_CHECK=14,
      AIR_MAGNET2UP=15,ARMAT_FULL,AIR_CHUCKUP,AIR_CHUCKDN,TRAN_HORNFD,TRAN_HORNBD,
      SHAFT_HOLDFD=21,SHAFT_HOLDBD,JIG_EJECTFD,JIG_EJECTBD,JIG_REMOVEFD,JIG_REMOVEBD,
      COMM_LOADFD=31,COMM_LOADBD,COMM_INSERTFD,COMM_INSERTBD,INDUCTION2FD,INDUCTION2BD,
      UNLOADUP=37,UNLOADDN,HEAT1=41,COOLANT1,HEAT2,COOLANT2,STARTL,STARTR=46,
      COMM_CHECK=49,ARMATURE_CHK,DELIVERFD,DELIVERBD=52};
//-----------------------------------------
//define output signal
enum {LOAD_VERT=1,LOAD_HORN10,LOAD_HORN11,INDUCTION1,ALARM,ARM1=6,ARM2,ARM3,AIR_MAGNET1=9,
      MAGFORCE1=10,AIR_MAGNET2,MAGFORCE2,AIR_CHUCK,TRAN_HORN10=15,TRAN_HORN11,
      SHAFT_HOLD=17,SPRAY_L,SPRAY_R=20,JIG_EJECT,JIG_REMOVE,COMM_LOAD10,COMM_LOAD11,
      COMM_INSERT=25,INDUCTION2=27,UNLOAD=29,VIBRATE,ROTATE,DELIVER=32};
//--------------------------------------------------------------------------------
//define manual operate valves' value
enum {VALVE1=1,VALVE2,VALVE3,VALVE4,VALVE5,VALVE6,VALVE7,VALVE8,VALVE9,VALVE10,
      VALVE11,VALVE12,VALVE13,VALVE14,VALVE15,VALVE16,VALVE17,VALVE18,VALVE19,VALVE20};

//----------------------------------------------------------
void _init_machine();
void _step_by_step();
void _manual_operate();
void _auto_operate();
void _setup();

unsigned char xdata datalist[10];
char proc=0;
unsigned heat1_time,heat1_time_set;
unsigned heat2_time,heat2_time_set;
unsigned spray_time,spray_time_set,comm_load_time;
unsigned blow_time,blow_time_set,run_time;
bit spray_end,heat1_end,heat2_end,blow_end,alarm_flag,comm_load_end;
//---------------------------------------------------

void main()
{   char i;
    _init_system ();
    ReceStream.address = ID_Plc64I;
    // setup serial port control hardware (19200 BAUD @24MHZ)
    _init_serial (BAUD19200);
    _set_delay (100);

    for (i=0;i<10;i++)
	TranStream.datablk[i] = _read_eepbyte(&datalist[i]);
    _trf_msge (ID_Panel,Datatrans,0x07);
    _set_delay (50);

    _init_machine();
    _outp_bit(LOAD_HORN10,OFF);
    _outp_bit(LOAD_HORN11,ON);

    _outp_bit(TRAN_HORN10,OFF);
    _outp_bit(TRAN_HORN11,ON);
    _set_delay (100);
    while(TRUE)
	{
	  if(rece_com==Auto)
	    _auto_operate();

	  if(rece_com==Manual)
	    _manual_operate();

	  if(rece_com==Dataset)
	    _setup();

	}

}
//----------------------------------------------------------------------
void _auto_operate()
{
    unsigned time_out=200;
    char previous_step,current_step,turn_times;
    char heat1_on,heat2_on,sprayok,blowstop,cycle,step=1;
    TranStream.datablk[2]=_read_eepbyte(&datalist[2]);
    TranStream.datablk[3]=_read_eepbyte(&datalist[3]);
    TranStream.datablk[4]=_read_eepbyte(&datalist[4]);
    TranStream.datablk[5]=_read_eepbyte(&datalist[5]);
    _trf_msge (ID_Panel,Datatrans,0x06);
    _set_delay(10);
    if(TranStream.datablk[2]<11)
	heat2_time_set=TranStream.datablk[2]*100;
    else
	heat2_time_set=TranStream.datablk[2]*10;

    if(TranStream.datablk[3]<11)
	heat1_time_set=TranStream.datablk[3]*100;
    else
	heat1_time_set=TranStream.datablk[3]*10;
    if(TranStream.datablk[4]<11)
	spray_time_set=TranStream.datablk[4]*100;
    else
	spray_time_set=TranStream.datablk[4]*10;
    //+++++++++++
    if(TranStream.datablk[5]==0)
    blow_time_set=5;
    else
	if(TranStream.datablk[5]<11)
	   blow_time_set=TranStream.datablk[5]*100;
	else
	   blow_time_set=TranStream.datablk[5]*10;
    while( rece_com!=Exit )
    {
     if(rece_com==Start)
       {rece_com=OFF;
	while( rece_com!=Exit )
	 {
	    switch(proc)
	    {
	    case 0:
		if(_inp_bit(INDUCTION1BD)&&_inp_bit(INDUCTION2BD)&&
		   _inp_bit(ARM3UP)&&_inp_bit(TRAN_HORNBD))
		  {
//		   _outp_bit(UNLOAD,ON);
		   _outp_bit(LOAD_VERT,ON);
		   _outp_bit(AIR_MAGNET1,ON);
		   _outp_bit(ARM1,ON);
		   run_time=tick_clock+time_out;
		   proc++;
		  }
		break;
	    case 1:
		if(_inp_bit(ARM1DN))
		{

		    _set_delay(10);
		    _outp_bit(ARM1,OFF);
//		    _outp_bit(UNLOAD,OFF);
		    run_time=tick_clock+time_out;
		    proc++;
		}
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 2:
		if(_inp_bit(LOAD_VERTUP)&&_inp_bit(INDUCTION1BD)&&_inp_bit(COMM_INSERTFD)&&_inp_bit(JIG_EJECTBD)&&
		   _inp_bit(JIG_REMOVEBD)&&_inp_bit(ARM1UP)&&_inp_bit(ARM2UP)&&_inp_bit(ARM3UP))
		  {
		    _outp_bit(LOAD_HORN11,OFF);
		    _outp_bit(LOAD_HORN10,ON);

		    _outp_bit(TRAN_HORN11,OFF);
		    _outp_bit(TRAN_HORN10,ON);
		  run_time=tick_clock+time_out;
		  proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 3:
		if(_inp_bit(LOAD_HORNFD)&&_inp_bit(TRAN_HORNFD))
		  {
		    _set_delay(25);
		   if(_inp_bit(ARMAT_CHECK))
		     {
		      heat1_on=TRUE;
		      cycle=0;
		     }
		   else
		     {
		      heat1_on=FALSE;
		      cycle++;
		     }
		   _outp_bit(LOAD_VERT,OFF);
		   _outp_bit(ARM1,ON);
		   _outp_bit(ARM2,ON);
		   if(_inp_bit(INDUCTION2BD)&& !_inp_bit(ARMAT_FULL))
		      _outp_bit(ARM3,ON);
		   else
		      if(_inp_bit(ARMAT_FULL))
			{
			 _outp_bit(ALARM,ON);
			 while(_inp_bit(ARMAT_FULL));
			 rece_com=0;
			 while( rece_com!=Start );
			 _outp_bit(ARM3,ON);
			 _outp_bit(ALARM,OFF);
			 rece_com=0;
			}
		   run_time=tick_clock+time_out;
		   proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 4:
		if(_inp_bit(ARM1DN))
		{
		   _set_delay(5);
		   _outp_bit(AIR_MAGNET1,OFF);
		   _outp_bit(ARM1,OFF);

		   _outp_bit(SHAFT_HOLD,ON);	  //START TO SPRAY
		   _outp_bit(ROTATE,ON);
		   _set_delay(10);
		   _outp_bit(VIBRATE,ON);
		   _outp_bit(SPRAY_L,ON);
		   _outp_bit(SPRAY_R,ON);
		   spray_time=spray_time_set+tick_clock;
		   run_time=tick_clock+time_out;
		   proc++;
		}
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 5:
		if(_inp_bit(LOAD_VERTDN)&&_inp_bit(ARM2DN)&&_inp_bit(ARM3DN))
		  {
		    _outp_bit(LOAD_HORN10,OFF);
		    _outp_bit(LOAD_HORN11,ON);

		   _outp_bit(AIR_MAGNET2,OFF);
		   if(_inp_bit(ARM3DN)&&_inp_bit(TRAN_HORNFD))
		   _outp_bit(AIR_CHUCK,OFF);
		   run_time=tick_clock+time_out;
		   proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 6:
		if(_inp_bit(AIR_MAGNET2UP)&&_inp_bit(AIR_CHUCKUP)&&_inp_bit(UNLOADDN))

		  {
		   if(_inp_bit(ARMAT_FULL))    //IF HAS ARMATURE
		     {
		      heat2_on=TRUE;

		     }
		   else
		     {
		      heat2_on=FALSE;
	   //	      _outp_bit(ALARM,ON);
		     }
		   _outp_bit(ARM2,OFF);
		   _outp_bit(ARM3,OFF);

		   _outp_bit(INDUCTION1,ON);
		   _outp_bit(INDUCTION2,ON);
		   run_time=tick_clock+time_out;
		   while(!_inp_bit(INDUCTION1FD)||!_inp_bit(INDUCTION2FD))
		   {

		     if(run_time==tick_clock)
		     _outp_bit(ALARM,ON);
		   }
   //		   if(heat1_on==FALSE)		  //  no armature will stop heating
		   if(cycle>=5)	     // heat five cycles if no arm.
		     {
		      _outp_bit(MAGFORCE1,OFF);
		      _outp_bit(ALARM,ON);
		     }
		   else
		     {
		      _outp_bit(MAGFORCE1,ON);	  //heating
		      _outp_bit(ALARM,OFF);
		     }
		   if(heat2_on==FALSE)		  //  no armature will stop heating
		      _outp_bit(MAGFORCE2,OFF);
		   else
		      _outp_bit(MAGFORCE2,ON);	  //heating

		   heat1_time=heat1_time_set+tick_clock;
		   heat2_time=heat2_time_set+tick_clock;
		   run_time=tick_clock+time_out;
		   proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 7:
		if(_inp_bit(LOAD_HORNBD)&&
		   _inp_bit(ARM1UP)&&_inp_bit(ARM2UP)&&_inp_bit(ARM3UP))
		  {
		   _outp_bit(TRAN_HORN10,OFF);
		   _outp_bit(TRAN_HORN11,ON);
		   run_time=tick_clock+time_out;
		   proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 8:
		if(_inp_bit(TRAN_HORNBD))
		{
		    if(_inp_bit(ARMATURE_CHK))	  //if armature exist
		    {
		     _outp_bit(ARM3,ON);
		     run_time=tick_clock+time_out;
		     proc++;
		    }
		    else	//if no armature
			{
			 proc=12;
			 comm_load_time=tick_clock+10; //prepare for next proc12
			}
		}
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 9:
		if(_inp_bit(TRAN_HORNBD)&&_inp_bit(ARM3DN))
		  {
			_set_delay(5);
			_outp_bit(AIR_CHUCK,ON);

			run_time=tick_clock+time_out;
			proc++;
		  }
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 10:
		_set_delay(20);
		_outp_bit(ARM3,OFF);
		run_time=tick_clock+time_out;
		proc++;
		break;
	    case 11:
		if(_inp_bit(ARM3UP))
		{
		    _set_delay(10);
//		    if(_inp_bit(AIR_CHUCKDN))	  //if no comm. sensor led ON
//		    {
		     _outp_bit(COMM_INSERT,ON);
		     _set_delay(70);
		     _outp_bit(COMM_INSERT,OFF);
		     while(!_inp_bit(COMM_INSERTFD));
		     _set_delay(10);
//		    }
		    run_time=tick_clock+time_out;
		    comm_load_time=tick_clock+10; //prepare for next proc12
		    proc++;
		}
		else
		    if(run_time==tick_clock)
		       _outp_bit(ALARM,ON);
		break;
	    case 12:
		if(_inp_bit(COMM_INSERTFD))
		{
		    if(!_inp_bit(COMM_CHECK))	//if no comm.
		    {
		      switch(step)
		      {
			case 1:
			    if(_inp_bit(COMM_LOADFD))
			    {
			       if(comm_load_end)
			       {
				_outp_bit(COMM_LOAD10,OFF);
				_outp_bit(COMM_LOAD11,ON);
				while(!_inp_bit(COMM_LOADBD));
				comm_load_time=tick_clock+300;
				comm_load_end=0;
			       }
			    }
			    else
				step=2;
			    break;
			case 2:
			    if(_inp_bit(COMM_LOADBD))
			    {
			       if(comm_load_end)
			       {
				comm_load_end=0;
				_outp_bit(COMM_LOAD11,OFF);
				_outp_bit(COMM_LOAD10,ON);
				while(!_inp_bit(COMM_LOADFD));
				comm_load_time=tick_clock+300;
				turn_times++;
			       }
			    }
			    else
				step=1;
			    break;
		      } //switch loop
		     //////
		      if(turn_times==2)
		      _outp_bit(ALARM,ON);
		    }
		    else	 //if comm. exist
			{
			 turn_times=0;	    //reset turn_times counter if comm.had been loaded
			 run_time=tick_clock+time_out;
			 proc++;
			}
		}

⌨️ 快捷键说明

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