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