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

📄 stecx000.c

📁 机械手的主程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************************************************************/
/* System      : STEC-CA3 For CY Controller                           */
/* File Name   : STECX000.C                                           */
/* Description :                                                      */
/*                                                                    */
/* ------------------------------------------------------------------ */
/*   Copyright(C) Eikosha Co.Ltd. 2002/07/01                          */
/* ------------------------------------------------------------------ */
/* History     : 2002/07/01 Created                                   */
/**********************************************************************/
#include	"iodefine.h"
#include	"StecX.h"
#include	"E2Prom.h"
#include	"StecSeq.h"

unsigned char			MachineType;			/* 婡庬僞僀僾 0:CYS800GII 1:CYWS800GII 2:CYWS1200GII */

extern unsigned char	PwrFail;
extern unsigned char	CurPoint;				/* 尰嵼幚峴偡傞point */
extern volatile unsigned char	curNo;			/* 張棟拞僷儔儊乕僞No. */
extern char				SvSw;					/* 僒乕儃ON/OFF SW */

unsigned short			MainSysAlmC;			/* 儊僀儞僔僗僥儉傾儔乕儉僐乕僪 */

extern unsigned short	PenSysAlmC;				/* 儁儞僟儞僩僔僗僥儉傾儔乕儉僐乕僪 */
extern unsigned short	TmpSVParam[3];			/* 僒乕儃僷儔儊乕僞壖婰壇梡 */
extern signed short		SVParam[55];			/* 僒乕儃僷儔儊乕僞憲庴怣梡僄儕傾 */

extern signed long		DirectivePulse;			/* 巜椷僷儖僗 */
extern signed long		TmpOrgShift;			/* 尨揰僔僼僩検壖婰壇梡 */

struct _SYSINF			SysInf;					/* 僔僗僥儉忣曬 */
struct _SYSPRM			SysPrm;					/* 僔僗僥儉僷儔儊乕僞 */
struct _CONDDEF			Cond;					/* 抜庢姺僨乕僞乮俼俙俵乯 */
struct _CONDDEF			Condbuff;				/* 抜庢姺僨乕僞僶僢僼傽乮俼俙俵乯 */
struct _MACHINEDEF		*CurMachineDef;			/* 婡夿忣曬掕媊 */

extern struct _CONDCOMM	CondComm;				/* 抜庢姺儕僗僩昞帵梡 */

void MaxMinCalc(void);
void DispCheck(void);
void SVQueueCode(char Code);
void ComAns(void);
void PdCom(void);
void AlarmReset(void);

unsigned char SVCom(void);
unsigned char IOCom(unsigned char o_id);


/*--------------------------------------------------------------------*
 * MODULE   : main
 * ABSTRACT : STEC-CA3儊僀儞儖乕僠儞
 * FUNCTION : 
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 02.07.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
void main(void)
{
	PwrFail = 20/1;								/* 弖掆僇僂儞僩弶婜壔 */
	SysInf.Flag.bServoStop = ON;				/* Servo Amp STOP ON */
	SysInf.CurAlarm[0] = 0;					/* 尰嵼傾儔乕儉僐乕僪峏怴 */

	while(SysInf.Flag.bIOReadyFlag == OFF)		/* 揹尮搳擖捈屻100僗僉儍儞懸婡 */
		;

	IORefresh();								/* 幚擖弌椡峏怴 */

	SysInf.Flag.bDownloadMode = _SMDSW18;		/* DIPSW1-8 Download Mode */
	SysInf.Flag.bExtendIO = _SMDSW21;			/* DIPSW2-1 Extend I/O */
	SysInf.Flag.bTrvLimit = _SMDSW23;		/* DIPSW2-3 憱峴儕儈僢僩桳柍僼儔僌 (DIPSW2-3 OFF:昗弨憱峴儕儈僢僩丄DIPSW2-3 ON:徣憱峴儕儈僢僩 */
	SysInf.Flag.bPwrFailDis = _SMDSW24;		/* DIPSW2-4 弖掕専弌桳岠/柍岠愗懼 (DIPSW2-4 OFF:桳岠丄DIPSW2-4 ON:柍岠) */

	if(SysInf.Flag.bDownloadMode == OFF){

		if((_SMDSW11 == OFF) && (_SMDSW12 == OFF))	/* DIPSW1-1 OFF, 1-2 OFF */
			MachineType = 0;					/* 婡夿愝掕1 */
		else if((_SMDSW11 == OFF) && (_SMDSW12 == ON))	/* DIPSW1-1 OFF, 1-2 ON */
			MachineType = 1;					/* 婡夿愝掕2 */
		else if((_SMDSW11 == ON) && (_SMDSW12 == OFF))	/* DIPSW1-1 ON, 1-2 OFF */
			MachineType = 2;					/* 婡夿愝掕3 */
		else									/* DIPSW1-1 ON, 1-2 ON, ON */
			MachineType = 3;					/* 婡夿愝掕4 */

		CurMachineDef = &MachineDef[MachineType];		/* 婡夿愝掕 */

		if(_SMDSW13 == ON && CurMachineDef -> Servo[29] == 0)
			SysInf.RotateDir = 1;				/* DIPSW1-3 ON Motor Direction */
		else if(_SMDSW13 == ON && CurMachineDef -> Servo[29] == 1)
			SysInf.RotateDir = 0;				/* DIPSW1-3 ON Motor Direction */
		else
			SysInf.RotateDir = CurMachineDef -> Servo[29];	/* DIPSW1-3 OFF Motor Direction */

		Alarm(SYSALM1);							/* 儊僀儞俠俹倀僼儔僢僔儏俼俷俵僒儉僄儔乕 */

		if(MainSysAlmC == 0){
			if (E2DataCheck()){						/* 抜庢姺僄儕傾愝掕斖埻僠僃僢僋 */
				/* EEPROM撪僨乕僞堎忢 */
				unsigned char n;
				for(n = 31; n; n--){
					E2CondDefault(n - 1);			/* 抜庢姺僄儕傾弶婜壔 */
					while (E2WriteCheck())			/* 抜庢姺僄儕傾彂崬妋擣 */
						;
				}
				SysPrm.CondUseFlag = 0l;			/* 抜庢姺僄儕傾巊梡僼儔僌僋儕傾 */
				E2SysPrmDefault();					/* 僔僗僥儉僷儔儊乕僞弶婜壔 */
				while (E2WriteCheck())				/* 抜庢姺僄儕傾彂崬妋擣 */
					;
				Alarm(SYSALM4);					/* 抜庢姺撉弌堎忢傾儔乕儉敪惗 */
			}
		}

		E2ReadR(E2ADSYSPRM, (unsigned char *)&SysPrm, sizeof(SysPrm));	/* 僔僗僥儉僷儔儊乕僞撉弌 */
		memcpy(&TmpSVParam[0], &SysPrm.SVParam[0], sizeof(TmpSVParam));	/*  (戞1埵抲侔踢罐草/戞1懍搙侔踢罐草/戞1懍搙侔踢愊暘帪掕悢)壖婰壇愝掕 */
		memcpy(&TmpOrgShift, &SysPrm.OrgShift, sizeof(TmpOrgShift));	/*  尨揰僔僼僩検壖婰壇愝掕 */

		if(MainSysAlmC == 0){
			MaxMinCalc();							/* 億僀儞僩愝掕斖埻嶼弌 */
			DispCheck();							/* 億僀儞僩乛嵟戝嵟彫巊梡僠僃僢僋 */

			{
				unsigned char i;
				for(i = 0;i < 16; i++){					/* 慡億僀儞僩懍搙愝掕抣妋擣 */
					if(Cond.Speed[i] != 0)				/* 懍搙愝掕抣0埲奜偑偁傟偽幉偁傝丄慡偰0側傜幉側偟 */
						SysInf.Flag.bAxisFlag = ON;		/* 幉偁傝 */
				}
			}

			E2CondCommRead((unsigned char *)&CondComm);	/* 僐儊儞僩慡撉弌 */
		}

		while(SysInf.Flag.bBackUpPerm == OFF){
			ComAns();							/* 俹俠捠怣張棟 */
			PdCom();							/* 儁儞僟儞僩捠怣張棟 */
		}

		if(MainSysAlmC != 1){
			/* 僶僢僋傾僢僾僋儕傾 */
			if(SysInf.Flag.bBackUpClr == ON){		/* 僶僢僋傾僢僾僋儕傾僼儔僌妋擣 */
				E2CondDefault(0);					/* 尰嵼偺愝掕抣乮抜庢姺僄儕傾侽乯弶婜壔 */
				while (E2WriteCheck())				/* 抜庢姺僄儕傾彂崬妋擣 */
					;
				E2SysPrmDefault();					/* 僔僗僥儉僷儔儊乕僞弶婜壔 */
				while (E2WriteCheck())				/* 抜庢姺僄儕傾彂崬妋擣 */
					;

				if (E2DataCheck()){					/* 僶僢僋傾僢僾僋儕傾屻嵞搙抜庢姺僄儕傾愝掕斖埻僠僃僢僋 */
					/* EEPROM撪僨乕僞堎忢 */
					unsigned char n;
					for(n = 31; n; n--){
						E2CondDefault(n - 1);			/* 抜庢姺僄儕傾弶婜壔 */
						while (E2WriteCheck())		/* 抜庢姺僄儕傾彂崬妋擣 */
							;
					}
					SysPrm.CondUseFlag = 0l;		/* 抜庢姺僄儕傾巊梡僼儔僌僋儕傾 */
					E2SysPrmDefault();				/* 僔僗僥儉僷儔儊乕僞弶婜壔 */
					while (E2WriteCheck())			/* 抜庢姺僄儕傾彂崬妋擣 */
						;
					Alarm(SYSALM4);				/* 抜庢姺撉弌堎忢傾儔乕儉敪惗 */
				}
				E2ReadR(E2ADSYSPRM, (unsigned char *)&SysPrm, sizeof(SysPrm));	/* 僔僗僥儉僷儔儊乕僞撉弌 */
				memcpy(&TmpSVParam[0], &SysPrm.SVParam[0], sizeof(TmpSVParam));	/*  (戞1埵抲侔踢罐草/戞1懍搙侔踢罐草/戞1懍搙侔踢愊暘帪掕悢)壖婰壇愝掕 */
				memcpy(&TmpOrgShift, &SysPrm.OrgShift, sizeof(TmpOrgShift));	/*  尨揰僔僼僩検壖婰壇愝掕 */
				SysInf.Flag.bBackUpClr = OFF;		/* 僶僢僋傾僢僾僋儕傾僼儔僌俷俥俥 */
			}

			if ((SysPrm.AreaNo >= 1) && (SysPrm.AreaNo <= 30)){
				if(E2CondComp(SysPrm.AreaNo, &Cond) != 0)
					SysInf.Flag.bCondDiff = ON;		/* 斾妑晄堦抳 */
				else
					SysInf.Flag.bCondDiff = OFF;	/* 斾妑堦抳 */
			}

			SeqData.B.SMI[39 / 16].b.b7 = Mem_DPERR;	/* 抜庢姺read error "DPERR" */

			E2CondCommRead((unsigned char *)&CondComm);	/* 僐儊儞僩慡撉傒弌偟 */

			{
				unsigned char i;
				for(i = 0;i < 16; i++){					/* 慡億僀儞僩懍搙愝掕抣妋擣 */
					if(Cond.Speed[i] != 0)				/* 懍搙愝掕抣0埲奜偑偁傟偽幉偁傝丄慡偰0側傜幉側偟 */
						SysInf.Flag.bAxisFlag = ON;		/* 幉偁傝 */
				}
			}

			if(SysInf.Flag.bAxisFlag == ON){		/* 幉偁傝 */
				curNo = 29;							/* 僪儔僀僶僷儔儊乕僞乮夞揮曽岦乯*/
				SVQueueCode(0x30);					/* Servo Parameter Read */
				SysInf.Flag.bSvPrmAccess = ON;		/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
				do{
					SVCom();						/* 僒乕儃傾儞僾捠怣張棟 */
				}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));

				if(SVParam[29] != SysInf.RotateDir){
					SVParam[29] = SysInf.RotateDir;
					curNo = 29;						/* 僪儔僀僶僷儔儊乕僞乮夞揮曽岦乯*/
					SVQueueCode(0x31);				/* Servo Parameter Set */
					SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x33);				/* Servo Parameter Ready */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmReady == OFF) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x32);				/* Servo Parameter EEPROM Write */
					SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞撉彂傾僋僙僗梫媮拞ON */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x33);				/* Servo Parameter Ready */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmReady == OFF) && (MainSysAlmC != SYSALM6));
				}

				curNo = 32;							/* 僪儔僀僶僷儔儊乕僞乮嬱摦嬛巭擖椡桳岠/柍岠乯*/
				SVQueueCode(0x30);					/* Servo Parameter Read */
				SysInf.Flag.bSvPrmAccess = ON;		/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
				do{
					SVCom();						/* 僒乕儃傾儞僾捠怣張棟 */
				}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));

				if(SVParam[32] == SysInf.Flag.bTrvLimit){
					if(SysInf.Flag.bTrvLimit == 0)
						SVParam[32] = 1;
					else
						SVParam[32] = 0;
					curNo = 32;						/* 僪儔僀僶僷儔儊乕僞乮夞揮曽岦乯*/
					SVQueueCode(0x31);				/* Servo Parameter Set */
					SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x33);				/* Servo Parameter Ready */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmReady == OFF) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x32);				/* Servo Parameter EEPROM Write */
					SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞撉彂傾僋僙僗梫媮拞ON */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
					SVQueueCode(0x33);				/* Servo Parameter Ready */
					do{
						SVCom();
					}while((SysInf.Flag.bSvPrmReady == OFF) && (MainSysAlmC != SYSALM6));
				}

				{
					unsigned short	eeprom_para[3];
					unsigned char	i, err = 0;

					memcpy(&eeprom_para[0], &SysPrm.SVParam[0], sizeof(SysPrm.SVParam));
					for(i = 0; i < 3; i++){
						curNo = i + 5;
						SVQueueCode(0x30);
						SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞傾僋僙僗拞ON */
						do{
							SVCom();
						}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
						if ((eeprom_para[i] != SVParam[i + 5]) && (MainSysAlmC != SYSALM6)){
							Alarm(AXISALM55);
							err = 1;
						}
					}
					if(err == 1){
						memcpy(&SVParam[5], &SysPrm.SVParam[0], sizeof(SysPrm.SVParam));
						for(i = 0; i < 3; i++){
							curNo = i + 5;
							SVQueueCode(0x31);
							SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
							do{
								SVCom();
							}while((SysInf.Flag.bSvPrmAccess == ON) && (MainSysAlmC != SYSALM6));
							SysInf.Flag.bSvPrmReady = OFF;
							SVQueueCode(0x33);		/* Servo Parameter Ready */
							do{
								SVCom();
							}while((SysInf.Flag.bSvPrmReady == OFF) && (MainSysAlmC != SYSALM6));
						}
						SVQueueCode(0x32);			/* Servo Parameter EEPROM Write */
						SysInf.Flag.bSvPrmAccess = ON;	/* 僒乕儃僷儔儊乕僞傾僋僙僗梫媮拞ON */
						do{
							SVCom();

⌨️ 快捷键说明

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