files.c

来自「CNC 的开放码,EMC2 V2.2.8版」· C语言 代码 · 共 1,452 行 · 第 1/3 页

C
1,452
字号
    FILE * File;    char Okay = FALSE;    char Line[300];    char * LineOk;    int Params[3];    File = fopen(FileName,"rt");    if (File)    {        do        {            LineOk = fgets(Line,300,File);            if (LineOk)            {                if (Line[0]!=';')                {                    ConvRawLineOfNumbers(Line,2,Params);                    switch(Params[0])                    {                        case BASE_MINS:                        case BASE_SECS:                        case BASE_100MS:                            BufMonostables->Base = CorresDatasForBase[Params[0]].ValueInMS;                            BufMonostables->Preset = Params[1] * BufMonostables->Base;                            strcpy(BufMonostables->DisplayFormat,CorresDatasForBase[Params[0]].DisplayFormat);                            break;                        default:                            BufMonostables->Base = 1;                            BufMonostables->Preset = 10;                            strcpy(BufMonostables->DisplayFormat,"%f?");                            rtapi_print_msg(RTAPI_MSG_ERR, "!!! Error loading parameter base in %s\n",FileName);                            break;                    }rtapi_print_msg(RTAPI_MSG_DBG, "Monostable => Base = %d , Preset = %d\n",BufMonostables->Base,BufMonostables->Preset);                    BufMonostables++;                }            }        }        while(LineOk);        fclose(File);        Okay = TRUE;    }    return (Okay);}char SaveMonostablesParams(char * FileName,StrMonostable * BufMonostables){    FILE * File;    char Okay = FALSE;    int NumMonostable = 0;    File = fopen(FileName,"wt");    if (File)    {        fprintf(File,"; Monostables :\n");        fprintf(File,"; Base(see classicladder.h),Preset\n");        do        {            fprintf(File,"%d,%d\n",ConvBaseInMilliSecsToId(BufMonostables->Base),BufMonostables->Preset/BufMonostables->Base);            BufMonostables++;            NumMonostable++;        }        while(NumMonostable<NBR_MONOSTABLES);        fclose(File);        Okay = TRUE;    }    return (Okay);}char LoadCountersParams(char * FileName){    FILE * File;    char Okay = FALSE;    char Line[300];    char * LineOk;    int Params[1];    int ScanCounter = 0;    File = fopen(FileName,"rt");    if (File)    {        do        {            LineOk = fgets(Line,300,File);            if (LineOk)            {                if (Line[0]!=';')                {                    ConvRawLineOfNumbers(Line,1,Params);                    CounterArray[ ScanCounter++ ].Preset = Params[0];                }            }        }        while(LineOk);        fclose(File);        Okay = TRUE;    }    return (Okay);}char SaveCountersParams(char * FileName){    FILE * File;    char Okay = FALSE;    int ScanCounter;    File = fopen(FileName,"wt");    if (File)    {        fprintf(File,"; Counters :\n");        fprintf(File,"; Preset\n");        for( ScanCounter=0; ScanCounter<NBR_COUNTERS; ScanCounter++ )        {            fprintf(File,"%d\n",CounterArray[ ScanCounter ].Preset);        }        fclose(File);        Okay = TRUE;    }    return (Okay);}char LoadArithmeticExpr(char * FileName){    FILE * File;    char Okay = FALSE;    char Line[300];    char * LineOk;    int NumExpr = 0;    File = fopen(FileName,"rt");    if (File)    {        do        {            LineOk = fgets(Line,300,File);            if (LineOk)            {                if (Line[0]!=';')                {//WIN32PORT					RemoveEndLine( Line );                    strcpy(ArithmExpr[NumExpr].Expr,Line);                    NumExpr++;                }            }        }        while(LineOk);        fclose(File);        Okay = TRUE;    }    return (Okay);}char SaveArithmeticExpr(char * FileName){    FILE * File;    char Okay = FALSE;    int NumExpr;    File = fopen(FileName,"wt");    if (File)    {        fprintf(File,"; Arithmetic expressions :\n");        fprintf(File,"; Compare or Operate ones\n");        for(NumExpr=0; NumExpr<NBR_ARITHM_EXPR; NumExpr++)        {            fprintf(File,"%s\n",ArithmExpr[NumExpr].Expr);        }        fclose(File);        Okay = TRUE;    }    return (Okay);}char LoadSectionsParams(char * FileName){    FILE * File;    char Okay = FALSE;    char Line[300];    char * LineOk;    int NumSection;    StrSection * pSection;    int Params[10];    File = fopen(FileName,"rt");    if (File)    {        do        {            LineOk = fgets(Line,300,File);            if (LineOk)            {                switch(Line[0])                {                    case ';':                        break;                    case '#':                        if(strncmp(&Line[1],"VER=",4)==0)                        {                            if (atoi(&Line[5])>1)                            {                                rtapi_print_msg(RTAPI_MSG_ERR, "Sections file version not supported...\n");                                LineOk = FALSE;                            }                        }                        // #NAMExxx=....                        if(strncmp(&Line[1],"NAME",4)==0)                        {                            Line[ 8 ] = '\0';                            NumSection = atoi( &Line[5] );                            strcpy(SectionArray[ NumSection ].Name, &Line[9]);//WIN32PORT							RemoveEndLine( SectionArray[ NumSection ].Name );                        }                        break;                    default:                        ConvRawLineOfNumbers(Line,6,Params);                        NumSection = Params[ 0 ];                        pSection = &SectionArray[ NumSection ];                        pSection->Used = TRUE;                        pSection->Language = Params[ 1 ];                        pSection->SubRoutineNumber = Params[ 2 ];                        pSection->FirstRung = Params[ 3 ];                        pSection->LastRung = Params[ 4 ];                        pSection->SequentialPage = Params[ 5 ];dbg_printf("Section %d => Name=%s, Language=%d, SRnbr=%d, FirstRung=%d, LastRung=%d, SequentialPage=%d\n", NumSection,pSection->Name, pSection->Language, pSection->SubRoutineNumber, pSection->FirstRung, pSection->LastRung, pSection->SequentialPage);                        break;                }            }        }        while(LineOk);        fclose(File);        Okay = TRUE;    }    return (Okay);}char SaveSectionsParams(char * FileName){    FILE * File;    char Okay = FALSE;    int NumSection;    StrSection * pSection;    File = fopen(FileName,"wt");    if (File)    {        fprintf(File,"; Sections\n");        fprintf(File,"#VER=1.0\n");        NumSection = 0;        do        {            pSection = &SectionArray[ NumSection ];            if ( pSection->Used )                fprintf(File,"#NAME%03d=%s\n", NumSection, pSection->Name);            NumSection++;        }        while(NumSection<NBR_SECTIONS);        NumSection = 0;        do        {            pSection = &SectionArray[ NumSection ];            if ( pSection->Used )                fprintf(File,"%03d,%d,%d,%d,%d,%d\n", NumSection, pSection->Language, pSection->SubRoutineNumber, pSection->FirstRung, pSection->LastRung, pSection->SequentialPage );            NumSection++;        }        while(NumSection<NBR_SECTIONS);        fclose(File);        Okay = TRUE;    }    return (Okay);}char LoadIOConfParams(char * FileName){	FILE * File;	char Okay = FALSE;	char Line[300];	char * LineOk;	StrIOConf * pConfInput = &InfosGene->InputsConf[ 0 ];	StrIOConf * pConfOutput = &InfosGene->OutputsConf[ 0 ];	File = fopen(FileName,"rt");	if (File)	{		do		{			LineOk = fgets(Line,300,File);			if (LineOk)			{				if (Line[0]!=';')				{					/* input/output depending of the first caracter */					if ( Line[0]=='0' )						ConvRawLineOfNumbers(Line+2,6,(int*)pConfInput++);					if ( Line[0]=='1' )						ConvRawLineOfNumbers(Line+2,6,(int*)pConfOutput++);				}			}		}		while(LineOk);		fclose(File);		Okay = TRUE;	}	return (Okay);}char SaveIOConfParams(char * FileName){	FILE * File;	char Okay = FALSE;	int NumConf;	int NbrConf;	int Pass;	StrIOConf * pConf;	File = fopen(FileName,"wt");	if (File)	{		fprintf(File,"; I/O Configuration\n");		for( Pass=0; Pass<2; Pass++)		{			NbrConf = (Pass==0)?NBR_INPUTS_CONF:NBR_OUTPUTS_CONF;			for( NumConf=0; NumConf<NbrConf; NumConf++ )			{				pConf = (Pass==0)?&InfosGene->InputsConf[ NumConf ]:&InfosGene->OutputsConf[ NumConf ];				/* valid mapping ? */				if ( pConf->FirstClassicLadderIO!=-1 )				{					fprintf(File,"%d,%d,%d,%d,%d,%d,%d\n", Pass, pConf->FirstClassicLadderIO,						pConf->DeviceType, pConf->SubDevOrAdr, pConf->FirstChannel,						pConf->NbrConsecutivesChannels, pConf->FlagInverted );				}			}		}		fclose(File);		Okay = TRUE;	}	return (Okay);}#ifdef USE_MODBUSchar LoadModbusIOConfParams(char * FileName){	FILE * File;	char Okay = FALSE;	char Line[300];	int IntDatas[ 6 ];	char * LineOk;	StrModbusMasterReq * pConf = &ModbusMasterReq[ 0 ];	File = fopen(FileName,"rt");	if (File)	{		do		{			LineOk = fgets(Line,300,File);			if (LineOk)			{				if (Line[0]!=';')				{					// if dotted IP address is used, special first field					if ( strchr( Line, '.' ) )					{						char * EndFirstField = strchr( Line, ',' );						// search end of the first field						if ( EndFirstField )						{							ConvRawLineOfNumbers( EndFirstField+1, 5, &IntDatas[1] );							*EndFirstField = '\0';							strcpy( pConf->SlaveAdr, Line );						}						else						{							LineOk = FALSE;						}					}					else					{						ConvRawLineOfNumbers( Line, 6, IntDatas );						sprintf( pConf->SlaveAdr, "%d", IntDatas[0] );					}					if ( LineOk )					{						pConf->TypeReq = (char)IntDatas[ 1 ];						pConf->FirstModbusElement = IntDatas[ 2 ];						pConf->NbrModbusElements = IntDatas[ 3 ];						pConf->LogicInverted = (char)IntDatas[ 4 ];						pConf->OffsetVarMapped = IntDatas[ 5 ];						pConf++;					}				}			}		}		while(LineOk);		fclose(File);		Okay = TRUE;	}	return (Okay);}char SaveModbusIOConfParams(char * FileName){	FILE * File;	char Okay = FALSE;	int NumLine;	StrModbusMasterReq * pConf;	File = fopen(FileName,"wt");	if (File)	{		fprintf(File,"; Modbus Distributed I/O Configuration\n");		for (NumLine=0; NumLine<NBR_MODBUS_MASTER_REQ; NumLine++ )		{			pConf = &ModbusMasterReq[ NumLine ];			/* valid request ? */			if ( pConf->SlaveAdr[0]!='\0' )			{				fprintf(File,"%s,%d,%d,%d,%d,%d\n", pConf->SlaveAdr, pConf->TypeReq,					pConf->FirstModbusElement, pConf->NbrModbusElements, pConf->LogicInverted, pConf->OffsetVarMapped );			}		}		fclose(File);		Okay = TRUE;	}	return (Okay);}#endifchar LoadSymbols(char * FileName){	FILE * File;	char Okay = FALSE;	char Line[300];	char * LineOk;	int NumSymbol = 0;	char *PtrStrings[ 4 ];	int LgtMaxStrings[ 4 ];	StrSymbol * pSymbol;	File = fopen(FileName,"rt");	if (File)	{		do		{			LineOk = fgets(Line,300,File);			if (LineOk)			{				switch(Line[0])				{					case ';':						break;					case '#':						if(strncmp(&Line[1],"VER=",4)==0)						{							if (atoi(&Line[5])>1)							{								rtapi_print_msg(RTAPI_MSG_ERR, "Symbols file version not supported...\n");								LineOk = FALSE;							}						}						break;					default:						pSymbol = &SymbolArray[ NumSymbol ];						PtrStrings[ 0 ] = pSymbol->VarName; LgtMaxStrings[ 0 ] = LGT_VAR_NAME;						PtrStrings[ 1 ] = pSymbol->Symbol; LgtMaxStrings[ 1 ] = LGT_SYMBOL_STRING;						PtrStrings[ 2 ] = pSymbol->Comment; LgtMaxStrings[ 2 ] = LGT_SYMBOL_COMMENT;						PtrStrings[ 3 ] = NULL; LgtMaxStrings[ 3 ] = 0;						ConvRawLineOfStrings( Line, LgtMaxStrings, PtrStrings );						RemoveEndLine( pSymbol->Comment );dbg_printf("Symbol: %s - %s - %s\n", pSymbol->VarName, pSymbol->Symbol, pSymbol->Comment);						NumSymbol++;						break;				}			}		}		while(LineOk);		fclose(File);		Okay = TRUE;	}// call funtion to auto assign symbol names to HAL pins	 // must assign S32IN before S32OUT!			SymbolsAutoAssign(BITIN,"CLinB\0","Auto named bit-in pin \0");	SymbolsAutoAssign(BITOUT,"CLoutB\0","Auto named bit-out pin \0");	SymbolsAutoAssign(S32IN,"CLinS\0","Auto named s32-in pin \0");	SymbolsAutoAssign(S32OUT,"CLoutS\0","Auto named s32-out pin \0");	return (Okay);}//auto assignment of names for symbols of s32in,s32out, bitin //and bitout if not already assigned a name

⌨️ 快捷键说明

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