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

📄 core_com.c

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 C
📖 第 1 页 / 共 5 页
字号:
/********************
 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 + -