//Auswahl Pruflingsbezeichnungs IF GL_VAR.start_b
THEN GL_VAR.Prueflingsart := '17';
GL_VAR.Prueflingsordner :='bumper';
ELSIF GL_VAR.start_m
THEN GL_VAR.Prueflingsart := '16';
GL_VAR.Prueflingsordner :='mat';
ELSIF GL_VAR.start_e OR GL_VAR.start_end
THEN GL_VAR.Prueflingsart := '15';
GL_VAR.Prueflingsordner :='edge';
END_IF;
//Auswahl Prüfart
IF GL_VAR.Pruefart = 0
THEN GL_VAR.Pruefbezeichnung := 'KWG';
ELSIF GL_VAR.Pruefart = 1
THEN GL_VAR.Pruefbezeichnung := 'KWR';
ELSIF GL_VAR.Pruefart = 2
THEN GL_VAR.Pruefbezeichnung := 'SKR';
ELSIF GL_VAR.Pruefart = 3
THEN GL_VAR.Pruefbezeichnung := 'SKG';
END_IF
//Ordnernamen bestimmen
D1 := LREAL_TO_FMTSTR(GL_VAR.dim_x, 0, TRUE);
D2 := LREAL_TO_FMTSTR(GL_VAR.dim_y, 0, TRUE);
Dim1 := CONCAT (D1,' x ');
Dimensionen:= CONCAT (Dim1,D2);
IF LEN(GL_VAR.Bezeichnung) <=1
THEN
GL_VAR.Pruefling := Dimensionen;
ELSE
GL_VAR.Pruefling := GL_VAR.Bezeichnung;
END_IF
Ordnername_1 := CONCAT (GL_VAR.Prueflingsordner,'\');
Ordnername_2 := CONCAT (Ordnername_1,GL_VAR.Prueflingsart);
Ordnername_3 := CONCAT (Ordnername_2,'.');
Ordnername_4 := CONCAT (Ordnername_3,GL_VAR.Pruefling);
Ordnername_5 := CONCAT (Ordnername_4,'.');
Ordnername_6 := CONCAT (Ordnername_5,GL_VAR.Pruefbezeichnung);
Ordnername_7 := CONCAT (Ordnername_6,'.');
Ordnername_8 := CONCAT (Ordnername_7,GL_VAR.Pruefkoerperbezeichnung);
Ordnername_9 := CONCAT (Ordnername_8,'_');
GL_VAR.Ordnername :=CONCAT (Ordnername_9,Tag_Monat);
//Wandeln der Widerstandsvariable
Widerstand:=REAL_TO_STRING (GL_VAR.Widerstand);
//Informationsdarstellung in der .csv Datei
//Datum auslesen und zusammensetzen
Tag := LREAL_TO_FMTSTR(systemzeit.systemTime.wDay, 0, TRUE);
Monat := LREAL_TO_FMTSTR(systemzeit.systemTime.wMonth, 0, TRUE);
Jahr := LREAL_TO_FMTSTR(systemzeit.systemTime.wYear, 0, TRUE);
Tag_Punkt := CONCAT (Tag,'.');
Tag_Monat := CONCAT (Tag_Punkt,Monat);
Monat_Punkt := CONCAT(Tag_Monat,'.');
Datum := CONCAT (Monat_Punkt,Jahr);
//Uhrzeit auslesen und Zusammensetzen
MilliSekunden := LREAL_TO_FMTSTR(systemzeit.systemTime.wMilliseconds, 0, TRUE);
Sekunden := LREAL_TO_FMTSTR(systemzeit.systemTime.wSecond, 0, TRUE);
Stunde := LREAL_TO_FMTSTR(systemzeit.systemTime.wHour, 0, TRUE);
Minute := LREAL_TO_FMTSTR(systemzeit.systemTime.wMinute, 0, TRUE);
Sekunden_ := CONCAT (Sekunden,'-');
Sekunden_MS := CONCAT (Sekunden_,MilliSekunden);
Stunde_Punkt := CONCAT(Stunde,':');
Stunde_Strich := CONCAT(Stunde,'-');
Uhrzeit := CONCAT (Stunde_Punkt,Minute);
Uhrzeit_Ordner :=CONCAT (Stunde_Strich,Minute);
database[0,0]:= 'Prüfling:';
database[0,1]:= GL_VAR.Pruefling;
database[1,0]:= 'Prueferkuerzel:';
database[1,1]:= GL_VAR.Pruefer;
database[2,0]:= 'Datum:';
database[2,1]:= Datum;
database[3,0]:= 'Zeit:';
database[3,1]:= Uhrzeit;
database[4,0]:= 'Geschwindigkeit:';
database[4,1]:= GL_VAR.geschw_z_str;
database[5,0]:= 'Anmerkung:';
database[5,1]:= GL_VAR.Druck_niO_str;
database[9,0]:= 'Widerstand';
database[9,1]:= 'Druck';
database[9,2]:= 'Weg';
GL_VAR.Zeit_fertig_str := TIME_TO_STRING( GL_VAR.Zeit_fertig);
(*IF GL_VAR.Zeit_ende
THEN
database[6,0]:= 'Benötitgte Zeit';
database[6,1]:= GL_VAR.Zeit_fertig_str;
END_IF*)
IF GL_VAR.start_e_f
THEN
database[7,0]:= 'Seriennummer';
database[7,1]:= GL_VAR.Seriennummer;
END_IF
//Startbedingung Datensammeln Datenbank
IF (GL_VAR.Pruefkoerper) OR ( NOT GL_VAR.Pruefkoerper_ohne_kontakt AND GL_VAR.KMZ_Anzeige > 5 AND GL_VAR.Widerstand < 8000) THEN b_sammeln:=TRUE; ELSE b_sammeln:=FALSE; END_IF;
bWrite:= NOT b_sammeln AND GL_VAR.Direction_z_ret; //OR GL_VAR.Messung_fertig);
bCreate:= GL_VAR.start_b OR GL_VAR.start_e OR GL_VAR.start_m OR GL_VAR.start_end;
IF row>=2501 THEN b_sammeln:=FALSE; row:=0; column:=0; END_IF;
IF NOT b_sammeln THEN
row:=0; Column := 0 ;
ELSE
cyclecount:=cyclecount+1;
IF GL_VAR.Newton > 400 AND GL_VAR.Messung =2
THEN Cyclecount2 := 50;
ELSE Cyclecount2 := 25;
END_IF
IF
cyclecount=Cyclecount2 THEN
cyclecount:=0;
database[row+10,0]:=Widerstand;
database[row+10,1]:=GL_VAR.KMZ_String;
database[row+10,2]:=GL_VAR.hoehe_dif;
row:=row+1;
csvRecord := csvRecord + fbWriter.cbWrite;
END_IF;
END_IF;
IF GL_VAR.Messung_fertig
THEN
row:=0; column:=0;
END_IF
//Systemzeit ermitteln
systemzeit(
sNetID:= ,
bEnable:=TRUE ,
dwCycle:=5 ,
dwOpt:=1 ,
tTimeout:= ,
bValid=> ,
systemTime=> ,
tzID=> );
CASE step OF
0: //Bedingung bWrite erfüllt
IF bWrite THEN
bWrite := FALSE;
bBusy := TRUE;
bError := FALSE;
nErrId := 0;
hFile := 0;
nRow := 0;
nColumn := 0;
step := 1;
END_IF
ePath := SEL( bBootFolder, PATH_GENERIC, PATH_BOOTPATH );
sPathName := SEL( bBootFolder, CONCAT('D:\Pruefberichte\', GL_VAR.Ordnername), sFolderName );
IF bCreate THEN
bCreate := FALSE;
fbCreateDir( bExecute := FALSE );
fbCreateDir(sNetId:= '',
sPathName:= sPathName,
ePath:= ePath,
bExecute:= TRUE,
tTimeout:= DEFAULT_ADS_TIMEOUT,
bBusy=>bCreate_Busy, bError=>bCreate_Error, nErrId=>nCreate_ErrID );
ELSE
fbCreateDir( bExecute := FALSE, bBusy=>bCreate_Busy, bError=>bCreate_Error, nErrId=>nCreate_ErrID );
END_IF
1: //Öffne Quelldatei
//Dateinnamen zusammensetzen
bastelstring(
sFormat:='%s\P%2u_%2u-%2u-%4u_%2u-%2u-%2u.csv',
arg1:=F_STRING(sPathName) ,
arg2:=F_WORD(MAIN.Dimensionen.Punkt) ,
arg3:=F_WORD(systemzeit.systemTime.wDay) ,
arg4:=F_WORD(systemzeit.systemTime.wMonth) ,
arg5:=F_WORD(systemzeit.systemTime.wYear) ,
arg6:=F_WORD(systemzeit.systemTime.wHour) ,
arg7:=F_WORD(systemzeit.systemTime.wMinute) ,
arg8:=F_WORD(systemzeit.systemTime.wSecond) ,
sOut=>sFileName );
//Öffne Datei im Text Mode
fbFileOpen( bExecute := FALSE );
fbFileOpen( sNetId := sNetId, sPathName := sFileName, nMode := FOPEN_MODEWRITE OR FOPEN_MODETEXT,
ePath := PATH_GENERIC, bExecute := TRUE );
step := 2;
2:// Wearten bis open nicht busy *)
fbFileOpen( bExecute := FALSE, bError => bError, nErrID => nErrID, hFile => hFile );
IF NOT fbFileOpen.bBusy THEN
IF NOT fbFileOpen.bError THEN
step := 3;
ELSE//Fehler: Datei nicht gefunden
step := 100;
END_IF
END_IF
3:// Konvertierung in .CSV Format
csvRecord := 0;
sCSVLine := '';
fbWriter.eCmd := eEnumCmd_First; //Schreiben der ersten Zeile
IF nRow <= MAX_CSV_ROWS THEN
FOR nColumn := 0 TO MAX_CSV_COLUMNS BY 1 DO
sCSVField := STRING_TO_CSVFIELD( database[ nRow, nColumn ], FALSE );//Daten aus dem Array lesen
//Neues Feld in Buffer Schreiben
fbWriter( pBuffer := ADR( sCSVLine ),
cbBuffer := SIZEOF( sCSVLine ) - 1,
putValue := sCSVField, pValue := 0,
cbValue := 0,
bCRLF := ( nColumn = MAX_CSV_COLUMNS ));
IF fbWriter.bOk THEN
fbWriter.eCmd := eEnumCmd_Next;
ELSE
step := 100;
RETURN;
END_IF
END_FOR
IF RIGHT( sCSVLine, 2 ) = '$R$L' THEN
sCSVLine := REPLACE( sCSVLine, '$L', 2, LEN( sCSVLine ) - 1 );
END_IF
nRow := nRow+1;//Inkrementieren der Zeile
step := 4;
ELSE
Memset(ADR(Database), 0, SIZEOF(Database));
step := 10;
END_IF
4:(*datei geöffnet; bytebuffer schreiben*)
fbfileopen(bExecute:= FALSE );
fbfilewrite(
sNetId:= ,
hFile:=hFile ,
pWriteBuff:=ADR(sCsvLine),
cbWriteLen:=SIZEOF (sCsvLine) ,
bExecute:= TRUE,
tTimeout:=t#3s ,
bBusy=> ,
bError=> ,
nErrId=> ,
cbWrite=>cbwrite_vrfy );
IF fbfilewrite.bExecute AND NOT fbfilewrite.bBusy THEN
step:=5;
END_IF;
5:
fbfilewrite(bExecute:=FALSE );
fbfileclose(
sNetId:= ,
hFile:=hFile ,
bExecute:=TRUE ,
tTimeout:=t#500ms ,
bBusy=> ,
bError=> ,
nErrId=> );
IF fbfileclose.bExecute AND NOT fbfileclose.bBusy THEN
step := 100;
END_IF;
10:// Erstelle Quell Datei
fbFileClose( bExecute := FALSE );
fbFileClose( sNetId := sNetId, hFile := hFile, bExecute := TRUE );
step := 11;
11:// Warten bis Schließen nicht busy
fbFileClose( bExecute := FALSE, bError => bError, nErrID => nErrID );
IF ( NOT fbFileClose.bBusy) THEN
hFile := 0;
step := 100;
END_IF
100: //Beenden
IF ( hFile <> 0 ) THEN
step := 10;
ELSE
bBusy := FALSE;
step := 0;
END_IF
END_CASE