📄 core_com.c
字号:
/********************
Filename: CORE_COM.C
History&DateTime:
DateTime: 2007-3-19 17:56
JOB-TODO: 在ScanCAN_3000()加入了命令长度判断 以保证处理下位机上报的命令
DateTime: 2007-3-19 17:56
JOB-TODO: 从下位机修改板周长,上位机在有计算值的界面,下位机OK后 上位机显示刷新
******************************/
#include "ST3000.H"
#include "STRUC_3K.H"
#include "CORE_VGA.H"
#include "3KDEFN.H"
extern int addrpoint;
extern unsigned hClientXms;
extern int g_SimParaID;
extern int vNewPageSEL6,vNewPageSEL7;
extern int UnitSEL,vNewCNL_M1;
extern unsigned char cNewSEL22;
extern BITFlags CtrlUnitFlags[];
extern unsigned char ytzVSELa,ytzVSELb;
extern unsigned char ytzHSELa,ytzHSELb;
extern unsigned char hjSACmdBuffers[];
extern int vCurvErr[MAXCNL_3K][BOX34_W],hCurvErr[MAXCNL_3K][BOX34_W];
extern int vRealHisErr[MAXCNL_3K][BOX34_W],hRealHisErr[MAXCNL_3K][BOX34_W];
/* vRealHisErr & hRealHisErr 专门用来对纵横向误差进行平滑曲线用的临时缓冲 */
extern unsigned RulerLength;
extern int hjCurvHeader[];
extern unsigned char bFlagsINPUT22;
extern unsigned char Scaling,MaxScale;
extern unsigned char trnSEL,mrkSEL; // 标记排列选择ID 和 标记形式选择ID
extern unsigned char vStdSEL6,vSErSEL7,vNewPNoSEL7,vOldPNoSEL7;
extern MSG_STRUCT rmsg1,smsg1;
extern tagEntireStatus EntireStatus;
extern tagVER Edition3K;
extern unsigned char bCANProcessing;
extern void SyncC_Disp22(const int iGetSEL, const unsigned iC);
extern void _Append_jzCmdList(const unsigned char iCNL, const unsigned char iCMD);
extern int REC_sub1com;//2007-4-26 16:17:43
extern int vNewPageSEL5;//2007-6-11 16:00
/**************** extern functions ****************/
extern time_t tmsLastREC;
extern CheckBuffer checkbuffer[];
extern void ReSortCURecv(void);
extern void DrawCfgTable(const int Lx, const int Ty);
extern void DispGateAddr(void);
extern void DispVLapse_M1(const int iCNL);
extern void DispHLapse_M1(const int iCNL);
extern void DispVErr_M1(const int iCNL, const int vDAT);
extern void DispHErr_M1(const int iCNL, const int hDAT);
extern void DispVErr_M23(const int vDAT);
extern void DispHErr_M23(const int vDAT, const int hDAT);
extern void DispVErr_M3(const int iCNL, const int vDAT);
extern void DispHErr_M3(const int iCNL, const int vDAT, const int hDAT);
extern void SyncVEMark_M4(const int iCNL, const unsigned char iVIS);
extern void SyncHEMark_M4(const int iCNL, const unsigned char iVIS);
extern void DrawCurvLines_M4(const int iCNL);
extern void SyncLMark_M34(const int iCNL, const unsigned char iVIS);
extern int GetEntireAuto(const int iSER);
extern void hjFreshScrM7(const int iPAGE, const int iCNL);
extern void SyncSecPrn711(const int iCNL);
extern void SyncLapseMark(const unsigned char visible);
extern void SetLRAdjM1_Activate(const int vi);
extern void SyncMRev76(const int iCNL, const unsigned char vFlags);
extern void SetHWMarkVISABLE(const int iCNL, const unsigned char bVIS);
extern void SetLRAdjVIS_M23(const int vTYPE);
extern void SetLRAdj_M3_VIS(const int iCNL, const int vi);
extern void SyncHCtrl77(const int iCNL);
extern void SetWrkMark23(const int iCNL, const int iSHOW);
extern void SyncTurnsDISP(const int vCNL, const unsigned char vPID);
extern void SyncVMS_68(const int iCNL);
extern void SyncWMark_H34(const int iCNL);
extern void SyncWMark_V34(const int iCNL);
extern void SyncSCRPROT712(const int iCNL);
extern int GetEntireIntelligent(const int iSER);
extern void SyncWholeTurnSEL(const unsigned char iSER, const unsigned char vTURNS);
extern void SetSTurnsBDISP_M22(const int bID, const unsigned char bSELECTED);
extern int GetEntireTurns(const int iSER);
extern void ClearHAdj_M3(const int iCNL);
extern void ClearHErr_M3(const int iCNL);
extern void DrawRuler(void);
extern void DispVAdj_M23(void);
extern void DispHAdj_M23(void);
extern void DispVAdj_M3(const int iCNL);
extern void DispHAdj_M3(const int iCNL);
extern void DispVAdj_M1(const int iCNL, const unsigned char Flags);
extern void DispHAdj_M1(const int iCNL, const unsigned char Flags);
extern void UpdateM6_C9(const int iPAGE, const int iCNL);
extern void UpdateM6_CAB(const int iCNL, char *ptr);
extern void hjYTZButton(const int bID, const unsigned char bSTYLE);
extern void DispYTZFact_M21(const int iCNL);
extern void SetFlags_ytz(const int iCNL, const unsigned char iDAT);
extern void StartStop_button(const int vID, const unsigned char vSTYLE);
extern int GetSCRPROT(const int iCNL);
extern void SetSCRPROT(const int iCNL);
extern void ClearSCRPROT(const int iCNL);
extern int GetEntireFlags(const int iCNL); // [ST3000.C]
extern void SetEntireFlags(const int iCNL, const unsigned char iSAT, const int iVAL);
extern void UpdateScr21(void);//2007-6-11 16:28
int Gen_ytzCAL(int IDstandard);//2007-6-11 16:02
/******************************
描述: 获取当前印刷线速度
返回: 速度值
******************************/
int GetSPEED(void)
{
int t;
time_t ttms0;
unsigned long lVAL=0;
unsigned char array[5]={0};
unsigned uCBan=( (VarST3000.jobAB==1) ? SysSet.CofBanA : SysSet.CofBanB );
/*
读取
*/
if( inportb(0x302)&0x01 )
{
for(t=0; t<5; t++)
{ array[t]=inportb(0x303);}
/*
D2 先置低1ms,然后再置高,表示初始化完成; 1表示数据读完.[/END]
*/
OUT7&=0xFB;
outportb(0x302, OUT7);
delay(1);
ttms0=time(NULL);
while(1)
{
if( !(inportb(0x302)&0x01) )
{ break;}
if( (time(NULL)-ttms0)>=2 )
{
outportb(0x302, OUT7);
delay(10);
break;
}
}
OUT7|=0x04;
outportb(0x302, OUT7);
/*
计算速度
*/
if( !array[0] )
{
g_LINESPEED=0;
return 1;
}
lVAL =array[0];
lVAL<<=8;
lVAL|=array[1];
lVAL<<=8;
lVAL|=array[2];
if( lVAL )
{
g_LINESPEED = uCBan*6000.0;
g_LINESPEED/= ((double)lVAL*3.0/4.0);
return 1;
}
}
return 0;
}
/******************************
描述: 储存文件中指定的内容 Menu1Struct
******************************/
void REC_Sub1(const int iCNL, const int vID)
{
long fBaseOffset=(long)sizeof(Units)*iCNL;
switch(vID)
{
case 1: //unitworksnum
fseek(DataFile, fBaseOffset, SEEK_SET);
fwrite(&unit[iCNL].submenu1.unitworksnum, sizeof(unsigned char), 1, DataFile);
break;
case 2: //波门地址
fseek(DataFile, fBaseOffset+sizeof(unsigned char), SEEK_SET);
fwrite(&unit[iCNL].submenu1.addressofwav, sizeof(int), 1, DataFile);
break;
case 3: //纵向报警
fseek(DataFile, fBaseOffset+sizeof(unsigned char)+sizeof(int), SEEK_SET);
fwrite(&unit[iCNL].submenu1.v_alarm, sizeof(int), 1, DataFile);
break;
case 4: //纵向微调
fseek(DataFile, fBaseOffset+sizeof(unsigned char)+sizeof(int)*2, SEEK_SET);
fwrite(&unit[iCNL].submenu1.v_adjust, sizeof(int), 1, DataFile);
break;
case 5: //横向报警
fseek(DataFile, fBaseOffset+sizeof(unsigned char)+sizeof(int)*3, SEEK_SET);
fwrite(&unit[iCNL].submenu1.h_alarm, sizeof(int), 1, DataFile);
break;
case 6: //横向微调
fseek(DataFile, fBaseOffset+sizeof(unsigned char)+sizeof(int)*4, SEEK_SET);
fwrite(&unit[iCNL].submenu1.h_adjust, sizeof(int), 1, DataFile);
break;
case 7: //bitTurns
fseek(DataFile, fBaseOffset+sizeof(unsigned char)+sizeof(int)*5, SEEK_SET);
fwrite(&unit[iCNL].submenu1.bitTurns, sizeof(unsigned char), 1, DataFile);
break;
case 8: //bitfield
fseek(DataFile, fBaseOffset+sizeof(unsigned char)*2+sizeof(int)*5, SEEK_SET);
fwrite(&unit[iCNL].submenu1.bitfield, sizeof(unsigned char), 1, DataFile);
break;
case 9: //跟踪色序
fseek(DataFile, fBaseOffset+sizeof(unsigned char)*3+sizeof(int)*5, SEEK_SET);
fwrite(&unit[iCNL].submenu1.ColorNum, sizeof(unsigned char), 1, DataFile);
break;
default:
break;
}
VarST3000.FILE_REC=1; tmsLastREC=time(NULL);
}
/******************************
描述: 储存文件中指定的内容 Menu2Struct
******************************/
void REC_Sub2(const int iCNL, const int vID)
{
long fBaseOffset=(long)sizeof(Units)*iCNL+sizeof(Menu1Struct);
switch(vID)
{
case 1: //纵向P值
fseek(DataFile, fBaseOffset, SEEK_SET);
fwrite(unit[iCNL].submenu2.VPlus_P, 3*sizeof(unsigned char), 1, DataFile);
break;
case 2: //纵向D值
fseek(DataFile, fBaseOffset+3*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.VPlus_D, 3*sizeof(unsigned char), 1, DataFile);
break;
case 3: //纵向周期频数
fseek(DataFile, fBaseOffset+6*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.VFps, 3*sizeof(unsigned char), 1, DataFile);
break;
case 4: //纵向不工作区
fseek(DataFile, fBaseOffset+9*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.VDeadZone, 3*sizeof(unsigned char), 1, DataFile);
break;
case 5: //横向P值
fseek(DataFile, fBaseOffset+12*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.HPlus_P, 3*sizeof(unsigned char), 1, DataFile);
break;
case 6: //横向D值
fseek(DataFile, fBaseOffset+15*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.HPlus_D, 3*sizeof(unsigned char), 1, DataFile);
break;
case 7: //横向周期频数
fseek(DataFile, fBaseOffset+18*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.HFps, 3*sizeof(unsigned char), 1, DataFile);
break;
case 8: //横向不工作区
fseek(DataFile, fBaseOffset+21*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.HDeadZone, 3*sizeof(unsigned char), 1, DataFile);
break;
case 9: //波门宽度
fseek(DataFile, fBaseOffset+24*sizeof(unsigned char), SEEK_SET);
fwrite(&unit[iCNL].submenu2.ValueWidth, sizeof(unsigned char), 1, DataFile);
break;
case 10://纵横向平均值
fseek(DataFile, fBaseOffset+25*sizeof(unsigned char), SEEK_SET);
fwrite(unit[iCNL].submenu2.VHaver, 3*sizeof(unsigned char), 1, DataFile);
break;
default:
break;
}
VarST3000.FILE_REC=1; tmsLastREC=time(NULL);
}
/******************************
描述: 储存文件中指定的内容 Menu6Struct
******************************/
void REC_Sub6(const int iCNL, const int vID)
{
long fBaseOffset=(long)sizeof(Units)*iCNL+sizeof(Menu1Struct)+sizeof(Menu2Struct);
switch(vID)
{
case 1: //压轮直径
fseek(DataFile, fBaseOffset, SEEK_SET);
fwrite(&unit[iCNL].submenu6.DofRoll, sizeof(int), 1, DataFile);
break;
case 2: //v计算值
fseek(DataFile, fBaseOffset+sizeof(int), SEEK_SET);
fwrite(&unit[iCNL].submenu6.length, sizeof(long), 1, DataFile);
break;
case 3: //v重复值
fseek(DataFile, fBaseOffset+sizeof(int)+sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.VRepeatValue, sizeof(long), 1, DataFile);
break;
case 4: //v修正值
fseek(DataFile, fBaseOffset+sizeof(int)+2*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.VAdjustValue, sizeof(long), 1, DataFile);
break;
case 5: //v设定值
fseek(DataFile, fBaseOffset+sizeof(int)+3*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.VSetupValue, sizeof(long), 1, DataFile);
break;
case 6: //H重复值
fseek(DataFile, fBaseOffset+sizeof(int)+4*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.HRepeatValue, sizeof(long), 1, DataFile);
break;
case 7: //H设定值
fseek(DataFile, fBaseOffset+sizeof(int)+5*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.HSetupValue, sizeof(long), 1, DataFile);
break;
case 8: //横辊宽度
fseek(DataFile, fBaseOffset+sizeof(int)+6*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.HWidth, sizeof(long), 1, DataFile);
break;
case 9: //横向行程
fseek(DataFile, fBaseOffset+sizeof(int)+7*sizeof(long), SEEK_SET);
fwrite(&unit[iCNL].submenu6.HMaxValue, sizeof(long), 1, DataFile);
break;
default:
break;
}
VarST3000.FILE_REC=1; tmsLastREC=time(NULL);
}
/******************************
描述: 储存文件中指定的内容 SystemSettings
******************************/
void REC_SysSet(const int vID)
{
long fBaseOffset=(long)sizeof(Units)*MAXCNL_3K;
switch(vID)
{
case 1: //系统单元数
fseek(DataFile, fBaseOffset, SEEK_SET);
fwrite(&SysSet.unitscount, sizeof(unsigned), 1, DataFile);
break;
case 2: //A系版辊周长
fseek(DataFile, fBaseOffset+sizeof(unsigned), SEEK_SET);
fwrite(&SysSet.CofBanA, sizeof(unsigned), 1, DataFile);
break;
case 3: //B系版辊周长
fseek(DataFile, fBaseOffset+2*sizeof(unsigned), SEEK_SET);
fwrite(&SysSet.CofBanB, sizeof(unsigned), 1, DataFile);
break;
case 4: //A系标记角度
fseek(DataFile, fBaseOffset+3*sizeof(unsigned), SEEK_SET);
fwrite(&SysSet.ASignTangle, sizeof(unsigned char), 1, DataFile);
break;
case 5: //B系标记角度
fseek(DataFile, fBaseOffset+3*sizeof(unsigned)+sizeof(unsigned char), SEEK_SET);
fwrite(&SysSet.BSignTangle, sizeof(unsigned char), 1, DataFile);
break;
case 6: //寻址允许
fseek(DataFile, fBaseOffset+3*sizeof(unsigned)+2*sizeof(unsigned char), SEEK_SET);
fwrite(&SysSet.AddEnable, sizeof(unsigned char), 1, DataFile);
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -