files_sequential.c
来自「CNC 的开放码,EMC2 V2.2.8版」· C语言 代码 · 共 245 行
C
245 行
/* Classic Ladder Project *//* Copyright (C) 2001-2006 Marc Le Douarain *//* http://www.multimania.com/mavati/classicladder *//* http://www.sourceforge.net/projects/classicladder *//* November 2002 *//* ------------------------------------------------------------------------------------- *//* Load/Save Sequential pages parameters *//* ------------------------------------------------------------------------------------- *//* This library is free software; you can redistribute it and/or *//* modify it under the terms of the GNU Lesser General Public *//* License as published by the Free Software Foundation; either *//* version 2.1 of the License, or (at your option) any later version. *//* This library is distributed in the hope that it will be useful, *//* but WITHOUT ANY WARRANTY; without even the implied warranty of *//* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *//* Lesser General Public License for more details. *//* You should have received a copy of the GNU Lesser General Public *//* License along with this library; if not, write to the Free Software *//* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include "classicladder.h"#include "global.h"#include "files.h"#include "files_sequential.h"#ifdef debug#define dbg_printf printf#elsestatic inline int dbg_printf(char *f, ...) {return 0;}#endifchar ConvTypeOffsetVar(char * RawLine,int *VarType,int * VarOffset){ char * StartOfValue; char * EndOfValue; StartOfValue = RawLine; EndOfValue = RawLine; /* Extract Var Type */ StartOfValue = EndOfValue; do { EndOfValue++; } while(*EndOfValue!='/' && *EndOfValue!='\0'); *EndOfValue++ = '\0'; *VarType = atoi(StartOfValue); /* Extract Var Offset in the type table */ StartOfValue = EndOfValue; do { EndOfValue++; } while( *EndOfValue!=10 && *EndOfValue!='\0'); *EndOfValue++ = '\0'; *VarOffset = atoi(StartOfValue); return TRUE;}char LoadSequential(char * FileName){ FILE * File; char Okay = FALSE; char Line[300]; char * LineOk; int NumStep,NumTransi,ScanStep,NumSeqComment; StrStep * pStep; StrTransition * pTransi; StrSeqComment * pSeqComment; char * pCommentString; int StepData[100]; int ScanData; char * pSearch; 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) { printf("Sequential version not supported...\n"); LineOk = FALSE; } } break; case 'S': ConvRawLineOfNumbers(&Line[1],6,StepData); NumStep = StepData[ 0 ]; pStep = &Sequential->Step[ NumStep ]; pStep->InitStep = StepData[ 1 ]; pStep->StepNumber = StepData[ 2 ]; pStep->NumPage = StepData[ 3 ]; pStep->PosiX = StepData[ 4 ]; pStep->PosiY = StepData[ 5 ]; break; case 'T': ConvRawLineOfNumbers(&Line[1],1+4*NBR_SWITCHS_MAX+3,StepData); ScanData = 0; NumTransi = StepData[ ScanData++ ]; pTransi = &Sequential->Transition[ NumTransi ]; for ( ScanStep=0; ScanStep<NBR_SWITCHS_MAX; ScanStep++ ) pTransi->NumStepToActiv[ ScanStep ] = StepData[ ScanData++ ]; for ( ScanStep=0; ScanStep<NBR_SWITCHS_MAX; ScanStep++ ) pTransi->NumStepToDesactiv[ ScanStep ] = StepData[ ScanData++ ]; for ( ScanStep=0; ScanStep<NBR_SWITCHS_MAX; ScanStep++ ) pTransi->NumTransLinkedForStart[ ScanStep ] = StepData[ ScanData++ ]; for ( ScanStep=0; ScanStep<NBR_SWITCHS_MAX; ScanStep++ ) pTransi->NumTransLinkedForEnd[ ScanStep ] = StepData[ ScanData++ ]; pTransi->NumPage = StepData[ ScanData++ ]; pTransi->PosiX = StepData[ ScanData++ ]; pTransi->PosiY = StepData[ ScanData++ ]; break; case 'C': NumTransi = atoi( &Line[1] ); pTransi = &Sequential->Transition[ NumTransi ]; pSearch = Line; do { pSearch++; } while( *pSearch!=',' ); pSearch++; pSearch++; pSearch++; ConvTypeOffsetVar( pSearch, &pTransi->VarTypeCondi, &pTransi->VarNumCondi ); break; case 'N': pCommentString = ConvRawLineOfNumbers( &Line[1], 4, StepData ); ScanData = 0; NumSeqComment = StepData[ ScanData++ ]; pSeqComment = &Sequential->SeqComment[ NumSeqComment ]; pSeqComment->NumPage = StepData[ ScanData++ ]; pSeqComment->PosiX = StepData[ ScanData++ ]; pSeqComment->PosiY = StepData[ ScanData++ ]; if ( pCommentString!='\0' ) { strcpy( pSeqComment->Comment, pCommentString ); RemoveEndLine( pSeqComment->Comment ); } break; } } } while(LineOk); fclose(File); Okay = TRUE; } return (Okay);}void SaveArray( FILE * File, short int * pArray ){ int ScanStep = 0; do {// if ( ScanStep>0 )// fprintf( File, "-" ); fprintf( File, "%d", pArray[ ScanStep ] ); fprintf( File, "," ); ScanStep++; } while( ScanStep<NBR_SWITCHS_MAX /*&& pArray[ ScanStep ]!=-1*/ );// fprintf( File, "," );}char SaveSequential(char * FileName){ FILE * File; char Okay = FALSE; int NumStep,NumTransi,NumSeqComment; File = fopen(FileName,"wt"); if (File) { fprintf(File,"; Sequential\n"); fprintf(File,"#VER=1.0\n"); for (NumStep=0; NumStep<NBR_STEPS; NumStep++) { StrStep * pStep = &Sequential->Step[ NumStep ]; if ( pStep->NumPage!=-1 ) { fprintf( File, "S%d,%d,%d,%d,%d,%d", NumStep, pStep->InitStep, pStep->StepNumber, pStep->NumPage, pStep->PosiX, pStep->PosiY ); fprintf( File,"\n" ); } } for (NumTransi=0; NumTransi<NBR_TRANSITIONS; NumTransi++ ) { StrTransition * pTransi = &Sequential->Transition[ NumTransi ]; if ( pTransi->NumPage!=-1 ) { fprintf( File, "T%d,", NumTransi ); SaveArray( File, pTransi->NumStepToActiv ); SaveArray( File, pTransi->NumStepToDesactiv ); SaveArray( File, pTransi->NumTransLinkedForStart ); SaveArray( File, pTransi->NumTransLinkedForEnd ); fprintf( File, "%d,%d,%d", pTransi->NumPage, pTransi->PosiX, pTransi->PosiY ); fprintf( File,"\n" ); } } for (NumTransi=0; NumTransi<NBR_TRANSITIONS; NumTransi++ ) { StrTransition * pTransi = &Sequential->Transition[ NumTransi ]; if ( pTransi->NumPage!=-1 ) { fprintf( File, "C%d,0,%d/%d", NumTransi, pTransi->VarTypeCondi, pTransi->VarNumCondi ); fprintf( File,"\n" ); } } for( NumSeqComment=0; NumSeqComment<NBR_SEQ_COMMENTS; NumSeqComment++ ) { StrSeqComment * pSeqComment = &Sequential->SeqComment[ NumSeqComment ]; if ( pSeqComment->NumPage!=-1 ) { fprintf( File, "N%d,", NumSeqComment ); fprintf( File, "%d,%d,%d,", pSeqComment->NumPage, pSeqComment->PosiX, pSeqComment->PosiY ); fprintf( File, "%s", pSeqComment->Comment ); fprintf( File, "\n" ); } } fclose(File); Okay = TRUE; } return (Okay);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?