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

📄 st3000.c

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************
 Filename: ST3000.C
 History: 
 12/10/2006; 改进了屏幕保护开关的默认值=常开
********************/
#include <alloc.h>
#include "ST3000.H"
#include "STRUC_3K.H"
#include "CORE_VGA.H"
#include "CORE_COM.H"

time_t tmsLastREC; // 对最后一次更改内容作的计时时间
tagVER Edition3K; // 记录系统版本信息
tagVarST3000 VarST3000;
tagEntireStatus EntireStatus;
Str6xt Str6xtcs;
SystemSettings SysSet;
Units unit[MAXCNL_3K];
MSG_STRUCT smsg1,rmsg1;
Cmd CommandData[MAXCNL_3K];
CheckBuffer checkbuffer[MAXCNL_3K];
struct setupnum system1[MAXCNL_3K];
FILE *DataFile;
FILE *fpGB16,*fpICO2424,*fpICO3232,*fpICO8840; // 字库与图标库 文件句柄
unsigned char OUT7; // 0x0302H 端口控制字
unsigned char far *pdata1,*pdata2; // 信号A/D缓冲区
unsigned char far *lpImageData,*lpImageMask; // 图标显示掩码和数据缓冲区
unsigned hClientXms=0,hWaveXms=0; // 从扩展内存中申请的客户区以及波形背景的内存句柄(为了提高屏幕刷新的速度)
float g_LINESPEED=0; // 当前系线速度

int g_SimParaID=0;
int lineheader[MAXCNL_3K],displaybar[MAXCNL_3K],displaywidth[MAXCNL_3K];
BITFlags CtrlUnitFlags[MAXCNL_3K];
BITFlags CmdFlags[MAXCNL_3K]; // bit0=6# bit1=7# bit2=8# bit3=9# bit4=a# bit5=b#
int hjCurvHeader[MAXCNL_3K];
int vRealErr[MAXCNL_3K],hRealErr[MAXCNL_3K];
int vCurvErr[MAXCNL_3K][BOX34_W],hCurvErr[MAXCNL_3K][BOX34_W];
int vRealHisErr[MAXCNL_3K][BOX34_W],hRealHisErr[MAXCNL_3K][BOX34_W];


extern int MouseClickFlag,ClickCol,ClickRow;
extern void menu1(void);
extern void menu2(void);
extern void menu3(void);
extern void menu4(void);
extern void menu5(void);
extern void menu6(void);
extern void menu7(void);
extern int GetEntireTurns(const int iSER);
extern int GetEntireAuto(const int iSER);
extern int GetEntireIntelligent(const int iSER);
extern void DrawCfgTable(const int Lx, const int Ty);

/***
 设置整机通道状态
***/
void SetEntireFlags(const int iCNL, const unsigned char iSAT, const int iVAL)
{
    unsigned uVAL=0x0001;
    uVAL<<=iCNL;
    switch( iSAT&0x30 )
    {
    case 0x10: // 纵向报警状态
        if( iVAL )
        {   EntireStatus.EntireVAlarmFlags[iSAT&0x01] |= uVAL;}
        else
        {   EntireStatus.EntireVAlarmFlags[iSAT&0x01] &= (uVAL^0xffff);}
        break;
    case 0x20: // 横向报警状态
        if( iVAL )
        {   EntireStatus.EntireHAlarmFlags[iSAT&0x01] |= uVAL;}
        else
        {   EntireStatus.EntireHAlarmFlags[iSAT&0x01] &= (uVAL^0xffff);}
        break;
    case 0x30: // 丢失报警状态
        if( iVAL )
        {   EntireStatus.EntireLapseFlags[iSAT&0x01] |= uVAL;}
        else
        {   EntireStatus.EntireLapseFlags[iSAT&0x01] &= (uVAL^0xffff);}
        break;
    default:
        break;
    }
}

/***
 查询指定通道状态
***/
int GetEntireFlags(const int iCNL)
{
    unsigned uVAL=((unsigned)0x0001<<iCNL);
    if( (uVAL&EntireStatus.EntireVAlarmFlags[VarST3000.jobAB-1]) ||
        (uVAL&EntireStatus.EntireHAlarmFlags[VarST3000.jobAB-1]) ||
        (uVAL&EntireStatus.EntireLapseFlags[VarST3000.jobAB-1]) )
    {   return 1;}
    return 0;
}

/***
 清除整机的通道工作状态标志
***/
void ClearEntireFlags(void)
{
    int t;
    for(t=0; t<2; t++)
    {
        EntireStatus.EntireLapseFlags[t]=0;
        EntireStatus.EntireVAlarmFlags[t]=0;
        EntireStatus.EntireHAlarmFlags[t]=0;
    }
}

/***
 系统确认
 开机检测到系统配置发生改变时调用该函数
***/
void SysConfirm(void)
{
    int nU0;
    FILE *fpver;
    Bar(200, 100, 1000, 600, 192, 192, 192);
    DrawCfgTable(300, 180);
    if(VarST3000.Language)
    {
        ShowASCMem(768, 200, "WARNING", 0, 0, 255);
        ShowASCMem(768, 250, "SYSTEM NUMBER MAYBE ERROR!!!", 0, 0, 255);
    }
    else
    {
        ShowGB2312(768, 200, "警告", 0, 0, 255);
        ShowGB2312(768, 250, "系统机组编号可能有错!!!", 0, 0, 255);
    }
    Button(768, 365, 95, 40, 0x01, "OK", 192, 192, 192);
    ShowMouse();
    while(1)
    {
        MouseKeyClick();
        if( MouseClickFlag )
        {
            MouseClickFlag=0;
            if( (ClickRow>=365 && ClickRow<=405) &&
                (ClickCol>=768 && ClickCol<=863) )
            {
                //Button(768, 365, 95, 40, 0x10, NULL, 192, 192, 192);
                Rect( 768, 365, 95, 40,1);
                delay(20);
                Button(768, 365, 95, 40, 0x01, "OK", 192, 192, 192);
                for(nU0=0; nU0<MAXCNL_3K; nU0++)
                {
                    system1[nU0].sub1.B1=0;
                    system1[nU0].sub1.B2=0;
                    system1[nU0].sub1.B3=0;
                    system1[nU0].sub1.B4=0;
                    system1[nU0].sub2.B1=0;
                    system1[nU0].sub2.B2=0;
                    system1[nU0].sub2.B3=0;
                }
                for(nU0=1; nU0<=VarST3000.UnitActuals; nU0++)
                {
                    system1[nU0].sub1.B1=checkbuffer[nU0].buffer[0];
                    system1[nU0].sub1.B2=checkbuffer[nU0].buffer[1];
                    system1[nU0].sub1.B3=checkbuffer[nU0].buffer[2];
                    system1[nU0].sub1.B4=checkbuffer[nU0].buffer[3];
                    system1[nU0].sub2.B1=checkbuffer[nU0].buffer[4];
                    system1[nU0].sub2.B2=checkbuffer[nU0].buffer[5];
                    system1[nU0].sub2.B3=checkbuffer[nU0].buffer[6];
                }
                SysSet.unitscount=VarST3000.UnitCounts=MAXCNL_3K;
                fpver=fopen("ks.s", "rb+");
                fseek(fpver, sizeof(tagVER), SEEK_SET);
                fwrite(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, fpver);
                fclose(fpver);
                REC_SysSet(1);
                break;
            }
        }
    }
}

/***
 清除通道状态记录
***/
void ClearhjCNLFlags(void)
{
    int t;
    for(t=0; t<MAXCNL_3K; t++)
    {   CtrlUnitFlags[t].B=0;}
}

/***
 清除波形缓冲区内容
***/
void ClearBuffers(void)
{
    _fmemset(pdata1, 0, 4096L);
    _fmemset(pdata2, 0, 4096L);
}

/***
 对收到的所有通道进行重新排序
***/
void ReSortCURecv(void)
{
	int i,j,n;
	unsigned char	chflags=0;
	for(i=1; i<VarST3000.UnitActuals; i++)
	{
		for(j=1; j<=VarST3000.UnitActuals-i; j++)
		{
			if(checkbuffer[j].unitnumber>checkbuffer[j+1].unitnumber)
			{	chflags=1;}
			else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
					checkbuffer[j].buffer[4] > checkbuffer[j+1].buffer[4])
			{	chflags=1;}
			else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
					checkbuffer[j].buffer[4] ==checkbuffer[j+1].buffer[4] &&
					checkbuffer[j].buffer[5] > checkbuffer[j+1].buffer[5])
			{	chflags=1;}
			else if(checkbuffer[j].unitnumber==checkbuffer[j+1].unitnumber &&
					checkbuffer[j].buffer[4] ==checkbuffer[j+1].buffer[4] &&
					checkbuffer[j].buffer[5] ==checkbuffer[j+1].buffer[5] &&
					checkbuffer[j].buffer[6] > checkbuffer[j+1].buffer[6])
			{	chflags=1;}
			else
			{	chflags=0;}
			//
			if(chflags)
			{
				checkbuffer[0].unitnumber=checkbuffer[j].unitnumber;
				for(n=0; n<7; n++)
				{	checkbuffer[0].buffer[n]=checkbuffer[j].buffer[n];}
				//
				checkbuffer[j].unitnumber=checkbuffer[j+1].unitnumber;
				for(n=0; n<7; n++)
				{	checkbuffer[j].buffer[n]=checkbuffer[j+1].buffer[n];}
				//
				checkbuffer[j+1].unitnumber=checkbuffer[0].unitnumber;
				for(n=0; n<7; n++)
				{	checkbuffer[j+1].buffer[n]=checkbuffer[0].buffer[n];}
			}
		}
	}
}

/***
 显示所有菜单按钮图标
***/
void ShowAllCtrlMenu(void)
{
	disable();
	XPButton(130, 10, 100, 50, 0);
	ShowICO8840(10, 136, 15);
	if(VarST3000.CtrlMenuStatus)
	{
		XPButton(240, 10, 100, 50, 0);
		ShowICO8840(4, 246, 15);
		XPButton(350, 10, 100, 50, 0);
		ShowICO8840(5, 356, 15);
		XPButton(460, 10, 100, 50, 0);
		ShowICO8840(6, 466, 15);
	}
	XPButton(570, 10, 100, 50, 0);
	ShowICO8840(2, 576, 15);
	XPButton(680, 10, 100, 50, 0);
	ShowICO8840(3, 686, 15);
	XPButton(790, 10, 100, 50, 0);
	ShowICO8840(1, 796, 15);
	XPButton(900, 10, 100, 50, 0);
	ShowICO8840(11, 906, 15);
	enable();
}

/***
 设置按钮光标
***/
void ResetCtrlMenuFocus(void)
{
    if(VarST3000.MenuIDSEL!=VarST3000.MenuIDSELOld)
    {
        switch(VarST3000.MenuIDSELOld)
        {
        case 1:
            XPButton(900, 10, 100, 50, 0);
            ShowICO8840(11, 906, 15);
            break;
        case 2:
            XPButton(790, 10, 100, 50, 0);
            ShowICO8840(1, 796, 15);
            break;
        case 3:
            XPButton(680, 10, 100, 50, 0);
            ShowICO8840(3, 686, 15);
            break;
        case 4:
            XPButton(570, 10, 100, 50, 0);
            ShowICO8840(2, 576, 15);
            break;
        case 5:
            if(VarST3000.CtrlMenuStatus)
            {   XPButton(460, 10, 100, 50, 0);
                ShowICO8840(6, 466, 15);
            }
            break;
        case 6:
            if(VarST3000.CtrlMenuStatus)
            {   XPButton(350, 10, 100, 50, 0);
                ShowICO8840(5, 356, 15);
            }
            break;
        case 7:
            if(VarST3000.CtrlMenuStatus)
            {   XPButton(240, 10, 100, 50, 0);
                ShowICO8840(4, 246, 15);
            }
        default: break;
        }
    }
    switch(VarST3000.MenuIDSEL)
    {
    case 1:
        XPButton(900, 10, 100, 50, 1);
        ShowICO8840(11, 906, 15);
        break;
    case 2:
        XPButton(790, 10, 100, 50, 1);
        ShowICO8840(1, 796, 15);
        break;
    case 3:
        XPButton(680, 10, 100, 50, 1);
        ShowICO8840(3, 686, 15);
        break;
    case 4:
        XPButton(570, 10, 100, 50, 1);
        ShowICO8840(2, 576, 15);
        break;
    case 5:
        XPButton(460, 10, 100, 50, 1);
        ShowICO8840(6, 466, 15);
        break;
    case 6:
        XPButton(350, 10, 100, 50, 1);
        ShowICO8840(5, 356, 15);
        break;
    case 7:
        XPButton(240, 10, 100, 50, 1);
        ShowICO8840(4, 246, 15);
    default: break;
    }
    VarST3000.MenuIDSELOld=VarST3000.MenuIDSEL;
}

/***
 系统初始化
 对文件和命令等进行初值设定
***/
void SysInit(void)
{
    int t,CtrlUnitID,CtrlUnitIsOld,CfgUpdate=0;
    FILE *tfp; // temp-file-point.
    unsigned char bEntireTurns=0,bSingleShape=0;
    #ifndef ST3000_TMODE
    unsigned long itimeouts=0L;
    #endif
    /*
    文件装载
    */
    if( (fpGB16=fopen("hzk16", "rb"))==NULL )
    {
        ShowASCMemX(10, 20, 1, 2, "Failed access GBFONT!\n", 0, 0, 255);
        delay(1000); return;
    }
    if( (fpICO2424=fopen("I2424.ICO", "rb"))==NULL )
    {
        ShowASCMemX(10, 20, 1, 2, "Failed access I2424.ICO!", 0, 0, 255);
        delay(1000); return;
    }
    if( (fpICO8840=fopen("I8840.ICO", "rb"))==NULL )
    {
        ShowASCMemX(10, 20, 1, 2, "failed access I8840.ICO!", 0, 0, 255);
        delay(1000); return;
    }
    if( (fpICO3232=fopen("I3232.ICO", "rb"))==NULL )
    {
        ShowASCMemX(10, 20, 1, 2, "failed access I3232.ICO!", 0, 0, 255);
        delay(1000); return;
    }
enter_again: // 系统初次进入 找不到sysdata.dat文件 以默认值创建的重入位置
    if( (DataFile=fopen("sysdata.dat", "rb+"))==NULL )
    {
        DataFile=fopen("sysdata.dat", "wb");
        fwrite(unit, sizeof(Units)*MAXCNL_3K, 1, DataFile);
        fwrite(&SysSet, sizeof(SystemSettings), 1, DataFile);
        fwrite(&Str6xtcs, sizeof(Str6xt), 1, DataFile);
        fclose(DataFile);
        goto enter_again;
    }
    // 成功调用文件sysdata.dat.
    tfp = fopen("ks.s", "rb+");
    if( tfp==NULL )
    {
        tfp=fopen("ks.s", "wb");
        Edition3K.Language=0; // 默认中文
        Edition3K.YtzMachID=1; // 机械结构 [摆臂]
        Edition3K.EncryptDWORD1=0xFFFFFFFFL;
        Edition3K.EncryptDWORD2=0xFFFFFFFFL;
        Edition3K.Year=2007;
        Edition3K.Month=4;
        Edition3K.Day=29;
        Edition3K.AppID=0x304;
        strcpy(Edition3K.WriterName, "陈彦");
        fwrite(&Edition3K, sizeof(tagVER), 1, tfp);
        fwrite(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, tfp);
    }
    else
    {
        fseek(tfp, 0, SEEK_SET);
        fread(&Edition3K, sizeof(tagVER), 1, tfp);
        fread(system1, sizeof(struct setupnum)*MAXCNL_3K, 1, tfp);
    }
    fclose(tfp);
    VarST3000.Language=Edition3K.Language; // 系统操作语言

⌨️ 快捷键说明

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