📄 md142asn.c
字号:
//-------------------------------------------------------------------------
// 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 + -