IMD 1.18: 11/10/2014 15:05:17 blank label voormalige tekst: "optical fibers"      Кÿ:OPTICAL FIBER²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþwÿÿÿÿÿÿÿÿÿÿóÿþÿþÿùÿ¿ÿÿÿÿÿÿÿÿÿÿÿùÿÿÿü?ÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿþþ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿð0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿  .®®RCEDIT20.SÁÁSYSTEÍTEÍSÁbPROCTAÂ9.SÁLÐgREC²lRCEDIT2°Á“RUNTIME3.SÁ!CONFIG3ÁSÁÁÁ*RUNTIME³.SÁÁ)recipåQCONFIG³±ÅSÁîCONFIG3.SÁÁÁÁCOMM2.SÁÁ”P±NTIME1.SÁ†COMM²EGUUS0¹È1.SÁªUUSPCË9N.SÁ¦UUS0¹È9N.SÁ¨      RÜZR×§Hõps; SOFTST : 0..MAXDONR; RATIOLINK : 0..MAXAONR; RATIOVALUE : REAL END; DI = RECORD NAME : ARRAY[1..NAMELENGTH] OF CHAR; S‡Í €3PCODÅ?\+P1c1BR&W RCONFIGURAFE : SAFESTATE; CONTROL : DICONTROL; DOLINK : 0..MAXDONR END; DOUT = RECORD NAME : ARRAY[1..NAMELENGTH] OF CHAR; CONTROL : DOCONTROL; 3@š�°1@��°1°1±1±1F=05ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> INTERLOCK : 0..MAXDONR; CONDLOCK : 0..MAXDONR END; TEMPCONTROL = ARRAY[T_AUTO_MAN..O2_AO] OF INTEGER; LATHECONTROL = ARRAY[L_AUTO_MAN..ROTAT_AO] OF INTEGER; SYSTEM =ÿyour choice: ÿ RECORD AILIST : ARRAY[1..MAXAINR] OF AI; AOLIST : ARRAY[1..MAXAONR] OF AO; DILIST : ARRAY[1..MAXDINR] OF DI; DOLIST : ARRAY[1..MAXDONR] OF DOUT; TE3±1±1F=N5ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>MP : TEMPCONTROL; LATHE : LATHECONTROL END; MAXSTRING = ARRAY[1..MAXLENGTH] OF CHAR; IOPORTTYPE= ARRAY[1..2] OF CHAR; VAR I,IOERROR : INTEGER; CHOICE : CHAR; SYSTEMENTRY :3°1@6#6#°1°1'05$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FILE OF SYSTEM; $SUBTITLE READ ONE CHARACTER FROM KEYBOARD FUNCTION getchoice : CHAR; VAR C : CHAR; BEGIN WRITE('':10,'your choice: '); PROMPT; GET(INPUT); IF EOLN(INPUT) THEN C := '0' ELSE READ(C); READLN; getchoice := C END; C = change, D = delete, = exitÿ{getchoice} FUNCTION getchar : CHAR; VAR ANSWER : CHAR; BEGIN GET(INPUT); IF EOLN(INPUT) THEN ANSWER := 'N' ELSE READ(ANSWER); READLN; getchar := ANSWER; END; {getchar} FUNCTION getanswer : CHAR; BEGIN WRITELN; WRITELN('C = change, D =3Ñô±1±1F'±=1%±ø2úØ1 Ø1 (±1"òÒ�UF±1 Ôö±=1%DÔöÖð&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     3vrÿù±1±1F+±=1%±þ2ôÞ1 Þ1 (±1"òÒ�UF ±1 vÿùrÿô±=1%Dvÿùrÿôvÿôr 9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>R TOO LARGE'); 6 : WRITELN('NUMBER < 0'); OTHERWISE: WRITELN('ERROR') END {X} END; {error} PROCEDURE stars; VAR I : INTEGER; BEGIN WRITELN; FOR I := 0 TO 75 DO WRITE('*'); WRITELN; WRITELN; END; {stars} PROCEDURE clearscreen; VAR CL R©ìt„Ÿ°ÄÚè@5¯ RW(bq •À delete, = exit'); getanswer := getchoice; END; {getanswer} $SUBTITLE READ INTEGER, READ REAL, READ STRING FUNCTION readint(F:INTEGER) : INTEGER; VAR I,OLD,IOERROR : INTEGER; BEGIN OLD :=F; GET(INPUT); IF NOT EOLN(INPUT) THEN BEGIN I RW+×ïþV0OABORT (INPUT,FALSE); READLN (INPUT,I); IOERROR := IORESULT(INPUT); IF IOERROR <> 0 THEN BEGIN READLN; I := OLD; END; IOABORT(INPUT,TRUE); END {IF} ELSE I:= OLD; readint := I END; {readint} FUNCTION read‡Í €3PCODÅ?\+P1c1BR&W RCONFIGURreal(F:REAL) : REAL; VAR IOERROR : INTEGER; R,OLD : REAL; BEGIN OLD :=F; GET(INPUT); IF NOT EOLN(INPUT) THEN BEGIN IOABORT (INPUT,FALSE); READLN (INPUT,R); IOERROR := IORESULT(INPUT); IF IOERROR <> 0 THEN BEGIN 3@š�°1@��°1°1±1±1F=05ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> READLN; R := OLD END; IOABORT(INPUT,TRUE); END {IF} ELSE R:= OLD; readreal := R; END; {readreal} PROCEDURE readstring (VAR INP: MAXSTRING; VAR C: BOOLEAN); {READ STRINGS OF MAX 50 CHARACTERS} VAR F : FILE OF MAXSTRING; I : Iÿyour choice: ÿNTEGER; BEGIN RESET (F,'/TERM'); GET (F); C := (F^[1] <> ' '); {if no char_string is entered F^[1] = blank} IF C {a new string is entered} THEN FOR I := 1 TO MAXLENGTH DO INP[I] := F^[I] END; {readstring} $SUBTITLE ERROR, CLEARSCREEN, AI_AO_3±1±1F=N5ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>DI_DO PROC'S PROCEDURE error(X : INTEGER); BEGIN CASE X OF 1 : WRITELN('INPUT ERROR'); 2 : WRITELN('NUMBER TOO LARGE'); 3 : WRITELN('TOO MANY CHARACTERS'); 4 : WRITELN('INPUT IS NOT A NUMBER'); 5 : WRITELN('NUMBER < 0 O3°1@6#6#°1°1'05$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     C = change, D = delete, = exitÿ3 @6060°1@1££°1°1@E¡¡°1°12Î2Ì04ÌFÐ�…D‡Ñ‘"N2Α"N72Α"Nx5Í4Í.DБ…DHГ…DBЕ…D<Ж…D6‹AT6AE>ÿÚÿàÿìÿæÑ’"Nx=OPÐyˆFÐÐy‘…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3Ñô±1±1F'±=1%±ø2úØ1 Ø1 (±1"òÒ�UF±1 Ôö±=1%DÔöÖð&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>choose AO, AI, DO, DI, TC (temperature control),ÿ LC (lathe control)ÿor to exit: ÿ362qÿÂ=5Í6 qÿÈ2¾@@12¾1Ñ2Α"Nx= T*„ÑxFB‘qÿ¼62qÿºuÿ¼uÿºeF/Ðuÿ¼‹2"N2Îuÿ¼‹2"Nx„uÿ¼uÿºaF uÿ¼#qÿ¼DÿÑ2¾19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 OöÓÑy‹ "BòÑy’°1 Òœš°1Òz™“°1ÒJ š•°1ÒyD,@¢ °1D3@¢ °1D(@"¢ °1D@3¢ °1D‹EÿÊÿàÿëÿÕÒyD,@Dž›°1D4@Pž›°1D)@\ž›°1D@hž›°1D‹E>ÿÉÿÔÿßÿêÒy™°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/TERM ÿF ÿAI only ÿsetpoint controlÿAI sets DO if < ÿAI sets DO if > ÿdon't care ÿband limit ÿupper limitÿlower limitÿ3ÑDb@››°1°1Dp@   °1°1Db@££°1°1DT@1¥¥°1°1DF@G§§°1°1D8@_šš°1°1D*@j••°1°1DAFÿê‘E>ÿŽÿœÿªÿ¸ÿÆÿÔ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 OúSÑy‹"B!òÑy’°1 Òœš°1Òz™“°1ÒJ š•°1Òy”°1 Òy˜°1 Òyš°1 Òy˜°1 ÒzŸ‘°1°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>INPUT ERRORÿNUMBER TOO LARGEÿTOO MANY CHARACTERSÿINPUT IS NOT A NUMBERÿNUMBER < 0 OR TOO LARGEÿNUMBER < 0ÿERRORÿ3 OücÑy‹"BòÑy’°1 Òœš°1Òy D@–”°1D@–”°1D‹EÿàÿëÒy DB@ ¢š°1DN@¢š°1DC@ ¢š°1D8@+¢š°1D-@6¢š°1D"@A¢š°1D‹E>ÿ³ÿ¾ÿÉÿÔÿßÿêÒy™°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3°1�ò6KôÒÔeF=*‘°1ÒÔaFÒ#òDÿî°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>low ÿhighÿignore ÿabort ÿalarm ÿhold ÿtime resetÿbuzzer ÿ3 «+5ÿ4ÿ‘°1=X‘°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3OýãÑy‹ "BòÑy’°1 Òœš°1Òy D@¡Ÿ°1D@¡Ÿ°1D‹EÿàÿëÒy ”°1 Òy›°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     normally closedÿnormally open ÿÿANALOG OUTPUTSÿNR NAME MAX. VALUE UNIT ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿ3@ªª°1?ã�By’°1 °1@££°1@/—�°1?ã‘By’°1 °1@0¥¥°1@F•�°1?ã’By’°1 °1@Gªª°1?ã“By’°1 °1@bªª°1?ã”By’°1 °1@}¦¦°1@””�°1?ã•By’°1 °1@•¤¤°1@ª–�°1?ã–By’°1 °1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>30@¤�°1@žž°1°10@6464°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>auto/manual switch is DI:ÿflame sensor is DI:ÿÿflame ignition is DO:ÿÿtemperature control is AI:ÿpreform temperature is AO:ÿHydrogen burner is AO:ÿÿOxigen burner is AO:ÿÿÿDIGITAL INPUTSÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿ3@©©°1@–�°1?ñ�By’°1 °1@¯¯°1?ñ‘By’°1 °1@;¯¯°1?ñ’By’°1 °1@[¨¨°1@t—�°1?ñ“By’°1 °1@u¥¥°1@‹š�°1?ñ”By’°1 °1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>30@¤�°1@ŸŸ°1°10@6A6A°1°1u òu u yš…2þ0Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>auto/manual switch is DI:ÿÿEnd switch gasinlet side is DI:ÿEnd switch exhaust side is DI: ÿLathe translation is AO:ÿÿLathe rotation is AO:ÿÿÿDIGITAL OUTPUTSÿNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿ30@¤�°1@��°1°10@6#6#°1@36*6*°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>34F°10@¤�°1@¯¯°1°100°1°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ÿANALOG INPUTSÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿÿTEMPERATURE CONTROL ASSIGNMENTSÿ30@¤�°1@žž°1°10@6#6#°1@46*6*°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     ÿLATHE CONTROL ASSIGNMENTSÿXXXXXXXXXXÿXXXXXÿ30 @¬¬°1°1'05þ4þ=YP*5ý@««°1°1'05þ4ýF[°@9@>12ä2æ2è2ê2ì2î1)0ì‘°1 =/‘°1ê‘°1 =/‘°1è‘°1 @H©ž°1°1°1@W¤�°1@X¬¬°1°10›ö4þ=NPF<°@u@|12ò2ð0 ÞˆF&@†¡¡°1°1‘ü(Ü0ü@˜ŸŸ°1°1‘ú(Ú0ú0 4ýF °@¨@­1ÞDÈDÝÚÜ]ÚˆþÿÿÿÜ>>>>>3OücÑy‹"BòÒ@7 ÒJ ‘…ÒJ �…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ˆþÿÿÿ*5ü4üF 2úÜÚ4ý*0D¬ÚÜ]Úˆþÿ܈þÿ*5ü4üF 2úÜÚ4ý*0D„ÚÜ]Úˆþÿÿ܈þÿÿ*5ü4üF 2úÜÚ4ý*0DZÚÜ]Úˆþÿÿÿ܈þÿÿÿ*5ü4üF 2úÜÚ4ý*0D.2ú4ý*0D#2ú4ý*0D‹Eÿ.ÿ1ÿbÿŠÿ´ÿàÿëÞ�QFþÇDQ4ýF0 ‘ü6 ú2úÜÚ4ý*0 ú2úÜÚ4ý*0¨ú2úÜÚ4ý>XXXXXXXXXXÿ*06 ú2úÜÚ4ý*02ú4ý*02ú4ý*0°14ýF °@·@¾1D°1@È6)6)°1°1±1 $>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3OýãÑy‹ "BòÒ@7 ÒJ �…Òy �YÒy 6 aFOýãÒy ‹ "BJ �…ÒJ �…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>OUTPUT ON LINEPRINTER (Y/N/)ÿDISPLAY ALL ENTRIES? (Y/N/)ÿ/P1 ÿOUTPUT ÿOPTICAL FIBERSÿÿSYSTEM CONFIGURATION TABLE ÿ/TERM ÿOUTPUT ÿSTARTING NUMBER: ÿENDING NUMBER: ÿ/P1 ÿOUTPUT ÿ/TERM ÿOUTPUT ÿpress to return to the job selectionÿXXXXXXXXXXÿ3OöÓÑy‹ "BòÒ@7 ÒJ @ 7ÒJ� †ÒJ�…ÒJ�…ÒJ�…Òy�YÒy aFOúSÒy‹"B!J�…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3�ò–ôÒÔeF?ãÒ‹B�…ÒÔaFÒ#òDÿç$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XXXXXXXXXXÿXXXXXÿ3�ò”ôÒÔeF?ñÒ‹B�…ÒÔaFÒ#òDÿç$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3OúSÑy‹"B!ôÔ@7 ÔJ @ 7ÔJ� †ÔyòÔJ�…ÔJ�…ÔJ�…ÔJ�…ÔJ� †Ò�YÒ6 aF2þ0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3‘ò6 ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò¨ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò6 ôÒÔeF2þ0ÒÔaFÒ#òDÿï00$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     3OöÓÑy‹ "BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @ŸŸ°1°1uÿÈJ)uÿÈz0†@––°1°12Î2Í04ÍFuÿÈJ ‘"N2Α"N7@��°1°1@,§§°1°1@D6'6'°1°1@l6'6'°1°1@”žž°1°1'05Ì4Ì.D6DPuÿÈJ“…DEuÿÈJ‘…D:uÿÈJ’…D/uÿÈJ�…D$‘0DA04>>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFÿï60E>ÿ·ÿºÿÅÿÐÿÛ@£  °1°1@´¡¡°1°1@Æ  °1°1@×¢¢°1°1@ꢢ°1°1'05Ì4Ì.D6DNuÿÈJ�…DCuÿÈJ‘…D8uÿÈJ’…D-uÿÈJ“…D"‘0DA04Fÿñ60E>ÿ¹ÿ¼ÿÇÿÒÿÝ@¥¥°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX R (c¾ NUMBER := READINT(TEMP [FLAME_DI]); IF NUMBER IN [0..MAXDINR] THEN TEMP [FLAME_DI] := NUMBER; WRITE('flame ignition is DO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [LITFLAME]); IF NUMBER IN [0..MAXDONR] TXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXHEN TEMP [LITFLAME] := NUMBER; WRITE('temperature control is AI: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [TEMP_AI]); IF NUMBER IN [0..MAXAINR] THEN TEMP [TEMP_AI] := NUMBER; WRITE('preform temperature is AO: '); XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX PROMPT(OUTPUT); NUMBER := READINT(TEMP [PREF_AO]); IF NUMBER IN [0..MAXAONR] THEN TEMP [PREF_AO] := NUMBER; WRITE('hydrogen burner is AO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [H2_AO]); IF NUMBER XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXIN [0..MAXAONR] THEN TEMP [H2_AO] := NUMBER; WRITE('oxigen burner is AO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [O2_AO]); IF NUMBER IN [0..MAXAONR] THEN TEMP [O2_AO] := NUMBER; END {WITH} END; {TEMP_change} PROCEDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX RožXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0000000000)R)R R¤R¤     d LATHE ONE Ì Ì Ì Ìÿ3 f ™ ÿš3TIME ZERO  ÿÿz0†D‘0D7•0D0AFÿñE>ÿ”ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨uÿÆy�UF�OöÓuÿÆy‹ "BuÿÆ7 OöÓuÿÆy‹ "BJ uÿÆJ 7OöÓuÿÆy‹ "BJuÿÆz†OöÓuÿÆy‹ "BJ‘…OöÓuÿÆy‹ "BJ“…OöÓuÿÆy‹ "BJÑy‹…&>>>>>>>>>>>>>>> TIME THREEBLOCK 4-6 3Íf3NAME: ÿMAXIMUM VALUE: ÿUNIT: ÿLINK WITH AI NUMBER: ÿLINK WITH DO NUMBER: ÿSOFTSTART NUMBER: ÿRATIOLINK WITH AO NUMBER: ÿRATIOVALUE: ÿo ÿÿÿTIME 5 3!OücÑy‹"BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @¡¡°1°1@šš°1°1@$››°1°1'05Ì4Ì.D D3uÿÈJ �…D(uÿÈJ ‘…D‘0DA02Fÿñ60EÿÐÿÓÿÞ@0¡¡°1°1@B��°1°1@Pœœ°1°1@]œœ°1°1@j››°1°1@v¡¡°1°1@ˆ��°1°1'05Ì4Ì.DMDhuÿÈJ �>END 7 ÿ ÿ ÿ ÿÿ…D\uÿÈJ ‘…DQuÿÈJ ’…DFuÿÈJ “…D;uÿÈJ ”…D0uÿÈJ •…D%‘0DA06Fÿñ60Eÿ£ÿ¦ÿ²ÿ½ÿÈÿÓÿÞ@–¥¥°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NAME: ÿMAXIMUM VALUE: ÿUNIT: ÿTYPE OF LOOP:ÿ (1) setpoint controlÿ (2) AI switches DO if below setpointÿ (3) AI switches DO if above setpointÿ (4) AI onlyÿTYPE OF CONTROL:ÿ (1) don't careÿ (2) bandlimitÿ (3) upper limitÿ (4) lower limitÿNAME: ÿSAFE STATE: ÿ (1) lowÿ (2) highÿTYPE OF CONTROL: ÿ (1) ignoreÿ (2) abortÿ (3) alarmÿ (4) holdÿ (5) time resetÿ (6) buzzerÿLINK WITH DO NUMBER: ÿLINK WITH DO NUMBER: ÿ3"OýãÑy‹ "BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @¨¨°1°1@ ¦¦°1°1@7¤¤°1°1'05Ì4Ì.D D3uÿÈJ �…D(uÿÈJ ‘…D‘0DA02Fÿñ60EÿÐÿÓÿÞ@Lªª°1°1(uÿÈy 0qÿÊuÿÊDuÿÈy �UFOýãuÿÈy ‹ "BJ �…uÿÈJ uÿÊ‹ …DšuÿÊÑyUF2uÿÈJ >3 OúSÑy‹"B!qÿÆ@––°1°12Î2Ì04ÌF uÿÆ‘"N2Α"N7 @ŸŸ°1°1uÿÆJ)uÿÆz0†@––°1°12Î2Ì04ÌFuÿÆJ ‘"N2Α"N7@¥¥°1°1(uÿÆy0qÿÈuÿÈD:uÿÆyqÿÊuÿÆJ�…uÿÊ�UF2Ê0DiuÿÆJuÿÈ‹ …DW•0DPA FÿñE>!ÿ¸ÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙuÿÊ‹ …OýãuÿÈy ‹ "BJ Ñy‹ …D‘0DV•0DOA FÿñE!ÿtÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨@g6&6&°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿuÿÊÑyUFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙ@4¥¥°1°1(uÿÆy0qÿÈuÿȈÿÿÿÿFuÿÆJuÿÈ‹ …D•0@J¢¢°1°1(uÿÆy0qÿÈuÿȈÿÿÿÿFuÿÆJuÿÈ‹ …D•0@]ªª°1°1(uÿÆy0qÿÈuÿÈD^uÿÆJ�…uÿÆJ� †DzuÿÈÑyUF1uÿÆJuÿÈ‹…@xœœ°1°1uÿÆJ)uÿÆ>>>     3#@ªª°1°1(?ã�By0òÒˆÿÿÿF?ã�BÒ…@¤¤°1°1(?ã‘By0òÒˆÿÿÿF?ã‘BÒ…@0¦¦°1°1(?ã’By0òÒˆÿÿÿÿF?ã’BÒ…@G««°1°1(?ã“By0òÒˆÿÿÿÿF?ã“BÒ…@c««°1°1(?ã”By0òÒˆÿÿF?ã”BÒ…@§§°1°1(?ã•By0òÒˆÿÿ>0000000000šÍš fšfF?ã•BÒ…@—¥¥°1°1(?ã–By0òÒˆÿÿF?ã–BÒ…$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>è TIMED UšfUUÿ Ì Ì Ì Ì«VH=VLATHECONTRÿÿÿÿÿÿ ™ä U3 Uauto/manual switch is DI: ÿflame sensor is DI: ÿflame ignition is DO: ÿtemperature control is AI: ÿpreform temperature is AO: ÿhydrogen burner is AO: ÿoxigen burner is AO: ÿV?þ9ͤ ÌBLOCK TWO U… U š33$@©©°1°1(?ñ�By0òÒˆÿÿÿÿF?ñ�BÒ…@6 6 °1°1(?ñ‘By0òÒˆÿÿÿF?ñ‘BÒ…@;®®°1°1(?ñ’By0òÒˆÿÿÿF?ñ’BÒ…@Z¨¨°1°1(?ñ“By0òÒˆÿÿF?ñ“BÒ…@s¥¥°1°1(?ñ”By0òÒˆÿÿF?ñ”BÒ…$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>¤ Ì3f¤ ÌTIME 4  'D' : DO_DELETE(PORTSELECT); '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END {4} END {CASE} UNTIL PORTSELECT = 0 ELSE CASE T �DISP_DIS t DISPTIMEžDISP_PRO�1DISP_SYS —DISP_STA)ÒYPESELECT OF 0 : ; 5 : BEGIN TEMP_display; ANSWER := getanswer; CASE ANSWER OF 'C' : TEMP_change; 'D' : TEMP_delete; ND; 5500 5505 5510 PROCEDURE hold_proc; 5515 {changes the procstatus to hold if requested} 5520 BEGIN 5525 WITH STATUS DO 5530 BEGIN 5535 IF PROCSTATUS = RUN THEN 5540 BEGIN 5545 PROCSTATUS := HLD; 5550 WRITELN('hold done'); '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END; {5} 6 : BEGIN LATHE_display; ANSWER := getanswer; CASE ANSWER OF ' 5555 END {IF} 5560 ELSE 5565 BEGIN 5570 WRITELN('hold is only allowed when process is running'); 5575 WRITE('process status is:'); 5580 disp_procstatus; 5585 WRITELN; 5590 END; {ELSE} 5595 END; {WITH}  Rxˆ R,�      ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ (TYPESELECT IN [1..3]) THEN TYPESELECT := TYPESELECT +1; END {ELSE}; END; {AI_AO_DI_DO} $SUBTITLE DISPLAY THE ANALOG INPUTS/OUTPUTS PROCEDURE AI_display(VAR PORTNR :INTEGER); BEGIN WITH SYSTEMENTRY^.AILIST[PORTNR] DO BEGIN WRITEÿÿÿÿÿÿÿÿÿÿÿÿÿÿFuÔy‹…u Ôy…ÑÒ…ÐxÒ61QFÿ°9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(PORTNR:2, NAME:12, SCALE:9:3, UNIT:10); CASE LOOP OF AIONLY : WRITE('AI only ':18); SETPOINT : WRITE('setpoint control':18); AIDOBELOW: WRITE('AI sets DO if < ':18); AIDOABOVE: WRITE('AI s R,“ets DO if > ':18); END; {LOOP} CASE CONTROL OF DONTCARE : WRITE('don''t care ':14); BANDLIMIT : WRITE('band limit ':14); UPPERLIMIT : WRITE('upper limit':14); LOWERLIMIT : WRITE('lower limit':14) END {AICONTROL}; WRITELN(DOLINK:9) END {WITH} END {AI_display}; PROCEDURE AO_display(VAR PORTNR :INTEGER); BEGIN WITH SYSTEMENTRY^.AOLIST[PORTNR] DO BEGIN WRITE(PORTNR:2, NAME:12, SCALE:9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ; BEGIN CASE X OF 1 : WRITELN('INPUT ERROR'); 2 : WRITELN('ENTRY TOO LARGE'); 3 : WRITELN('new value exceeds the maximum value'); 4 : WRITELN('INPUT IS NOT A NUMBER'); 5 : WRIRa�)EAR : CHAR; BEGIN CLEAR := CHR($1B); {ESCAPE CHAR} WRITELN(CLEAR,'X') {ESC,X CLEARS THE EXORTERM SCREEN} END; {clearscreen} PROCEDURE AI_AO_DI_DO (VAR TYPESELECT:INTEGER;VAR IOPORT:IOPORTTYPE); VAR INPUTSTRING : MAXSTRING; CH : CHAR; CHANGE0000000000 : BOOLEAN; BEGIN WRITE('choose AO, AI, DO, DI, TC (temperature control),'); WRITELN(' LC (lathe control)'); WRITE('or to exit: '); PROMPT(OUTPUT); READSTRING (INPUTSTRING, CHANGE); IF NOT CHANGE THEN TYPESELECT:=0 ELSE BEGIN TIME0 U[™ XXXXXXXXXXIOPORT[1 FOR 2] := INPUTSTRING[1 FOR 2]; CH := INPUTSTRING[1]; CASE CH OF 'A' : TYPESELECT := 1; 'D' : TYPESELECT := 3; 'T' : TYPESELECT := 5; 'L' : TYPESELECT := 6; END {CASE CH}; IF (IOPORT[2] ='O') AND XXXXXXXXXXXXXXXXXXXX      šš33ÍÍffXXXXXXXXXXR = 24; MAXDONR = 32; OFF1 = -1; OFF2 = 47; OFF3 = 95; OFF4 = 143; MAXLENGTH = 70; STEPSINBLOCK = 70; MAXTAB = 70; MAXFUNC = 50; MAXRECORD = 49; C' : LATHE_change; 'D' : LATHE_delete; '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END {6} END {CASE} UNTIL TYPESELECT = 0 END {EDITENTRY}; $SUBT JOBLENGTH = 10; PAGELENGTH =59; TYPE AICONTROL = (DONTCARE,BANDLIMIT,UPPERLIMIT,LOWERLIMIT); AI_LOOP = (AIONLY,AIDOBELOW,AIDOABOVE,AISETSAO,SETPOINT); DICONTROL = (IGNORE,ABORT,ALARM,HOLD,TIMERESET,BUZZER); SAITLE START OF MAIN PROGRAM BEGIN {CONFIGURATOR} IOABORT (SYSTEMENTRY,FALSE); clearscreen; RESET (SYSTEMENTRY,'/D1/SYSTEM'); IOERROR := IORESULT(SYSTEMENTRY); IOABORT (SYSTEMENTRY,TRUE); IF (IOERROR = 216) THEN create_SF ELSE GET (SYSTEMENTFESTATE = (LOW,HIGH); DOCONTROL = (NORMAL,INVERTED); TEMP_TYPE = (T_AUTO_MAN,TEMP_AI,PREF_AO,H2_AO,O2_AO); LATHE_TYPE = (L_AUTO_MAN,SPEED_AO,INLETSWITCH,EXHAUSTSWITCH); NAMETYPE= ARRAY[1..NAMELENGTH] OF CHAR; ARY); REPEAT clearscreen; WRITELN('SYSTEM FILE EDITOR PROGRAM'); WRITELN; WRITELN('(0) exit'); WRITELN('(1) change/delete an entry'); WRITELN('(2) print systemfile'); CHOICE := getchoice; CASE CHOICE OF '0'I = RECORD NAME : NAMETYPE; UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL; LOOP : AI_LOOP; CONTROL : AICONTROL; R,¥DOLINK : 0..MAXDONR; AOLINK : 0..MAXAONR END; AO = RECORD NAME : NAMETYPE; UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL;    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ AILINK : 0..MAXAINR; DOLINK : 0..MAXDONR; SOFTST : 0..MAXDONR; RATIOLINK : 0..MAXAONR; RATIOVALUE : REAL END; DI = ÿÿÿÿÿÿÿÿÿÿÿÿÿÿBOOLEAN; EDIT_TABLE: TABLEDEF; BEGIN chngAOset(SET_OF_AO); REPEAT clearscreen; {STEPTITLE;} dispAOset(SET_OF_AO,COUNT); WRITELN ('enter number to change a function table or to exit'); AONR :RECORD NAME : NAMETYPE; SAFE : SAFESTATE; CONTROL : DICONTROL; DOLINK : 0..MAXDONR END; DOUT = RECORD NAME : NAMETYPE; $TITLE RECIPE EDITOR FOR FIBER OPTICS CONTROL PROGRAM RECIPE_EDITOR(INPUT,OUTPUT); CONST NONAME = 'XXXXXXXXXX'; NOUNIT = 'XXXXX'; NAMELENGTH = 10; UNITLENGTH = 5; MAXAINR = 32; MAXAONR = 16; MAXDIN CONTROL : DOCONTROL; INTERLOCK : 0..MAXDONR; CONDLOCK : 0..MAXDONR END; TEMPCONTROL = ARRAY[T_AUTO_MAN..O2_AO] OF INTEGER; LATHECONTROL = ARRAY[L_AUTO_MAN..EXHAU      STSWITCH] OF INTEGER; SYSTEM = RECORD AILIST : ARRAY[1..MAXAINR] OF AI; AOLIST : ARRAY[1..MAXAONR] OF AO; DILIST : ARRAY[1..MAXDINR] OF DI; DOLIST : ARRAY[1..MAXDONRSETP : INTEGER; O2_SETP : INTEGER; FAST_SPEED: INTEGER; END; {IOSET HAS THE INFO FOR DIGITAL INPUTS, OUTPUTS(2X) AND CHANGING AO'S IN A BLOCKSTEP} TABLEDEF = ARRAY [1..MA] OF DOUT; TEMP : TEMPCONTROL; LATHE : LATHECONTROL; END; MAXSTRING = ARRAY[1..MAXLENGTH] OF CHAR; IOPORTTYPE= ARRAY[1..2] OF CHAR; RCD_INDEX = (NOT_ALLOCAXTAB] OF INTEGER; FUNCDEF = ARRAY [1..MAXFUNC] OF CHAR; {TO BE DEFINED YET} VAR I,IOERROR, SYSERROR : INTEGER; CHOICE,ANSWER: CHAR; CHANGE,FOUND,OK : BOOLEAN; STEPNUMBER : INTEGER; LATHE_LENGTH: ITED,RCD_DONTCARE,RCD_1HEADER,RCD_2HEADER, TIMED_STEP, EVENT_STEP, BLOCK_STEP, RCD_TABLE, RCD_FUNCTION); INDEXDEF = RECORD DESCRIPTOR : RCD_INDEX; STARTSTEPNR : INTEGER; END_OR_AONR :NTEGER; INPUTSTRING : MAXSTRING; RCNAME : ARRAY [1..25] OF CHAR; INDEXNAME : ARRAY [1..32] OF CHAR; INDEX : FILE OF INDEXLIST; STEP_EDIT : STEPDEF; HEADER1_EDIT : HEAD1; HEADER2_EDIT : INTEGER; END; INDEXLIST = ARRAY[0..MAXRECORD] OF INDEXDEF; HEAD1 = RECORD JOBNR : ARRAY[1..JOBLENGTH] OF CHAR; ALARMVAL : ARRAY[1..MAXAINR] OF INTEGER; ALARMCONTRO HEAD2; RECIPE : FILE OF RECORD CASE INTEGER OF 0 : (HEADER1 : HEAD1); 1 : (HEADER2 : HEAD2); 2 : (STEP : STEPDEF); L: ARRAY[1..MAXAINR] OF DICONTROL; END; HEAD2 = RECORD ABORTVAL : ARRAY[1..MAXAINR] OF INTEGER; ABORTCONTROL: ARRAY[1..MAXAINR] OF DICONTROL; LATHE_LENGTH : INTEGER; {CM}  3 : (TABLE : TABLEDEF); 4 : (FUNC : FUNCDEF); END {RECORD}; SYSTEMENTRY : FILE OF SYSTEM; FUNCTION real_val (MAXVAL: REAL; CURVAL: INTEGER): REAL; VAR X : REAL; BEGIN X := MAXVA TUBE_WEIGHT : REAL; {KG} TUBE_DIAMETER: REAL; {MM} END; AOLISTTYPE= ARRAY[1..MAXAONR] OF INTEGER; AILISTTYPE= ARRAY[1..20] OF INTEGER; SETTYPE = SET OF 0..255; L * CURVAL / $FFF; IF X < 0 THEN X := 0.0; real_val := X; END; {real_val} FUNCTION int_val (MAXVAL: REAL; VALUE: REAL): INTEGER; VAR I : INTEGER; X : REAL; BEGIN X := VALUE * $FFF / MAXVAL; IF X > $FFF THEN I := $FFF ELSE I := ROUND (X) RAMP_TYPE = (RAMP_TIME,ENDSPEED); RAMPTYPE = ARRAY [1..5,RAMP_TIME..ENDSPEED] OF INTEGER; STEPDEF = RECORD NAME : NAMETYPE; AOLIST : AOLISTTYPE; ; int_val := I; END; {int_val} $SUBTITLE READ ONE CHARACTER FROM KEYBOARD FUNCTION getchoice : CHAR; VAR C : CHAR; BEGIN WRITE('':15,'your choice: '); PROMPT; GET(INPUT); IF EOLN(INPUT) THEN C := '0' ELSE READ(C); READLN; ge AILIST : AILISTTYPE; IOSET : SETTYPE; SPEEDCONT : RAMPTYPE; TERMINATOR: BOOLEAN; TIME : INTEGER; H2_tchoice := C END; {getchoice} FUNCTION getchar : CHAR; VAR ANSWER : CHAR; BEGIN GET(INPUT); IF EOLN(INPUT) THEN ANSWER := 'N' ELSE READ(ANSWER); READLN; getchar := ANSWER; END; {getchar} FUNCTION getanswer : CHAR; BEGIN WRITELN; WRITE(      'C = change, D = delete, = exit'); PROMPT(OUTPUT); getanswer := getchoice; END; {getanswer} FUNCTION readint(F:INTEGER) : INTEGER; VAR I,OLD,IOERROR : INTEGER; BEGIN OLD :=F; GET(INPUT); IF NOT EOLN(INPUT) THEN BEGIN IOABORT (INPDURES FUNCTION steprequest: INTEGER; BEGIN WRITE('step number: '); PROMPT(OUTPUT); steprequest := READINT(0); END; {steprequest} FUNCTION findendstep : INTEGER; VAR I,MAX : INTEGER; BEGIN MAX := 0; FOR I := 0 TO MAXRECORD DO WITH INDEX^[I] UT,FALSE); READLN (INPUT,I); IOERROR := IORESULT(INPUT); IF IOERROR <> 0 THEN BEGIN READLN; I := OLD END; IOABORT(INPUT,TRUE); END {IF} ELSE I:= OLD; readint := I END; {readint} $SUBTITLE CHANGES F TO NEDO IF STARTSTEPNR > MAX THEN MAX := STARTSTEPNR; findendstep := MAX; END{findendstep}; PROCEDURE searchstepindex (VAR INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; VAR TOTSTEPNR: INTEGER; VAR FOUND : BOOLEAN); {search for thW VALUE IF ANY IS CORRECTLY ENTERED FUNCTION readreal(F:REAL) : REAL; VAR IOERROR : INTEGER; R,OLD : REAL; BEGIN OLD :=F; GET(INPUT); IF NOT EOLN(INPUT) THEN BEGIN IOABORT (INPUT,FALSE); READLN (INPUT,R); IOERROR := IORESULT(INPUe requested step record; if found then position recipe file to read this record} VAR I : INTEGER; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN FOUND := (STARTSTEPNR= STEPNR) AND (DESCRIPTOR IN [TIMEDT); IF IOERROR <> 0 THEN BEGIN READLN; R := OLD END; IOABORT(INPUT,TRUE); END {IF} ELSE R:= OLD; readreal := R; END; {readreal} PROCEDURE readstring (VAR INP: MAXSTRING; VAR C: BOOLEAN); VAR F : FILE OF MAXSTRIN_STEP..BLOCK_STEP]); INDEXTYPE := DESCRIPTOR; TOTSTEPNR := END_OR_AONR; END {WITH} UNTIL FOUND OR (I = MAXRECORD); IF FOUND THEN REPOSITION (RECIPE,I); END; {searchstepindex} $SUBTITLE RECIPE INDEX FILE PROCEDURES PRG; I : INTEGER; BEGIN RESET (F,'/TERM'); GET (F); C := (F^[1] <> ' '); {if no char_string is entered F^[1] = blank} IF C {a new string is entered} THEN FOR I := 1 TO MAXLENGTH DO INP[I] := F^[I] END; {readstring} PROCEDURE error(X : INTOCEDURE searchfullindex (INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; TOTSTEPNR : INTEGER; VAR FOUND : BOOLEAN); {search for the requested record; if found then position recepe file to read this record} VAR I : INTEGER; BEGIN I := -EGER); BEGIN CASE X OF 1 : WRITELN('INPUT ERROR'); 2 : WRITELN('ENTRY TOO LARGE'); 3 : WRITELN('new value exceeds the maximum value'); 4 : WRITELN('INPUT IS NOT A NUMBER'); 5 : WRITELN('max. time is 8 hrs, 59 minutes, 51; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN FOUND := (STARTSTEPNR= STEPNR) AND (END_OR_AONR=TOTSTEPNR) AND (DESCRIPTOR = INDEXTYPE); END {WITH} UNTIL FOUND OR (I = MAXRECORD); IF FOUND THEN REPOSITION 9 seconds'); 6 : WRITELN('max. number of steps in a blockstep is',STEPSINBLOCK:3); 7 : WRITELN('no spaces in name allowed; first char. not a number'); OTHERWISE: WRITELN('ERROR') END {X} END; {error} PROCEDURE stars; {prints a line of sta(RECIPE,I); END; {searchfullindex} PROCEDURE check_index (VAR OCCUPIED : BOOLEAN;COPYBEGIN,LENGTH :INTEGER); {checks if no steps are defined between copybegin, copybegin+length} VAR I, COUNT : INTEGER; MESSAGE, EXIST : BOOLEAN; BEGIN OCCUPIED := FALrs} VAR I : INTEGER; BEGIN WRITELN; FOR I := 0 TO 75 DO WRITE('*'); WRITELN; WRITELN; END; {stars} PROCEDURE clearscreen; VAR CLEAR : CHAR; BEGIN CLEAR := CHR($1B); WRITELN (CLEAR,'X'); END; {clearscreen} $SUBTITLE RECIPE INDEX FILE PROCESE; FOR I := 0 TO MAXRECORD DO WITH INDEX^[I] DO IF DESCRIPTOR IN [TIMED_STEP..BLOCK_STEP] THEN BEGIN MESSAGE := TRUE; FOR COUNT := 0 TO END_OR_AONR-1 DO BEGIN EXIST := ((STARTSTEPNR + C      OUNT)>= COPYBEGIN) AND ((STARTSTEPNR + COUNT) < (COPYBEGIN + LENGTH)); IF EXIST AND MESSAGE THEN BEGIN WRITE('a step with stepnumber',STARTSTEPNR:5); WRITELN('and length' DESCRIPTOR := NOT_ALLOCATED; STARTSTEPNR := -1; END_OR_AONR := 1; END {IF} END {WITH} UNTIL FOUND OR (I = MAXRECORD); END; {del_from_index} $SUBTITLE CREATE NEW STEP FUNCTION steptotal(TOTAL,STARTSTEP: INTEGER) : INTE,END_OR_AONR:3,' still exists'); MESSAGE := FALSE; END; {IF} IF EXIST THEN OCCUPIED := TRUE; END; {FOR} END; {IF} END; {check_index} PROCEDURE add_to_index (INDEXTYPE: RCD_INDEX; STEPNR: INTGER; VAR NEW: INTEGER; OK,OCCUPIED : BOOLEAN; BEGIN WRITELN('total number of steps in this block is',TOTAL:3); REPEAT OCCUPIED := FALSE; WRITE('new total: '); PROMPT(OUTPUT); NEW := readint(TOTAL); OK := (NEW <= STEPSINBLOCEGER; TOTSTEPNR : INTEGER); {change first not_allocated record in index to the requested type} VAR I : INTEGER; FOUND : BOOLEAN; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN K) AND (NEW > 0); IF NOT OK THEN ERROR(6); IF OK AND (NEW > TOTAL) THEN check_index(OCCUPIED,STARTSTEP + TOTAL,NEW - TOTAL); UNTIL OK AND NOT OCCUPIED; steptotal := NEW; END {steptotal}; PROCEDURE create_step(VAR STEP_EDIT :STEPDEF;V FOUND := (DESCRIPTOR = NOT_ALLOCATED); IF FOUND THEN BEGIN DESCRIPTOR := INDEXTYPE; STARTSTEPNR:= STEPNR; END_OR_AONR:= TOTSTEPNR; REPOSITION (RECIPE,I); END {IF} END {WITH} UNAR INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; VAR TOTSTEPNR : INTEGER); {asks the user the step type and clears all the fields for this step} VAR I : INTEGER; OK : BOOLEAN; BEGIN REPEAT OK := TRUE; WRITELN; WRITELTIL FOUND OR (I = MAXRECORD); IF (I= MAXRECORD) THEN WRITELN('too many steps in recipe'); END; {add_to_index} $SUBTITLE RECIPE INDEX FILE PROCEDURES PROCEDURE change_index (STEPNR: INTEGER; NEWTOTAL : INTEGER); {change total nr of steps in a block_step}N('(1) TIMED STEP'); WRITELN('(2) LATHE CONTROLLED STEP'); WRITELN('(3) LATHE CONTROLLED BLOCK OF STEPS'); CHOICE := GETCHOICE; CASE CHOICE OF '1' : INDEXTYPE := TIMED_STEP; '2' : INDEXTYPE := EVENT_STEP; '3' :  VAR I : INTEGER; FOUND : BOOLEAN; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN FOUND := (STARTSTEPNR= STEPNR) AND (DESCRIPTOR= BLOCK_STEP); IF FOUND THEN END_OR_AONR := NEWTOTAL; END {WITH} UNTIL FOBEGIN INDEXTYPE := BLOCK_STEP; TOTSTEPNR := steptotal(1,STEPNR); END; OTHERWISE : OK := FALSE; END;{CASE} UNTIL OK; add_to_index (INDEXTYPE,STEPNR,TOTSTEPNR); {INITIALIZE THIS NEW STEP} UND OR (I = MAXRECORD); END {change_index}; PROCEDURE del_from_index (INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; TOTSTEPNR : INTEGER; VAR FOUND : BOOLEAN); {search for the requested record; if found then delete entry from index} VAWITH STEP_EDIT DO BEGIN NAME := NONAME; FOR I := 1 TO MAXAONR DO AOLIST[I] := 0; FOR I := 1 TO 20 DO AILIST[I] := 0; IOSET := []; FOR I := 1 TO 5 DO BEGIN SPEEDCONT [I,RAMP_TIME] := 0; SPEEDCONT [I,ENDSPEED ]R I : INTEGER; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN FOUND := (STARTSTEPNR= STEPNR) AND (END_OR_AONR=TOTSTEPNR) AND (DESCRIPTOR = INDEXTYPE); IF FOUND THEN BEGIN  := 0; END {FOR}; TERMINATOR := FALSE; TIME := 0; H2_SETP := 0; O2_SETP := 0; FAST_SPEED := 0; END {WITH}; END {create_step}; $SUBTITLE STEP NAME CHANGE PROCEDURE disp_control(CONTROL : DICONTROL); BEGIN CASE CONTROL OF       IGNORE : WRITE('IGNORE':12); BUZZER : WRITE('BUZZER':12); HOLD : WRITE('HOLD ':12); ALARM : WRITE('ALARM ':12); ABORT : WRITE('ABORT ':12); TIMERESET : WRITE('TIME RESET':12); OTHERWISE : WRITE('':12); END {CASE} EN IF OK THEN IF AOLINK = 0 THEN BEGIN VALUE := real_val (SCALE, AIONLYLIST[K]); WRITE (NAME:12,VALUE:9:3,UNIT:7,'':8); COUNT := COUNT + 1; K := K + 1; IF LINE THEND; {disp_control} PROCEDURE steptitle; {stepnumber and stepname are global} BEGIN WRITELN('STEP',STEPNUMBER:5,': ',STEP_EDIT.NAME); END; {steptitle} PROCEDURE stepname(VAR STEPNAME : NAMETYPE); VAR INPUTSTRING : MAXSTRING; CHANGE : BOOLEAN; BEGIN  WRITELN; {2 ENTRIES PER LINE} LINE := NOT LINE; END {IF}; END {WITH}; I := I + 1; UNTIL (COUNT = MAX) OR (I > MAXAINR); ANY := COUNT <> 0; OFFSET := I; STEP_OFFSET := K; WRITELN; END; {disp_AI} PROCEDURE DO_na WRITE ('new name: '); PROMPT (OUTPUT); READSTRING (INPUTSTRING,CHANGE); IF CHANGE THEN STEPNAME [1 FOR 10] := INPUTSTRING [1 FOR 10]; END; {stepname} PROCEDURE namecheck(NAME : NAMETYPE;VAR OK :BOOLEAN); {checks if name <> XXXXXXXXXX; OK ifme(NR : INTEGER); {WRITES NAME OF OUTPUT OR THE CORRESPONDING A.O. NAME} VAR OK : BOOLEAN; I : INTEGER; BEGIN WITH SYSTEMENTRY^ DO BEGIN namecheck(DOLIST[NR].NAME,OK); IF OK THEN WRITE(DOLIST[NR].NAME:12) ELSE FOR I := 1 TO MA true} BEGIN OK:= NAME <> NONAME ; END; $SUBTITLE SETPOINTS, UNLINKED ANALOG INPUTS PROCEDURE disp_MFC (MFC_LIST : AOLISTTYPE; VAR OFFSET: INTEGER; MAX: INTEGER;VAR ANY: BOOLEAN); { displays all AO setpoints} VAR I,COUNT: INTEGER; XAONR DO IF AOLIST[I].DOLINK = NR THEN WRITE (AOLIST[I].NAME:12); END {WITH}; END;{DO_name} PROCEDURE checkinterlock(DOSET :SETTYPE; VAR INTER_ERROR : BOOLEAN); {CHECKS THE DIGITAL OUTPUTS FOR INTERLOCK VIOLATIONS} {A ON AND B ON IS LINE,OK: BOOLEAN; VALUE: REAL; BEGIN COUNT := 0; I := OFFSET; LINE := FALSE; REPEAT WITH SYSTEMENTRY^.AOLIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN VALUE := real_val (SCALE, MFC AN INVALID CONDITION} {PRINTS MESSAGE AND SETS INTER_ERROR FLAG} VAR DONR : INTEGER; ERROR : BOOLEAN; BEGIN INTER_ERROR := FALSE; FOR DONR := 1 TO MAXDONR DO WITH SYSTEMENTRY^.DOLIST[DONR] DO IF INTERLOCK <> 0 THEN BEGIN _LIST[I]); WRITE (NAME:12,VALUE:9:3,UNIT:7,'':8); COUNT := COUNT + 1; IF LINE THEN WRITELN; {2 ENTRIES PER LINE} LINE := NOT LINE; END {IF}; END {WITH}; I := I + 1; UNTIL (COUNT ERROR := ((DONR + OFF2 IN DOSET) AND (INTERLOCK+OFF2 IN DOSET)) OR ((DONR + OFF3 IN DOSET) AND (INTERLOCK+OFF3 IN DOSET)); IF ERROR THEN BEGIN WRITE('INTERLOCK ERROR BETWEEN');  = MAX) OR (I > MAXAONR); ANY := COUNT <> 0; OFFSET := I; WRITELN; END; {disp_MFC} PROCEDURE disp_AI (AIONLYLIST: AILISTTYPE;VAR OFFSET: INTEGER; MAX: INTEGER;VAR ANY: BOOLEAN; VAR STEP_OFFSET: INTEGER); { displays all unlinked (with A DO_name (DONR); WRITE('AND'); DO_name (INTERLOCK); WRITELN; INTER_ERROR := TRUE; END {IF}; END {IF}; END; {checkinterlock} PROCEDURE check_conditional(DOSET :SETTYPE; VAR CONDO) AI setpoints, 8 at a time} VAR I,K, COUNT: INTEGER; OK,LINE: BOOLEAN; VALUE: REAL; BEGIN COUNT := 0; I := OFFSET; K := STEP_OFFSET; LINE := FALSE; REPEAT WITH SYSTEMENTRY^.AILIST[I] DO BEGIN namecheck(NAME,OK); ':25); WRITELN; WRITELN ('':20,'SYSTEM CONFIGURATION TABLE '); stars; LINE := 11; END {IF}; IF ANSWER = 'N' THEN BEGIN REPEAT REWRITE (OUTPUT,'/TERM'); AI_AO_DI_DO (TYPESELECT, IOPORT); IF TYPESELECT      IN [1..4] THEN BEGIN WRITE ('STARTING NUMBER: '); PROMPT; LOOPSTART := 1; LOOPSTART := READINT(LOOPSTART); WRITE ('ENDING NUMBER: '); PROMPT; LOOPEND := 1; LOOROR := TRUE; END {IF}; END;{IF} END; {check_conditional} PROCEDURE check_ratio(STEP_EDIT :STEPDEF;VAR RATIO_ERROR : BOOLEAN); {CHECKS THE RATIO BETWEEN TWO ANALOG OUTPUTS} {RATIO IS OK IF VAL(A)/VAL(B) < RATIOVALUE; RATIOLINK RECORDED BY A}PEND := READINT(LOOPEND); END; {IF} clearscreen; IF LP THEN REWRITE (OUTPUT,'/P1'); CASE TYPESELECT OF 0 : ; 1 : BEGIN OK :=(LOOPEND >=LOOPSTART) AND (LOOPEND IN [1..MAXAINR])  {AN ERRORMESSAGE IS PRINTED AND A FLAG SET} VAR DIVIDEND,DIVISOR :REAL; AONR,RATIONR : INTEGER; ERROR : BOOLEAN; BEGIN RATIO_ERROR := FALSE; WITH SYSTEMENTRY^ DO FOR AONR := 1 TO MAXAONR DO BEGIN RATIONR := AOLIST[AONR].RATIO AND (LOOPSTART IN [1..MAXAINR]); IF OK THEN print_AI (LINE,LOOPSTART,LOOPEND,LP) END; {1} 2 : BEGIN OK :=(LOOPEND >=LOOPSTART) AND (LOOPEND IN [1..MAXAONR]) AND (LOOLINK; IF RATIONR <> 0 THEN BEGIN DIVIDEND := real_val(AOLIST[AONR].SCALE,STEP_EDIT.AOLIST[AONR]); DIVISOR := real_val(AOLIST[RATIONR].SCALE, STEP_EDIT.AOLIST[RATIONR]); IF DIVISPSTART IN [1..MAXAONR]); IF OK THEN print_AO (LINE,LOOPSTART,LOOPEND,LP) END; {2} 3 : BEGIN OK :=(LOOPEND >=LOOPSTART) AND (LOOPEND IN [1..MAXDINR]) AND (LOOPSTART IN [1..MAXDOR <> 0 THEN ERROR := (DIVIDEND / DIVISOR)> AOLIST[AONR].RATIOVALUE ELSE ERROR := (DIVIDEND <> 0); IF ERROR THEN BEGIN WRITELN('RATIO ERROR BETWEEN',AOLIST[AONR].NAME:12, AOLISTINR]); IF OK THEN print_DI (LINE,LOOPSTART,LOOPEND,LP) END; {3} 4 : BEGIN OK :=(LOOPEND >=LOOPSTART) AND (LOOPEND IN [1..MAXDONR]) AND (LOOPSTART IN [1..MAXDONR]); [RATIONR].NAME:12); RATIO_ERROR := TRUE; END; {IF} END; {IF} END; {FOR} END; {check_ratio} PROCEDURE stepsetpoints(VAR STEP_EDIT : STEPDEF); { changes the setpoints (AI, AO) per 8 } VAR OFFSET, STEP_OFFSET ,K, I, COUNIT_ERROR : BOOLEAN); {CHECKS THE DIGITAL OUTPUTS FOR CONDITIONAL INTERLOCK VIOLATIONS } {OK = (A ON IF B IS ON; B OFF ONLY IF A IS OFF); {PRINTS MESSAGE AND SETS CONDIT_ERROR FLAG} VAR DONR : INTEGER; ERROR : BOOLEAN; BEGIN CONDIT_ERROR := FALSE; T,DONR : INTEGER; ANSWER : CHAR; VALUE : REAL; ANY, OK, SETBIT, INTER_ERROR, CONDIT_ERROR, RATIO_ERROR : BOOLEAN; BEGIN clearscreen; REPEAT {UNTIL NOT ERRORS} OFFSET := 1; REPEAT {UNTIL OFFSET > MAXAONR} steptitle; I := OFFSET;  FOR DONR := 1 TO MAXDONR DO WITH SYSTEMENTRY^.DOLIST[DONR] DO IF CONDLOCK <> 0 THEN BEGIN ERROR := ((DONR + OFF2 IN DOSET) AND NOT(CONDLOCK+OFF2 IN DOSET)) OR ((DONR + OFF3 IN DOSET) AND NOT(CONDLOCK+O disp_MFC (STEP_EDIT.AOLIST,OFFSET,8, ANY); IF ANY THEN BEGIN COUNT := 0; WRITELN('change any of these setpoints (Y/N)? '); PROMPT(OUTPUT); ANSWER := getchar; IF ANSWER = 'Y' THEN REPEAT FF3 IN DOSET)); IF ERROR THEN BEGIN WRITE('CONDITIONAL INTERLOCK ERROR BETWEEN'); DO_name (DONR); WRITE('AND'); DO_name (CONDLOCK); WRITELN; CONDIT_ER WITH SYSTEMENTRY^.AOLIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN REPEAT WRITE(NAME,'max. value:':13,SCALE:9:3,'new value: ':12); PROMPT(OUTPUT);       VALUE := real_val(SCALE,STEP_EDIT.AOLIST[I]); VALUE := readreal(VALUE); OK := VALUE <= SCALE; IF OK THEN STEP_EDIT.AOLIST[I] := int_val(SCALE, VALUE) ELSE ERROR(3); TEP_EDIT.AILIST[K] := int_val(SCALE, VALUE); COUNT := COUNT +1; K := K + 1; END {IF} ELSE ERROR(3); UNTIL OK; I := I + 1; END {WITH};  DONR := DOLINK; UNTIL OK; END {WITH}; IF DONR <> 0 THEN BEGIN WITH SYSTEMENTRY^.DOLIST[DONR] DO SETBIT := ((VALUE > 0) AND (CONTROL = NORMAL)) OR  UNTIL (COUNT = 8) OR (I > MAXAINR); END {IF} UNTIL OFFSET > MAXAINR END; {stepsetpoint} $SUBTITLE DIGITAL OUTPUTS PROCEDURE disp_DO (VAR DIGOUTS : SETTYPE;VAR OFFSET :INTEGER; MAX: INTEGER;VAR ANY: BOOLEAN; OFFCONST:INTEGER;ALL:BOOLEAN) ((VALUE = 0) AND (CONTROL = INVERTED)); WITH STEP_EDIT DO IF SETBIT THEN IOSET := IOSET + [DONR+OFF2] + [DONR+OFF3] ELSE IOSET := IOSET - [DONR+OFF2] - [DONR+OFF3]; END {IF}; ; { displays all digital outputs if ALL = TRUE, else the unlinked D.O.'s} VAR I,COUNT,AONR,LINE: INTEGER; OK : BOOLEAN; SETTING : ARRAY [0..2] OF CHAR; BEGIN COUNT := 0; I := OFFSET; LINE := 0; REPEAT WITH SYSTEMENTRY^.DOLIST[I] D COUNT := COUNT +1; I := I + 1; UNTIL (COUNT = 8) OR (I > MAXAONR); END;{IF} clearscreen; UNTIL OFFSET > MAXAONR; checkinterlock(STEP_EDIT.IOSET,INTER_ERROR); check_conditional(STEP_EDIT.IOSET,CONDIT_ERROR); checkO BEGIN namecheck(NAME,OK); IF OK THEN WRITE(NAME:10) ELSE IF ALL THEN FOR AONR := 1 TO MAXAONR DO IF SYSTEMENTRY^.AOLIST[AONR].DOLINK = I THEN BEGIN WRITE(SYSTEMENTRY^.AO_ratio (STEP_EDIT,RATIO_ERROR); UNTIL NOT(INTER_ERROR OR CONDIT_ERROR OR RATIO_ERROR); {NEXT THE UNLINKED AI'S CAN BE CHANGED } OFFSET := 1; STEP_OFFSET := 1; REPEAT {UNTIL OFFSET > MAXAINR} clearscreen; steptitle; I := OFFSET; KLIST[AONR].NAME:10); OK := TRUE; END; {IF} IF OK THEN BEGIN IF ((I+OFFCONST IN DIGOUTS) AND (CONTROL = NORMAL)) OR ((NOT (I+OFFCONST IN DIGOUTS)) AND (CONTROL = INVERTED)) THEN  := STEP_OFFSET; disp_AI (STEP_EDIT.AILIST,OFFSET,8, ANY, STEP_OFFSET); IF ANY THEN BEGIN COUNT := 0; WRITELN('change any of these setpoints (Y/N)? '); PROMPT(OUTPUT); ANSWER := getchar; IF ANSWER = ' SETTING := ' ON' ELSE SETTING := 'OFF'; WRITE (SETTING:4,'':6); COUNT := COUNT + 1; LINE := LINE + 1; IF LINE = 4 THEN {4 DO'S PER LINE} BEGIN WRITELN; LINE Y' THEN REPEAT WITH SYSTEMENTRY^.AILIST[I] DO BEGIN namecheck(NAME,OK); IF OK AND (AOLINK = 0) THEN REPEAT WRITE(NAME,'max. value:':13,SCALE:9:3,'new value: ':= 0; END {IF}; END {IF}; I := I + 1; END {WITH}; UNTIL (COUNT = MAX) OR (I > MAXDONR); ANY := COUNT <> 0; OFFSET := I; WRITELN; END; {disp_DO} $SUBTITLE DIGITAL OUTPUTS PROCEDURE stepoutputs(VAR DIGOUTS : SETTYPE;:12); PROMPT(OUTPUT); VALUE := real_val(SCALE,STEP_EDIT.AILIST[K]); VALUE := readreal(VALUE); OK := VALUE <= SCALE; IF OK THEN BEGIN S OFFCONST: INTEGER); VAR ANSWER : CHAR; OFFSET, I, COUNT: INTEGER; INTER_ERROR, CONDIT_ERROR, ANY, SETBIT,OK : BOOLEAN; {SETBIT TRUE = ACTIVATE, FALSE = DEACTIVATE} BEGIN clearscreen; REPEAT {UNTIL NO ERRORS} OFFSET := 1; REPEAT {UNTIL      OFFSET > MAXDONR} steptitle; I := OFFSET; disp_DO (DIGOUTS,OFFSET,8,ANY,OFFCONST,FALSE); IF ANY THEN BEGIN WRITE('change any of these outputs (Y/N)? '); PROMPT (OUTPUT); ANSWER := getchar; IF ANSWER disp_control (CONTROL); COUNT := COUNT + 1; IF LINE THEN WRITELN {2 ENTRIES PER LINE} ELSE WRITE('':5); LINE := NOT LINE; END {IF}; END; {WITH} I := I + 1; UNTIL ( = 'Y' THEN BEGIN WRITELN('0 = OFF, 1 = ON, = don''t change'); WRITELN; COUNT := 0; REPEAT WITH SYSTEMENTRY^.DOLIST[I] DO BEGIN namecheck(NAME,OK); COUNT = MAX) OR (I > MAXDINR); ANY := COUNT <> 0; OFFSET := I; WRITELN; END; {disp_DI} $SUBTITLE DIGITAL INPUTS PROCEDURE stepinputs(VAR DIGINPUTS : SETTYPE); VAR ANSWER : CHAR; OFFSET, I, COUNT: INTEGER; ANY, SETBIT,OK: BOOLEAN; {SET IF OK THEN BEGIN WRITE(NAME,' : '); PROMPT(OUTPUT); COUNT := COUNT + 1; ANSWER := getchar; IF ANSWER <> 'N' THEN BIT TRUE = CHECK, FALSE = DON'T CHECK} BEGIN OFFSET := 1; REPEAT {UNTIL OFFSET > MAXDINR} clearscreen; steptitle; I := OFFSET; disp_DI (DIGINPUTS,OFFSET,8,ANY); IF ANY THEN BEGIN WRITE('change any of t BEGIN SETBIT :=((ANSWER = '1') AND (CONTROL= NORMAL)) OR ((ANSWER = '0') AND (CONTROL= INVERTED)); IF SETBIT THEN DIGOUTS := DIGOUTS + [I+OFFCONST] hese inputs (Y/N)? '); PROMPT (OUTPUT); ANSWER := getchar; IF ANSWER = 'Y' THEN BEGIN WRITELN('0 = don''t check this input in this step'); WRITELN('1 = check this input, = don''t change');  ELSE DIGOUTS := DIGOUTS - [I+OFFCONST]; END {IF} END {IF}; END {WITH}; I := I + 1; UNTIL (COUNT = 8) OR (I> MAXDONR); END {IF} END; {IF} clearscreen;  COUNT := 0; REPEAT WITH SYSTEMENTRY^.DILIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN WRITE(NAME,' : '); PROMPT(OUT UNTIL OFFSET > MAXDONR; checkinterlock(DIGOUTS,INTER_ERROR); check_conditional(DIGOUTS,CONDIT_ERROR); UNTIL NOT(INTER_ERROR OR CONDIT_ERROR); END {stepinputs}; $SUBTITLE DIGITAL INPUTS PROCEDURE disp_DI (VAR DIGINPUTS : SETTYPE; PUT); COUNT := COUNT + 1; ANSWER := getchar; IF ANSWER <> 'N' THEN BEGIN SETBIT :=(ANSWER = '1'); IF SETBIT THEN  VAR OFFSET: INTEGER; MAX: INTEGER;VAR ANY: BOOLEAN); { displays all AO setpoints} VAR I,COUNT: INTEGER; LINE,OK : BOOLEAN; SETTING : ARRAY [0..10] OF CHAR; BEGIN COUNT := 0; I := OFFSET; LINE := FALSE; REPEAT WITH SYSTEMENTRY^.DILIS DIGINPUTS := DIGINPUTS + [I+OFF1] ELSE DIGINPUTS := DIGINPUTS - [I+OFF1]; END {IF} END {IF}; END {WITH}; I := I + 1; UNTIL (COUNT = 8) OR (I> MAXDINR);T[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN IF I+OFF1 IN DIGINPUTS THEN SETTING := 'check ' ELSE SETTING := 'don''t check'; WRITE (NAME,SETTING:13);  END {IF} END {IF} UNTIL OFFSET > MAXDINR; END {stepinputs}; $SUBTITLE READ AND DISPLAY TIME ENTRIES PROCEDURE converttime(TIME: MAXSTRING;VAR TIM: INTEGER;VAR OK : BOOLEAN); {CHANGE TIME ENTRY (H.MM.SS) TO SECONDS} {OK IS TRUE IF ENTERED T     IME IS CORRECT, OTHERWISE FALSE} VAR I : INTEGER; CH,CH10 : CHAR; BEGIN {CHECK ALL CHARACTERS FOR CORRECTNESS} OK := (TIME[1] IN ['0'..'8']) AND (TIME[2] = '.') AND (TIME[3] IN ['0'..'5']) AND (TIME[4] IN ['0'..'9,TT,'':2); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); IF CHANGE THEN CONVERTTIME(INPUTSTRING,SECONDS,OK); UNTIL OK END; {steptime} $SUBTITLE EDIT SPEED RAMPING INFO PROCEDURE dispramps( VAR SPEEDINFO :RAMPTYPE); VAR N,I : INT']) AND (TIME[5] = '.') AND (TIME[6] IN ['0'..'5']) AND (TIME[7] IN ['0'..'9']) ; IF OK THEN BEGIN CH := TIME[1]; TIM := (ORD(CH)- ORD('0')); CH10 := TIME[3]; CH := TIME[4]; EGER; STARTSPEED,VALUE : REAL; BEGIN WITH SYSTEMENTRY^ DO BEGIN N := LATHE[SPEED_AO]; WRITELN('interval time(h.mm.ss) start speed','':9,'end speed'); STARTSPEED := 0.0; FOR I := 1 TO 5 DO BEGIN VALUE := real_val TIM := 60 * TIM +10*(ORD(CH10)- ORD('0'))+ (ORD(CH)- ORD('0')); CH10 := TIME[6]; CH := TIME[7]; TIM := 60 * TIM +10*(ORD(CH10)- ORD('0'))+ (ORD(CH)- ORD('0')); END {IF} ELSE IF TIME[1] > '8' THEN ERROR(5) EL(AOLIST[N].SCALE,SPEEDINFO[I,ENDSPEED]); WRITE (I:2,'':8); disptime(SPEEDINFO[I,RAMP_TIME]); WRITE(STARTSPEED:13:3,AOLIST[N].UNIT:7); WRITELN(VALUE:13:3,AOLIST[N].UNIT:7); STARTSPEED := VALUE; END {FOR}; END {SE ERROR(1) END {converttime}; $SUBTITLE READ AND DISPLAY TIME ENTRIES PROCEDURE disptime(TIM : INTEGER); {CHANGES TIME (SECONDS) TO H.MM.SS REPRESENTATION AND PRINTS IT} VAR TIME : ARRAY[1..7] OF CHAR; POWEROF60 : 1..3600; QUOTIENT : INTEGERWITH} END {dispramps}; PROCEDURE chngsetp(N : INTEGER;VAR CURVAL : INTEGER); VAR VALUE : REAL; OK : BOOLEAN; BEGIN WITH SYSTEMENTRY^.AOLIST[N] DO REPEAT VALUE := real_val(SCALE, CURVAL); WRITE(NAME,'max. value:':13,SCALE:9:3,UNIT:6,'new va; REMAINDER : INTEGER; QUOT10 : 0..5; REMAIN10 : 0..9; BEGIN POWEROF60 := 3600; REMAINDER := TIM; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT HOURS} REMAINDER:= REMAINDER MOD POWEROF60; TIME[1] := (CHR(QUOTIENT + ORD('0'))); Plue: ':14); PROMPT(OUTPUT); VALUE := readreal(VALUE); OK := VALUE <= SCALE; IF OK THEN CURVAL := int_val(SCALE, VALUE) ELSE ERROR(3); UNTIL OK; END; {chngsetp} PROCEDURE stepspeed (VAR SPEEDINFO : RAMPTYPE); VAR I,N : INOWEROF60 := POWEROF60 DIV 60; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT MINUTES} REMAINDER:= REMAINDER MOD POWEROF60; {SECONDS } QUOT10 := QUOTIENT DIV 10; REMAIN10 := QUOTIENT MOD 10; TIME[2] := '.'; TIME[3] := (CHR(QUOT10 + ORD('0')))TEGER; VALUE :REAL; CHOOCE : CHAR; INPUTSTRING : MAXSTRING; CHANGE, OK : BOOLEAN; BEGIN REPEAT {UNTIL I = 0} clearscreen; steptitle; WRITELN('five time intervals can be given, in which the lathe'); WRITELN (' speed is ramped; TIME[4] := (CHR(REMAIN10 + ORD('0'))); QUOT10 := REMAINDER DIV 10; REMAIN10 := REMAINDER MOD 10; TIME[5] := '.'; TIME[6] := (CHR(QUOT10 + ORD('0'))); TIME[7] := (CHR(REMAIN10 + ORD('0'))); WRITE(TIME:9); END {disptime}; PROCEDURE stept lineair between start and end value.'); dispramps (SPEEDINFO); WRITELN; WRITE ('enter nr of interval to be changed or to exit: '); prompt(OUTPUT); I := READINT(0); IF (I< 6) AND (I> 0) THEN BEGIN REPEAT ime(VAR SECONDS : INTEGER); CONST TT ='time is (h.mm.ss.):'; VAR CHANGE ,OK : BOOLEAN; INPUTSTRING : MAXSTRING; BEGIN clearscreen; steptitle; REPEAT OK := TRUE; WRITE('step',TT); disptime (SECONDS); WRITELN; WRITE('new ' WRITE ('new time: '); prompt(OUTPUT); readstring(INPUTSTRING,CHANGE); OK := TRUE; IF CHANGE THEN converttime(INPUTSTRING,SPEEDINFO[I,RAMP_TIME],OK); UNTIL OK; WRITELN ('new      end speed'); N := SYSTEMENTRY^.LATHE [SPEED_AO]; chngsetp(N, SPEEDINFO [I,ENDSPEED]); END {IF} UNTIL I = 0; END; {stepspeed} PROCEDURE stepterminator (VAR TERMINATOR :BOOLEAN); VAR CHOOSE : CHAR; BEGIN clearscreen; steptitle; IN SET_OF_AO) AND OK THEN BEGIN WRITE(I:2, NAME:12,'':3); ELEMENTS := ELEMENTS + 1; LINE := LINE + 1; IF LINE = 4 THEN BEGIN WRITELN; LINE := 0; END; END {IF}; END {WITH};  WRITE('this step is'); IF NOT TERMINATOR THEN WRITE (' not'); WRITELN(' defined as end step'); WRITELN('mark this step as end step (Y/N) ?'); CHOOSE := getchoice; IF CHOOSE <> '0' THEN TERMINATOR := (CHOOSE = 'Y'); END; {stepterminator} $SWRITELN; END {dispAOset}; PROCEDURE chngAOset (VAR SET_OF_AO : SETTYPE); VAR I, N, COUNT : INTEGER; ANSWER : CHAR; SETALL : SETTYPE; BEGIN clearscreen; WRITELN('all outputs that can be defined as changing during a blockstep'); SETALL := []; FOUBTITLE FAST FORWARD PARAMETERS PROCEDURE dispforward (N, CURVAL: INTEGER); VAR VALUE : REAL; BEGIN WITH SYSTEMENTRY^.AOLIST[N] DO BEGIN VALUE := real_val (SCALE, CURVAL); WRITE(NAME,VALUE:8:2,UNIT:6,'':2); END {FOR} END {dispforward}; PRR I := 1 TO MAXAONR DO SETALL := SETALL + [I+OFF4]; dispAOset(SETALL,COUNT); WRITELN('outputs currently defined as changing in this block step'); dispAOset(SET_OF_AO,COUNT); IF COUNT = 0 THEN WRITELN('NONE DEFINED'); IF COUNT < 5 THEN REPEOCEDURE stepforward (VAR STEP_EDIT : STEPDEF); {change the fast forward parameters, i.e. digital outputs, H2, O2 and speed of burner} VAR N : INTEGER; VALUE : REAL; BEGIN clearscreen; steptitle; WRITELN('FAST FORWARD PARAMETERS'); stepoutputs AT WRITE('enter a number to add an entry or to exit: '); PROMPT(OUTPUT); N := readint(0); IF (N>0) AND (N < MAXAONR) AND NOT(N IN SET_OF_AO) THEN BEGIN SET_OF_AO := SET_OF_AO + [N+OFF4]; COUNT := COUNT + 1; (STEP_EDIT.IOSET,OFF3); WITH SYSTEMENTRY^ DO BEGIN N := TEMP[H2_AO]; dispforward (N, STEP_EDIT.H2_SETP); WRITELN; chngsetp (N, STEP_EDIT.H2_SETP); N := TEMP[O2_AO]; dispforward (N, STEP_EDIT.O2_SETP); WRITELN; ch END; UNTIL (N = 0) OR (COUNT = 5); IF COUNT > 0 THEN REPEAT WRITE('enter a number to delete an entry or to exit: '); PROMPT(OUTPUT); N := readint(0); IF (N>0) AND (N < MAXAONR) AND (N+OFF4 IN SET_OF_AO) THEN BEGIN ngsetp (N, STEP_EDIT.O2_SETP); N := LATHE[SPEED_AO]; dispforward (N, STEP_EDIT.FAST_SPEED); WRITELN; chngsetp (N, STEP_EDIT.FAST_SPEED); END; {WITH} END {stepforward}; PROCEDURE dispAOset(SET_OF_AO : SETTYPE; VAR ELEMENTS: INTEGER);  SET_OF_AO := SET_OF_AO - [N+OFF4]; {DELETE THE AO_TABLE TOO} COUNT := COUNT - 1; END; UNTIL (N = 0) OR (COUNT = 0); END; {chngAOset} $SUBTITLE DISPLAY/EDIT THE SETPOINT TABLES OF A BLOCK STEP PROCEDURE disptables (VAR SET_OF_AO : SVAR I,LINE : INTEGER; OK : BOOLEAN; BEGIN LINE := 0; ELEMENTS := 0; FOR I := 1 TO MAXAONR DO WITH SYSTEMENTRY^.AOLIST[I] DO BEGIN namecheck(NAME,OK); {AO'S WITH ASSOCIATED RATIOLINKS OR INTERLOCKS CANNOT BE PUT IN BLOCKTABLEETTYPE; STEPNUMBER : INTEGER; TOTSTEPNR : INTEGER); VAR I, N, COUNT : INTEGER; EXIST : BOOLEAN; VALUE : REAL; BLOCKTABLE : ARRAY[1..5] OF TABLEDEF; BEGIN COUNT := 1; FOR I := 1 TO MAXAONR DO IF I+OFF4 IN SET_OF_S} IF OK THEN BEGIN IF (DOLINK <> 0) THEN OK := (SYSTEMENTRY^.DOLIST[DOLINK].INTERLOCK = 0) AND (SYSTEMENTRY^.DOLIST[DOLINK].CONDLOCK = 0); OK := OK AND (RATIOLINK = 0); END {IF}; IF (I+OFF4 AO THEN BEGIN searchfullindex(RCD_TABLE,STEPNUMBER,I,EXIST); IF EXIST THEN BEGIN GET(RECIPE); BLOCKTABLE[COUNT] := RECIPE^.TABLE; END ELSE FOR N := 1 TO MAXTAB DO BLOCKTABLE[C     OUNT,N] := 0; {INITIALIZE TABLE} COUNT := COUNT+1; END {IF}; WRITE('step'); WITH SYSTEMENTRY^ DO BEGIN FOR I := 1 TO MAXAONR DO IF I+OFF4 IN SET_OF_AO THEN WRITE (AOLIST[I].NAME:15); WRITELN; FOR N := 1 T RECIPE^.TABLE := EDIT_TABLE; PUT(RECIPE); END {IF} ELSE IF AONR <> 0 THEN WRITELN('this output is not defined as a changing one'); UNTIL AONR = 0; END {steptables}; $SUBTITLE EDIT THE RECIPE HEADER PROCEDURE display_header(VAR OFFSET:INTO TOTSTEPNR DO BEGIN COUNT := 1; WRITE((N+STEPNUMBER-1):3,'':2); FOR I := 1 TO MAXAONR DO IF I+OFF4 IN SET_OF_AO THEN BEGIN VALUE := real_val(AOLIST[I].SCALE, BLOCKTABLE[COUNT,N]); EGER; MAX:INTEGER;VAR ANY:BOOLEAN); {display max nr of AIlimits if they exist} VAR I, COUNT : INTEGER; VALUE : REAL; CONTR : DICONTROL; OK : BOOLEAN; BEGIN COUNT := 0; I := OFFSET; WRITE('nr','name':6,'alarm limit1':19,'action':8); WRI WRITE (VALUE:9:3,AOLIST[I].UNIT:6); COUNT := COUNT+1; END {IF}; WRITELN; END {FOR}; END {WITH}; END {disptables}; PROCEDURE steptables (VAR SET_OF_AO : SETTYPE; STEPNUMBER : INTEGER; TOTSTTELN('alarm limit2':16,'action':8,'max. value':12); REPEAT WITH SYSTEMENTRY^.AILIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN VALUE := real_val (SCALE,HEADER1_EDIT.ALARMVAL[I]); WRITE(I:2,NAMEPNR : INTEGER); VAR I, COUNT,AONR, NR : INTEGER; VALUE : REAL; OK, EXIST : BOOLEAN; EDIT_TABLE: TABLEDEF; BEGIN chngAOset(SET_OF_AO); REPEAT clearscreen; {STEPTITLE;} dispAOset(SET_OF_AO,COUNT); WRITELN ('enter number to change a fuE:12,VALUE:9:3); CONTR := HEADER1_EDIT.ALARMCONTROL[I]; disp_control (CONTR); VALUE := real_val (SCALE,HEADER2_EDIT.ABORTVAL[I]); CONTR := HEADER2_EDIT.ABORTCONTROL[I]; WRITE(VALUE:12:3); dinction table or to exit'); AONR := readint(0); IF (AONR>0) AND (AONR+OFF4 IN SET_OF_AO) THEN BEGIN searchfullindex(RCD_TABLE,STEPNUMBER,AONR,EXIST); IF EXIST THEN BEGIN GET(RECIPE); EDIT_TABLE := RECIPE^.TABLE sp_control (CONTR); WRITELN(SCALE:9:3,UNIT:6); COUNT := COUNT + 1; END {IF}; END {WITH}; I := I + 1; UNTIL (COUNT = MAX) OR (I> MAXAINR); ANY := (COUNT <> 0); OFFSET := I; END; {disp_header} PROCEDURE create_h END {IF} ELSE BEGIN add_to_index(RCD_TABLE,STEPNUMBER,AONR); FOR I := 1 TO MAXTAB DO EDIT_TABLE[I] := 0; {INITIALIZE TABLE} END; {ELSE} clearscreen; WITH SYSTEMENTRY^.AOLIST[AONR] DO BEGIN eader; VAR I : INTEGER; BEGIN WITH HEADER1_EDIT DO BEGIN JOBNR := '0000000000'; FOR I:=1 TO MAXAINR DO BEGIN ALARMVAL[I] := 0; ALARMCONTROL[I] := IGNORE; END; {FOR} END; {WITH} WITH HEADER2_EDIT DO BEGIN  WRITELN(NAME,'max. value:':13,SCALE:9:3,UNIT:6); FOR I := 1 TO TOTSTEPNR DO REPEAT VALUE := real_val(SCALE, EDIT_TABLE[I]); WRITE(I:2,NAME:12,'value:':9,VALUE:9:3,UNIT:6,'new value: ':14); PROMPT(OUTPUT); FOR I:=1 TO MAXAINR DO BEGIN ABORTVAL[I] := 0; ABORTCONTROL[I] := IGNORE; END; {FOR} LATHE_LENGTH := 0; TUBE_WEIGHT := 0; TUBE_DIAMETER:= 0; END; {WITH} REPOSITION(RECIPE,0); RECIPE^.HEADER1 := HEADER1_EDIT VALUE := readreal(VALUE); OK := VALUE <= SCALE; IF OK THEN EDIT_TABLE[I] := int_val(SCALE, VALUE) ELSE ERROR(3); UNTIL OK; END; {WITH} searchfullindex(RCD_TABLE,STEPNUMBER,AONR,EXIST); ; PUT(RECIPE); REPOSITION(RECIPE,1); RECIPE^.HEADER2 := HEADER2_EDIT; PUT(RECIPE); END; {create_header} PROCEDURE change_limit(NR:INTEGER; LIMITNR:INTEGER;VAR LIMVAL : INTEGER; VAR CONTR : DICONTROL); VAR NUMBER : INTEGER;       VALUE : REAL; BEGIN WRITE(SYSTEMENTRY^.AILIST[NR].NAME,' alarm limit',LIMITNR:2); VALUE := real_val (SYSTEMENTRY^.AILIST[NR].SCALE,LIMVAL); WRITE(VALUE:9:3,'new alarm limit: ':19); PROMPT(OUTPUT); VALUE := readreal(VALUE); LIMVAL := int_vaADER1 := HEADER1_EDIT; PUT(RECIPE); REPOSITION(RECIPE,1); RECIPE^.HEADER2 := HEADER2_EDIT; PUT(RECIPE); END {change_header}; $SUBTITLE STEP EDITOR PROCEDURE step_change (VAR STEP_EDIT : STEPDEF); VAR CHOICE : CHAR; INDEXTYPE : RCD_INDEX; l(SYSTEMENTRY^.AILIST[NR].SCALE, VALUE); WRITE('type of action: '); PROMPT(OUTPUT); NUMBER := readint(0); CASE NUMBER OF 1 : CONTR := IGNORE; 2 : CONTR := BUZZER; 3 : CONTR := HOLD; 4 : CONTR := ALARM; 5 : CONTR := ABORT; TOTSTEPNR, NEWTOTAL : INTEGER; FOUND,EXIST: BOOLEAN; BEGIN WRITELN; WRITE('(starting) '); STEPNUMBER := steprequest; searchstepindex(INDEXTYPE,STEPNUMBER,TOTSTEPNR,EXIST); IF EXIST THEN BEGIN GET(RECIPE); STEP_EDIT := RECIPE^.ST OTHERWISE : ; END {CASE}; END {change_limit}; PROCEDURE change_header; {records 0 and 1 in the recipe file are reserved for the header} VAR I, OFFSET, COUNT ,NUMBER : INTEGER; FOUND, ANY : BOOLEAN; VALUE : REAL; BEGIN clearscreen; REPEP END {IF} ELSE create_step (STEP_EDIT,INDEXTYPE,STEPNUMBER,TOTSTEPNR); REPEAT clearscreen; WRITELN; WRITELN('STEP CHANGE FUNCTIONS':35); WRITELN; steptitle; WRITELN; WRITELN('(0) exit'); WRITELN('(1) name'); WRITELN('(2) setpoiOSITION (RECIPE,0); GET(RECIPE); HEADER1_EDIT := RECIPE^.HEADER1; REPOSITION (RECIPE,1); GET(RECIPE); HEADER2_EDIT := RECIPE^.HEADER2; COUNT := 0; OFFSET:= 1; REPEAT clearscreen; I := OFFSET; display_header (OFFSET,4, ANY); nt change '); WRITELN('(3) on/off outputs'); WRITELN('(4) digital inputs'); WRITELN('(5) recipe terminator'); IF INDEXTYPE = TIMED_STEP THEN WRITELN('(6) time') ELSE BEGIN WRITELN('(6) speed control'); WRITELN('(7) fast for IF ANY THEN BEGIN WRITELN; WRITELN('TYPE OF ACTION: (1) ignore'); WRITELN('(2) buzzer':26); WRITELN('(3) hold':24); WRITELN('(4) alarm':25); WRITELN('(5) abort':25); REPEAT WRITE('eward parameters'); END; {ELSE} IF INDEXTYPE = BLOCK_STEP THEN BEGIN WRITELN('(8) total nr of steps in block_step'); WRITELN('(9) tables for changing setpoints per step'); END {IF}; CHOICE := getchoice; CASE CHOICE OF '0' : ; nter nr to change a limit or action, or to exit: '); PROMPT(OUTPUT); I := READINT(0); IF I IN [1..MAXAINR] THEN BEGIN WITH HEADER1_EDIT DO change_limit(I,1,ALARMVAL[I],ALARMCON '1' : stepname (STEP_EDIT.NAME); '2' : stepsetpoint (STEP_EDIT); '3' : stepoutputs (STEP_EDIT.IOSET,OFF2); '4' : stepinputs (STEP_EDIT.IOSET); '5' : stepterminator (STEP_EDIT.TERMINATOR); '6' : IF INDEXTYPETROL[I]); WITH HEADER2_EDIT DO change_limit(I,2,ABORTVAL[I],ABORTCONTROL[I]); END{IF} ELSE IF I <> 0 THEN ERROR(1); UNTIL I=0; END {IF}; UNTIL OFFSET > MAXAINR; WITH HEADER2_EDIT DO BE = TIMED_STEP THEN steptime(STEP_EDIT.TIME) ELSE stepspeed (STEP_EDIT.SPEEDCONT); '7' : IF INDEXTYPE <>TIMED_STEP THEN stepforward(STEP_EDIT); '8' : IF INDEXTYPE = BLOCK_STEP THEN BEGIN NEWTOTAL :GIN WRITE('approximate distance between end switches of lathe is: '); WRITELN(LATHE_LENGTH:3,' CM'); WRITE('new distance: '); PROMPT(OUTPUT); LATHE_LENGTH := READINT(LATHE_LENGTH); END; {WITH} REPOSITION(RECIPE,0); RECIPE^.HE=steptotal(TOTSTEPNR,STEPNUMBER); change_index(STEPNUMBER,NEWTOTAL); TOTSTEPNR := NEWTOTAL; END {IF}; '9' : IF INDEXTYPE = BLOCK_STEP THEN steptables(STEP_EDIT.IOSET, STEPNUMBER     ,TOTSTEPNR); OTHERWISE : ERROR(1) END {CASE}; UNTIL CHOICE = '0'; searchstepindex(INDEXTYPE,STEPNUMBER,TOTSTEPNR,EXIST); RECIPE^.STEP := STEP_EDIT; PUT (RECIPE); END {step_chng}; $SUBTITLE DELETE STEPS PROCEDURE step_delete(VAR STEP_EDIT : ‡Í €3PCODÅ?\+P1c1RLP_ADDRESTEPDEF); VAR INDEXTYPE,INDEX1 : RCD_INDEX; STEPNUMBER,TOTSTEPNR,AONR : INTEGER; FOUND,EXIST: BOOLEAN; ANSWER : CHAR; BEGIN WRITELN; STEPNUMBER := steprequest; searchstepindex(INDEXTYPE,STEPNUMBER,TOTSTEPNR,EXIST); IF EXIST THEN BEG3, , , M̉}ÿþ,Mä}ÿü,@¢¢°1´•°1 ²y•°1 °1,²Mì¶…,@¢¢°1²y•°1 °1,,->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IN WRITE('delete a '); CASE INDEXTYPE OF TIMED_STEP : WRITE('time'); EVENT_STEP : WRITE('lathe'); BLOCK_STEP : WRITE('block of lathe'); OTHERWISE : ; END; {CASE} WRITE(' controlled step(s)? (Y/N) '); OLD LP ADDRESS IS:ÿNEW LP ADDRESS IS:ÿ PROMPT(OUTPUT); ANSWER := getchar; IF ANSWER = 'Y' THEN BEGIN STEP_EDIT := RECIPE^.STEP; del_from_index(INDEXTYPE,STEPNUMBER,TOTSTEPNR,FOUND); IF INDEXTYPE = BLOCK_STEP THEN BEGIN INDEX1 := RCD_T[&LP_ADDREABLE; FOR AONR := 1 TO MAXAONR DO IF AONR+OFF4 IN STEP_EDIT.IOSET THEN BEGIN del_from_index(INDEX1,STEPNUMBER,AONR,FOUND); IF FOUND THEN WRITELN ('associated setpoint ta Rm5600 END; 5605 5610 PROCEDURE start_proc; 5615 VAR NR,VALUE,X,COUNT, COUNT1 : INTEGER; 5620 CH : CHAR; 5625 BEGIN 5630 WITH STATUS DO 5635 IF (PROCSTATUS = RSET) AND (RECP_END <> 0) THEN 5640 BEGIN 5645 move_halfspeed; 5650 ‡Í €3PCODÅ?\+P1c1òRRECEIVE_ disp_status(FALSE); 5655 WRITELN('wait until exhaustswitch is high (inp 10)'); 5660 REPEAT 5665 getDIstat; 5670 getAIstat; 5675 UNTIL (EXHAUSTDI +OFF1) IN IOSET; 5680 {at exhaust switch} 5685 PROCSTAT3(²y�‘11}ÿìÄ‘QFÿîOÝœÂB(´yŸ˜11…‘}ÿîÂMQOݜ‘By”QFÿÀ²6U…6d}ÿð(²y�‘11}ÿìÀ‘}ÿðÄ‘QÀ�QFÿäÄ‘QF(´yŸ˜11}ÿöDš}ÿö$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rh3Mqý =pý«6 qý¦¤qþ°=pþ»6 qþ¶Mì¯}ÿþ²“…²6U…Mì±}ÿüOþ¬@@1@šš°1°1Oþ¬1OþÐOþ¼7OýœOþÐ@1Oýœ�@&1#°@0@71#�}ÿî�}ÿå�}ÿò²¥…0Oݜ‘By”Q|ÿäË‘}ÿå@A••°1Ë“°1 @G“�°1�}ÿôOÝœ¼ByˆFêOþä¾NOÝœ¼By+„¾‘}ÿò¾MQOÝœ¼By”QF¾�}ÿúOýœ1-)>>     Oýœ1~ÿçOýœ=1%Oý¬OþäGOýœ1(Oýœ1"}ÿøOýœ‚ÿç1¸�UF¶‘}ÿú@H““°1¶’°1 @L“�°1D/Oýœ1(Oýœ1"}ÿø¸�UF¶‘}ÿú@M““°1¶’°1 @Q“�°1¶¤Q¸�QFÿ„Oýœ=1%�}ÿò¶¤QF@R££°1°1=|ÿä‘}ÿô¼‘}ÿô¼ÂQFþ÷°1‘}ÿîOÝœ�Bº…²¥…€ÿäFþ«Šýœ1Šþ¬1->>>>>>>>>>>>>>>>>>>>>>>>>>>>> PUT(RECIPE); END {IF}; END {IF}; END; {ELSE} END {IF} ELSE WRITELN('source step does not exist'); END {stepcopy}; $SUBTITLE PRINT RECIPE OR STEPS PROCEDURE step_display; VAR INDEXTYPE : RCD_INDEX; TOTSTEPNR, OF/TERM ÿFN ÿFILENAME: ÿG ÿG ÿ/TERM ÿOUTPUT ÿBLOCKÿÿPUTÿÿGETÿÿUNRECOVERABLE ERRORÿFSET, STEP_OFFSET, NR : INTEGER; ANY,FOUND : BOOLEAN; BEGIN searchstepindex(INDEXTYPE,STEPNUMBER,TOTSTEPNR,FOUND); IF FOUND THEN BEGIN GET(RECIPE); STEP_EDIT := RECIPE^.STEP; STARS; WRITE('':20); STEPTITLE; IF STEP_"d)ãfRECEIVE_�READBYTEEDIT.TERMINATOR THEN WRITELN('':20,'end step'); IF INDEXTYPE = BLOCK_STEP THEN WRITELN('':20,'total nr of steps in this block:',TOTSTEPNR:3); IF INDEXTYPE = TIMED_STEP THEN BEGIN WRITE('':20,'steptime (h.mm.ss) is: '); ble also deleted'); END {IF} END {IF} END{IF} END {IF} ELSE WRITELN ('step does not exist'); END {step_delete}; $SUBTITLE COPY STEPS PROCEDURE step_copy(VAR STEP_EDIT: STEPDEF); VAR STEPNUMBER,TOTSTEPNR,DESTINNR,INDEXPS1,TOT disptime(STEP_EDIT.TIME); WRITELN; END {IF} ELSE BEGIN STARS; WRITE('PARAMETER SETTINGS WITH BURNER MOVING TOWARDS THE'); WRITELN(' EXHAUST SIDE'); END {ELSE}; STARS; WRITELN('':20,'analog outAL, N : INTEGER; ANSWER : CHAR; INDEXTYPE,INDEX1 : RCD_INDEX; FOUND,EXIST,OCCUPIED: BOOLEAN; TABLELIST : TABLEDEF; BEGIN WRITELN; WRITE('source '); STEPNUMBER := steprequest; searchstepindex(INDEXTYPE,STEPNUMBER,TOTSTEPNR,EXIST); IF EXIST puts'); WRITELN; OFFSET := 1; disp_MFC(STEP_EDIT.AOLIST,OFFSET,MAXAONR,ANY); WRITELN('':20,'unlinked analog inputs'); WRITELN; OFFSET := 1; STEP_OFFSET := 1; disp_AI (STEP_EDIT.AILIST,OFFSET,MAXAINR,ANY,STEP_OFFSET);THEN BEGIN GET(RECIPE); STEP_EDIT := RECIPE^.STEP; WRITE('destination '); DESTINNR := steprequest; check_index(OCCUPIED,DESTINNR,TOTSTEPNR); IF OCCUPIED THEN WRITELN('cannot copy the source step') ELSE BEGIN  WRITELN; WRITELN; WRITELN('':20,'digital outputs'); WRITELN; OFFSET := 1; disp_DO (STEP_EDIT.IOSET ,OFFSET,MAXDONR,ANY,OFF2,TRUE); WRITELN; WRITELN; WRITELN('':20,'digital inputs'); WRITELN; OFFSET := add_to_index (INDEXTYPE,DESTINNR,TOTSTEPNR); RECIPE^.STEP := STEP_EDIT; PUT(RECIPE); IF INDEXTYPE = BLOCK_STEP THEN {COPY AO-TABLES} FOR N := 1 TO MAXAONR DO IF N+OFF4 IN STEP_EDIT.IOSET THEN BEGIN  1; disp_DI (STEP_EDIT.IOSET ,OFFSET,MAXDINR,ANY); WRITELN; IF INDEXTYPE <> TIMED_STEP THEN BEGIN WRITELN; WRITELN('':20,'speed control'); WRITELN; dispramps(STEP_EDIT.SPEEDCONT); STARS; W searchfullindex(RCD_TABLE,STEPNUMBER,N,FOUND); IF FOUND THEN BEGIN GET(RECIPE); TABLELIST := RECIPE^.TABLE; add_to_index(RCD_TABLE,DESTINNR,N); RECIPE^.TABLE := TABLELIST; RITE('PARAMETER SETTINGS WITH BURNER MOVING TOWARDS THE'); WRITELN(' GAS INLET SIDE'); STARS; WRITELN('':20,'digital outputs'); WRITELN; OFFSET := 1; disp_DO (STEP_EDIT.IOSET ,OFFSET,MAXDONR,ANY,OFF3,TRUE);       WRITELN; WITH SYSTEMENTRY^ DO BEGIN dispforward(TEMP[H2_AO],STEP_EDIT.H2_SETP); dispforward(TEMP[O2_AO],STEP_EDIT.O2_SETP); dispforward(LATHE[SPEED_AO],STEP_EDIT.FAST_SPEED); END; {WITH}  BEGIN WRITELN('enter to exit'); ANSWER := getchar; END; {ELSE} END {ELSE} END {print_recipe}; $SUBTITLE MAIN PROGRAM BEGIN clearscreen; STARS; WRITELN('':20,' RECIPE EDITOR'); STARS; IOABORT (SYSTEMENTRY,FALSE) WRITELN; END {IF}; IF INDEXTYPE = BLOCK_STEP THEN BEGIN STARS; WRITELN('':20,'changing setpoints in this block'); STARS; dispTABLES(STEP_EDIT.IOSET,STEPNUMBER,TOTSTEPNR); END; {IF} END {IF} ELSE ; RESET (SYSTEMENTRY,'/D1/SYSTEM'); SYSERROR := IORESULT(SYSTEMENTRY); IOABORT (SYSTEMENTRY,TRUE); IF SYSERROR = 216 THEN WRITELN ('no configuration file') ELSE BEGIN GET (SYSTEMENTRY); REPEAT WRITE('enter name of recip BEGIN WRITELN; WRITELN('':20,'step',STEPNUMBER:3,' does not exist'); WRITELN; END; WRITELN; END; {stepdisplay} PROCEDURE print_recipe(VAR STEP_EDIT : STEPDEF); VAR I, OFFSET,NR, RECIPE_END: INTEGER; YR,MON,DAY,HR,MIN,SEC : INTEGER; LP,e: '); PROMPT(OUTPUT); readstring(INPUTSTRING,CHANGE); IF CHANGE THEN BEGIN OK := NOT (INPUTSTRING[1] IN ['0'..'9',' ']); END {IF} ELSE OK := FALSE; IF NOT OK THEN ERROR(7); UNTIL OK; FOUND: BOOLEAN; RECIPNAME : ARRAY[1..12] OF CHAR; ANSWER : CHAR; BEGIN WRITE('output on printer (Y/N)? '); PROMPT(OUTPUT); ANSWER := getchar; LP := ANSWER = 'Y'; WRITE('display all steps (Y/N)? '); PROMPT(OUTPUT); ANSWER := getchar; IF  RCNAME [1 FOR 11] := '/D1/RECIPE/'; INDEXNAME [1 FOR 17] := '/D1/RECIPE/index.'; FOR I := 1 TO 12 DO BEGIN RCNAME [I+11]:= INPUTSTRING [I]; INDEXNAME [I+17]:= INPUTSTRING [I]; END; {FOR} UPDATE (RECIPE,RCNAME); ANSWER = 'N' THEN STEPNUMBER := steprequest; IF LP THEN BEGIN REWRITE(OUTPUT,'/P1'); STARS; SYSTIME(YR,MON,DAY,HR,MIN,SEC); WRITELN('':20,YR:1,'/',MON:1,'/',DAY:1,'OPTICAL FIBERS':25); WRITELN; FOR I := 1 TO 12 DO  UPDATE (INDEX,INDEXNAME); REPOSITION (INDEX,0); GET (INDEX); IF EOF(INDEX) THEN BEGIN FOR I := 0 TO 1 DO WITH INDEX^[I] DO BEGIN STARTSTEPNR := 0; END_OR_AONR := 0;  RECIPNAME[I] := RCNAME [I + 11]; WRITELN('':20,'RECIPE ',RECIPNAME); STARS; WRITELN; END {IF} ELSE clearscreen; IF ANSWER = 'N' THEN step_display ELSE BEGIN WRITELN('':20,'RECIPE HEADER'); STARS; REPOSIT IF I = 0 THEN DESCRIPTOR := RCD_1HEADER ELSE DESCRIPTOR := RCD_2HEADER; END; {WITH} FOR I := 2 TO MAXRECORD DO WITH INDEX^[I] DO BEGIN DESCRIPTOR := NOT_ALLOCATED; STION(RECIPE,0); GET(RECIPE); RECIPE^.HEADER1:= HEADER1_EDIT; REPOSITION(RECIPE,1); GET(RECIPE); RECIPE^.HEADER2:= HEADER2_EDIT; OFFSET := 1; display_header(OFFSET,16,FOUND); STEPNUMBER := 0; RECIPE_END := findendARTSTEPNR := -1; END_OR_AONR := 1; END; {WITH} create_header; END; {IF} clearscreen; REPEAT REPOSITION (INDEX,0); GET (INDEX); WRITELN('':20,'RECIPE EDITOR'); WRITELN; step; REPEAT {UNTIL RECIPE_END} step_display; STEPNUMBER := STEPNUMBER + 1; UNTIL STEPNUMBER > RECIPE_END; IF LP THEN BEGIN PAGE(OUTPUT); WRITELN; REWRITE(OUTPUT,'/TERM'); END {IF} ELSEWRITELN('(0) EXIT'); WRITELN('(1) CHANGE HEADER'); WRITELN('(2) CHANGE A STEP'); WRITELN('(3) COPY A STEP'); WRITELN('(4) DELETE STEP'); WRITELN('(5) PRINT RECIPE'); CHOICE:= getchoice; clearscr     een; CASE CHOICE OF '0' : ; '1' : change_header; '2' : step_change(STEP_EDIT); '3' : step_copy (STEP_EDIT); '4' : step_delete(STEP_EDIT); '5' : print_recipe(STEP_EDIT); OOP = (AIONLY,AIDOBELOW,AIDOABOVE,AISETSAO,SETPOINT); DICONTROL = (IGNORE,ABORT,ALARM,HOLD,TIMERESET,BUZZER); SAFESTATE = (LOW,HIGH); DOCONTROL = (NORMAL,INVERTED); TEMP_TYPE = (T_AUTO_MAN,TEMP_AI,PREF_AO,H2_AO,O2_AO OTHERWISE : ERROR(1) END {CASE}; REPOSITION (INDEX,0); PUT (INDEX); UNTIL CHOICE = '0'; END {ELSE} END. {recipe editor} TEP_EDIT); '4' : step_delete(STEP_EDIT); '5' : print_recipe(STEP_EDIT); ); LATHE_TYPE = (L_AUTO_MAN,SPEED_AO,INLETSWITCH,EXHAUSTSWITCH); NAMETYPE= ARRAY[1..NAMELENGTH] OF CHAR; AI = RECORD NAME : NAMETYPE; UNIT : ARRAY[1..UNITLENGTH] OF CHAR;  processaction(ALCONTR); END {IF} ELSE AIPREALARM := AIPREALARM + [AINR]; END {ELSE} END {ELSE} END; {ELSE} IF NOT (ALARMSTATUS OR ABORTSTATUS) TH SCALE : REAL; LOOP : AI_LOOP; CONTROL : AICONTROL; DOLINK : 0..MAXDONR; AOLINK : 0..MAXAONR END; AO = RECORD NAME : NRƒ£Hô0. AMETYPE; UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL; AILINK : 0..MAXAINR; DOLINK : 0..MAXDONR; SOFTST : 0..MAXDONR;   RS• L:3, UNIT:10); WRITELN(AILINK:4, DOLINK:8, SOFTST:10, RATIOLINK:8, RATIOVALUE:15:1) END {WITH} END {AO_display}; PROCEDURE DI_display(VAR PORTNR :INTEGER); BEGIN WITH SYSTEMENTRY^.DILIST[PORTNR] DO BEGIN WRITE(PORTNR:2, NAME:12$TITLE RUNTIME FOR FIBER OPTICS CONTROL PROGRAM RUNTIME(INPUT,OUTPUT); CONST NONAME = 'XXXXXXXXXX'; NOUNIT = 'XXXXX'; NAMELENGTH = 10; UNITLENGTH = 5; MAXAINR = 32; MAXAONR = 16; MAXDINR = 24; ); CASE SAFE OF LOW : WRITE('low ':6); HIGH : WRITE('high':6) END {DISAFE}; CASE CONTROL OF IGNORE : WRITE('ignore ':18); ABORT : WRITE('abort ':18 MAXDONR = 32; OFF1 = -1; OFF2 = 47; OFF3 = 95; OFF4 = 143; MAXLENGTH = 70; STEPSINBLOCK = 70; MAXTAB = 70; MAXFUNC = 50; MAXRECORD = 49; JOBLEN); ALARM : WRITE('alarm ':18); HOLD : WRITE('hold ':18); TIMERESET : WRITE('time reset':18); BUZZER : WRITE('buzzer ':18); END {DICONTROL}; WRITELN(DOLINK:9GTH = 10; PAGELENGTH =59; DA_BOARD = $ED08; {TO BE CHANGED TO ED20 WITH NEW BOARDS} AD_BOARD = $ED00; DI_BOARD = $EE08; DO_BOARD = $EE00; TYPE AICONTROL = (DONTCARE,BANDLIMIT,UPPERLIMIT,LOWERLIMIT); AI_L); END {WITH} END {DI_display}; $SUBTITLE DISPLAY THE DIGITAL OUTPUTS, TEMP. AND LATHE CONTROL PROCEDURE DO_display(VAR PORTNR :INTEGER); BEGIN WITH SYSTEMENTRY^.DOLIST[PORTNR] DO BEGIN WRITE(PORTNR:2, NAME:12); CASE CONTRO     L OF NORMAL : WRITE('normally closed':17); INVERTED : WRITE('normally open ':17) END {DOCONTROL}; WRITELN(INTERLOCK:4,CONDLOCK:11) END {WITH} END {DO_display}; PROCEDURE TEMP_display; BEGIN 3±1±1F=N5ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> WITH SYSTEMENTRY^ DO BEGIN WRITELN('auto/manual switch is DI:',TEMP [T_AUTO_MAN]:2); WRITELN('flame sensor is DI:','':7, TEMP[FLAME_DI]:2); WRITELN('flame ignition is DO:','':5,TEMP[LITFLAME]:2); WRITELN('temperature contro3°1@6#6#°1°1'05$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>l is AI:',TEMP [TEMP_AI]:2); WRITELN('preform temperature is AO:',TEMP [PREF_AO]:2); WRITELN('Hydrogen burner is AO:','':4,TEMP [H2_AO]:2); WRITELN('Oxigen burner is AO:','':6, TEMP [O2_AO]:2); END {WITH} END {TEMP_display}; PROCC = change, D = delete, = exitÿ‡Í €3PCODÅ?\+P1c1Å{;ƒRRECIPE_E3Ñô±1±1F'±=1%±ø2úØ1 Ø1 (±1"òÒ�UF±1 Ôö±=1%DÔöÖð&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3v Ñ Mÿ rÿûvÿû� bF Crÿûvÿûr9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3vrÿù±1±1F+±=1%±þ2ôÞ1 Þ1 (±1"òÒ�UF ±1 vÿùrÿô±=1%Dvÿùrÿôvÿôr 9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3vMÿ v rÿùvÿùMÿ ZFMÿòDvÿùòÒq9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>36Fqÿ®=5¹6 qÿ´2ª@@12ª1Ñ2º‘"Nx= T*„ÑxFB‘qÿ¨6Fqÿ¦uÿ¨uÿ¦eF/Ðuÿ¨‹F"N2ºuÿ¨‹F"Nx„uÿ¨uÿ¦aF uÿ¨#qÿ¨DÿÑ2ª19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3@Ÿ�°1@��°1°1±1±1F=05ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/TERM ÿF ÿÿyour choice: ÿ3 ÑD~@››°1°1DŽ@ ŸŸ°1°1D€@6#6#°1°1Dp@@¥¥°1°1Db@V6*6*°1°1DR@�6&6&°16F“°1 °1D<@¨6363°1°1D,@Ü••°1°1DAFÿê‘E>ÿrÿ€ÿŽÿžÿ¬ÿ¼ÿÒ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     INPUT ERRORÿENTRY TOO LARGEÿnew value exceeds the maximum valueÿINPUT IS NOT A NUMBERÿmax. time is 8 hrs, 59 minutes, 59 secondsÿmax. number of steps in a blockstep isÿno spaces in name allowed; first char. not a numberÿERRORÿ3u =„�ô61øÔØeF›OþFÔ‹1BúÚyˆpFw=5ú�òÚy‘üÒÜeFdÚyÒÐ]ÚyÒÐÑa*5û4û4úF/@¦¦°1Úy•°1 @šš°1Úy“°1 @"��°1°1=5ú4ûFu =„ÒÜaFÒ#òDÿœÔØaFÔ#ôDÿe9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 °1�ò6KôÒÔeF=*‘°1ÒÔaFÒ#òDÿî°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>a step with stepnumberÿand lengthÿ still existsÿ3 «+5ÿ4ÿ‘°1=X‘°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>36ÿòÒ‘òOþFÒ‹1BõÕy�Q*5ý4ýFÕu ‹…ÕJÐ…ÕJÑ…OûòÒ 14ýÒ61QFÿºÒ61QF @¨¨°1°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 @��°1°1(�0ñ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>too many steps in recipeÿstep number: ÿ36ÿòÒ‘òOþFÒ‹1BõÕyÐQÕy–Q*5ý4ýFÕJÑ…4ýÒ61QFÿÊ9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 �ò�ô61öÔÖeF'OþFÔ‹1BøØyÒYFØyòÔÖaFÔ#ôDÿÙÒñ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>36ÿòÒ‘òOþFÒ‹1BôÑÔyu QÔyÐQÔyu Q*„ÑxFÔ�…ÔJ6ÿ…ÔJ‘…ÑxÒ61QFÿ±9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>36ÿòÒ‘òOþFÒ‹1BôÑÔyu QÔyˆp*„u Ôy‹…ÐÔy…ÑxÒ61QFÿ¼ÑxFOûòÒ 19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3@6&6&°1Г°1 °1=5ý@'››°1°1(Ð0òÒ6FeÒ�Y*5ü4üF–0 4üÒÐYF 2ýÑÐÒÐ04ü4ýFÿ¹Òq 9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>36ÿòÒ‘òOþFÒ‹1BôÑÔyu QÔyÐQÔyu Q*„ÑxÒ61QFÿÈÑxFOûòÒ 19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>total number of steps in this block isÿnew total: ÿ     3=5ý°1@žž°1°1@©©°1°1@)6#6#°1°1'0|ÿø€ÿø.D'u ”…D6u •…D.u –…Ñ(‘Ð0…D=5ýDA13Fÿñ61E>ÿÈÿÐÿØ4ýFÿ…u y‹ÐÑy0u õÕ@M7 ‘ò ÷Ò×eFÕJ Ò‹"B�…Ò×aFÒ#òDÿä‘ò¤÷Ò×eFÕJ*Ò‹"B�…Ò×aFÒ#òDÿäÕJRˆ‡ ‘ò•÷Ò×eF5ÕJrÒ>new name: ÿ‹"B�B�…ÕJrÒ‹"B‘B�…Ò×aFÒ#òDÿËÕJ†=„ÕJ‡�…ÕJ‰�…ÕJ‹�…ÕJ��…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3Ñ2 @W *„9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(1) TIMED STEPÿ(2) LATHE CONTROLLED STEPÿ(3) LATHE CONTROLLED BLOCK OF STEPSÿXXXXXXXXXXÿXXXXXXXXXXÿ3ÑDM@œ–°1D[@œ–°1DP@œ–°1DE@œ–°1D:@œ–°1D/@#œš°1D$@.œ�°1DAFÿíEÿ¦ÿÒÿÇÿ¼ÿÝÿ±&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3�òu yô=5úOöPÔ‹"B!ýÝ8 2û04ûFK)Ýz2 Ô‹"By0rÿõÝœš°1vÿõ™“°1ÝJ —•°1@˜�°1Ò‘ò4úF°14ú*5úÔ‘ôÒÐQÔ YFÿŒÑÒ�U*„u Ô…°19&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IGNOREÿBUZZERÿHOLD ÿALARM ÿABORT ÿTIME RESETÿÿÿ3@””°1½•°1 @’’°1Oý§šš°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3�òu yöÑyô=5ùOòÐÖ‹ "Bÿß8 2ø04øFXßy�QFO)ßz2Ô‹"By0rÿóßœš°1vÿó™“°1ßJ —•°1@˜�°1Ò‘òÔ‘ô4ùF°14ù*5ùÖ‘öÒu QÖ6 YFÿ|ÐÒ�U*„u Ö…ÑÔ…°190>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>STEPÿ: ÿÿ3@šš°1°12º2¹04¹F Ñ‘"N2º‘"N7 &>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3OùàÑ‹ "B8 2ÿ04ÿFOùàÑ‹ "Bœš°1D=‘ó õÓÕeF3OöPÓ‹"B!yÑQFOöPÓ‹"B!œš°1ÓÕaFÓ#óDÿÍ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     3Ñ=„‘ò6 õÒÕeF~OùàÒ‹ "B÷×y �UF[Ò6/w ×y 6/w Ò6_w ×y 6_w *5ý4ýF"@§§°1Ò0@““°1×y 0°1Ñ=„ÒÕaFÒ#òDÿ‚9">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>šš°1@d�›°1êz™“°1@pœ›°1°1)êzÑJ*Ø‹"By0rÿî)vÿî0rÿîvÿîêzf*5é4éF%ÑJ*Ø‹"B(êzvÿî0…Ô‘ôØ‘øD“0 4éFÿyÖ‘öÔ˜QÖ6 YFÿFÜ6 YFÿ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>INTERLOCK ERROR BETWEENÿANDÿchange any of these setpoints (Y/N)? ÿmax. value:ÿnew value: ÿchange any of these setpoints (Y/N)? ÿmax. value:ÿnew value: ÿ3Ñ=„‘ò6 õÒÕeF‚OùàÒ‹ "B÷×y�UF_Ò6/w ×y6/w Ò6_w ×y6_w *5ý4ýF$@6#6#°1Ò0@$““°1×y0°1Ñ=„ÒÕaFÒ#òDÿ~9">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3!�öuyø�òOùàØ‹ "BþÞ8 2÷04÷F Þšš°1DH4FC‘ô qÿðÔàeF7OöPÔ‹"B!yØQFOöPÔ‹"B!šš°1=5÷ÔàaFÔ#ôDÿÉ4÷FbØuu{ Þy �QØuu{ Þy ‘QF 2ô@7D2ô@72ô”“°1@–�°1Ö‘öÒ‘òÒ”QF°1�òØ‘øÖu QØ6 YFÿu Ö�U*„uØ…°>CONDITIONAL INTERLOCK ERROR BETWEENÿANDÿ19 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3Ñ=„‘þ qÿïÞáeF×OöPÞ‹"B!yüÜ�UF´)OöPÞ‹"B!z2Þ‹"By0rÿö)OöPÜ‹"B!z2Ü‹"By0rÿûvÿû� VFvÿövÿû OöPÞ‹"B!zZ*5ñD vÿö� V*5ñ4ñF3@££°1OöPÞ‹"B!œš°1OöPÜ‹"B!œš°1°1Ñ=„ÞáaFÞ#þDÿ)9‘>>>>>>>>>>>>>>>>>>>>> ONÿOFFÿÿRATIO ERROR BETWEENÿ3"0 ‘÷0×õÐ2ù˜2öÑ=0!4öF¼@6#6#°1°1'05ÿ4ÿ=YPF¡@$6$6$°1°1°1�óOùàÕ‹ "BþÞ8 2ø04øFeÞšš°1@I““°1°1Ó‘ó'05ÿ4ÿ=NTFB4ÿ=1PÞy �Q4ÿ=0PÞy ‘Q*5÷4÷FÐÐ{ Õч DÐÐ{ Õч Õ‘õÓ˜QÕ6 YFÿq0 ×6 YFÿ$Ð{ 2ô0Ð{ 2õ04ô4õ>3 0 ‘ü0ÜöÑJ 8 2ô˜2è04èFE�ô@6%6%°1°1°1'05ó4ó=YPF%OöPÖ‹"B!qÿæê8 2é04éFƒêšš°1@&�›°1êz™“°1@2œ›°1°1)êzÑJ Ö‹"By0rÿî)vÿî0rÿîvÿîêzf*5é4éFÑJ Ö‹"B(êzvÿî0…D“0 êyò4éFÿ}Ò�UFmOùàÒ‹ "Bqÿævÿî� Zêy >Fÿ9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>�Qvÿî� Rêy ‘Q*5êÑqÿæ4êFêJRê{ RÒ6/Ò6_‡ DêJRê{ RÒ6/Ò6_‡ Ô‘ôÖ‘öÔ˜QÖ YFþÛ0 Ü YFþšÑ{ R2ë0Ñ{ R2ì0Ñ8�2í04ë4ì4íFþn‘ü‘ú0 0ÜöÚøÑJ*8(2ô˜2è2ö04èFÚ�ô@>6%6%°1°1°1'05ó4ó=YPFºOòÐÖ‹ "Bqÿæê8 2é04éêy�QF‡ê>change any of these outputs (Y/N)? ÿ0 = OFF, 1 = ON, = don't changeÿ : ÿ     3#�òu yô=5úOø`Ô‹"Bqÿíã8 2û04ûFWÔ6ÿu { F 2ï@7 D2ï@ 7 ãšš°12ï�›°1ãy ‹0Ò‘ò4úF°1D@•�°14ú*5úÔ‘ôÒÐQÔ¨YFÿ~ÑÒ�U*„u Ô…°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>stepÿtime is (h.mm.ss.):ÿnew ÿtime is (h.mm.ss.):ÿÿcheck ÿdon't checkÿÿ3(Oûê‘Byô@6&6&°1@'™�°1@(™™°1°1Crÿò‘ò•qÿðÒàeFš)OöPÔ‹"B!zÑÒ‹"B‘By0rÿ÷Ò’°1 @2˜�°1ÑÒ‹"B�By0&vÿò�“°1OöPÔ‹"B!J —•°1vÿ÷�“°1OöPÔ‹"B!J —•°1°1vÿ÷rÿòÒàaFÒ#òDÿf&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3$‘÷0 0×õÑ2ù˜2ö0#4öF³@6"6"°1°1'05ÿ4ÿ=YPF˜@#6'6'°1°1@K6)6)°1°1�óOø`Õ‹"BüÜ8 2ø04øFSÜšš°1@u““°1°1Ó‘ó'05ÿ4ÿ=NTF04ÿ=1P*5÷4÷FÑÑ{ Õ6ÿ‡ DÑÑ{ Õ6ÿ‡ Õ‘õÓ˜QÕ¨YFÿ„רYFÿ1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>interval time(h.mm.ss) start speedÿÿend speedÿÿchange any of these inputs (Y/N)? ÿ0 = don't check this input in this stepÿ1 = check this input, = don't changeÿ : ÿ R­Ï3%Ñ2 ‘"Nx.ˆÿ2 ’"Nx=.P2 “"Nx.ˆ?2 ”"Nx.ˆÿ2 •"Nx=.P2 –"Nx.ˆ?2 —"Nx.ˆÿ*„ÑxFt2 ‘"Nx5üÐ4ü.=0.…2 “"Nx5ý2 ”"Nx5üÐ6<Ðyš4ý.=0.4ü.=0.…2 –"Nx5ý2 —"Nx5üÐ6<Ðyš4ý.=0.4ü.=0.…D>>$TITLE RUNTIME FOR FIBER OPTICS CONTROL PROGRAM RUNTIME(INPUT,OUTPUT); CONST NONAME = 'XXXXXXXXXX'; NOUNIT = 'XXXXX'; NAMELENGTH = 10; UNITLENGTH = 5; MAXAINR = 32; MAXAONR = 16; MAXDINR = 24; 2 ‘"Nx=8XF•0 D‘0 9J>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MAXDONR = 32; OFF1 = -1; OFF2 = 47; OFF3 = 95; OFF4 = 143; INTOFF1 = 9; INTOFF2 = 12; MAXLENGTH = 70; STEPSINBLOCK = 70; MAXTAB = 70; MAXFUNC3&MùÑýÝÙûÝÙý2ù‘"NÛ=0.+„Ù6<‹ùÝÙûÝÙýÛš‹ÿÛš‹ qÿï2ù’"N=.„2ù“"Nß=0.+„2ù”"Ná=0.+„Ýš‹ÿÝš‹ qÿï2ù•"N=.„2ù–"Nß=0.+„2ù—"Ná=0.+„2ù™—°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> = 50; MAXRECORD = 49; JOBLENGTH = 10; PAGELENGTH =59; SOFTCOUNT = 6; DELAYCOUNT = 20; FLAMECOUNT = 9; DA_BOARD = $ED20; AD_BOARD = $ED00; DI_BOARD = $EE08; DO_BOARD = $EE00;3'0 0=5ÿ@””°1@££°1Ñy0&°1@””°1@££°1@2’�°1°12¸2þ04þF 2¸8FÑ2ÿ0%4ÿFÿ¬&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TYPE AICONTROL = (DONTCARE,BANDLIMIT,UPPERLIMIT,LOWERLIMIT); AI_LOOP = (AIONLY,AIDOBELOW,AIDOABOVE,AISETSAO,SETPOINT); DICONTROL = (IGNORE,ABORT,ALARM,HOLD,TIMERESET,BUZZER); SAFESTATE = (LOW,HIGH); DOCONTROL = (     NORMAL,INVERTED); TEMP_TYPE = (T_AUTO_MAN,TEMP_AI,PREF_AO,H2_AO,O2_AO); LATHE_TYPE = (L_AUTO_MAN,SPEED_AO,INLETSWITCH,EXHAUSTSWITCH); NAMETYPE= ARRAY[1..NAMELENGTH] OF CHAR; AI = RECORD NAME : NAMETYPE; 3+0 0@œœ°1ÑxF@ ””°1@¤¤°1°1@'6"6"°1°1'05ÿ4ÿ=0TFÑ4ÿ=YP*„&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL; LOOP : AI_LOOP; CONTROL : AICONTROL; DOLINK : 0..MAXDONR; this step isÿ notÿ defined as end stepÿmark this step as end step (Y/N) ?ÿ AOLINK : 0..MAXAONR END; AO = RECORD NAME : NAMETYPE; UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL; AILINK : 0..MAXAINR; 3,OöPЋ"B!÷)×zÑ0rÿûךš°1vÿû˜’°1×J –•°1@’�°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> DOLINK : 0..MAXDONR; SOFTST : 0..MAXDONR; RATIOLINK : 0..MAXAONR; RATIOVALUE : REAL END; DI = RECORD NAME : NAMETYPE; ÿ3)OöPЋ"B!ø)ØzÑy0rÿûØšš°1@�›°1Øz™“°1ØJ –•°1@ ž›°1°1)vÿû0rÿûvÿûØzf*5ú4úFÑ(Øzvÿû0…D“0 4úFÿ“9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3-0 0@§§°1°1ÑJR6_0"Oûà“ByòÒÑy‰0,°1ÒÑJ‰0)Oûà”ByòÒÑy‹0,°1ÒÑJ‹0)Oûê‘ByòÒÑy�0,°1ÒÑJ�0)&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>max. value:ÿnew value: ÿFAST FORWARD PARAMETERSÿ3*0 0@6464°1°1@56565°1°1Ñ0(°1@k6464°1°1(�0ôÔ–aÔ�YFa@ šš°1°12°2®0=5¯4®F2°8FÑÔ‹"B�B2¯0%4¯FÿÈ@«��°1°1Oûê‘ByòÒÑÔ‹"B‘B0)Ô�QFÿU&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3.�òÑ�…‘ô ÷Ô×eF¥OöPÔ‹"B!ùÙ8 2û04ûFCÙy�UF.OùàÙy‹ "By �QOùàÙy‹ "By�Q*5û4ûÙy�Q*5ûÔM�w 4ûF*Ô’°1 Ùœš°1@“�°1ÑÑy‘…Ò‘òÒ”QF°1�òÔ×aFÔ#ôDÿ[°19">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>five time intervals can be given, in which the latheÿ speed is ramped lineair between start and end value.ÿenter nr of interval to be changed or to exit: ÿnew time: ÿnew end speedÿÿ      3/0 @6>6>°1°1ˆs ÿÙ‘ö qÿ×Öuÿ×eFw ÿÙÖM�s ÿÙÖuÿ×aFÖ#öDÿáw ÿÙ2þ0.@?6868°1°1Ñ{ 2þ0.Ò�QF @xœœ°1°1Ò•aFF@…6060°1°1(�0ôÔ�YÔ aÔÑ{ FÑÑ{ ÔM�‡ Ò‘òÔ�QÒ•QFÿºÒ�YFK@¶6363°1°1(�0ôÔ�YÔ aÔM�Ñ{ FÑÑ{ Ô>>enter number to change a function table or to exitÿmax. value:ÿvalue:ÿnew value: ÿthis output is not defined as a changing oneÿM�‡ Ò‘òÔ�QÒ�QFÿµ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>32�òu yô@’’°1@–”°1@£œ°1@˜–°1@ œ°1@)˜–°1@0œš°1°1OòÐÔ‹ "BþÞ8 2ô04ôF©)ÞzOý'Ô‹ "By0rÿ÷Ô’°1 Þœš°1vÿ÷™“°1OýgÔ‹ "By‹ûÛ‹0)ÞzOü‘Ô‹ "By0rÿ÷OüÑÔ‹ "By‹ûvÿ÷œ“°1Û‹0Þz™“°1ÞJ –•>all outputs that can be defined as changing during a blockstepÿoutputs currently defined as changing in this block stepÿNONE DEFINEDÿenter a number to add an entry or to exit: ÿenter a number to delete an entry or to exit: ÿ°1°1Ò‘òÔ‘ôÒÐQÔ6 YFÿ-ÑÒ�U*„u Ô…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>30‘ò‘ö qý6Öuý6eF€ÖM�u { Fa—ÐÖ2ù04ùFOûò1Šý8Ò‹"BŒOü7ŒD6‘ô6Fqý4Ôuý4eF'Šý8Ò‹"BŒÔ‹F"B�…Ôuý4aFÔ#ôDÿÙÒ‘òÖuý6aFÖ#öDÿ€@””°1‘ö qý6Öuý6eF1ÖM�u { FOöPÖ‹"B!Ÿš°1Öuý6aFÖ#öDÿϰ1‘ôÑqý6Ôuý6eF¤‘òÔБ“°1 @’�°1‘ö>nrÿnameÿalarm limit1ÿactionÿalarm limit2ÿactionÿmax. valueÿ qý4Öuý4eFqÖM�u { FR)OöPÖ‹"B!zŠý8Ò‹"BŒÔ‹F"By0rÿôvÿô™“°1OöPÖ‹"B!J –•°1Ò‘òÖuý4aFÖ#öDÿ�°1Ôuý6aFÔ#ôDÿ\9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>33Oý@7 ‘ò6 ôÒÔeF*Oý'Ò‹ "B�…OýgÒ‹ "B�…ÒÔaFÒ#òDÿÖ‘ò6 ôÒÔeF*Oü‘Ò‹ "B�…OüÑÒ‹ "B�…ÒÔaFÒ#òDÿÖ�}ý� ~ý� ~ýOûò� 1OüOý7ŠOûò1Oûò‘ 1OüOü‘7ŒOûò1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>stepÿÿ0000000000ÿ31u 0/0 u { 2ú0.@6868°1°1(�0ôÔ�YÔM�u { FS—ÐÔ2ò04òFOûò1ŠÿeOü7ŒD2—ÐÔ0‘ø6FqÿcØuÿceFŠÿeØ‹F"B�…ØuÿcaFØ#øDÿã0 OöPÔ‹"B!qÿcuÿcšš°1@9�›°1uÿcz™“°1uÿcJ –•°1°1‘øÑqÿaØuÿaeF¢)uÿczŠÿeØ‹F"By0rÿóØ’°1 uÿcœ>34OòÐu ‹ "Bšš°1@��°1u ’°1 )OòÐu ‹ "BzÐy0rÿùvÿù™“°1@£¡°1°1)vÿù0rÿùÐ(OòÐu ‹ "Bzvÿù0…@   °1°1(�0òÒD!Ñ�…D5Ñ•…D/Ñ“…D)Ñ’…D#Ñ‘…DDAFÿõ‘E>ÿÏÿÕÿÛÿáÿç9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>š°1@E™–°1vÿó™“°1uÿcJ –•°1@Lž›°1°1)vÿó0rÿóvÿóuÿczf*5ñ4ñFŠÿeØ‹F"B(uÿczvÿó0…D“0 4ñFÿlØuÿaaFØ#øDÿ^—ÐÔ2ò0OüŠÿe7ŒOûò1DÔ�UF @X6,6,°1°1Ô�QFþ\9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> alarm limitÿnew alarm limit: ÿtype of action: ÿ!     350 Oûò� 1Oûò1OýOü7ŠOûò‘ 1Oûò1Oü‘Oü7Œ�ô‘ö0 Öø2ú”2÷024÷Fª°1@ªª°1°1@ªš°1°1@&¨˜°1°1@/©™°1°1@9©™°1°1@C6767°1°1(�0øØˆþÿÿÿFAØ‘Oý'Ø‹ "BOýgØ‹ "B04Ø’Oü‘Ø‹ "BOüÑØ‹ "B04D Ø�UF‘0 Ø�QFÿ�Ö6 YFÿ=@{6767°1>>delete a ÿtimeÿlatheÿblock of latheÿ controlled step(s)? (Y/N) ÿassociated setpoint table also deletedÿstep does not existÿ�ý“°1 @³““°1°1@·žž°1°1(�ý0}ýOûò� 1OüOý7ŠOûò1Oûò‘ 1OüOü‘7ŒOûò1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>38°1@——°1(0 ü2ïÜ2ö2í04íF©Oûò1ÑOü7�@œœ°1(0 ø2îØÚ04îF@««°1°1Dtá‹ØÚ0OüÑ7�Oûò1á–QFX‘ò qÿ^Òuÿ^eFJÒM�Ñ{ RF-—ÜÒ2ì04ìF Oûò1Šÿ`Oü7Œ—ØÒ0OüŠÿ`7ŒOûò1Òuÿ^aFÒ#òDÿ¶D @1ªª°1°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE OF ACTION: (1) ignoreÿ(2) buzzerÿ(3) holdÿ(4) alarmÿ(5) abortÿenter nr to change a limit or action, or to exit: ÿapproximate distance between end switches of lathe is: ÿ CMÿnew distance: ÿsource ÿdestination ÿcannot copy the source stepÿsource step does not existÿ36°1@››°1(0 }ÿó2ý½2ù2ø04øFOûò1ÑOü7�D Ñ2ý½2ù00 °1@ 6#¥°1°1°10°1@"™™°1°1@,™™°1°1@6¥¥°1°1@L££°1°1@`££°1°1@t¦¦°1°1Ó”QF@‹™™°1°1D@•¢¢°1°1@¨¬¬°1°1Ó–QF@Å6$6$°1°1@6+6+°1°1'05ÿ4ÿ.D‰DªÑ0D£Ñ0 DœÑ>392þ½2ö2õ04õFOûò1Oý§Oü7�0 @¤�°10€þ-F@¤�°1@˜˜°1°1Ò–QF@ ¤�°1@ 6 6 °1Ú“°1 °1Ò”QF@-¤�°1@.§§°1�þ.0&°1D0 @F6161°1@x��°1°10 @†¤�°1@‡žž°1°1°1‘øOý±8 2ø 2ô0@–¤�°1@—¦¦°1°1°1‘ø‘öOýÑ8(2ø6 2ô2ú0°1°1@®¤�°1>JR6/0"D�ÑJR0$D…ÑJ†0+D{Ó”QF ÑJ‡0'DÑJr0*DaÓ”UFÑ0-DTÓ–QF(×½0õ½Õ0Õ÷D=Ó–QF ÑJR½×01D+‘0 D$A09Fÿñ60E ÿgÿjÿqÿxÿ…ÿ�ÿ™ÿ³ÿÀÿ×4ÿ=0PFþ˜2ý½2ù2ø0OüÑ7�Oûò1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@¯ŸŸ°1°1°1‘øOýù2ø6 2ô6/=0!°1°1@¿¤�°1@Àžž°1°1°1‘øOýù2ø¨2ô0#°1Ò”UF˜°1@Ϥ�°1@Ð��°1°1°1Oþ0(0 @6161°1@2ŸŸ°1°10 @B¤�°1@CŸŸ°1°1°1‘øOýù2ø6 2ô6_=0!°1Oûà“By�þ00,Oûà”By�þ20,Oûê‘By�þ40,°1Ò–QF%0 @S¤�°1@T>>(starting) ÿSTEP CHANGE FUNCTIONSÿ(0) exitÿ(1) nameÿ(2) setpoint change ÿ(3) on/off outputsÿ(4) digital inputsÿ(5) recipe terminatorÿ(6) timeÿ(6) speed controlÿ(7) fast forward parametersÿ(8) total nr of steps in block_stepÿ6 6 °1°10 Oýù½Ú00D&°1@u¤�°1@v””°1½“°1 @{ŸŸ°1°1°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>(9) tables for changing setpoints per stepÿÿÿend stepÿÿtotal nr of steps in this block:ÿÿsteptime (h.mm.ss) is: ÿPARAMETER SETTINGS WITH BURNER MOVING TOWARDS THEÿ EXHAUST SIDEÿÿanalog outputsÿÿunlinked analog inputsÿÿdigital outputsÿÿdigital inputsÿÿspeed controlÿ37°1(0 ú2üÚ2ø2õ04õFÀ@™™°1ÔD$@ ””°1D.@••°1D#@žž°1DDAFÿõ”EÿÍÿØÿã@$««°1°1'05ó4ó=YPF_ÑOü7�Ô‹ÚØ2ô0Ô–QFF—ò‘ö ÿÖßeF:ÖM�Ñ{ RFÒ‹ÚÖ2ô04ôF @@6&6&°1°1ÖßaFÖ#öDÿÆD @g££°1°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>PARAMETER SETTINGS WITH BURNER MOVING TOWARDS THEÿ GAS INLET SIDEÿÿdigital outputsÿÿchanging setpoints in this blockÿÿstepÿ does not existÿ"     3:@©©°1°1'05Ý4Ý=YP*5ê@©©°1°1'05Ý4Ý=NPF(0 }ÿó4êF¤°@4@910 2ì2î2ð2ò2ô2ö1)@C¤�°1ä‘°1 =/‘°1â‘°1 =/‘°1à‘°1 @D©ž°1°1°1‘øœqÿÛØuÿÛeF(2ÞØ‹ "N?’Ø›‹"Nx„ØuÿÛaFØ#øDÿØ@S¤�°1@T˜˜°12Þœœ°1°10 °1D0 4Ý=NPF09D‹@]¤�°1>>>TEMENTRY^.AILIST [AILINK].UNIT := UNIT; SYSTEMENTRY^.AILIST [AILINK].SCALE := SCALE; SYSTEMENTRY^.AILIST [AILINK].CONTROL:= BANDLIMIT; SYSTEMENTRY^.AILIST [AILINK].LOOP := SETPOINT; SYSTEMENTRY^.AILIST [AILINK].AOLI@^��°1°10 Oûò� 1Oûò1OüOý7ŠOûò‘ 1Oûò1OüOü‘7Œ‘ö2ú 2ë02�}ÿó(0 ò09½‘}ÿó½ÒYFÿñ4êF°1°1°@l@s1D@}¢¢°1°1'05Ý&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TIME0 U[™ output on printer (Y/N)? ÿdisplay all steps (Y/N)? ÿ/P1 ÿOUTPUT ÿÿOPTICAL FIBERSÿÿRECIPE ÿÿRECIPE HEADERÿ/TERM ÿOUTPUT ÿenter to exitÿTIME0 U[™ TIME0 U[™ 3M "qòÄ=pòÏ�qòÊM�qûö=pü�qûüM,qþ:=pþE�qþ@0 0 @¤�°1@ŸŸ°1°10 OòÀ=1%OòÀ@@1(OòÀ1"}ÿþOòÀ=1%²MØQF@'¥¥°1°1D`OòÀ1@=¦¦°1°1?«?õ0€ÿõF?«‘"Nx.ˆÿ*|ÿ÷D=|ÿ÷€ÿ÷F—0 €ÿ÷Fÿ¶?’‘"N@T7 Oÿr‘"N@`7‘}ÿúœqò¾¶uò¾eFI?’¶›>>>>TIME0 U[™ XXXXXXXXXX:= READINT(DOLINK); IF NUMBER IN [0..MAXDONR] THEN DOLINK := NUMBER ELSE ERROR(5); {NR TOO LARGE} WRITE('SOFTSTART NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(SOFTST); IF NUMBER IN [0..MAXDONR] THEN SXXXXXXXXXXTIME0 U[™OFTST := NUMBER ELSE ERROR(5); {NR TOO LARGE} WRITE('RATIOLINK WITH AO NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(RATIOLINK); CASE NUMBER OF 0: BEGIN RATIOLINK := 0; RATIOVALUE:= 0;  `«a CREATE_HbÌc1CHANGE_Ld'PfÆCHANGE_Hg ¸i,STEP_CHAkm¯STEP_DEL END;{0} 1..MAXAONR : BEGIN IF NUMBER <> PORTNR THEN BEGIN RATIOLINK := NUMBER; WRITE('RATIOVALUE: '); PROMPT(OUTPUT); RATIO‹"N?«¶‹F"Nx„Oÿr¶¡‹ "N?«¶‹F"Nx„¶uò¾aF¶#}ÿúDÿ·Oûò?’@r1#Oþ6Oÿr@|1#Oþ6� 1Oþ61Oþ61F��}ÿú‘qò¾¶uò¾eFBOþF¶‹1Bqò¼�ò¼J�…�ò¼J�…¶�QF�ò¼’…D�ò¼“…¶uò¾aF¶#}ÿúDÿ¾’}ÿú61qò¾¶uò¾eF7OþF¶‹1Bqò¼�ò¼�…�ò¼J6ÿ…�ò¼J‘…¶uò¾aF ¶#}ÿú>>VALUE := READREAL(RATIOVALUE); END {IF} ELSE ERROR(1) END{1}; OTHERWISE : ERROR(5) END; {CASE} IF AILINK <> 0 THEN BEGIN SYSTEMENTRY^.AILIST [AILINK].NAME := NAME; SYSDÿÉ030 Oþ6� 1Oþ61@†¤�°1@‡��°1°1°1@•™™°1°1@Ÿ¢¢°1°1@²¢¢°1°1@Å  °1°1@Ö  °1°1@ç¡¡°1°1'0|ÿø0 €ÿø.D4DM05DGOý§06D>Oý§08D5Oý§07D,Oý§0:D#‘0 DA05Fÿñ60Eÿ¼ÿ¿ÿÅÿÎÿ×ÿàOþ6� 1Oþ61€ÿø=0PFÿ&ŠòÀ1Šûò1Šþ61->>>>>>>>>>>>#     ÿ RECIPE EDITORÿ/D1/SYSTEM ÿSYSTEMEN ÿno configuration fileÿenter name of recipe: ÿ/D1/RECIPE/ÿ/D1/RECIPE/index.ÿRECIPE ÿINDEX ÿÿRECIPE EDITORÿ(0) EXITÿ(1) CHANGE HEADERÿ(2) CHANGE A STEPÿ(3) COPY A STEPÿ(4) DELETE STEPÿ(5) PRINT RECIPEÿm¢ÖnLSTEP_COPo %Br‹STEP_DISt%�v�PRINT_REw D%ôzùRECIPE_E*REAL_VAL.INT_VAL 2GETCHOIC GETCHAR $GETANSWE : READINT K READREALRx: Z { READSTRI £ âERROR  )STARS  CLEARSCRSTEPREQU 9FINDENDS,YSEARCHSTMSEARCHFU0000000000š  A )°0CHECK_IN_ADD_TO_I =CHANGE_IVDEL_FROMa3STEPTOTAPXCREATE_S m!/DISP_CON"##STEPTITL–  INTRO f«°STEP1 $G%% STEPNAME& ' NAMECHEC( “)DISP_MFC*«+DISP_AI ,n-DO_NAME -+‘.CHECKINT/+•0(CHECK_CO1ë2CHECK_RAf3­BLOCK G™ � 33Í3/œ6|STEPSETP79 DISP_DO :4<MSTEPOUTP=¡>DISP_DI ? 7Ô@ySTEPINPUA,CCONVERTTCžDDISPTIMEDHM]E3STEPTIME3­INTRO f«°INTRO f«FÚG3DISPRAMPHICHNGSETPJRK®K¹STEPSPEELOMJSTEPTERMN=ODISPFORWPwQSTEPFORWR »SDISPAOSET)GVêCHNGAOSE°RAY[1..MAXAONR] OF AO; DILIST : ARRAY[1..MAXDINR] OF DI; DOLIST : ARRAY[1..MAXDONRWÌ)�YDISPTABLZŸ'®\…STEPTABL]&_;DISPLAY_`«a CREATE_HbÌc1CHANGE_Ld'PfÆCHANGE_Hg ¸i,STEP_CHAkål{STEP_DELUS := RUN; 5690 DEPOSITION := FALSE; 5695 REPEAT {until end of recipe or terminator} 5700 newstep; 5705 disp_status(FALSE); 5710 WRITELN('simulate 6 seconds softstart'); haust switch} 5685 PROCSTAT$     US := RUN; 569.DILIST[NR] DO 2110 BEGIN 2112 IF (NR + OFF1) IN RECIPE[INDEXNUMBER].STEP.IOSET THEN 2114 {check this input} 2116 BEGIN 2118 IF SAFE = LOW THEN 2120 ALARMSTATUS := (NR +OFF1) IN STATUS.IOSET 212/TERM ÿF ÿR,B3@Ÿ�°1@��°1°1±1±1F=05ÿD2ÿ±1 ±1 4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿyour choice: ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{KG} TUBE_DIAMETER: REAL; {MM} END; AOLISTTYPE= ARRAY[1..MAXAONR] OF INTEGER; AILISTTYPE= ARRAY[1..20] OF INTEGER; SETTYPE = SET OF 0..255; 3«+5ÿ4ÿ‘°1=X‘°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>EN BEGIN AIPREALARM := AIPREALARM - [AINR]; AIALARM1 := AIALARM1 - [AINR]; AIALARM2 := AIALARM2 - [AINR]; END; {IF} END; {WITH} END; {alabtest} PROCEDURE inputtest; VAR OLDIOSET : SETTYPE; 3«+5ÿ4ÿ‘°1=@‘°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> R&FV3Ð@7Ñ2 uQy‹F"Nx= T*„ÑxFf‘ò“ôÒÔeF"ÐÒ‘‹NÐÒ‹Nx„ÒÔaFÒ#òDÿÞГN2 uQy‹F"Nx„uQuQy‘…2 uQy‹F"Nx= PFÿš9L>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>‡Í €3PCODÅ?\+P1c1Ì"& RRUNTIME  R,×36Fqÿ®=5¹6 qÿ´2ª@@12ª1Ñ2º‘"Nx= T*„ÑxFB‘qÿ¨6Fqÿ¦uÿ¨uÿ¦eF/Ðuÿ¨‹F"N2ºuÿ¨‹F"Nx„uÿ¨uÿ¦aF uÿ¨#qÿ¨DÿÑ2ª19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>EDURE LATHE_display; BEGIN WITH SYSTEMENTRY^ DO BEGIN WRITELN('auto/manual switch is DI:','':6, LATHE [L_AUTO_MAN]:2); WRITELN('End switch gasinlet side is DI:',LATHE[INLETSWITCH]:2); WRITELN('End switch exhaust side is DI: ',LA%     THE[EXHAUSTSWITCH]:2); WRITELN('Lathe translation is AO:','':7, LATHE [SPEED_AO]:2); WRITELN('Lathe rotation is AO:','':10, LATHE [ROTAT_AO]:2); END {WITH} END {LATHE_display}; $SUBTITLE PRINT SYSTEM ENTRIES PROCEDURE print_AI(VAR3Ñ�…�ô“÷Ô×eFB2 Ô‹Nx5û4û.ˆÿF 4û.=0.òD�òÑšÑyÒ…Ô×aFÔ#ôDÿ¾9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LINECOUNT:INTEGER;START,ENDNUM:INTEGER;LP:BOOLEAN); VAR I : INTEGER; BEGIN stars; WRITELN('':20,'ANALOG INPUTS'); stars; WRITELN(CAA,CAI); I := START; LINECOUNT := LINECOUNT +10; REPEAT AI_display(I); I := I + 1; LINECOUNT := 3ÐöÐ�a*5÷4÷FMÿÖ‘ö   ô�ò“ûÒÛeFSÖÔøÖÔö4÷Ò�QFؘøØˆÿFÑÒ‹NØ=0.+„DØšøÑÒ‹NØ=A.+„Ô ôÒÛaFÒ#òDÿ­9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>LINECOUNT + 1; IF LP AND (LINECOUNT = PAGELENGTH-1) THEN BEGIN PAGE(OUTPUT); LINECOUNT := 0; END {IF} UNTIL I > ENDNUM; WRITELN; WRITELN; WRITELN; LINECOUNT := LINECOUNT+3; END; {print_AI} PROCEDURE print_AO(VAR LI3 MùÑýÝÙûÝÙý2ù‘"NÛ=0.+„Ù6<‹ùÝÙûÝÙýÛš‹ÿÛš‹ qÿï2ù’"N=.„2ù“"Nß=0.+„2ù”"Ná=0.+„Ýš‹ÿÝš‹ qÿï2ù•"N=.„2ù–"Nß=0.+„2ù—"Ná=0.+„2ù™—°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NECOUNT:INTEGER;START,ENDNUM:INTEGER;LP:BOOLEAN); VAR I : INTEGER; BEGIN stars; WRITELN('':20,'ANALOG OUTPUTS'); stars; WRITELN(CAA,CAO); I := START; LINECOUNT := LINECOUNT +10; REPEAT AO_display(I); I := I + 1; LINECOUNT := LI3 2 ”’°12 –”°1�ô4F�öDŸöÑuÔ…ÑyyòÒ2ô02ô’Nx’°12ô“Nx‘°1Ô‘ôÔÖYFÿË9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NECOUNT + 1; IF LP AND (LINECOUNT = PAGELENGTH-1) THEN BEGIN PAGE(OUTPUT); LINECOUNT := 0; END {IF} UNTIL I > ENDNUM; WRITELN; WRITELN; WRITELN; LINECOUNT := LINECOUNT+3; END; {print_AO} $SUBTITLE PRINT SYSTEM ENT3 44 F282þ0 Ò—˜u1/282þ0 °19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>RIES PROCEDURE print_DI(VAR LINECOUNT:INTEGER;START,ENDNUM:INTEGER;LP:BOOLEAN); VAR I : INTEGER; BEGIN stars; WRITELN('':20,'DIGITAL INPUTS'); stars; WRITELN(CDI); I := START; LINECOUNT := LINECOUNT +10; REPEAT DI_display(I); 3 4 uˆþÿÿÿF uúuôD‘ú6 ô°12–’°1°1MíqÿðMí’þMÚ‘”òšöàÒ…(ày’‘11øÖ‘öØ�QÖ�QFÿèØ�QF(ÞyŸœ11üÜ2ì0Ú”°1 2ì–”°1D@——°1Ú“°1 @šš°1°1Ú‘úÚÔYFÿ’°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>0000ÿCHANNELÿ TIMED OUTÿ3Ñ�…=5ø�ö“úÖÚeFs2 Ö‹Nx5ù4ù.ˆÿF 4ù.=0.òD!4ù.ˆ ~F š4ù.=A.òD�òÖ�QÒ—YF=5øÒ˜òÑ ÑyÒ…ÖÚaFÖ#öDÿ�4øF ÑM€Ñy‘…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3 °12–’°14 uˆþÿÿFu”°1 = ‘°1uöuøDP°1‘ö˜qÿÎÖuÿÎeFÖ’°1 ÖuÿÎaFÖ#öDÿí°1�ö qÿÎÖuÿÎeF=-‘°1ÖuÿÎaFÖ#öDÿì°1‘ö¨øˆs ÿПòMîqÿð2ÐÒB(ày— 11…Mî’qÿð2ÐÒ6ÿB(ày—˜11…�ôÖ6ÿw ÿÐF =1’°1D=0’°1Ö‘öÔ‘ôÔ˜QF°1�ôÖØYFÿ˰19>>>>>&     3Ñ‘QFƒ þjÐ6/ þjDƒ þjÐ6/ þjƒ þjs ÿМú�ø‘qÿÎØuÿÎeF,Mî’Øqÿð(2ÐÚØBy— 11òàÒ…ØuÿÎaFØ#øDÿÔ9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3�}ýÞ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3°12–’°14 uˆþÿÿÿFu”°1 = ‘°1uøuöDI°1‘ø˜qÿðØàeFØ’°1 ØàaFØ#øDÿï°1�ø qÿðØàeF=-‘°1ØàaFØ#øDÿî°1‘ø6 ö�ôØ6/ƒ þjF =1’°1D=0’°1Ø‘øÔ‘ôÔ˜QF°1�ôØÖYFÿ˰19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3‘}ýÞ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>344 FuˆþÿÿÿuˆF uu02809>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3@’’°1°1?­2ý04ýFÏ?­‘"Nx=SPF“òD‘ò2ë�N?­Ò‹F"Nx„2ë‘N?­Ò‘‹F"Nx„Ò“ò2þ?­8F2í2ñ0Ò‘ò2þ?­8F2ò2ö02ë@SF�õD¤2ë@SF‘õD”2ë@ SF’õD„2ë@ SF“õDt2ë@SF”õDd2ë@SF•õDT2ë@SF–õDD2ë@SF™õD42ë@S>>3uˆþÿF uòuôD‘ò ô°12–’°1°1OþJÒ‹"By2ö0Ò”°1 2ö–”°1Ò‘òÒÔYFÿÕ°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>F—õD"2ë@SF˜õD2ë@!SFšõDœõÕ�QF 2í82÷0ÕˆF 2ò82ù0ÕˆþF 2í82÷0Õ”QF 2ò82ù0ÕDT2ë80Do2ë80 De2ë80 D[2ë80 DQ2ë80DG2ë80D=D:D70D10D+D(D%‹ E> ÿµÿ¡ÿ«ÿ¿ÿÉÿÓÿÝÿãÿéÿàÿïÿòÕšQFþ$>>>>>>>>>>>>>>>>>3MíБ’òÒ“ Ñ1/OþJÐ"B“ Ñ1/9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: ÿMMÿAOÿAIÿDIÿDOÿTMÿWDÿBZÿIDÿRSÿEXÿ344 uˆþÿF uu02809>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3�}ýÞ�}ýà‘ò ôÒÔeFOþJÒ‹"B�…ÒÔaFÒ#òDÿå‘ò6 ôÒÔeFOþ Ò‹ "B�…ÒÔaFÒ#òDÿåˆ þjˆ þŠˆ þªˆ þʈ þê$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3°1@””°14 F�ýè0 uM~�aFu}ýè�ýè0 °19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3M "qót=pó�qózM,qü¦=pü±�qü¬M�qÿ=pÿ�qÿ0@¤�°1@¨¨°1°10@¤�°1@��°1°1°1@)™™°1°1@3¤¤°1°1'0|ÿø0€ÿø.D D.0D(D%A09Fÿõ60E> ÿãÿìÿìÿìÿìÿìÿìÿìÿìÿæ€ÿø=0PFÿ‰Šóp1Šü¢1Šÿ1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>timeÿÿ OPTICAL FIBERS CONTROLÿÿJOB SELECTIONÿ(0) EXITÿ(9) MAINTENANCE MODEÿ'      (~Ð!HRUNTIME Z {READSTRI2GETCHOIC CLEARSCR CURSORHO �READ4CHA )™ HEXTOINT )S DIGTOINT TIMED_STEP, EVENT_STEP, BLOCK_STEP, RCD_TABLE, RCD_FUNCTION); INDEXDEF = RECORD DESCRIPTOR : RCD_INDEX; STARTSTEPNR : INTEGER; END_OR_AONR : INTEGER; END; IN )| INTTOHEX ž DISPTIME UDISP_MM )MM_COMMA*¯AI_COMMA2*ûDI_COMMA2GsSETDOSTA*ºDISPDOSTDEXLIST = ARRAY[0..MAXRECORD] OF INDEXDEF; HEAD1 = RECORD JOBNR : ARRAY[1..JOBLENGTH] OF CHAR; ALARMVAL : ARRAY[1..MAXAINR] OF INTEGER; ALARMCONTROL: ARRAY[1..MAXAINR] OF DICONTROL; *2DO_COMMA )ZDISPAOST!SETAOSTA*&AO_COMMA3TM_COMMA ID_COMMA RS_COMMAQï$MAINTENA END; HEAD2 = RECORD ABORTVAL : ARRAY[1..MAXAINR] OF INTEGER; ABORTCONTROL: ARRAY[1..MAXAINR] OF DICONTROL; LATHE_LENGTH : INTEGER; {CM} TUBE_WEIGHT : REAL; {'~ INIT_STAKG} TUBE_DIAMETER: REAL; {MM} END; AOLISTTYPE= ARRAY[1..MAXAONR] OF INTEGER; AILISTRCP = ARRAY[1..20] OF INTEGER; AILISTTYPE= ARRAY[1..MAXAINR] OF INTEGER; SETTYPE = SET OF 0..25 SAFE : SAFESTATE; CONTROL : DICONTROL; DOLINK : 0..MAXDONR END; DOUT = RECORD NAME : NAMETYPE; CONTROL : DOCONTROL; auto/manual switch is DI:ÿend switch gas inlet side is DI:ÿend switch exhaust side is DI:ÿLathe translation is AO:ÿLathe rotation is AO:ÿ INTERLOCK : 0..MAXDONR; CONDLOCK : 0..MAXDONR END; TEMPCONTROL = ARRAY[T_AUTO_MAN..O2_AO] OF INTEGER; LATHECONTROL = ARRAY[L_AUTO_MAN..EXHAUSTSWITCH] OF INTEGER; SYSTEM = RECOR3%0 2ú2ø0 ÖˆFÁ°1@––°12ø’’°1@©©°1°1�ô(Ô0ô0 ÖDwD‰ÔˆþÿÿÿF™@!6#6#°1@E6*6*°1°12ü0 '05÷4÷.D62ü0@p6#6#°1@”6*6*°1°12ü0 DM2ü0DEDB‘0D;A0DFÿñ60E>ÿåÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿ¹ÿÝDáÔˆþÿF™@¿6#6#°1>D AILIST : ARRAY[1..MAXAINR] OF AI; AOLIST : ARRAY[1..MAXAONR] OF AO; DILIST : ARRAY[1..MAXDINR] OF DI; DOLIST : ARRAY[1..MAXDONR] OF DOUT; TEMP :@6*6*°1°12ü0 '05÷4÷.D62ü0 @+6#6#°1@O6*6*°1°12ü0 DL2ü0DDDA‘0D:A0DFÿñ60EÿæÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿºÿÞD;ÔˆþÿÿF„@z6464°1°12ü0 '05÷4÷.D,2ü0!@¯6464°1°12ü0 DL2ü0DDDA‘0D:A0DFÿñ60Eÿæÿéÿéÿéÿé TEMPCONTROL; LATHE : LATHECONTROL; END; MAXSTRING = ARRAY[1..MAXLENGTH] OF CHAR; IOPORTTYPE= ARRAY[1..2] OF CHAR; RCD_INDEX = (NOT_ALLOCATED,RCD_DONTCARE,RCD_1HEADER,RCD_2HEADER, ÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿÄÿÞD©ÔˆþÿÿÿF…@6A6A°1°12ü0'05÷4÷.D,2ü0"@B6A6A°1°12ü0DM2ü0DEDB‘0D;A0DFÿñ60E>ÿåÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿÃÿÝD‹E>ý~ý�þ)þÏÿaÔ�QFýBDçÖDÊDà0'05÷4÷.D0#DM0DGDD‘0>>(     D;A0DFÿï60E>ÿãÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿ×ÿÝD{0'05÷4÷.D0$DJ0DDDA‘0D:A0DFÿñ60EÿæÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿÚÿàD‹E>ÿ+ÿ.ÿ“Ö�QFü@$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2 : (STEP : STEPDEF); 3 : (TABLE : TABLEDEF); 4 : (FUNC : FUNCDEF); END {RECORD}; PROCESSSTATUS = (IDLE,RSET,EXECUTE,FINISH); enter ÿ number or to exit: ÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿ STPSTATUS = (PRERUN,RUN,HLD,ALRM,ABRT,BUZZ); AISETTYPE = SET OF 1..MAXAINR; DISETTYPE = SET OF 1..MAXDINR; STATUSDEF = RECORD PROCSTATUS : PROCESSSTATUS; STEPSTATUS : STPSTATUS; CURRENTSTEP: INTEAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME MAX. VALUE UNIT ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿGER; STEPTYPE : RCD_INDEX; STARTSTEP : INTEGER; TOTSTEP : INTEGER; INDEXNR : INTEGER; TIMEREMAIN : INTEGER; DEPOSITION : BOOLEAN; RECP_END : INTEGER; RECIPENR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿNAME : ARRAY [1..12] OF CHAR; JOBNR : ARRAY [1..10] OF CHAR; STEPNAME : ARRAY [1..10] OF CHAR; AILIST : AILISTTYPE; AOLIST : AOLISTTYPE; IOSET : SETTYPE; DEVIATION : AIL5; RAMP_TYPE = (RAMP_TIME,ENDSPEED); RAMPTYPE = ARRAY [1..5,RAMP_TIME..ENDSPEED] OF INTEGER; STEPDEF = RECORD NAME : NAMETYPE; AOLIST : AOLISTTYPE; ISTTYPE; AIPREALARM : AISETTYPE; AIALARM1 : AISETTYPE; AIALARM2 : AISETTYPE; DIALARM : DISETTYPE; PANEL : ARRAY[0..1] OF INTEGER; NEXTSPEED : INTEGER; END; {RECORD STATU AILIST : AILISTRCP; IOSET : SETTYPE; SPEEDCONT : RAMPTYPE; TERMINATOR: BOOLEAN; TIME : INTEGER; SDEF} CHARARRAY = ARRAY[0..3] OF CHAR; ABSINTDEF = RECORD CASE BOOLEAN OF TRUE : (VALUE : ^INTEGER); FALSE: (ADDRESS : INTEGER) END; INT16  H2_SETP : INTEGER; O2_SETP : INTEGER; FAST_SPEED: INTEGER; END; {IOSET HAS THE INFO FOR DIGITAL INPUTS, OUTPUTS(2X) AND CHANGING AO'S IN A BLOCKSTEP} TABLEDEF = ARRAY [1 = ARRAY[0..15] OF INTEGER; COMMANDTYPE = (MM_,AO_,AI_,DI_,DO_,TM_,WD_,ID_,RS_,BZ_,EX_,HH_, IV_); COMMANDDEF = RECORD CODESTRING : ARRAY[0..1] OF CHAR; NUMSTRING : CHARARRAY; NUMVA..MAXTAB] OF INTEGER; FUNCDEF = ARRAY [1..MAXFUNC] OF CHAR; {TO BE DEFINED YET} RECIPEDEF = RECORD CASE INTEGER OF 0 : (HEADER1 : HEAD1); 1 : (HEADER2 : HEAD2);LID : BOOLEAN; VALSTRING : CHARARRAY; VALVALID : BOOLEAN; NUM : INTEGER; VALUE : INTEGER; CODE : COMMANDTYPE; END; VAR I,SPEEDNR,INLETDI,EXHAUSTDI,IOERROR, )      SYSERROR : INTEGER; FLAMESENSOR,H2_AONR,O2_AONR : INTEGER; RAMPINDEX,BEGINSPEED : INTEGER; INCREMENT : REAL; FLAMEON,TEMPMANUAL,LATHEMANUAL,SAFEHIGH : BOOLEAN; CHOICE,ANSWER: CHAR; CHANGE,FOUND,OK WRITELN('ENTRY TOO LARGE'); 3 : WRITELN('new value exceeds the maximum value'); 4 : WRITELN('INPUT IS NOT A NUMBER'); 5 : WRITELN('max. time is 8 hrs, 59 minutes, 59 seconds'); 6 : WRITELN('max. number of steps in a blockstep is',: BOOLEAN; STEPNUMBER : INTEGER; OLD_DOSET : SETTYPE; TIMERRAMP,TIMERSOFT,TIMERDELAY,TIMERFLAME,TIMERLATHE, TIMERTEMP : INTEGER; INPUTSTRING : MAXSTRING; RECIPERECORD: FILE OF RECIPEDEF; STATUS STEPSINBLOCK:3); 7 : WRITELN('no spaces in name allowed; first char. not a number'); OTHERWISE: WRITELN('ERROR') END {X} END; {error} PROCEDURE stars; {prints a line of stars} VAR I : INTEGER; BEGIN WRITELN; FOR I := 0 TO 75 DO WRITE('*' : STATUSDEF; INDEX : FILE OF INDEXLIST; SYSTEMENTRY : FILE OF SYSTEM; RECIPE : ARRAY[0..MAXRECORD] OF RECIPEDEF; FUNCTION real_val(MAXVAL: REAL; CURVAL: INTEGER): REAL; VAR X : REAL; BEGIN X := MAXVAL * CURVAL / $F); WRITELN; WRITELN; END; {stars} PROCEDURE clearscreen; VAR CLEAR : CHAR; BEGIN CLEAR := CHR($1B); WRITELN (CLEAR,'X'); END; {clearscreen} PROCEDURE cursorhome; VAR HOME : CHAR; BEGIN HOME := CHR($1B); WRITELN (HOME,'@'); END; {cursorhome}FF; IF X < 0 THEN X := 0.0; real_val := X; END; {real_val} $SUBTITLE READ ONE CHARACTER FROM KEYBOARD FUNCTION getchoice : CHAR; VAR C : CHAR; BEGIN WRITE('':15,'your choice: '); PROMPT; GET(INPUT); IF EOLN(INPUT) THEN C := '0' EL FUNCTION findendstep : INTEGER; VAR I,MAX : INTEGER; BEGIN MAX := 0; FOR I := 0 TO MAXRECORD DO WITH INDEX^[I] DO IF STARTSTEPNR > MAX THEN MAX := STARTSTEPNR; findendstep := MAX; END{findendstep}; PROCEDURE searchstepindex (VARSE READ(C); READLN; getchoice := C END; {getchoice} FUNCTION getchar : CHAR; VAR ANSWER : CHAR; BEGIN GET(INPUT); IF EOLN(INPUT) THEN ANSWER := 'N' ELSE READ(ANSWER); READLN; getchar := ANSWER; END; {getchar} FUNCTION readint(F:INTEGER0].HEADER1.ALARMVAL[AINR]; ABORTSTATUS := -DEVIATION[AINR] > RECIPE[1].HEADER2.ABORTVAL[AINR]; END; END; {CASE} ALCONTR := RECIPE[0].HEADER1.ALARMCONTROL[A) : INTEGER; VAR I,OLD,IOERROR : INTEGER; BEGIN OLD :=F; GET(INPUT); IF NOT EOLN(INPUT) THEN BEGIN IOABORT (INPUT,FALSE); READLN (INPUT,I); IOERROR := IORESULT(INPUT); IF IOERROR <> 0 THEN BEGIN READLN; I :INR]; ABCONTR := RECIPE[1].HEADER2.ABORTCONTROL[AINR]; END; {IF} IF ABORTSTATUS AND (AINR IN AIALARM2) THEN {NOTHING} ELSE BEGIN IF AINR IN AIALARM1 THEN BEGIN AIALARM2 := AIAL= OLD END; IOABORT(INPUT,TRUE); END {IF} ELSE I:= OLD; readint := I END; {readint} PROCEDURE readstring (VAR INP: MAXSTRING; VAR C: BOOLEAN); VAR F : FILE OF MAXSTRING; I : INTEGER; BEGIN RESET (F,'/TERM'); GET (F); C := (F^[16%6%°1,s°1,tOÿ2ÿ0,u4ÿF,vÑOÿ‘"Nx=LPOÿ’"Nx=PP*„,w&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] <> ' '); {if no char_string is entered F^[1] = blank} IF C {a new string is entered} THEN FOR I := 1 TO MAXLENGTH DO INP[I] := F^[I] END; {readstring} PROCEDURE error(X : INTEGER); BEGIN CASE X OF 1 : WRITELN('INPUT ERROR'); 2 :  INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; VAR TOTSTEPNR: INTEGER; VAR FOUND : BOOLEAN;VAR INDEXNR :INTEGER); {search for the requested step record} VAR I : INTEGER; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO BEGIN FOUN*     D := (STARTSTEPNR= STEPNR) AND (DESCRIPTOR IN [TIMED_STEP..BLOCK_STEP]); IF FOUND THEN BEGIN INDEXTYPE := DESCRIPTOR; TOTSTEPNR := END_OR_AONR; INDEXNR := I; END; {IF} END {WITMENTRY^.DILIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN IF I+OFF1 IN STATUS.IOSET THEN SETTING := 'HIGH' ELSE SETTING := ' LOW'; WRITE (NAME,SETTING:5); H} UNTIL FOUND OR (I = MAXRECORD); END; {searchstepindex} PROCEDURE searchfullindex (INDEXTYPE: RCD_INDEX; STEPNR: INTEGER; VAR TOTSTEPNR: INTEGER; VAR FOUND : BOOLEAN;VAR INDEXNR :INTEGER); {search for the requested step record} VAR I : INTEG COUNT := COUNT + 1; IF COUNT = 3 THEN BEGIN WRITELN; {3 ENTRIES PER LINE} COUNT := 0; END {IF} ELSE WRITE('':10); END {IF}; END; {WITH} ER; BEGIN I := -1; REPEAT I :=I+1; WITH INDEX^[I] DO FOUND := (STARTSTEPNR= STEPNR) AND (END_OR_AONR=TOTSTEPNR) AND (DESCRIPTOR = INDEXTYPE); IF FOUND THEN INDEXNR := I; UNTIL FOUND OR (I = MAXRECORD); END;{sea I := I + 1; UNTIL I > MAXDINR; WRITELN; END; {disp_DI} PROCEDURE disptime(TIM : INTEGER); {CHANGES TIME (SECONDS) TO H.MM.SS REPRESENTATION AND PRINTS IT} VAR TIME : ARRAY[1..7] OF CHAR; POWEROF60 : 1..3600; QUOTIENT : INTEGER; rchfullindex} PROCEDURE namecheck(NAME : NAMETYPE;VAR OK :BOOLEAN); {checks if name <> XXXXXXXXXX; OK if true} BEGIN OK:= NAME <> NONAME ; END; PROCEDURE bottomline(VAR LP: BOOLEAN); VAR CHANGE : BOOLEAN; BEGIN WRITE('enter LP for a hardcopy, REMAINDER : INTEGER; QUOT10 : 0..5; REMAIN10 : 0..9; BEGIN POWEROF60 := 3600; REMAINDER := TIM; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT HOURS} REMAINDER:= REMAINDER MOD POWEROF60; TIME[1] := (CHR(QUOTIENT + ORD('0'))); POWEROF6to exit'); prompt; readstring(INPUTSTRING,CHANGE); IF CHANGE THEN LP := (INPUTSTRING[1] = 'L') AND (INPUTSTRING[2] = 'P'); END; {bottomline} PROCEDURE disp_AIstatus; { displays all AI values in the status} VAR I,COUNT,LINE : INTEGER; OK: BO0 := POWEROF60 DIV 60; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT MINUTES} REMAINDER:= REMAINDER MOD POWEROF60; {SECONDS } QUOT10 := QUOTIENT DIV 10; REMAIN10 := QUOTIENT MOD 10; TIME[2] := '.'; TIME[3] := (CHR(QUOT10 + ORD('0'))); TIMOLEAN; VALUE: REAL; BEGIN COUNT := 0; LINE := 0; I := 1; REPEAT WITH SYSTEMENTRY^.AILIST[I] DO BEGIN namecheck(NAME,OK); IF OK THEN BEGIN VALUE := real_val (SCALE, STATUS.AILIST[I]); E[4] := (CHR(REMAIN10 + ORD('0'))); QUOT10 := REMAINDER DIV 10; REMAIN10 := REMAINDER MOD 10; TIME[5] := '.'; TIME[6] := (CHR(QUOT10 + ORD('0'))); TIME[7] := (CHR(REMAIN10 + ORD('0'))); WRITE(TIME:9); END {disptime}; PROCEDURE disp_procsta WRITE (NAME:10,VALUE:9:3,UNIT:6); COUNT := COUNT + 1; IF COUNT = 3 THEN BEGIN WRITELN; COUNT := 0; END {IF} ELSE WRITE('':1); END {IF};tus; BEGIN WITH STATUS DO BEGIN CASE PROCSTATUS OF IDLE : WRITE('IDLE':8); EXECUTE: WRITE('EXECUTE' :8); RSET : WRITE('RESET':8); FINISH : WRITE('FINISHED':8); OTHERWISE :; END {CASE}; END; {WITH} END; { END {WITH}; I := I + 1; UNTIL I > MAXAINR; WRITELN; WRITELN; END; {disp_AIstatus} PROCEDURE disp_DIstatus; VAR I,COUNT: INTEGER; OK : BOOLEAN; SETTING : ARRAY [0..3] OF CHAR; BEGIN COUNT := 0; I := 1; REPEAT WITH SYSTE4¦5GETAISTA5‚6#PROCESSA7 Ú8DIFFEREN8 G[<ALABTEST=+Gv?INPUTTES@)pAURESET_PRBhCJHOLD_PROD(�GÐSTART_PR+     disp_procstatus} PROCEDURE disp_stpstatus; BEGIN WITH STATUS DO BEGIN CASE STEPSTATUS OF PRERUN : WRITE('PRERUN':8); RUN : WRITE('RUN' :8); HLD : WRITE('HOLD':8); ALRM : WRITE('ALARM':8); ABRT : WRITE('AB3M (qöÇ=pöÒ�qöÍOöÃ=1%0 OöÃ@@ 1(OöÃ1"}ÿþOöÃ=1%²MØQF0DOöÃ10 @ªª°1°1°1@1˜˜°1°1@:ªª°1°1@U¤¤°1°1'0|ÿû€ÿû.DD*0%D$0D‘0DA02Fÿñ60E>ÿÙÿÜÿâ€ÿû=0PFÿŠOöÃ@j@v1OöÃ10 ŠöÃ1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ORT':8); BUZZ : WRITE('BUZZER':8); OTHERWISE :; END {CASE}; END; {WITH} END; {disp_stpstatus} PROCEDURE disp_systime; VAR YR,MON,DAY,HR,MIN,SEC : INTEGER; BEGIN SYSTIME(YR,MON,DAY,HR,MIN,SEC); WRITE('date: ',YR:1,'/',MON:1,'/',/D1/SYSTEM ÿSYSTEMEN ÿSYSTEM FILE EDITOR PROGRAMÿ(0) exitÿ(1) change/delete an entryÿ(2) print systemfileÿ/D1/SYSTEM ÿSYSTEMEN ÿDAY:1,'time: ':8); IF HR < 10 THEN WRITE ('0',HR:1,'.') ELSE WRITE(HR:2,'.'); IF MIN < 10 THEN WRITE ('0',MIN:1,'.') ELSE WRITE(MIN:2,'.'); IF SEC < 10 THEN WRITE ('0',SEC:1) ELSE WRITE(SEC:2); END; {disp_systime} PROCEDURE disp_status(LP : BOOLEAN)P =ÙQ€CONFIGUR2GETCHOIC GETCHAR $GETANSWE :READINT KREADREALF { READSTRI … pERROR ; VAR I, OFFSET,NR: INTEGER; FOUND: BOOLEAN; ANSWER : CHAR; BEGIN IF LP THEN BEGIN REWRITE(OUTPUT,'/P1'); STARS; WRITELN; WRITELN('':20,'OPTICAL FIBERS STATUS DISPLAY'); WRITELN; STARS; WRITELN; END {IF} ELSE  ) STARS  CLEARSCR4&¾WAI_AO_DIÊtAI_DISPL`AO_DISPL¸LDI_DISPL` DO_DISPLË«TEMP_DIS clearscreen; WITH STATUS DO BEGIN IF PROCSTATUS <> IDLE THEN BEGIN WRITE(RECIPENAME); WRITE('JOB:':6,JOBNR:11); END; IF PROCSTATUS IN [EXECUTE,FINISH] THEN BEGIN WRITE('STEP':7,CURRENTSTEP:5,STEPNAME:1“ŒLATHE_DI�^PRINT_AI�_PRINT_AO… EPRINT_DI!…"SPRINT_DO#.$!PRINT_TE%&&PRINT_LA'%I*òPRINTSYS2); disp_procstatus; END; {IF} IF STEPSTATUS IN [HLD..ABRT] THEN {disp_failure}; WRITELN; disp_systime; IF STEPTYPE = TIMED_STEP THEN BEGIN WRITE('':4,'remaining steptime: '); disptime(TIMEREMAIN); +g,AI_DELET-^.AO_DELET/ ,0 DI_DELET1 R2 DO_DELET3 &4TEMP_DEL4 &5LATHE_DE5 w6CREATE_S68ç8AI_CHANG END; WRITELN; WRITELN; disp_AIstatus; WRITELN; disp_DIstatus; IF LP THEN BEGIN STARS; PAGE(OUTPUT); REWRITE(OUTPUT,'/TERM'); LP := FALSE; END; {IF} { bottomline(LP); IF LP TH::ñ=…AO_CHANG>8�@¬DI_CHANGA8ÐCŽDO_CHANGD'7F­TEMP_CHAG'àH‰LATHE_CHI %ÃM„EDITENTREN disp_status(LP); } END {WITH} END {disp_status}; PROCEDURE chng_jobnr; VAR CHANGE : BOOLEAN; I : INTEGER; BEGIN WITH STATUS DO BEGIN WRITELN('current job number:',JOBNR:12); WRITE ('new job number:','':6); PROMPT; readst IF INTERLOCK <> 0 THEN SYSTEMENTRY^.DOLIST[INTERLOCK].INTERLOCK := 0; INTERLOCK := NUMBER; END {0}; 1..MAXDONR : BEGIN IF NUMBER <> PORTNR THEN ,     URE LATHE_change; VAR NUMBER : INTEGER; BEGIN WITH SYSTEMENTRY^ DO BEGIN WRITE('auto/manual switch is DI:'); PROMPT(OUTPUT); NUMBER := READINT(LATHE [L_AUTO_MAN]); IF NUMBER IN [0..MAXDONR] THEN LATHE [L_AUTO_MAN] :ON(RECIPERECORD,0); REPOSITION(INDEX,0); GET (INDEX); I := 0; IF EOF(INDEX) THEN WRITELN('recipe does not exist') ELSE BEGIN WHILE NOT EOF(RECIPERECORD) DO BEGIN GET(RECIPERECORD); RECIPE[I] = NUMBER; WRITE('end switch gas inlet side is DI:'); PROMPT(OUTPUT); NUMBER := READINT(LATHE [INLETSWITCH]); IF NUMBER IN [0..MAXDINR] THEN LATHE [INLETSWITCH] := NUMBER; WRITE('end switch exhaust side is DI:'); := RECIPERECORD^; I := I+1; END {WHILE}; WITH STATUS DO RECP_END := findendstep; END {ELSE}; IF STATUS.PROCSTAT = RSET THEN disp_status(FALSE); END {IF} ELSE WRITELN('not allowed; a process is running'); END; { PROMPT(OUTPUT); NUMBER := READINT(LATHE [EXHAUSTSWITCH]); IF NUMBER IN [0..MAXDINR] THEN LATHE [EXHAUSTSWITCH] := NUMBER; WRITE('Lathe translation is AO:'); PROMPT(OUTPUT); NUMBER := READINT(LATHE [SPEED_AO]); load_recipe} PROCEDURE setAOstat(NUM : INTEGER; DATA : INTEGER); VAR DA_DATA : ABSINTDEF; {$D-} BEGIN WITH DA_DATA DO BEGIN ADDRESS := DA_BOARD +(NUM-1)* 2; FIELDPUT(VALUE^,3,16,DATA); END {WITH} END; {setAOstat} {$D+} PROCEDURE set IF NUMBER IN [0..MAXAONR] THEN LATHE [SPEED_AO] := NUMBER; WRITE('Lathe rotation is AO:'); PROMPT(OUTPUT); NUMBER := READINT(LATHE [ROTAT_AO]); IF NUMBER IN [0..MAXAONR] THEN LATHE [ROTAT_AO] := NUMBER; END {WITH}DOAO(OFF : INTEGER); VAR DATA,OFFSET,I : INTEGER; DO_DATA : ABSINTDEF; IOCONVERT: RECORD CASE BOOLEAN OF TRUE: (IOSET :SETTYPE); FALSE:(INTREP : INT16) END; BEGIN WITH IOCONVERT DO BEGIN IOSET ring(INPUTSTRING,CHANGE); IF CHANGE THEN FOR I := 1 TO 10 DO JOBNR[I]:= INPUTSTRING[I]; END; {WITH} END; {chng_jobnr} PROCEDURE load_recipe; VAR INPUTSTRING : MAXSTRING; RCNAME : ARRAY [1..25] OF CHAR; INDEXNAME : ARR: ; '1': editentry; '2': printsystem; OTHERWISE: error(1) {INPUTERROR} END {CHOICE}; UNTIL CHOICE = '0'; REWRITE(SYSTEMENTRY,'/D1/SYSTEM'); PUT(SYSTEMENTRY); clearscreen; END. {CONFIGURATOR} E CHOICE OF '0'AY [1..32] OF CHAR; CHANGE,OK : BOOLEAN; I : INTEGER; BEGIN IF STATUS.PROCSTAT IN [IDLE, RSET, FINISH] THEN BEGIN REPEAT WRITE('enter name of recipe: '); PROMPT(OUTPUT); readstring(INPUTSTRING,CHANGE); IF30 BEGIN 5335 IF NR IN OLDIOSET THEN 5340 BEGIN 5345 DIALARM := DIALARM + [NR]; 5346 WRITE('DI',NR:4,'':2); 5350 processaction(ALCONTR); 5355 END {IF} 5360 END; {ELS CHANGE THEN BEGIN OK := NOT (INPUTSTRING[1] IN ['0'..'9',' ']); END {IF} ELSE OK := FALSE; IF NOT OK THEN ERROR(7); UNTIL OK; RCNAME [1 FOR 11] := '/D1/RECIPE/'; INDEXNAME [1 FOR 17] := '/D1/RECIPE/index.';E} 5365 IF NOT ALARMSTATUS THEN 5370 DIALARM := DIALARM - [NR]; 5375 END; {WITH} 5380 END; {FOR} 5385 END; {inputtest} 5390 5395 PROCEDURE reset_proc; 5400 {changes the procstatus to reset if requested; in reset the flame i FOR I := 1 TO 12 DO BEGIN STATUS.RECIPENAME[I] := INPUTSTRING[I]; RCNAME [I+11]:= INPUTSTRING [I]; INDEXNAME [I+17]:= INPUTSTRING [I]; END; {FOR} UPDATE (RECIPERECORD,RCNAME); UPDATE (INDEX,INDEXNAME); REPOSITI0000000000ÊE -      XXXXXXXXXXAXDONR] OF DOUT; TEMP : TEMPCONTROL; ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ END; {IOSET HAS THE INFO FOR DIGITAL INPUTS, OUTPUTS(2X) AND CHANGING AO'S IN A BLOCKSTEP} TABLEDEF = ARRAY [1..MAXTAB] OF INTEGER; FUNCDEF = ARRAY [1..MAXFUNC] OF CHAR; {TO BE DEFIN IF OK THEN print_DO (LINE,LOOPSTART,LOOPEND,LP) END {4}; 5 : print_TEMP (LINE, LP); 6 : print_LATHE (LINE, LP); END; {CASE} UNTIL TYPESELECT = 0; END {IF} ELSE BEGIN IF NOT LP THEN cle Rarscreen; LOOPSTART := 1; LOOPEND := MAXAINR; print_AI(LINE,LOOPSTART,LOOPEND,LP); LOOPEND := MAXAONR; print_AO(LINE,LOOPSTART,LOOPEND,LP); LOOPEND := MAXDINR; print_DI(LINE,LOOPSTART,LOOPEND,LP); LOOPEND := MAXDONR;:= STATUS.IOSET; IF OFF = OFF3 THEN OFFSET := INTOFF2 ELSE OFFSET := INTOFF1; FOR I := 0 TO 1 DO BEGIN {$D- NO RUNTIME ERROR CHECKING} DO_DATA.ADDRESS := DO_BOARD+ 2 * I; DATA := FIELDGET(INTREP[OFFSET-I],7,16);  print_DO(LINE,LOOPSTART,LOOPEND,LP); print_TEMP (LINE, LP); print_LATHE (LINE, LP); PAGE(OUTPUT); END; {ELSE} IF LP THEN REWRITE(OUTPUT,'/TERM') ELSE BEGIN WRITELN; WRITE ('press to return to the job selection'); DO_DATA.VALUE^ := DATA; END {FOR}; {$D+} END; {WITH} FOR I := 1 TO MAXAONR DO setAOstat(I,STATUS.AOLIST[I]); END; {setDOAO} PROCEDURE init_status; VAR I : INTEGER; BEGIN WITH STATUS DO BEGIN PROCSTATUS := IDLE; STEPSTATUS PROMPT (OUTPUT); READLN; END {ELSE} END; {printsystem} $SUBTITLE PROCEDURES TO DELETE/INITIATE ENTRIES PROCEDURE AI_delete(VAR PORTNR : INTEGER); BEGIN WITH SYSTEMENTRY^.AILIST[PORTNR] DO BEGIN NAME := NONAME;  := PRERUN; CURRENTSTEP := -1; STARTSTEP := 0; TOTSTEP := 0; FOR I := 1 TO MAXAONR DO AOLIST[I] := 0; IOSET := []; NEXTSPEED := 0; AIPREALARM := []; AIALARM1 := []; AIALARM2 := []; DIALARM := []; EN UNIT := NOUNIT; SCALE := 0; LOOP := AIONLY; CONTROL := DONTCARE; DOLINK := 0; IF (AOLINK>0) AND (AOLINK 0) AND (SOFTST <> 0) THEN BEGIN CONTR := SYSTEMENTRY^.DOLIST[DOLINK].CONTROL; NR := DOLINK + OFF2; SETBIT :=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ((CONTR = NORMAL) AND NOT (NR IN OLD_DOSET) AND (NR IN STATUS.IOSET)) OR ((CONTR = INVERTED) AND (NR IN OLD_DOSET) AND NOT (NR IN STATUS.IOSET)); IF SETBIT THEN BEGIN STATUS.IOSET := STATUS.IOSET + [SOFTST+ OFF2] + [SOFTST+ O.     FF3]; TIMERSOFT := 6; END; {IF} END; {IF} END; {setsoft} PROCEDURE clearsoft; VAR AONR : INTEGER; BEGIN FOR AONR := 1 TO MAXAONR DO WITH SYSTEMENTRY^.AOLIST[AONR] DO IF SOFTST <> 0 THEN STATUS.IOSET := STATUS.IOSET -AMPINDEX = 0 {AT START OF A NEW STEP} THEN BEGIN TIMERRAMP := 0; STATUS.AOLIST[SPEEDNR] := 0; END {IF} ELSE BEGIN TIMERRAMP := TIMERRAMP - 1; REALVALUE :=(SPEEDCONT[RAMPINDEX,RAMP_TIME] -TIMERRAMP)* INCRE [SOFTST +OFF2] - [SOFTST + OFF3]; END; {clearsoft} PROCEDURE speedramp; VAR I,INDEXNUMBER: INTEGER; REALVALUE : REAL; FOUND : BOOLEAN; BEGIN INDEXNUMBER := STATUS.INDEXNR; WITH RECIPE[INDEXNUMBER].STEP DO IF RAMPINDEX < 6 THEN BEGIN IF RMENT; STATUS.AOLIST[SPEEDNR] := ROUND(REALVALUE) + BEGINSPEED; END; {ELSE} {compute next ramping increment, if TIMERRAMP = 0} IF TIMERRAMP = 0 THEN BEGIN BEGINSPEED := STATUS.AOLIST[SPEEDNR]; REPEAT RAMPINDEX  := NOUNIT; SCALE := 0; I := AILINK; AILINK := 0; DOLINK := 0; SOFTST := 0; RATIOLINK := 0; RATIOVALUE := 0 END; {WITH} := RAMPINDEX + 1; IF RAMPINDEX <6 THEN FOUND := SPEEDCONT[RAMPINDEX,RAMP_TIME] <> 0 ELSE FOUND := FALSE; IF FOUND THEN BEGIN TIMERRAMP := SPEEDCONT[RAMPINDEX,RAMP_TIME]; INCREME IF (I >0) AND (I 5); END; {IF} setAOstat(SPEEDNR,STATUS.AOLIST[SPEEDNR]); END; {IF} END; {speedramp} PROCEDURE move_half := IGNORE; DOLINK := 0 END {WITH} END {DI_delete}; PROCEDURE DO_delete(VAR PORTNR : INTEGER); BEGIN WITH SYSTEMENTRY^.DOLIST[PORTNR] DO BEGIN NAME := NONAME; CONTROL := NORMAL; IF (INspeed; VAR VALUE : INTEGER; BEGIN VALUE := $800; {$800 IS HALF OF FULL SCALE} STATUS.AOLIST[SPEEDNR] := VALUE; STATUS.NEXTSPEED := VALUE; setAOstat(SPEEDNR,VALUE); END; {move_halfspeed} PROCEDURE nextstep; VAR NEXT, EXIST,SETBIT : BOOLEAN; AOITERLOCK>0) AND (INTERLOCK RECP_END); IND LATHE [L] := 0 END {WITH} END {LATHE_delete}; PROCEDURE create_SF; {INITIALIZES THE SYSTEMFILE} VAR I : INTEGER; BEGIN FOR I := 1 TO MAXAINR DO AI_delete(I); FOR I := 1 TO MAXAONR DO AO_delete(I); FOR I := 1 TO MAXDINR DO DI_delete(I); EXNR := INDEXNUMBER; END; {WITH} IF NEXT AND EXIST THEN BEGIN {put new step in status for execution} WITH RECIPE[INDEXNUMBER].STEP DO BEGIN STATUS.STEPNAME := NAME; STATUS.AOLIST := AOLIST; STATUS.IOSET := IOSET;/      IF STATUS.STEPTYPE = TIMED_STEP THEN STATUS.TIMEREMAIN := TIME ELSE BEGIN RAMPINDEX := 0; {swap the deposition and fast forward speed;step starts with fast} STATUS INTEGER; DI_DATA : ABSINTDEF; IOCONVERT: RECORD CASE BOOLEAN OF TRUE: (IOSET : SETTYPE); FALSE: (INTREP: INT16); END; BEGIN WITH IOCONVERT DO BEGIN IOSET := []; OFFSET := 15; {$D- NO RUNTIM.NEXTSPEED := AOLIST[SPEEDNR]; {forward speed} STATUS.AOLIST[SPEEDNR] := FAST_SPEED; END; {ELSE} END; {WITH} WITH STATUS DO IF RECIPE[INDEXNUMBER].STEP.TERMINATOR THEN RECP_END := CURRENTSTEP + TOTSTEP-1; E ERROR CHECKING} DI_DATA.ADDRESS := DI_BOARD; INTREP[OFFSET] := FIELDGET(DI_DATA.VALUE^,7,16); {GET INPUT 1 TO 16, 8 BITS SHIFTED TO GET 8-16 IN M.S. BITS} DI_DATA.ADDRESS := DI_BOARD + 2; INTREP[OFFSET-1] := FIELDGET(DI_DATA.VAL END; {IF} {end of loading the next step except for the changing AO part} {the next section is also executed if a block step is not yet finished} WITH STATUS DO IF STEPTYPE = BLOCK_STEP THEN FOR AONR := 1 TO MAXAONR DO IF (AONR +OFF4) IN IUE^,7,8); {GET INPUT 17-24 ONLY IN THE L.S. BITS OF DATA} {$D+} FOR DINR := 1 TO MAXDINR DO BEGIN IF (DINR+OFF1) IN IOSET THEN STATUS.IOSET := STATUS.IOSET + [DINR+OFF1] ELSE SOSET THEN BEGIN RAMPINDEX := 0; {init for speed ramp in deposition stroke} searchfullindex(RCD_TABLE,STARTSTEP,AONR,EXIST,AOINDEX); IF EXIST THEN BEGIN BLOCKNR := CURRENTSTEP - STARTSTEP +1; TATUS.IOSET := STATUS.IOSET - [DINR+OFF1] END; END {WITH}; END; {getDIstat} PROCEDURE getAIstat; { STARTS THE CONVERSION OF AN ANALOG CHANNEL AND READ THE} { CONVERTED DIGITAL VALUE} VAR NR,READY,COUNT,DATA: INTEGER; AD_SELECT, AD_DATA : ABSINTD VALUE := RECIPE[AOINDEX].TABLE[BLOCKNR]; AOLIST[AONR] := VALUE; DONR := SYSTEMENTRY^.AOLIST[AONR].DOLINK; IF DONR <> 0 THEN BEGIN CONTR := SYSTEMENTRY^.DOLIST[DONR].CONTROL; EF; BEGIN {$D- SUPPRESS RUNTIME CHECKS; POINTER ACCESSES NON MEMORY ADDRESSES} AD_SELECT.ADDRESS := AD_BOARD; AD_DATA .ADDRESS := AD_BOARD + 2; FOR NR := 1 TO 16 DO WITH AD_SELECT DO BEGIN VALUE^ := 256 *(NR-1) + 4; COU SETBIT := ((VALUE > 0) AND (CONTR = NORMAL)) OR ((VALUE = 0) AND (CONTR = INVERTED)); IF SETBIT THEN IOSET := IOSET + [DONR+OFF2] + [DONR+OFF3] ELSE IOSETNT := 10; REPEAT READY := FIELDGET(VALUE^,2,1); COUNT := COUNT-1; UNTIL (READY = 0) OR (COUNT=0); IF READY = 0 THEN BEGIN STATUS.AILIST[NR]:= FIELDGET(AD_DATA.VALUE^,15,12); END {IF}  := IOSET - [DONR+OFF2] - [DONR+OFF3]; END; {IF} END; {IF} END; {IF} { all changes are now made to insure the correct digital and analog output settings} {next the softstarts will be computed and added to the digital outputs} ELSE STATUS.AILIST[NR] := 0; END; {WITH} {$D+ ENABLE RUN TIME ERROR CHECKING AGAIN} END; {getAIstat} PROCEDURE processaction(CONTR : DICONTROL); BEGIN CASE CONTR OF IGNORE : WRITELN('IGNORE'); BUZZER : {setbuzzer}WRITELN('BUZZER {they are added to both deposition and fast forward settings and are {cleared in both after 6 seconds} setsoft(OLDDOSET); {now all outputs can be set according to the status} setDOAO(OFF3); END; {newstep} PROCEDURE getDIstat; VAR DINR,OFFSET:'); HOLD : {hold_proc}WRITELN('HOLD'); ALARM : {setalarm} WRITELN('ALARM'); ABORT : {setabort} WRITELN('ABORT'); TIMERESET: {settimereset}WRITELN('TIME RESET'); END; {CASE} END; {processaction} PROCEDURE difference; {computes the0      difference between setpoints and inputvalues, for linked and unlinked ai's} VAR NR, TABLEOFFSET, AONR :INTEGER; AILOOP : AI_LOOP; BEGIN TABLEOFFSET := 1; FOR NR := 1 TO MAXAINR DO BEGIN WITH SYSTEMENTRY^.AILIST[NR]DO BEGIN AILO.ALARMCONTROL[AINR]; ABCONTR := RECIPE[1].HEADER2.ABORTCONTROL[AINR]; END; {IF} IF ABORTSTATUS AND (AINR IN AIALARM2) THEN {NOTHING} ELSE BEGIN IF AINR IN AIALARM1 THEN BEGIN AOP := LOOP; AONR := AOLINK; END; {WITH} WITH STATUS DO IF AILOOP = SETPOINT THEN DEVIATION[NR] := AOLIST[AONR] - AILIST[NR] ELSE BEGIN DEVIATION[NR] := AILIST[TABLEOFFSET] - AILIST[NR]; IALARM2 := AIALARM2 + [AINR]; AIALARM1 := AIALARM1 - [AINR]; WRITE('AI',AINR:4,'':2); processaction(ABCONTR); END {IF} ELSE BEGIN IF ALARMSTATUS AND (AINR IN AIALARM1) TABLEOFFSET := TABLEOFFSET + 1; END; {ELSE} END; {FOR} END; {difference} PROCEDURE alabtest; VAR NR,AINR : INTEGER; ALARMSTATUS : BOOLEAN; ABORTSTATUS : BOOLEAN; ALCONTR, ABCONTR : DICONTROL; BEGIN FOR AINR := 1 TO MAXAINR DO THEN {NOTHING} ELSE BEGIN IF AINR IN AIPREALARM THEN BEGIN AIALARM1 := AIALARM1 + [AINR]; AIPREALARM := AIPREALARM - [AINR]; WRITE('AI',AIN WITH STATUS DO BEGIN IF ABS(DEVIATION[AINR]) <> 1 THEN {1 BIT DIFFERENCE IS WITHIN ACCURACY} BEGIN CASE SYSTEMENTRY^.AILIST[AINR].CONTROL OF DONTCARE : BEGIN ALARMSTATUS := FALSE; ABORTSTR:4,'':2); processaction(ALCONTR); END {IF} ELSE AIPREALARM := AIPREALARM + [AINR]; END {ELSE} END {ELSE} END; {ELSE} IF NOT (ALARMSTATUS OR ATUS := FALSE; END; BANDLIMIT: BEGIN ALARMSTATUS := ABS(DEVIATION[AINR]) > RECIPE[0].HEADER1.ALARMVAL[AINR]; ABORTSTATUS := ABS(DEVIATION[AINR]) > ABORTSTATUS) THEN BEGIN AIPREALARM := AIPREALARM - [AINR]; AIALARM1 := AIALARM1 - [AINR]; AIALARM2 := AIALARM2 - [AINR]; END; {IF} END; {WITH} END; {alabtest} PROCEDURE inputtest; VAR OLDIOSET  RECIPE[1].HEADER2.ABORTVAL[AINR]; END; UPPERLIMIT: BEGIN ALARMSTATUS := DEVIATION[AINR] > RECIPE[0].HEADER1.ALARMVAL[AINR]; : SETTYPE; NR ,INDEXNUMBER : INTEGER; ALARMSTATUS : BOOLEAN; ALCONTR : DICONTROL; BEGIN OLDIOSET := STATUS.IOSET; INDEXNUMBER := STATUS.INDEXNR; FOR NR := 1 TO MAXDINR DO BEGIN WITH SYSTEMENTRY^.DILIST[NR] DO BEGIN IF ABORTSTATUS := DEVIATION[AINR] > RECIPE[1].HEADER2.ABORTVAL[AINR]; END; LOWERLIMIT: BEGIN ALARMSTATUS := -DEVIATION[AINR] >  (NR + OFF1) IN RECIPE[INDEXNUMBER].STEP.IOSET THEN {check this input} BEGIN IF SAFE = LOW THEN ALARMSTATUS := (NR +OFF1) IN STATUS.IOSET ELSE ALARMSTATUS := NOT ((NR +OFF1) IN STATUS.IOSET);  RECIPE[0].HEADER1.ALARMVAL[AINR]; ABORTSTATUS := -DEVIATION[AINR] > RECIPE[1].HEADER2.ABORTVAL[AINR]; END; END; {CASE} ALCONTR := RECIPE[0].HEADER1 ALCONTR := CONTROL; END ELSE ALARMSTATUS := FALSE; END; {WITH} WITH STATUS DO BEGIN IF ALARMSTATUS AND (NR IN DIALARM) THEN {NOTHING} ELSE BEGIN IF NR IN OLD1     IOSET THEN BEGIN DIALARM := DIALARM + [NR]; WRITE('DI',NR:4,'':2); processaction(ALCONTR); END {IF} END; {ELSE} IF NOT ALARMSTATUS THEN DIALARM := DIALARM - [NR] END; {ELSE} END; {WITH} END; {hold_step} PROCEDURE execstep; VAR NEWSTEP : BOOLEAN; VALUE : INTEGER; BEGIN IF TIMERDELAY <> 0 THEN TIMERDELAY := TIMERDELAY -1; IF TIMERDELAY = 0 THEN BEGIN difference; ALABtest; INPUTtest; END; {WITH} END; {FOR} END; {inputtest} PROCEDURE reset_proc; {softstarts H2, O2 burner MFC's when tempcontrol is manual and flame is off and process status is idle or finished.} {global are FLAMESENSOR, H2_AONR, O2_AONR, TIMERS FOR SOFTST, FLAM; END; {IF} IF TIMERSOFT <> 0 THEN TIMERSOFT := TIMERSOFT -1; IF TIMERSOFT = 0 THEN BEGIN clearsoft; setDOAO(OFF3); END; {IF} WITH STATUS DO BEGIN IF (TIMEREMAIN <> 0) AND (STEPTYPE = TIMED_STEP) THEN TIMEREMAIN := TIMERE} {global are FLAMEON, SAFEHIGH, TEMPMANUAL} BEGIN WITH SYSTEMENTRY^ DO BEGIN TEMPMANUAL := NOT ((TEMP[T_AUTO_MAN] +OFF1) IN STATUS.IOSET); SAFEHIGH := DILIST[FLAMESENSOR].SAFE = HIGH; END; WITH STATUS DO IF SAFEHIGH THEN FLAMEON EMAIN -1 ELSE BEGIN {* check change to deposit setting of outputs in event, block step} IF ((INLETDI + OFF1) IN IOSET) AND (NOT DEPOSITION) THEN BEGIN VALUE := AOLIST[SPEEDNR]; AOLIST[SPEEDNR] := NEXTSPEED; NEXTSPEED := VAL:= (FLAMESENSOR +OFF1) IN IOSET ELSE FLAMEON := NOT((FLAMESENSOR +OFF1) IN IOSET); IF STATUS.PROCSTATUS IN [IDLE,FINISH] THEN BEGIN IF (NOT FLAMEON) AND TEMPMANUAL THEN BEGIN WITH SYSTEMENTRY^ DO STATUS.IOSET := STATUUE; setAOstat(SPEEDNR,AOLIST[SPEEDNR]); setDOAO(OFF2); DEPOSITION := TRUE; END; {IF} IF DEPOSITION THEN speedramp; END; {ELSE} {* check end of step criteria} IF (PROCSTATUS <> FINISH) AND (STEPSTATUS IN [RUN,BUZZ]) TS.IOSET + [AOLIST[H2_AONR].DOLINK + OFF3] + [AOLIST[O2_AONR].DOLINK + OFF3] + [AOLIST[H2_AONR].SOFTST + OFF3] + [AOLIST[O2_AONR].SOFTST + OFF3] {+ [TEMP[LITFLAME] +HEN BEGIN IF (STEPTYPE = TIMED_STEP) THEN NEWSTEP := ((TIMEREMAIN = 0) AND (STEPSTATUS = RUN)) ELSE {BLOCKSTEP, EVENTSTEP} BEGIN NEWSTEP := DEPOSITION AND ((EXHAUSTDI+OFF1) IN IOSET); IF NEWSTEP THEN DEPOSITION := FOFF3]}; setDOAO(OFF3); TIMERSOFT := 6; END; {IF} IF NOT TEMPMANUAL THEN WRITELN('temperature control not in MANUAL') ELSE STATUS.PROCSTATUS := RSET; END {IF} ELSE BEGIN WRITELN('reset is only allowed when ALSE; END; END; {IF} {* check if at end of recipe} IF (RECP_END = CURRENTSTEP) AND NEWSTEP THEN BEGIN PROCSTATUS := FINISH; STEPSTATUS := PRERUN; {stop the lathe ?} END; {* not at end of recipe} IF NEWSTEP AND (PROCSTATUS <> process is idle or finished'); WRITE('process status is:'); disp_procstatus; WRITELN; END; {ELSE} END;{rset_proc} PROCEDURE hold_step; {changes the stepstatus to hold if requested} BEGIN WITH STATUS DO BEGIN IF PROCSTATUS = EXECUTE FINISH) THEN BEGIN IF (STEPTYPE = TIMED_STEP) THEN STEPSTATUS := PRERUN; nextstep; TIMERSOFT := SOFTCOUNT; TIMERDELAY := DELAYCOUNT; IF {new} (STEPTYPE = TIMED_STEP) THEN STEPSTATUS := RUN; END; {IF} {* check foTHEN BEGIN STEPSTATUS := HLD; WRITELN('hold done'); END {IF} ELSE BEGIN WRITELN('hold is only allowed when process is running'); WRITE('process status is:'); disp_procstatus; WRITELN; r switch from prerun to run} IF (STEPSTATUS = PRERUN) AND ((EXHAUSTDI +OFF1) IN IOSET) THEN BEGIN STEPSTATUS := RUN; DEPOSITION := FALSE; END; {IF} END; {WITH} END; {execstep} PROCEDURE runtime; {checks digital and analog inputs and take2     s action -decounts timers + action at end of step, softstarts, delays -switches from fast forward to deposit at exhaust switch -test if step and process is finished } BEGIN {WHOLESEC := NOT WHOLESEC;} {IF WHOLESEC DO} WITH STATUS DO BEGIN getDI‡Í €3PCODÅ?\+P1c1]Q,W RRUNTIME stat; getAIstat; IF (STEPSTATUS = PRERUN) AND (PROCSTATUS = RSET) AND ((EXHAUSTDI + OFF1) IN IOSET) THEN BEGIN PROCSTATUS := EXECUTE; STEPSTATUS := RUN; DEPOSITION := FALSE; END;{IF} CASE PROCSTATUS 3,Øv Ñ Mÿ rÿû,Ùvÿû� bF Crÿû,Úvÿûr,Û9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>OF IDLE : ; {no special action} RSET : {The H2, O2 valves are opened and flame ignition turned on. After 6 seconds the softstarts are cleared. After 9 seconds the flame sensor is being checked. The flame should be on, otherwise the valves are closed again 3,á@Ÿ�°1@��°1,â°1,ã±1,ä±1F ,å,æ=05ÿD2ÿ±1 ,ç±1 ,è,é4ÿ5$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>and processstatus returns to idle. As long as the system in reset the flame is monitored, together with H2, O2 setpoints. } BEGIN IF TIMERSOFT <> 0 THEN BEGIN TIMERSOFT := TIMERSOFT - 1; IF TIMERSOFT = 0 THEN ÿyour choice: ÿ BEGIN TIMERFLAME := 3; clearsoft; setDOAO(OFF3); END; {IF} END {IF} ELSE BEGIN IF TIMERFLAME > 0 THEN BEGIN TIMERFLAME := TIMERFLAME - 3,ð±1,ñ±1F ,ò=N5ÿD2ÿ±1 ,ó±1 ,ô4ÿ5,õ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>1; IF TIMERFLAME = 0 THEN BEGIN {STATUS.IOSET := STATUS.IOSET - [SYSTEMENTRY^.TEMP[LITFLAME] + OFF3];} setDOAO(OFF3); END; {IF} END; {IF} 3,üÑô,ý±1,þ±1FK,ÿ,±=1%,±ø2úØ1 Ø1 ,(±1"ò,Ò�UF,,±1 ,,Ôö,±=1%, , DÔö, , Öð&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> IF (TIMERFLAME = 0) AND NOT FLAMEON THEN BEGIN WITH SYSTEMENTRY^ DO STATUS.IOSET := STATUS.IOSET - [AOLIST[H2_AONR].DOLINK + OFF3] - [AOLIST[O2_AONR].DOLINK + OFF3] ; 3,6Fqÿ®=5¹6 qÿ´2ª@@1,2ª1,Ñ2º‘"Nx= T*„,ÑxFH,‘qÿ¨6Fqÿ¦uÿ¨uÿ¦eF2Ðuÿ¨‹F"N2ºuÿ¨‹F"N,x„uÿ¨uÿ¦aF uÿ¨#qÿ¨DÿÎ2ª19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> setDOAO(OFF3); STATUS.PROCSTATUS := IDLE; {setbuzzer} END; {IF} END; {ELSE} END; {RSET} EXECUTE, FINISH : execstep; END; {case} {check key requests} disp_status(FALSE); {set /TERM ÿF ÿ3     NK := PORTNR; END {IF} END {WITH} END {change_AO}; $SUBTITLE CHANGE DIGITAL INPUTS IN SYSTEMFILE PROCEDURE DI_change(VAR PORTNR :INTEGER); VAR INPUTSTRING : MAXSTRING; CHANGE : BOOLEAN; CHOICE : CHAR; NUMBER : INTEGER; BEGIN WITHproc} {main program body} BEGIN clearscreen; STARS; WRITELN('':20,' OPTICAL FIBERS CONTROL'); STARS; IOABORT (SYSTEMENTRY,FALSE); RESET (SYSTEMENTRY,'/D1/SYSTEM'); SYSERROR := IORESULT(SYSTEMENTRY); IOABORT (SYSTEMENTRY,TRUE); IF SYS SYSTEMENTRY^.DILIST[PORTNR] DO BEGIN WRITE('NAME: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); IF CHANGE THEN NAME[1 FOR NAMELENGTH] := INPUTSTRING[1 FOR NAMELENGTH]; WRITELN('SAFE STATE: ERROR = 216 THEN WRITELN ('no configuration file') ELSE BEGIN GET (SYSTEMENTRY); WITH SYSTEMENTRY^ DO BEGIN SPEEDNR := LATHE[SPEED_AO]; INLETDI := LATHE[INLETSWITCH]; EXHAUSTDI := LATHE[EXHAUSTSWITCH];  '); WRITELN(' (1) low'); WRITELN(' (2) high'); CHOICE := GETCHOICE; CASE CHOICE OF '0' : ; '1' : SAFE := LOW; '2' : SAFE := HIGH; OTHERWISE: ERROR(1) END {C FLAMESENTSOR := 16; {TO BE CHANGED TO TEMP[FLAMEDI]} H2_AONR := TEMP[H2_AO]; O2_AONR := TEMP[O2_AO]; END; init_status; STATUS.RECP_END := 0; REPEAT WRITELN('':20,'JOB SELECTION'); WRITELN; WRITEASE}; WRITELN('TYPE OF CONTROL: '); WRITELN(' (1) ignore'); WRITELN(' (2) abort'); WRITELN(' (3) alarm'); WRITELN(' (4) hold'); WRITELN(' (5) time reset'); WRITELN(' (6) buzzer');LN('(X) EXIT'); WRITELN('(1) RECIPE EDITOR'); WRITELN('(2) LOAD A RECIPE'); WRITELN('(3) DISPLAY STATUS'); WRITELN('(4) CHANGE STATUS'); WRITELN('(5) CHANGE JOBNUMBER'); WRITELN('(6) RESET'); W CHOICE := GETCHOICE; CASE CHOICE OF '0' : ; '1' : CONTROL := IGNORE; '2' : CONTROL := ABORT; '3' : CONTROL := ALARM; '4' : CONTROL := HOLD; '5' : CONTROL := TIMERESERITELN('(7) START'); WRITELN('(8) HOLD '); WRITELN('(9) MAINTENANCE MODE'); CHOICE:= getchoice; clearscreen; CASE CHOICE OF 'X' : ; '0' : ;{realtimeIRQ} '1' : ;{CHAIN RECIPE EDITORoperator panel} END; {WITH} END; {runtime} PROCEDURE realtimeIRQ; BEGIN REPEAT WRITELN('enter to simulate the timer interrupt'); READLN; runtime; UNTIL (STATUS.PROCSTATUS = FINISH); END; {realtimeIRQ} PROCEDURE start_proc; VARARM := AIPREALARM - [AINR]; AIALARM1 := AIALARM1 - [AINR]; AIALARM2 := AIALARM2 - [AINR]; END; {IF} END; {WITH} END; {alabtest} PROCEDURE inputtest; VAR OLDIOSET : SETTYPE; NR ,INDEXNUMBER : INTEGER; ALARM NR,VALUE,X,COUNT, COUNT1 : INTEGER; CH : CHAR; BEGIN WITH STATUS DO IF (PROCSTATUS = RSET) AND (RECP_END <> 0) THEN BEGIN move_halfspeed; disp_status(FALSE); STEPSTATUS := PRERUN; realtimeIRQ; END STATUS : BOOLEAN; ALCONTR : DICONTROL; BEGIN OLDIOSET := STATUS.IOSET; INDEXNUMBER := STATUS.INDEXNR; FOR NR := 1 TO MAXDINR DO BEGIN WITH SYSTEMENTRY^.DILIST[NR] DO BEGIN IF (NR + OFF1) IN RECIPE[INDEXNUMBER].STEP.IOSET THE ELSE IF (PROCSTATUS = EXECUTE) AND (STEPSTATUS = HLD) THEN STEPSTATUS := RUN ELSE IF PROCSTATUS <> RSET THEN WRITELN('process status is not reset') ELSE WRITELN ('no recipe loaded'); END; {start_Rx@©4     0000000000š3#öDf…R^Id#öDSTEP0 33šTTSTEP1 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSTEP0 33šTTSTEP1 ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿT; '6' : CONTROL := BUZZER; OTHERWISE: ERROR(1) END {CASE}; WRITE('LINK WITH DO NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(DOLINK); IF NUMBER IN [0..MAXDONR] THEN DOLINK :=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMAN,TEMP_AI,PREF_AO,H2_AO,O2_AO); LATHE_TYPE = (L_AUTO_MAN,SPEED_AO,INLETSWITCH,EXHAUSTSWITCH); NAMETYPE= ARRAY[1..NAMELENGTH] OF CHAR;  NUMBER ELSE ERROR(5) {NR TOO LARGE} END {WITH} END {change_DI}; $SUBTITLE CHANGE THE DIGITAL OUTPUTS IN THE SYSTEMFILE PROCEDURE DO_change(VAR PORTNR :INTEGER); VAR INPUTSTRING : MAXSTRING; CHANGE : BOOLEAN; CHOICE : CHAR; NU IF INTERLOCK <> 0 THEN SYSTEMENTRY^.DOLIST[INTERLOCK].INTERLOCK := 0; INTERLOCK := NUMBER; END {0}; 1..MAXDONR : BEGIN IF NUMBER <> PORTNR THEN MBER : INTEGER; BEGIN WITH SYSTEMENTRY^.DOLIST[PORTNR] DO BEGIN WRITE('NAME: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); IF CHANGE THEN NAME[1 FOR NAMELENGTH] := INPUTSTRING[1 FOR NAMELENGTH];  BEGIN INTERLOCK := NUMBER; SYSTEMENTRY^.DOLIST[INTERLOCK].INTERLOCK := PORTNR {INFO RECORDED BY BOTH DO'S} END {IF} ELSE ERROR(1)  WRITELN('TYPE OF DIGITAL OUTPUT: '); WRITELN(' (1) normally closed'); WRITELN(' (2) normally open'); CHOICE := GETCHOICE; CASE CHOICE OF '0' : ; '1' : CONTROL := NORMAL;  END {1..MAXDONR}; OTHERWISE : ERROR(5); {NR TOO LARGE} END; {CASE} WRITE('CONDITIONAL INTERLOCK WITH DO NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(CONDLOCK); IF (NUMBER IN [0..MAXDONR]) AND (NU '2' : CONTROL := INVERTED; OTHERWISE: ERROR(1) END {CASE}; WRITE('INTERLOCK WITH DO NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(INTERLOCK); CASE NUMBER OF 0 : BEGIN MBER <> PORTNR) THEN CONDLOCK := NUMBER ELSE ERROR(5) {NR TOO LARGE} END {WITH} END; {change_DO} $SUBTITLE CHANGE THE TEMPERATURE CONTROL DEFINITIONS PROCEDURE TEMP_change; VAR NUMBER : INTEGER; BEGIN WITH SYSTEMENTRY^ DO 5      BEGIN WRITE('auto/manual switch is DI: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [T_AUTO_MAN]); IF NUMBER IN [0..MAXDINR] THEN TEMP [T_AUTO_MAN] := NUMBER; WRITE('flame sensor is DI: '); PROMPT(OUTPUT); ¿RR RZ.®RR®QPROEF²œindex.PROEF²¤DEMϱ9index.DEMϱAPROEÆ?index.PROEÆHGETCHOIC2GETCHAR  GETANSWE$READINT  :READREALKREADSTRIF { ERROR … pSTARS  ) CLEARSCR   AI_AO_DI4&¾WTESTRU·index.TESTRUÎ�TESTRUN±nindex.TESTRUN±’RUNTIME±ëindex.RUNTIME±NTESTRUN²’index.TESTRUN²« AI_DISPLÊt AO_DISPL` DI_DISPL¸L DO_DISPL` TEMP_DISË«LATHE_DI“ŒPRINT_AI�^PRINT_AO�_PRINT_DI… EPRINT_DO!…"Дindex.МLJËYindex.LJËpSPRINT_TE#.$!PRINT_LA%&&PRINTSYS'%I*òAI_DELET+g,AO_DELET-^.DI_DELET/ ,0 DO_DELET1 R2 TEMP_DEL3 &4LATHE_DE4 &5CREATE_S5 w6AI_CHANG68ç8AO_CHANG::ñ=… DI_CHANG>8�@¬!DO_CHANGA8ÐCŽ"TEMP_CHAD'7F­#LATHE_CHG'àH‰$EDITENTRI %ÃM„%CONFIGURP =ÙQ€ is DI: '); PROMPT(OUTPUT);  NUMBER := READINT(TEMP [FLAME_DI]); IF NUMBER IN [0..MAXDINR] THEN TEMP [FLAME_DI] := NUMBER; WRITE('flame ignition is DO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [LITFLAME]); IF NUMBER IN [0..MAXDONR] THEN TEMP [LITFLAME] := NUMBER; WRITE('temperature control is AI: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [TEMP_AI]); IF NUMBER IN [0..MAXAINR] THEN TEMP [TEMP_AI] := NUMBER; WRITE('preform temperature is AO: '); 6      PROMPT(OUTPUT); NUMBER := READINT(TEMP [PREF_AO]); IF NUMBER IN [0..MAXAONR] THEN TEMP [PREF_AO] := NUMBER; WRITE('hydrogen burner is AO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [H2_AO]); IF NUMBER 3 ,R6ÿò,S,TÒ‘ò,UOü$Ò‹1Bô,V,WÐÔyu Q,XÔyˆp*„,YÐxF',Z,[uÔy‹…,\u Ôy…,]ÑÒ…,^,_,`ÐxÒ61QFÿŒ,a9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IN [0..MAXAONR] THEN TEMP [H2_AO] := NUMBER; WRITE('oxigen burner is AO: '); PROMPT(OUTPUT); NUMBER := READINT(TEMP [O2_AO]); IF NUMBER IN [0..MAXAONR] THEN TEMP [O2_AO] := NUMBER; END {WITH} END; {TEMP_change} PROCED3 ,i6ÿò,j,kÒ‘ò,lOü$Ò‹1Bô,mÐÔyu QÔyu yQ,nÔyuQ*„,oÐxFÑÒ…,pÐxÒ61QFÿª,q9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,ÑD™,@››°1°1D¦,@ ŸŸ°1°1D•, @6#6#°1°1D‚,!@@¥¥°1°1Dq,"@V6*6*°1°1D^,#@�6&6&°16F“°1 °1DE,$@¨6363°1°1D2,%@Ü••°1,&°1DAFÿç‘E>ÿZÿkÿ|ÿ�ÿ ÿ³ÿÌ,'&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FOR I := 1 TO MAXDONR DO DO_delete(I); TEMP_delete; LATHE_delete; END;{create_SF} $SUBTITLE CHANGE ANALOG INPUTS PROCEDURE AI_change(VAR PORTNR : INTEGER); VAR INPUTSTRING : MAXSTRING; CHANGE : BOOLEAN; CHOICE : CHAR; NUMBER : INTEGEINPUT ERRORÿENTRY TOO LARGEÿnew value exceeds the maximum valueÿINPUT IS NOT A NUMBERÿmax. time is 8 hrs, 59 minutes, 59 secondsÿmax. number of steps in a blockstep isÿno spaces in name allowed; first char. not a numberÿERRORÿR; BEGIN WITH SYSTEMENTRY^.AILIST[PORTNR] DO BEGIN WRITE('NAME: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); IF CHANGE THEN NAME[1 FOR NAMELENGTH] := INPUTSTRING[1 FOR NAMELENGTH]; WRITE('MA3,,°1,-�ò6KôÒÔeF=*‘°1ÒÔaFÒ#òDÿî,.°1,/°1,0$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XIMUM VALUE: '); PROMPT(OUTPUT); SCALE := READREAL(SCALE); WRITE('UNIT: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); IF CHANGE THEN UNIT[1 FOR UNITLENGTH] := INPUTSTRING[1 FOR UNITLENGTH]; 3,5«+5ÿ,64ÿ‘°1=X‘°1°1,7$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> WRITELN('TYPE OF LOOP:'); WRITELN(' (1) setpoint control'); WRITELN(' (2) AI switches DO if below setpoint'); WRITELN(' (3) AI switches DO if above setpoint'); WRITELN(' (4) AI only'); CHOICE := GETC3 ,<«+5ÿ,=4ÿ‘°1=@‘°1°1,>$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>HOICE; CASE CHOICE OF '0' : ; '1' : LOOP := SETPOINT; '2' : LOOP := AIDOBELOW; '3' : LOOP := AIDOABOVE; '4' : LOOP := AIONLY; OTHERWISE: ERROR(1) END; {CASE} WRITELN3 ,D�ò,E�ô61öÔÖeF0,FOü$Ô‹1Bø,GØyÒYF,HØyòÔÖaFÔ#ôDÿÐ,IÒñ,J$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>('TYPE OF CONTROL:'); WRITELN(' (1) don''t care'); WRITELN(' (2) bandlimit'); WRITELN(' (3) upper limit'); WRITELN(' (4) lower limit'); CHOICE := GETCHOICE; CASE CHOICE OF '0' : ; 7      RqHIGHÿ LOWÿÿ3 ,wÑ2 @W *„,x9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,ÐMù,ÑÑý,ÒÝÙû,ÓÝÙý,Ô2ù‘"NÛ=0.+„,ÕÙ6<‹ù,ÖÝÙû,×ÝÙý,ØÛš‹ÿ,ÙÛš‹ qÿï,Ú2ù’"N=.„,Û2ù“"Nß=0.+„,Ü2ù”"Ná=0.+„,ÝÝš‹ÿ,ÞÝš‹ qÿï,ß2ù•"N=.„,à2ù–"Nß=0.+„,á2ù—"Ná=0.+„,â2ù™—°1,ã&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XXXXXXXXXXÿ3,ç,è,é�ýPDA,ê@˜”°1DI,ë@˜—°1D;,ì@ ˜•°1D-,í@˜˜°1D,îD,ïAFÿòE>ÿ´ÿÐÿÂÿÞ,ð,ñ$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,}@6%6%°1,~°1,Oÿh2ÿ0,€4ÿF,�ÑOÿh‘"Nx=LPOÿh’"Nx=PP*„,‚&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IDLEÿEXECUTEÿRESETÿFINISHEDÿenter LP for a hardcopy, to exitÿ3,õ,ö,÷�ýRD],ø@˜–°1Di,ù@˜“°1D[,ú@ ˜”°1DM,û@˜•°1D?,ü@˜•°1D1,ý@˜–°1D#,þD,ÿAFÿòE>ÿ˜ÿ¦ÿ´ÿÂÿÐÿÞ,,$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,Š�ô,‹�ò,Œ‘ö,�,ŽOòòÖ‹ "Bþ,�,�Þ8 2ù0 ,‘4ùFm,’,“)ÞzOýƒÖ‹ "By0rÿô,”Þšš°1vÿô™“°1ÞJ –•°1,•Ô‘ô,–Ô“QF,—,˜°1,™�ô,š,›D@‘�°1,œ,�,žÖ‘ö,ŸÖ6 YFÿ[, °1,¡°1,¢$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>PRERUNÿRUNÿHOLDÿALARMÿABORTÿBUZZERÿÿ3,2ô2ö2ø2ú2ü2þ1),@––°1Ü‘°1 =/‘°1Ú‘°1 =/‘°1Ø‘°1 @˜–°1,ÖšaF=0‘°1Ö‘°1 =.‘°1D Ö’°1 =.‘°1, ÔšaF=0‘°1Ô‘°1 =.‘°1D Ô’°1 =.‘°1, ÒšaF=0‘°1Ò‘°1 DÒ’°1 , $>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,ª�ò,«‘ô,¬,­Oø‚Ô‹"Bû,®,¯Û8 2û0 ,°4ûFl,±,²Ô6ÿƒ ýãF,³2÷,´@7D2÷@7,µÛšš°12÷•”°1,¶Ò‘ò,·Ò“QF,¸,¹°1,º�ò,»,¼D@ š�°1,½,¾,¿Ô‘ô,ÀÔ¨YFÿ],Á°1,Â$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>date: ÿtime: ÿ8     3,4FL,,°@@1,0,°1,@¤�°1@­­°1°1,°1,0,°1,,D0,,,�ýP�UF$, ,!Oýcœœ°1,"@.–”°1Oýo›š°1,#,$�ýPˆ F&,%,&@3—”°1�ýT•°1 Oýyœš°1,'0,(,)�ýRˆF,*°1,+0,,�ýV”QF$,-,.@8”�°1@9¤¤°1,/>>3,Ž,�,�Mí Б’ò,‘Ò“ Ñ1/,’,“9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>�ý^0,0,1°1,2°1,30,4°1,50,64F%,7,80,9°1,:°@N@U1,;=5,<,=,>,?,@,A%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,Ÿ, ,¡ƒ ýãs ÿØ,¢Ñ6_QF,£œôD™ô,¤�ò‘qÿÖÒuÿÖeF<,¥,¦,§Mî’Òø,¨(2ØÔÒBy— 11ö,©ØÖ…,ªÒuÿÖaFÒ#òDÿÄ,«,¬,­‘ò qÿÖÒuÿÖeF%,®ÒOýÃÒ‹"By0ÒuÿÖaFÒ#òDÿÛ,¯&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/P1 ÿOUTPUT ÿÿOPTICAL FIBERS STATUS DISPLAYÿJOB:ÿSTEPÿÿremaining steptime: ÿ/TERM ÿOUTPUT ÿ3,µ,¶,·�}ýP,¸�}ýR,¹6ÿ}ýT,º�}ýX,»�}ýZ,¼‘ò ôÒÔeF,½OýÃÒ‹"B�…ÒÔaFÒ#òDÿâ,¾ˆ ýã,¿�}þÇ,Àˆ þC,Áˆ þc,ˆ þƒ,È þ£,Ä,Å6/0,Æ�}ÿ®,Ç�}ÿ°,È�}ÿ²,É�}ÿ´,Ê�}ÿ¶,Ë�}ÿ¸,Ì$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,H,I,J@££°1Oýoœš°1°1,K@ŸŸ°1@$–�°1,L°1,MOÿh2ÿ0,N4ÿF6,O‘óšõÓÕeF),POýoÓ‹ "NOÿhÓ‹F"Nx„ÓÕaFÓ#óDÿ×,Q,R$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,Ó‘ô ùÔÙeFÃ,ÔOörÔ‹"B!û,ÕÛy�UÛy�UF“,Ö,×OúÛy‹ "By ‹ö,ØÛy6/ò,ÙÖ�QÒw Òƒ ýã,ÚÖ‘QÒw Òƒ ýã*5ù,Û4ùF,,Ü,݃ ýãÛy6/Ûy6_ ýã,Þ–}ÿ°,ß,àÔÙaFÔ#ôDÿ=,á9 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>current job number:ÿnew job number:ÿÿ3,æ‘ò ôÒÔeFH,çOörÒ‹"B!ö,èÖy�UF,éƒ ýãÖy6/Öy6_ ýãÒÔaFÒ#òDÿ¸,ê$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3,[�ýPˆ FÞ,\,],^@¦¦°1,_°1,`2ºŠÿ0,atÿF',b,c2º‘"Nx.ˆÿ*5€,d,eD=5€,f4€F—0,g4€Fÿž,h2¡‘"N@7 ,i2�‘"N@#7,j‘qÿ}œqÿ{uÿ}uÿ{eF~,k,lOýcuÿ}‹ "N2ºuÿ}‹F"Nx„,m2¡uÿ}›‹"N2ºuÿ}‹F"Nx„,n2�uÿ}¡‹ "N>>3,ñ�ý\ò,òOÖôÒ‹1B�ü,óÆ–aFZ,ô,õÆ�QF%,ö,÷�}ÿ®,øOýú‹"B�…,ù,úDL,û,ü�ÿ®‘}ÿ®,ýÜJrÆ‹"B�By�ÿ®‚ÿårÿ÷,þOýú‹"Bvÿ÷Ä…,ÿ,,�ÿ®�QFµ,,Oýú‹"By}ÿì,,Æ‘}ÿê,Æ–aF#,ÜJrÆ‹"B�By,�U*5öD>>2ºuÿ}‹F"Nx„,ouÿ}uÿ{aF uÿ}#qÿ}Dÿ‚,pOþÉ2¡@51#,qOü2�@?1#,rOþÉ� 1,sOü� 1,tOü1,u�qÿ},vOü1F,w@I¥¥°1,x°1DQ,y,zOþÉ1F2,{,|OþÉ1,}OÖôuÿ}‹1B�OþÙ7�,~uÿ}‘qÿ},DÿÅ,€,�(0 }ýa,‚,ƒ�ýP‘QF=0,„,…D @_6!6!°1°1,†$>>=5ö, 4öFJ, , ÜJrÆ‹"B�By}ÿ®, ÜJrÆ‹"B‘ByÄ, �ÿ®  ~ÿå,,4öÆ•YFÿm,,ºOýú‹"By0,,$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>enter name of recipe: ÿ/D1/RECIPE/ÿ/D1/RECIPE/index.ÿRECIPERE ÿINDEX ÿrecipe does not existÿnot allowed; a process is runningÿ3,Mò,Oýú‹"BÒ…,Ò}þÇ,ºÒ0,$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>9     3,%,&,'�ýT‘}ýT,(�ýT�ýX�ýZQ*5ý,)ƒ ýãs ÿÏ,*4ýFC,+,,OýV�ýTOýZ2þ2ñ0 ,-4þF�ýT,.‘}ýTD�ýT}ýX,/4þ�ýT�ýaYFÿÃ,0ß}ý\,1,24ý4þFÌ,3,4OÖôß‹1B�qÿÊ,5,6OýyuÿÊ7 ,7OýÃuÿÊJ 7 ,8uÿÊ{ R ýã,9�ýV”QF,:,;uÿÊy‡}ý^DA,<,=�}ÿê,>,?>3!,”Míü,•Mí’ú,–‘ø þØÞeF€,—,˜,™ÜMØ‘”…,ššô,›,œ(Üy’‘11ö,�Ô‘ô,žÖ�QÔ�QFÿâ,ŸÖ�QF!, ,¡OýƒØ"B(ÚyŸœ11…,¢,£D OýƒØ"B�…,¤ØÞaFØ#øDÿ€,¥,¦$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> file') ELSE BEGIN GET (SYSTEMENTRY); WITH SYSTEMENTRY^ DO BEGIN SPEEDNR := LATHE[SPEED_AO]; INLETDI := LATHE[INLETSWITCH]; EXHAUSTDI := LATHE[EXHAUSTSWITCH]; END; init_status; STATUS.RECP_END := 0;3",ªÑDi,«@––°1°1Dn,¬@––°1°1D],­@””°1°1DL,®@••°1°1D;,¯@••°1°1D*,°@šš°1°1D,±‹Eÿ�ÿÔÿÃÿ²ÿåÿ¡,²&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RË“®IGNOREÿBUZZERÿHOLDÿALARMÿABORTÿTIME RESETÿ0000000000XXX3#,º‘ô,»‘ö6 úÖÚeFÁ,¼,½OòòÖ‹ "Bü,¾,¿Üy‹ø,ÀÜyò,Á,Â,ÃØ”QF8,ÄOþÖ‹ "BOýÃÒ‹"ByOýƒÖ‹ "B,Åy…D?,Æ,ÇOþÖ‹ "BOýƒÔ‹ "ByOýƒÖ‹ "By…,ÈÔ‘ô,É,ÊÖÚaFÖ#öDÿ?,Ë$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XXXRAMPTEST š3Í ÌXXXXXXXXXX3$,Ô‘ò6 üÒÜeFG,Õ,Ö,×OþÒ‹ "By‘UFÈ,Ø,ÙOòòÒ‹ "ByDY,Ú,Û=5û,Ü=5ú,ÝDU,Þ,ßOþÒ‹ "By,àOÖô�B�J Ò‹ "ByY*5û,áOþÒ‹ "By,âOÖô‘B�Ò‹ "ByY*5ú,ãDë,ä,åOþÒ‹ "By,æOÖô�B�J Ò‹ "ByY*5û>>>uÿÊJ º‹"By}þÇ,@Oýú‹"BuÿÊy�…,A,B,C,DOÖôß‹1B�x†F,E�ýT�ýZ‘}ýa,F,G,H,I,J�ýV–QF6,K‘ý qÿÊÝuÿÊeF%,LÝM�ƒ ýãF,M,N�}ÿê,O—�ýX2ó2þ2ï0 ,P4þFá,Q,R�ýT�ýX‘÷,SOÖôá‹1B�׋F"Byõ,TOýÃÝ‹"BÕ…,UOörÝ>>>>>,çOþÒ‹ "By,èOÖô‘B�Ò‹ "ByY*5ú,éD€,ê,ëOþÒ‹ "By,ìOÖô�B�J Ò‹ "ByY*5û,íOþÒ‹ "By,îOÖô‘B�Ò‹ "ByY*5ú,ïD,ð‹E>þŸþ¶ÿ ÿ‹,ñOÖô�B�JJÒ‹ "By‹ú,òOÖô‘B�J@Ò‹ "By‹ø,ó,ô,õ4ú>‹"B!yù,VÙ�UF},W,XOúÙ‹ "By ‹qÿÍ,YÕ�YuÿÍ�Q,ZÕ�QuÿÍ‘Q*5ÿ,[4ÿF,\ƒ ýãÙ6/Ù6_,] ýãD,^ƒ ýãÙ6/Ù6_ ýã,_,`,aÝuÿÊaFÝ#ýDþÛ,b,c,d,e,f,gw ÿÏ0,h,i6_0,j$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Òƒ þƒF,öDõ,÷,øÒƒ þcFP,ù,úƒ þƒÒ þƒ,ûƒ þcÒ þc,ü@’’°1Ò”°1 @’�°1,ýØ‹0",þ,ÿD•,,4ûÒƒ þcF,Dy,,Òƒ þCFP,,ƒ þcÒ þc,ƒ þCÒ þC,@’’°1Ò”°1 @’�°1, Ú‹0", , D, ƒ þCÒ þC, >>>3 ,u,v,wˆs ÿÚ,xŸò,y,zMîö,{2ÚÒB(Öy— 11…,|,}Mî’ö,~2ÚÒ‘B(Öy—˜11…,,€,�‘ô¨qÿØÔuÿØeFP,‚,ƒÔ6ÿw ÿÚF,„ƒ ýãÔ6ÿ,… ýãD,†ƒ ýãÔ6ÿ,‡ ýãÔuÿØaFÔ#ôDÿ°,ˆ,‰$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,4û4úF6,,ƒ þCÒ þC,ƒ þcÒ þc,ƒ þƒÒ þƒ,,ÒÜaFÒ#òDü¹,$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:     AIÿÿAIÿÿ ANSWER := getanswer; CASE ANSWER OF 'C' : BEGIN AI_change(PORTSELECT); WRITELN(CAA,CAI); AI_display(PORTSELECT) 3%,ƒ ýãs ÿà, �ý\qÿÞ,!‘qÿܨqÿ×uÿÜuÿ×eFE,",#Oø‚uÿÜ‹"BqÿÕ,$,%uÿÜ6ÿOÖôuÿÞ‹1B�{ RFY,&,',(uÿÕy �QF,)uÿÜ6ÿ,*ƒ ýã*5ÛD,+uÿÜ6ÿƒ ýã*5Û,,uÿÕy ‹qÿÙ,-,.D=5Û,/,0,1,24Ûuÿ܃ þ£F,3DW,4,5uÿÜw ÿàFE,6,7>>XXXXXXXXXXSTEP5 ƒ þ£uÿÜ þ£,8@’’°1uÿÜ”°1 @’�°1,9uÿÙ‹0",:,;,<4ÛF,=ƒ þ£uÿÜ þ£,>,?uÿÜuÿ×aF uÿÜ#qÿÜDþ»,@$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>DIÿÿ R,¬3&,J,K,LOü�By6ÿƒ ýã*|ÿâ,MOø‚‹"By ‘Q*|ÿä,N,O,P€ÿäFÂ6ÿ,Qƒ ýã*|ÿáDÂ6ÿƒ ýã*|ÿá,R,S�ýPˆ FÇ,T,U€ÿá€ÿâF‰,V,W,X,Yƒ ýãOörÀ‹"B!y6_,ZOör¾‹"B!y6_,[OörÀ‹"B!y6_,\Oör¾‹"B!y6_,]>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ END; {LATHE_change} $SUBTITLE EDIT SYSTEM FILE ENTRIES PROCEDURE EDITENTRY; {SYSTEMFILE IS GLOBAL} VAR MAX : INTEGER; TYPESELECT,PORTSELECT :INTEGER; IOPORT : ARRAY[1..2] OF CHAR; ANSWER : CHAR; BEGIN REPEAT clearscreen; AI_AO_Dÿÿÿÿÿÿÿÿÿÿÿÿÿÿ END; TEMPCONTROL = ARRAY[T_AUTO_MAN..O2_AO] OF INTEGER; LATHECONTROL = ARRAY[L_AUTO_MAN..EXHAUSTSWITCH] OF INTEGER; SYSTEM = RECORD AILIST : ARRAY[1..MAXAINR] OI_DO (TYPESELECT, IOPORT); IF TYPESELECT IN [1..4] THEN REPEAT WRITELN; WRITE('enter ',IOPORT,' number or to exit: '); PROMPT(OUTPUT); PORTSELECT := 0; PORTSELECT := READINT(PORTSELECSTEP 3 TEMP : TEMPCONTROL; T); clearscreen; CASE TYPESELECT OF 0 : ; 1 : IF PORTSELECT IN [1..MAXAINR] THEN BEGIN WRITELN(CAA,CAI); AI_display(PORTSELECT);  IF SYSTEM IS IDLE} '2' : load_recipe; '3' : BEGIN clearscreen; disp_status(FALSE); bottomline(OK); IF OK THEN disp_status(OK); END; ;      '4' : {chng_status}; '5' : chng_jobnr; '6' : reset_proc; '7' : start_proc; '8' : hold_step; '9' : {maintenance}; OTHERWISE : ERROR(1) END {CASE}; UNTIL CHOICE = 'X'; E) IN IOSET; 5985 IF NEWSTEP THEN DEPOSITION := FALSE; 5990 END; 5995 END; {IF} 6000 {* check if at end of recipe} 6005 IF (RECP_END = CURRENTSTEP) AND NEWSTEP THEN 6010 BEGIN 6015 PROCSTATUS := FINISH; 6020 STEPSTATUS := PND {ELSE} END. {runtime} TATUS = EXECUTE THEN 5700 BEGIN 5705 STEPSTATUS := HLD; 5710 WRITELN('hold done'); 5715 END {IF} 5720 ELSE 5725 BEGIN 5730 WRITELN('hold is only allowed when process is running'); 5735 RERUN; 6025 {stop the lathe ?} 6030 END; 6035 {* not at end of recipe} 6040 IF NEWSTEP AND (PROCSTATUS <> FINISH) THEN 6045 BEGIN 6050 IF (STEPINDEX = TIMED_STEP) THEN 6055 STEPSTATUS := PRERUN; 6060 nextstep; 6065 TIMERSOFT : WRITE('process status is:'); 5740 disp_procstatus; 5745 WRITELN; 5750 END; {ELSE} 5755 END; {WITH} 5760 END; 5765 PROCEDURE execstep; 5770 VAR NEWSTEP : BOOLEAN; 5775 5780 BEGIN 5785 IF TIMERDELAY <> 0 THEN 5790 TIMERDE= SOFTCOUNT; 6070 TIMERDELAY := DELAYCOUNT; 6075 IF {new} (STEPINDEX = TIMED_STEP) THEN 6080 STEPSTATUS := RUN; 6085 END; {IF} 6090 {* check for switch from prerun to run} 6095 IF (STEPSTATUS = PRERUN) AND ((EXHAUSTDI +OFF1) IN IOSET LAY := TIMERDELAY -1; 5795 IF TIMERDELAY = 0 THEN 5800 BEGIN 5805 difference; 5810 ALABtest; 5815 INPUTtest; 5820 END; {IF} 5825 IF TIMERSOFT <> 0 THEN 5830 TIMERSOFT := TIMERSOFT -1; 5835 IF TIMERSOFT = 0 THEN 5840 BEGIN 58THEN 6100 BEGIN 6105 STEPSTATUS := RUN; 6110 DEPOSIT := FALSE; 6115 END; {IF} 6118 END; {WITH} 6120 END; {execstep} 6125 6130 PROCEDURE runtime; 6135 {checks digital and analog inputs and takes action 6140 -decounts timers + action at end 45 clearsoft; 5850 setDOAO(OFF3); 5855 END; {IF} 5856 WITH STATUS DO 5857 BEGIN 5860 IF (TIMEREMAIN <> 0) AND (STEPTYPE = TIMED_STEP) THEN 5865 TIMEREMAIN := TIMEREMAIN -1 5870 ELSE 5875 BEGIN 5880 {* check change to deposit settof step, softstarts, delays 6145 -switches from fast forward to deposit at exhaust switch 6150 -test if step and process is finished } 6155 6160 BEGIN 6165 {WHOLESEC := NOT WHOLESEC;} 6170 {IF WHOLESEC DO} 6175 WITH STATUS DO 6180 BEGIN 6185 geing of outputs in event, block step} 5885 IF ((INLETDI + OFF1) IN IOSET) AND (NOT DEPOSITION) THEN 5890 BEGIN 5895 VALUE := AOLIST[SPEEDNR]; 5900 AOLIST[SPEEDNR] := NEXTSPEED; 5905 NEXTSPEED := VALUE; 5910 setAOstat(SPEEtDIstat; 6190 getAIstat; 6195 IF (STEPSTATUS = PRERUN) AND (PROCSTATUS = RSET) AND 6200 ((EXHAUSTDI + OFF1) IN IOSET) THEN 6205 BEGIN 6210 PROCSTATUS := EXECUTE; 6215 STEPSTATUS := RUN; 6220 DEPOSITION := FALSDNR,AOLIST[SPEEDNR]); 5915 setDOAO(OFF2); 5920 DEPOSITION := TRUE; 5925 END; {IF} 5930 IF DEPOSIT THEN 5935 speedramp; 5940 END; {ELSE} 5945 {* check end of step criteria} 5950 IF (PROCSTATUS <> FINISH) AND (STEPSTATUS IN [E; 6225 END;{IF} 6230 CASE PROCSTATUS OF 6235 IDLE : ; {no special action} 6236 RSET : 6240 {The H2, O2 valves are opened and flame ignition turned on. 6245 After 6 seconds the softstarts are cleared. 6250 After 9 seconds the flame sensor is beinRUN,BUZZER]) THEN 5955 BEGIN 5960 IF (STEPTYPE = TIMED_STEP) THEN 5965 NEWSTEP := ((TIMEREMAIN = 0) AND (STEPSTATUS = RUN)) 5970 ELSE {BLOCKSTEP, EVENTSTEP} 5975 BEGIN 5980 NEWSTEP := DEPOSITION AND ((EXHAUSTDI+OFF1) + OFF1g checked. The flame should be 6255 on, otherwise the valves are closed again and processstatus returns to 6260 idle. 6265 As long as the system in reset the flame is monitored, together with H2, 6270 O2 setpoints. } er 9 seconds the flame sensor is bein<      ýã,^6_0,_–}ÿ°,`,a€ÿâF,b@6!6!°1,c°1D‘}ýP,d,eD-,f,g@"6666°1°1,h@Y¢¢°1,i0,j°1,k,l$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,�ÿ´�Q€ÿáFX,,,, ƒ ýãOörÀ‹"B!y6_, Oör¾‹"B!y6_ ýã, 6_0, �}ýP, ,,,D%,,,0(D,‹E>þÍþÓÿéÿì,,=0,,,$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>temperature control not in MANUALÿreset is only allowed when process is idle or finishedÿprocess status is:ÿ3*,,@6*6*°1°1,±1 , 0),!�ýP“QFÿÜ,"$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3',q,r,s�ýP’QF!,t,u’}ýR,v@™™°1°1,w,xD-,y,z@ 6,6,°1°1,{@7¢¢°1,|0,}°1,~,,€$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>enter to simulate the timer interruptÿhold doneÿhold is only allowed when process is runningÿprocess status is:ÿ3+,),*�ýP‘Q�ýa�UF',+,,0,-=0,.�}ýR,/0*,0,1DH,2�ýP’Q�ýR’QF ,3,4‘}ýRD*,5�ýP‘UF,6@««°1,7°1D @  °1°1,8$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3(,ˆ�ÿ²�UF ,‰�ÿ²‘}ÿ²,Š�ÿ²�QF,‹,Œ0#,�0$,Ž0%,�,��ÿ°�UF ,‘�ÿ°‘}ÿ°,’�ÿ°�QF,“,”0,•6_0,–,—,˜,™�ý^�U�ýV”QF,š�ý^,›‘}ý^DŠ,œ,�,ž¸6ÿƒ ýã€ý`F],Ÿ, Oýú‹"Byó,¡Oýú‹"B�þÇ…,¢Ó}þÇ,£ºOýú‹"By0,¤>process status is not resetÿno recipe loadedÿ6/0,¥=|ý`,¦,§€ý`F,¨0,©,ª,«�ýP“U�ýRˆ"FO,¬,­�ýV”QF,®�ý^�Q�ýR‘Q,¯*5ÿD',°,±€ý`¶6ÿƒ ýã*5ÿ,²4ÿF=|ý`,³,´,µ,¶�ýa�ýTQ4ÿF,·,¸“}ýP,¹�}ýR,º,»,¼,½4ÿ�ýP“UFA,¾,¿�ýV”QF,À�}ýR,Á0,–}ÿ°,ä}ÿ²,Ä�ýV”QF,Å‘}ýR>>>3,=M "qòæ=pòñ�qòìM,qü=pü#�qüM�qþÍ=pþØ�qþÓ0,>0,?@¤�°1@¨¨°1°1,@0,AOòâ=1%,BOòâ@@&1,C(Oòâ1"}ÿþ,DOòâ=1%,E²MØQF,F@0¥¥°1,G°1D<,H,IOòâ1,J,K,LOü ‘By}ÿö,MOü ’By}ÿø,NOü “By}ÿú,O }ÿî,POü“By}ÿð,Q>,Æ,Ç,È�ýR�Q¶6ÿƒ ýãF,É,Ê‘}ýR,Ë=|ý`,Ì,Í,Î$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Oü”By}ÿò,R,S0,T�}ýa,U,V@F¤�°1@G��°1°1,W°1,X@U™™°1°1,Y@_¢¢°1°1,Z@r¢¢°1°1,[@…££°1°1,\@™¢¢°1°1,]@¬¥¥°1°1,^@šš°1°1,_@Íšš°1°1,`@Øšš°1°1,a@㥥°1°1,b'0|ÿß,c0,d€ÿß.DŠ,eDæ,fDà,gDÚ,h0DÑ>>>3),Ù,Ú,Û0 ,Ü0!,Ý�ýR�Q�ýP‘Q,Þ¶6ÿƒ ýãF,ß,à’}ýP,á‘}ýR,â=|ý`,ã,ä�ýPD+,åD8,æ,ç,è,é,ê,ë,ì,í,î,ï�ÿ°�UF=,ð,ñ�ÿ°‘}ÿ°,ò�ÿ°�QF,ó,ô“}ÿ´,õ0,ö6_0,÷,ø,ùDª,ú,û�ÿ´�YF0,ü,ý�ÿ´‘}ÿ´,þ�ÿ´�QF,ÿ,,,6_0,,>,i,j0,k=0,l?Þ0,m€ÿÞF€ÿÞ*0,nDŸ,oD™,p0D�,q0&D‡,r0+D~,s0'Du,tDo,u‘,v0DbA0XFÿî60E)ÿoÿuÿ{ÿ‡ÿ¶ÿ¼ÿÅÿÎÿ×ÿàÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿi,w€ÿß=XPFþI,x,yŠòâ1Šü1ŠþÉ1->>>>>>>>>>>>>>>=     ÿ OPTICAL FIBERS CONTROLÿ/D1/SYSTEM ÿSYSTEMEN ÿno configuration fileÿÿJOB SELECTIONÿ(X) EXITÿ(1) RECIPE EDITORÿ(2) LOAD A RECIPEÿ(3) DISPLAY STATUSÿ(4) CHANGE STATUSÿ(5) CHANGE JOBNUMBERÿ(6) RESETÿ(7) STARTÿ(8) HOLD ÿ(9) MAINTENANCE MODEÿ362qÿÂ=5Í6 qÿÈ2¾@@12¾1Ñ2Α"Nx= T*„ÑxFB‘qÿ¼62qÿºuÿ¼uÿºeF/Ðuÿ¼‹2"N2Îuÿ¼‹2"Nx„uÿ¼uÿºaF uÿ¼#qÿ¼DÿÑ2¾19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>M) ñPùRUNTIME 6REAL_VALMGETCHOIC 1GETCHAR  mREADINT Z �READSTRIÄ âERROR  8 STARS /TERM ÿF ÿ   CLEARSCR   CURSORHO  NFINDENDS,‡SEARCHSTiSEARCHFU  NAMECHECK&BOTTOMLIÌDISP_AIS3ÑDb@››°1°1Dp@   °1°1Db@££°1°1DT@1¥¥°1°1DF@G§§°1°1D8@_šš°1°1D*@j••°1°1DAFÿê‘E>ÿŽÿœÿªÿ¸ÿÆÿÔ&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ¿ DISP_DISÚDISPTIMEoDISP_PRO�#DISP_STP ±DISP_SYS)d!_DISP_STA"‡#%CHNG_JOB$…)þ&�LOAD_RECINPUT ERRORÿNUMBER TOO LARGEÿTOO MANY CHARACTERSÿINPUT IS NOT A NUMBERÿNUMBER < 0 OR TOO LARGEÿNUMBER < 0ÿERRORÿ'&(SETAOSTA(*'¶)SETDOAO )'Î*INIT_STA* G×+SETSOFT +G[,CLEARSOF, €.SPEEDRAM. ./MOVE_HAL/63Ð2NEXTSTEP3°1�ò6KôÒÔeF=*‘°1ÒÔaFÒ#òDÿî°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2(GÄ3GETDISTA3¦4GETAISTA4Œ5*PROCESSA6 Ú7DIFFEREN7 G[;ALABTEST<+Gv>INPUTTES?GvAlRESET_PRBhCJHOLD_STE3 «+5ÿ4ÿ‘°1=X‘°1°1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>D'8GEXECSTEPGE«IRUNTIME I0J+REALTIMEK ‰L-START_PR3 @6060°1@1££°1°1@E¡¡°1°12Î2Ì04ÌFÐ�…D‡Ñ‘"N2Α"N72Α"Nx5Í4Í.DБ…DHГ…DBЕ…D<Ж…D6‹AT6AE>ÿÚÿàÿìÿæÑ’"Nx=OPÐyˆFÐÐy‘…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>3vrÿù±1±1F+±=1%±þ2ôÞ1 Þ1 (±1"òÒ�UF ±1 vÿùrÿô±=1%Dvÿùrÿôvÿôr 9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>choose AO, AI, DO, DI, TC (temperature control),ÿ LC (lathe control)ÿor to exit: ÿ>     3 OöÓÑy‹ "BòÑy’°1 Òœš°1Òz™“°1ÒJ š•°1ÒyD,@¢ °1D3@¢ °1D(@"¢ °1D@3¢ °1D‹EÿÊÿàÿëÿÕÒyD,@Dž›°1D4@Pž›°1D)@\ž›°1D@hž›°1D‹E>ÿÉÿÔÿßÿêÒy™°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>YPESELECT OF 0 : ; 5 : BEGIN TEMP_display; ANSWER := getanswer; CASE ANSWER OF 'C' : TEMP_change; 'D' : TEMP_delete; AI only ÿsetpoint controlÿAI sets DO if < ÿAI sets DO if > ÿdon't care ÿband limit ÿupper limitÿlower limitÿ '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END; {5} 6 : BEGIN LATHE_display; ANSWER := getanswer; CASE ANSWER OF '3 OúSÑy‹"B!òÑy’°1 Òœš°1Òz™“°1ÒJ š•°1Òy”°1 Òy˜°1 Òyš°1 Òy˜°1 ÒzŸ‘°1°1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>C' : LATHE_change; 'D' : LATHE_delete; '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END {6} END {CASE} UNTIL TYPESELECT = 0 END {EDITENTRY}; $SUBT3 OücÑy‹"BòÑy’°1 Òœš°1Òy D@–”°1D@–”°1D‹EÿàÿëÒy DB@ ¢š°1DN@¢š°1DC@ ¢š°1D8@+¢š°1D-@6¢š°1D"@A¢š°1D‹E>ÿ³ÿ¾ÿÉÿÔÿßÿêÒy™°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ITLE START OF MAIN PROGRAM BEGIN {CONFIGURATOR} IOABORT (SYSTEMENTRY,FALSE); clearscreen; RESET (SYSTEMENTRY,'/D1/SYSTEM'); IOERROR := IORESULT(SYSTEMENTRY); IOABORT (SYSTEMENTRY,TRUE); IF (IOERROR = 216) THEN create_SF ELSE GET (SYSTEMENTlow ÿhighÿignore ÿabort ÿalarm ÿhold ÿtime resetÿbuzzer ÿRY); REPEAT clearscreen; WRITELN('SYSTEM FILE EDITOR PROGRAM'); WRITELN; WRITELN('(0) exit'); WRITELN('(1) change/delete an entry'); WRITELN('(2) print systemfile'); CHOICE := getchoice; CASE CHOICE OF '0'3OýãÑy‹ "BòÑy’°1 Òœš°1Òy D@¡Ÿ°1D@¡Ÿ°1D‹EÿàÿëÒy ”°1 Òy›°1 °1&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: ; '1': editentry; '2': printsystem; OTHERWISE: error(1) {INPUTERROR} END {CHOICE}; UNTIL CHOICE = '0'; REWRITE(SYSTEMENTRY,'/D1/SYSTEM'); PUT(SYSTEMENTRY); clearscreen; END. {CONFIGURATOR} E CHOICE OF '0'normally closedÿnormally open ÿ RW20t|¸ 'D' : DO_DELETE(PORTSELECT); '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END {4} END {CASE} UNTIL PORTSELECT = 0 ELSE CASE T3@ªª°1?ã�By’°1 °1@££°1@/—�°1?ã‘By’°1 °1@0¥¥°1@F•�°1?ã’By’°1 °1@Gªª°1?ã“By’°1 °1@bªª°1?ã”By’°1 °1@}¦¦°1@””�°1?ã•By’°1 °1@•¤¤°1@ª–�°1?ã–By’°1 °1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?     auto/manual switch is DI:ÿflame sensor is DI:ÿÿflame ignition is DO:ÿÿtemperature control is AI:ÿpreform temperature is AO:ÿHydrogen burner is AO:ÿÿOxigen burner is AO:ÿÿSPRINT_TE$I%!PRINT_LA&;'PRINTSYS(%L,òAI_DELET-Ž.AO_DELET/ˆ0DI_DELET1 D2 DO_DELET3 p4 TEMP_DEL5 86LATHE_DE6 87CREATE_S7 3@©©°1@–�°1?ñ�By’°1 °1@¯¯°1?ñ‘By’°1 °1@;¯¯°1?ñ’By’°1 °1@[¨¨°1@t—�°1?ñ“By’°1 °1@u¥¥°1@‹š�°1?ñ”By’°1 °1$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Œ8AI_CHANG88;AO_CHANG=:ÊA… DI_CHANGB8#E¬!DO_CHANGF8`IŽ"TEMP_CHAJ'—L­#LATHE_CHM')O‰$EDITENTRP %V„%CONFIGURY =,[€TYPE; 4460 BEGIN 4465 WITH SYSTEMauto/manual switch is DI:ÿÿEnd switch gasinlet side is DI:ÿEnd switch exhaust side is DI: ÿLathe translation is AO:ÿÿLathe rotation is AO:ÿÿ END; {C} 'D' : AI_delete(PORTSELECT); '0' : ; OTHERWISE: ERROR(1) END {ANSWER} END {1}; 2 : IF PORT30@¤�°1@��°1°10@6#6#°1@36*6*°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SELECT IN [1..MAXAONR] THEN BEGIN WRITELN(CAA,CAO); AO_display(PORTSELECT); ANSWER := getanswer; CASE ANSWER OF 'C' : BEGIN ÿANALOG INPUTSÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿ AO_change (PORTSELECT); WRITELN(CAA,CAO); AO_display(PORTSELECT); END; {C} 'D' : AO_delete (PORTSELECT); 30@¤�°1@žž°1°10@6#6#°1@46*6*°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; END {2}; 3 : IF PORTSELECT IN [1..MAXDINR] THEN BEGIN WRITELN(CDI); ÿANALOG OUTPUTSÿNR NAME MAX. VALUE UNIT ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿ30@¤�°1@žž°1°10@6464°1°1u òu u yš…2þ0 Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> AI_DISPLt AO_DISPLr DI_DISPLïL DO_DISPL TEMP_DISì«LATHE_DI®ŒPRINT_AIÎ^PRINT_AOÎ_PRINT_DI Ä!EPRINT_DO"Ä#ÿDIGITAL INPUTSÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿ@     30@¤�°1@ŸŸ°1°10@6A6A°1°1u òu u yš…2þ0Ò‘òu u y‘…4u y6;‘QF°1u �…ÒuYFÿʰ1°1°1u u y“…9>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> END {3}; 4 : IF PORTSELECT IN [1..MAXDONR] THEN BEGIN WRITELN(CDO); DO_DISPLAY(PORTSELECT); ANSWER := getanswer; CASE ANSWÿDIGITAL OUTPUTSÿNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿER OF 'C' : BEGIN DO_change (PORTSELECT); WRITELN(CDO); DO_display(PORTSELECT); END; {C} 34F°10@¤�°1@¯¯°1°100°1°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RATIOLINK : 0..MAXAONR; RATIOVALUE : REAL END; DI = RECORD NAME : NAMETYPE; SAFE : SAFESTATE; CONTROL : DICONTROL; ÿTEMPERATURE CONTROL ASSIGNMENTSÿ DOLINK : 0..MAXDONR END; DOUT = RECORD NAME : NAMETYPE; CONTROL : DOCONTROL; INTERLOCK : 0..MAXDONR; CONDLOCK : 0..MAXDONR 30@¤�°1@©©°1°100°1°19>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> END; TEMPCONTROL = ARRAY[T_AUTO_MAN..O2_AO] OF INTEGER; LATHECONTROL = ARRAY[L_AUTO_MAN..EXHAUSTSWITCH] OF INTEGER; SYSTEM = RECORD AILIST : ARRAY[1..MAXAINR] OF AI; AOLIST : ARRAY[ÿLATHE CONTROL ASSIGNMENTSÿ1..MAXAONR] OF AO; DILIST : ARRAY[1..MAXDINR] OF DI; DOLIST : ARRAY[1..MAXDONR] OF DOUT; TEMP : TEMPCONTROL; LATHE : LATHECONTROL;  DI_DISPLAY(PORTSELECT); ANSWER := getanswer; CASE ANSWER OF 'C' : BEGIN DI_change (PORTSELECT); WRITELN(CDI);  END; MAXSTRING = ARRAY[1..MAXLENGTH] OF CHAR; IOPORTTYPE= ARRAY[1..2] OF CHAR; RCD_INDEX = (NOT_ALLOCATED,RCD_DONTCARE,RCD_1HEADER,RCD_2HEADER, TIMED_STEP, EVENT_STEP, BLOCK_STEP, RCD_TABLE, RCD_FUNCTION); I DI_display(PORTSELECT); END; {C} 'D' : DI_DELETE(PORTSELECT); '0' : ; OTHERWISE: ERROR(1) END {ANSWER}; NDEXDEF = RECORD DESCRIPTOR : RCD_INDEX; STARTSTEPNR : INTEGER; END_OR_AONR : INTEGER; END; INDEXLIST = ARRAY[0..MAXRECORD] OF INDEXDEF; HEAD1 = RECORD JOBNR : AA     RRAY[1..JOBLENGTH] OF CHAR; ALARMVAL : ARRAY[1..MAXAINR] OF INTEGER; ALARMCONTROL: ARRAY[1..MAXAINR] OF DICONTROL; END; HEAD2 = RECORD ABORTVAL : ARRAY[1..MAXAINR] OF INTEGER; PROCSTAT : PROCESSSTATUS; CURRENTSTEP: INTEGER; STEPTYPE : RCD_INDEX; STARTSTEP: INTEGER; TOTSTEP : INTEGER; TIMEREMAIN: INTEGER; RECIPENAME : ARRAY [1..12] OF CHAR; J ABORTCONTROL: ARRAY[1..MAXAINR] OF DICONTROL; LATHE_LENGTH : INTEGER; {CM} TUBE_WEIGHT : REAL; {KG} TUBE_DIAMETER: REAL; {MM} END; OBNR : ARRAY [1..10] OF CHAR; STEPNAME : ARRAY [1..10] OF CHAR; AILIST : ARRAY [1..MAXAINR] OF INTEGER; AOLIST : ARRAY [1..MAXAONR] OF INTEGER; IOSET : SETTYPE; AIPREALARM : AISETT AOLISTTYPE= ARRAY[1..MAXAONR] OF INTEGER; AILISTTYPE= ARRAY[1..20] OF INTEGER; SETTYPE = SET OF 0..255; RAMP_TYPE = (RAMP_TIME,ENDSPEED); RAMPTYPE = ARRAY [1..5,RAMP_TIME..ENDSPEED] OF INTEGERYPE; AIALARM1 : AISETTYPE; AIALARM2 : AISETTYPE; DIALARM : DISETTYPE; PANEL : ARRAY[0..1] OF INTEGER; END; {RECORD STATUSDEF} CHARARRAY = ARRAY[0..3] OF CHAR; ABSINTDEF = RECO; STEPDEF = RECORD NAME : NAMETYPE; AOLIST : AOLISTTYPE; AILIST : AILISTTYPE; IOSET : SETTYPE; SPEEDCONT RD CASE BOOLEAN OF TRUE : (VALUE : ^INTEGER); FALSE: (ADDRESS : INTEGER) END; INT16 = ARRAY[0..15] OF INTEGER; COMMANDTYPE = (MM_,AO_,AI_,DI_,DO_,: RAMPTYPE; TERMINATOR: BOOLEAN; TIME : INTEGER; H2_SETP : INTEGER; O2_SETP : INTEGER; FAST_SPEED: INTEGER; TM_,WD_,ID_,RS_,BZ_,EX_,HH_, IV_); COMMANDDEF = RECORD CODESTRING : ARRAY[0..1] OF CHAR; NUMSTRING : CHARARRAY; NUMVALID : BOOLEAN; VALSTRING : CHARARRAY; VALVALID  END; {IOSET HAS THE INFO FOR DIGITAL INPUTS, OUTPUTS(2X) AND CHANGING AO'S IN A BLOCKSTEP} TABLEDEF = ARRAY [1..MAXTAB] OF INTEGER; FUNCDEF = ARRAY [1..MAXFUNC] OF CHAR; {TO BE DEFINED YET} RECIPEDEF = RECORD  : BOOLEAN; NUM : INTEGER; VALUE : INTEGER; CODE : COMMANDTYPE; END; VAR I,IOERROR, SYSERROR : INTEGER; CHOICE,ANSWER: CHAR; CHANGE,FOUND,OK : BOOLEAN;  CASE INTEGER OF 0 : (HEADER1 : HEAD1); 1 : (HEADER2 : HEAD2); 2 : (STEP : STEPDEF); 3 : (TABLE : TABLEDEF);  STEPNUMBER : INTEGER; INPUTSTRING : MAXSTRING; RECIPERECORD: FILE OF RECIPEDEF; STATUS : STATUSDEF; INDEX : FILE OF INDEXLIST; SYSTEMENTRY : FILE OF SYSTEM; RECIPE : ARRAY[0..MAXRECORD] OF 4 : (FUNC : FUNCDEF); END {RECORD}; PROCESSSTATUS = (IDLE,RSET,RUN,HLD,ALRM,ABRT,FINISH,MANUAL); AISETTYPE = SET OF 1..MAXAINR; DISETTYPE = SET OF 1..MAXDINR; STATUSDEF = RECORD  RECIPEDEF; PROCEDURE readstring (VAR INP: MAXSTRING; VAR C: BOOLEAN); VAR F : FILE OF MAXSTRING; I : INTEGER; BEGIN RESET (F,'/TERM'); GET (F); C := (F^[1] <> ' '); {if no char_string is entered F^[1] = blank} IF C {a new string is enteredB     } THEN FOR I := 1 TO MAXLENGTH DO INP[I] := F^[I] END; {readstring} FUNCTION getchoice : CHAR; VAR C : CHAR; BEGIN WRITE('':15,'your choice: '); PROMPT; GET(INPUT); IF EOLN(INPUT) THEN C := '0' ELSE READ(C); READLN; getchoice := C FOR} END;{DIGtoINT} PROCEDURE INTtoHEX(VALUE : INTEGER;VAR DIGITSTRING : CHARARRAY); {CONVERTS INTEGER TO AN ASCII STRING OF HEXADECIMALS FOR PRINTING} VAR QUOT,REMAIN,POWEROF16,I : INTEGER; NEGATIVE : BOOLEAN; BEGIN REMAIN := VALUE; NEGATIVE := (END; PROCEDURE clearscreen; VAR CLEAR : CHAR; BEGIN CLEAR := CHR($1B); WRITELN (CLEAR,'X'); END; {clearscreen} PROCEDURE cursorhome; VAR HOME : CHAR; BEGIN HOME := CHR($1B); WRITELN (HOME,'@'); END; {cursorhome} PROCEDURE read4char(VAR I: INTEGVALUE < 0); IF NEGATIVE THEN REMAIN := 32767+ (REMAIN+1); POWEROF16 := 16 *16 *16; FOR I := 0 TO 3 DO BEGIN QUOT := REMAIN DIV POWEROF16; REMAIN:= REMAIN MOD POWEROF16; IF NEGATIVE AND (I=0) THEN QUOT := QUOT + 8; IF QUOER; INPUTSTRING: MAXSTRING; VAR DIGITSTRING: CHARARRAY; VAR VALID:BOOLEAN); {READ A MAXIMUM OF 4 CHARACTERS RIGHT JUSTIFIED INTO AN ARRAY} {IF NO CHAR'S ENTERED, ARRAY HAS VALUE OF '0000' AND VALID= FALSE} VAR K : INTEGER; BEGIN DIGIT IN [0..9] THEN DIGITSTRING[I] := CHR(QUOT+ORD('0')) ELSE BEGIN QUOT := QUOT-10; DIGITSTRING[I] := CHR(QUOT+ORD('A')); END; POWEROF16 := POWEROF16 DIV 16; END; {FOR} END; { INTtoHEX} PROCEDURE disptime(TIM :TSTRING := '0000'; VALID := INPUTSTRING[I] <> ' '; IF VALID THEN REPEAT FOR K := 1 TO 3 DO DIGITSTRING[K-1]:=DIGITSTRING[K]; DIGITSTRING[3] := INPUTSTRING[I]; I := I+1; UNTIL INPUTSTRING[I] = ' '; END; {read INTEGER); {CHANGES TIME (SECONDS) TO H.MM.SS REPRESENTATION AND PRINTS IT} VAR TIME : ARRAY[1..7] OF CHAR; POWEROF60 : 1..3600; QUOTIENT : INTEGER; REMAINDER : INTEGER; QUOT10 : 0..5; REMAIN10 : 0..9; BEGIN POWEROF60 := 3600;4char} PROCEDURE HEXtoINT(DIGITSTRING: CHARARRAY;VAR VALUE:INTEGER); {CONVERTS HEXDIGITSTRING INTO A (SIGNED) INTEGER} VAR I,J,DIGIT :INTEGER; CH : CHAR; NEGATIVE : BOOLEAN; BEGIN VALUE := 0; NEGATIVE := FALSE; FOR I := 0 TO 3 DO BEGIN  REMAINDER := TIM; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT HOURS} REMAINDER:= REMAINDER MOD POWEROF60; TIME[1] := (CHR(QUOTIENT + ORD('0'))); POWEROF60 := POWEROF60 DIV 60; QUOTIENT := REMAINDER DIV POWEROF60; {EXTRACT MINUTES} REMAINDE CH := DIGITSTRING[I]; IF CH IN ['0'..'9'] THEN DIGIT := ORD(CH)-ORD('0') ELSE IF CH IN ['A'..'F'] THEN DIGIT := 10 + ORD(CH) - ORD('A') ELSE DIGIT := 0; IF (I=0) AND (DIGIT>7) THEN BEGIN NEGATR:= REMAINDER MOD POWEROF60; {SECONDS } QUOT10 := QUOTIENT DIV 10; REMAIN10 := QUOTIENT MOD 10; TIME[2] := '.'; TIME[3] := (CHR(QUOT10 + ORD('0'))); TIME[4] := (CHR(REMAIN10 + ORD('0'))); QUOT10 := REMAINDER DIV 10; REMAIN10 := REMAINDIVE := TRUE; DIGIT := DIGIT-8; END;{IF} VALUE := 16 * VALUE + DIGIT; END;{FOR} IF NEGATIVE THEN VALUE := -32767 + VALUE -1; END;{HEXtoINT} PROCEDURE DIGtoINT(DIGITSTRING: CHARARRAY;VAR VALUE:INTEGER); {CONVERTS DIGITSTRING INTO A (SER MOD 10; TIME[5] := '.'; TIME[6] := (CHR(QUOT10 + ORD('0'))); TIME[7] := (CHR(REMAIN10 + ORD('0'))); WRITE(TIME:9); END {disptime}; PROCEDURE disp_MM(COMMAND : COMMANDDEF;VAR MM_DATA :ABSINTDEF); VAR COUNT,MAX,I,DATA : INTEGER; DIGITSTRIIGNED) INTEGER} VAR I,DIGIT :INTEGER; CH : CHAR; BEGIN VALUE := 0; FOR I := 0 TO 3 DO BEGIN CH := DIGITSTRING[I]; IF CH IN ['0'..'9'] THEN DIGIT := ORD(CH)-ORD('0') ELSE DIGIT := 0; VALUE := 10 * VALUE + DIGIT; END;{NG : CHARARRAY; BEGIN WITH COMMAND DO BEGIN WRITE(CODESTRING:4,NUMSTRING:6); I := 0; IF VALVALID THEN MAX := 0 ELSE MAX := 15; {$D-} REPEAT MM_DATA.ADDRESS := NUM + I; DATA := MM_DATA.VALUE^; INTtoHEX(DAC     TA,DIGITSTRING); WRITE(DIGITSTRING[2]:2,DIGITSTRING[3]); I := I+1; UNTIL I > MAX; {$D+} END {WITH}; END; {dispMM} PROCEDURE MM_command(COMMAND : COMMANDDEF); {sets MM to a value if specified in value, otherwise displays requested MM DO BEGIN WRITELN; WRITE(CODESTRING:6); IF NUMVALID AND (NUM IN [1..MAXDINR]) THEN BEGIN WRITE(NUM:4,' '); I := NUM; MAX := NUM; END ELSE BEGIN WRITELN; FOR I := 1 TO 8 DO WRITE and the 15 successing locations} VAR MM_DATA : ABSINTDEF; BEGIN WITH COMMAND DO IF VALVALID AND NUMVALID THEN BEGIN {$D-} disp_MM(COMMAND,MM_DATA); FIELDPUT(MM_DATA.VALUE^,7,8,VALUE); {$D+} END; {IF} disp_MM(COMMAND,(I:2); WRITELN; FOR I := 0 TO 16 DO WRITE('-'); WRITELN; I := 1; MAX := MAXDINR; END; {ELSE} END; {WITH} WITH IOCONVERT DO BEGIN IOSET := []; OFFSET := 15; {$D- NO RUNTIME ERROR CHECKING} MM_DATA); WRITELN; END; {MM_command} PROCEDURE AI_command(COMMAND : COMMANDDEF); VAR DATA,I,READY,COUNTER,MAX,STARTCONV: INTEGER; AD_SELECT,AD_DATA : ABSINTDEF; DIGITSTRING : CHARARRAY; BEGIN WITH COMMAND DO BEGIN IF NUMVALID AND (NUM  DI_DATA.ADDRESS := DI_BOARD; INTREP[OFFSET] := FIELDGET(DI_DATA.VALUE^,7,16); {GET INPUT 1 TO 16, 8 BITS SHIFTED TO GET 8-16 IN M.S. BITS} DI_DATA.ADDRESS := DI_BOARD+2; INTREP[OFFSET+ OFF1] := FIELDGET(DI_DATA.VALUE^,7,8); {IN [1..MAXAINR]) THEN BEGIN I := NUM; MAX := NUM; END ELSE BEGIN I := 1; MAX := MAXAINR; END; {ELSE} WRITELN; WRITELN(CODESTRING:6); END; {WITH} {$D- SUPPRESS RUNTIME CHECKS; POINTER AGET INPUT 17-24 ONLY IN THE L.S. BITS OF DATA} {$D+} COUNT := 0; REPEAT IF (I+ OFF1) IN IOSET THEN WRITE('1':2) ELSE WRITE('0':2); I := I+1; COUNT := COUNT+1; IF COUNT = 8 THEN CCESSES NON MEMORY ADDRESSES} WITH AD_SELECT DO BEGIN ADDRESS := AD_BOARD; AD_DATA .ADDRESS := AD_BOARD + 2; REPEAT STARTCONV := 256 *(I-1) + 4; COUNTER := 10; VALUE^ := STARTCONV; REPEAT READY BEGIN WRITELN; COUNT := 0; END; {IF} UNTIL I > MAX; END {WITH}; WRITELN; END; {DI_command} PROCEDURE setDOstat(NUM : INTEGER; VAL: INTEGER); VAR OFFSET,K,I,COUNT,DATA : INTEGER; DIGITSTRING : CHARARRAY; DO_DATA : AB := FIELDGET(VALUE^,2,1); COUNTER := COUNTER-1; UNTIL (READY = 0) OR (COUNTER=0); IF READY = 0 THEN BEGIN DATA:= FIELDGET(AD_DATA.VALUE^,15,12); INTtoHEX(DATA,DIGITSTRING); WRITE(I:4,DIGITSINTDEF; IOCONVERT: RECORD CASE BOOLEAN OF TRUE: (IOSET : SETTYPE); FALSE: (INTREP: INT16) END; BEGIN WITH STATUS DO BEGIN IF VAL = 1 THEN IOSET := IOSET + [NUM + OFF2] STRING:6); END {IF} ELSE WRITELN('CHANNEL',I:3,' TIMED OUT'); I := I+1; UNTIL I > MAX; END; {WITH} {$D+ ENABLE RUN TIME ERROR CHECKING AGAIN} WRITELN; END; {AI_command} PROCEDURE DI_command(COMMAND : COMMANDDEF); VAR DAT ELSE IOSET := IOSET - [NUM + OFF2]; IOCONVERT.IOSET := IOSET; END; {WITH} OFFSET := 12; WITH IOCONVERT DO FOR K := 0 TO 1 DO BEGIN {$D- NO RUNTIME ERROR CHECKING} DO_DATA.ADDRESS := DO_BOARD + 2 * K; A,MAX,I,COUNT,OFFSET: INTEGER; DIGITSTRING : CHARARRAY; DI_DATA : ABSINTDEF; IOCONVERT: RECORD CASE BOOLEAN OF TRUE: (IOSET : SETTYPE); FALSE: (INTREP: INT16) END; BEGIN WITH COMMAND DATA := FIELDGET(INTREP[OFFSET-K],7,16); DO_DATA.VALUE^ := DATA; END {FOR}; {$D+} END; {setDOstat} PROCEDURE dispDOstat(COMMAND : COMMANDDEF); VAR DATA,I,MAX,COUNT,OFFSET: INTEGER; DIGITSTRING : CHARARRAY; BEGIN WITH COMMAND DO BED     GIN WRITELN; WRITE(CODESTRING:6); IF NUMVALID AND (NUM IN [1..MAXDONR]) THEN BEGIN WRITE(NUM:4,' '); I := NUM; MAX := NUM; END ELSE BEGIN WRITELN; FOR I := 1 TO 8 DO WRITE(I:2); NUMVALID AND (NUM IN [1..MAXAONR]) THEN setAOstat(NUM,VALUE); dispAOstat(COMMAND); END; {AO_command} PROCEDURE TM_command(COMMAND : COMMANDDEF); BEGIN WRITELN; WRITE('time'); WITH COMMAND DO BEGIN IF NUMVALID THEN BEGIN  WRITELN; FOR I := 0 TO 16 DO WRITE('-'); WRITELN; I := 1; MAX := MAXDONR; END; {ELSE} END; {WITH} COUNT := 0; WITH STATUS DO REPEAT IF (I+OFF2) IN IOSET THEN WRITE('1':2) ELSE WRITE(' disptime(STATUS.TIMEREMAIN); IF NUM <32400 THEN STATUS.TIMEREMAIN := NUM; END; disptime(STATUS.TIMEREMAIN); WRITELN; END {WITH}; END; {TM_command} PROCEDURE ID_command; BEGIN STATUS.PROCSTATUS := IDLE; END; {ID_co0':2); I := I+1; COUNT := COUNT+1; IF COUNT = 8 THEN BEGIN WRITELN; COUNT := 0; END;{IF} UNTIL I > MAX; WRITELN; END; {dispDO} PROCEDURE DO_command(COMMAND : COMMANDDEF); {sets ao to a mmand} PROCEDURE RS_command; BEGIN STATUS.PROCSTATUS := RSET; END; {RS_command} PROCEDURE maintenance; VAR I : INTEGER; CHANGE : BOOLEAN; COMMAND: COMMANDDEF; BEGIN WITH COMMAND DO REPEAT{UNTIL CODE = EX_} WRITE(': '); PROMPT(OUvalue if specified in value, otherwise displays requested ao or all if no nr requested} BEGIN WITH COMMAND DO IF VALVALID AND NUMVALID THEN IF (NUM IN [1..MAXDONR]) AND (VALUE IN [0..1]) THEN setDOstat(NUM,VALUE); dispDOsTPUT); readstring(INPUTSTRING,CHANGE); IF CHANGE THEN BEGIN IF INPUTSTRING[1] = 'S' THEN I := 3 ELSE I := 1; CODESTRING[0] := INPUTSTRING[I]; CODESTRING[1] := INPUTSTRING[I+1]; tat(COMMAND); END; {DO_command} PROCEDURE dispAOstat(COMMAND : COMMANDDEF); VAR COUNT,MAX,I : INTEGER; DIGITSTRING : CHARARRAY; BEGIN WITH COMMAND DO BEGIN IF NUM IN [1..MAXAONR] THEN BEGIN I := NUM; MAX := NUM;  I := I+3; read4char(I,INPUTSTRING,NUMSTRING,NUMVALID); I := I+1; read4char(I,INPUTSTRING,VALSTRING,VALVALID); {command is now put into a standard format, ready to be interpreted} IF CODESTRING = 'MM' THENEND {IF} ELSE BEGIN I := 1; MAX := MAXAONR; END {ELSE}; WRITELN; WRITELN(CODESTRING:6); REPEAT INTtoHEX(STATUS.AOLIST[I],DIGITSTRING); WRITE(I:4,DIGITSTRING:6); I := I+1; UNTIL I >  CODE := MM_ ELSE IF CODESTRING = 'AO' THEN CODE := AO_ ELSE IF CODESTRING = 'AI' THEN CODE := AI_ ELSE IF CODESTRING = 'DI' THEN CODE := DI_ ELSE IF CODESTRING = 'DO' MAX; WRITELN; END {WITH}; END; {dispAOstat} PROCEDURE setAOstat(NUM : INTEGER; DATA : INTEGER); VAR DA_DATA : ABSINTDEF; {$D-} BEGIN WITH DA_DATA DO BEGIN ADDRESS := DA_BOARD +(NUM-1)* 2; FIELDPUT(VALUE^,3,16,DATA); FIELDPUT(THEN CODE := DO_ ELSE IF CODESTRING = 'TM' THEN CODE := TM_ ELSE IF CODESTRING = 'WD' THEN CODE := WD_ ELSE IF CODESTRING = 'BZ' THEN CODE := BZ_ ELSE IF CODESTRING = 'STATUS.AOLIST[NUM],3,16,DATA); END {WITH} END; {setDA} {$D+} PROCEDURE AO_command(COMMAND : COMMANDDEF); {sets ao to a value if specified in value, otherwise displays requested ao or all if no nr requested} BEGIN WITH COMMAND DO IF VALVALID AND ID' THEN CODE := ID_ ELSE IF CODESTRING = 'RS' THEN CODE := RS_ ELSE IF CODESTRING = 'EX' THEN CODE := EX_ ELSE CODE := IV_; IF CODE = MM_ THEN HEXtoINT(NUMSTRING,NUM); E      IF CODE IN [MM_,AO_] THEN HEXtoINT(VALSTRING,VALUE); IF CODE IN [AO_..BZ_] THEN DIGtoINT(NUMSTRING,NUM); IF CODE = DO_ THEN DIGtoINT(VALSTRING,VALUE); CASE CODE OF AO_ : AO_command(COMMAND); *06 ú2úÜÚ4ý*02ú4ý*02ú4ý*0°14ýF °@·@¾1D°1@È6)6)°1°1±1 $>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AI_ : AI_command(COMMAND); MM_ : MM_command(COMMAND); DI_ : DI_command(COMMAND); DO_ : DO_command(COMMAND); TM_ : TM_command(COMMAND); WD_ : {WD_command}; BZ_ : {BZ_commandOUTPUT ON LINEPRINTER (Y/N/)ÿDISPLAY ALL ENTRIES? (Y/N/)ÿ/P1 ÿOUTPUT ÿOPTICAL FIBERSÿÿSYSTEM CONFIGURATION TABLE ÿ/TERM ÿOUTPUT ÿSTARTING NUMBER: ÿENDING NUMBER: ÿ/P1 ÿOUTPUT ÿ/TERM ÿOUTPUT ÿpress to return to the job selectionÿ}; ID_ : ID_command; RS_ : RS_command; EX_ : ; IV_ : ; END; {CASE} END; {IF} UNTIL CODE = EX_; END;{maintenance} PROCEDURE init_status; VAR I : INTEGER; BEGIN WITH STATUS DO3OöÓÑy‹ "BòÒ@7 ÒJ @ 7ÒJ� †ÒJ�…ÒJ�…ÒJ�…Òy�YÒy aFOúSÒy‹"B!J�…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BEGIN PROCSTAT := IDLE; CURRENTSTEP := 0; FOR I := 1 TO MAXAONR DO AOLIST[I] := 0; FOR I := 1 TO MAXAINR DO AILIST[I] := 0; IOSET := []; AIPREALARM := []; AIALARM1 := []; AIALARM2 := []; DIALARM :=XXXXXXXXXXÿXXXXXÿ []; END; {WITH} END; {init_status} BEGIN clearscreen; WRITELN('':20,' OPTICAL FIBERS CONTROL'); init_status; REPEAT WRITELN('':20,'JOB SELECTION'); WRITELN; WRITELN('(0) EXIT'); WRITELN('(9) MAINTENANCE M3OúSÑy‹"B!ôÔ@7 ÔJ @ 7ÔJ� †ÔyòÔJ�…ÔJ�…ÔJ�…ÔJ�…ÔJ� †Ò�YÒ6 aF2þ0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ODE'); CHOICE:= getchoice; clearscreen; CASE CHOICE OF '0' : ; '9' : maintenance; OTHERWISE : ; END {CASE}; UNTIL CHOICE = '0'; END. {runtime} IT'); WRITELN('(9) MAINTENANCE MXXXXXXXXXXÿXXXXXÿ30 @¬¬°1°1'05þ4þ=YP*5ý@««°1°1'05þ4ýF[°@9@>12ä2æ2è2ê2ì2î1)0ì‘°1 =/‘°1ê‘°1 =/‘°1è‘°1 @H©ž°1°1°1@W¤�°1@X¬¬°1°10›ö4þ=NPF<°@u@|12ò2ð0 ÞˆF&@†¡¡°1°1‘ü(Ü0ü@˜ŸŸ°1°1‘ú(Ú0ú0 4ýF °@¨@­1ÞDÈDÝÚÜ]ÚˆþÿÿÿÜ>>>>>3OücÑy‹"BòÒ@7 ÒJ ‘…ÒJ �…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ˆþÿÿÿ*5ü4üF 2úÜÚ4ý*0D¬ÚÜ]Úˆþÿ܈þÿ*5ü4üF 2úÜÚ4ý*0D„ÚÜ]Úˆþÿÿ܈þÿÿ*5ü4üF 2úÜÚ4ý*0DZÚÜ]Úˆþÿÿÿ܈þÿÿÿ*5ü4üF 2úÜÚ4ý*0D.2ú4ý*0D#2ú4ý*0D‹Eÿ.ÿ1ÿbÿŠÿ´ÿàÿëÞ�QFþÇDQ4ýF0 ‘ü6 ú2úÜÚ4ý*0 ú2úÜÚ4ý*0¨ú2úÜÚ4ý>XXXXXXXXXXÿF     3OýãÑy‹ "BòÒ@7 ÒJ �…Òy �YÒy 6 aFOýãÒy ‹ "BJ �…ÒJ �…ÒJ�…&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>LINK WITH DO NUMBER: ÿXXXXXXXXXXÿ3 OúSÑy‹"B!qÿÆ@––°1°12Î2Ì04ÌF uÿÆ‘"N2Α"N7 @ŸŸ°1°1uÿÆJ)uÿÆz0†@––°1°12Î2Ì04ÌFuÿÆJ ‘"N2Α"N7@¥¥°1°1(uÿÆy0qÿÈuÿÈD:uÿÆyqÿÊuÿÆJ�…uÿÊ�UF2Ê0DiuÿÆJuÿÈ‹ …DW•0DPA FÿñE>!ÿ¸ÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙ3�ò–ôÒÔeF?ãÒ‹B�…ÒÔaFÒ#òDÿç$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙ@4¥¥°1°1(uÿÆy0qÿÈuÿȈÿÿÿÿFuÿÆJuÿÈ‹ …D•0@J¢¢°1°1(uÿÆy0qÿÈuÿȈÿÿÿÿFuÿÆJuÿÈ‹ …D•0@]ªª°1°1(uÿÆy0qÿÈuÿÈD^uÿÆJ�…uÿÆJ� †DzuÿÈÑyUF1uÿÆJuÿÈ‹…@xœœ°1°1uÿÆJ)uÿÆ>>>3�ò”ôÒÔeF?ñÒ‹B�…ÒÔaFÒ#òDÿç$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>z0†D‘0D7•0D0AFÿñE>ÿ”ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨uÿÆy�UF�OöÓuÿÆy‹ "BuÿÆ7 OöÓuÿÆy‹ "BJ uÿÆJ 7OöÓuÿÆy‹ "BJuÿÆz†OöÓuÿÆy‹ "BJ‘…OöÓuÿÆy‹ "BJ“…OöÓuÿÆy‹ "BJÑy‹…&>>>>>>>>>>>>>>>3‘ò6 ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò¨ôÒÔeF2þ0ÒÔaFÒ#òDÿï‘ò6 ôÒÔeF2þ0ÒÔaFÒ#òDÿï00$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NAME: ÿMAXIMUM VALUE: ÿUNIT: ÿLINK WITH AI NUMBER: ÿLINK WITH DO NUMBER: ÿSOFTSTART NUMBER: ÿRATIOLINK WITH AO NUMBER: ÿRATIOVALUE: ÿ3OöÓÑy‹ "BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @ŸŸ°1°1uÿÈJ)uÿÈz0†@––°1°12Î2Í04ÍFuÿÈJ ‘"N2Α"N7@��°1°1@,§§°1°1@D6'6'°1°1@l6'6'°1°1@”žž°1°1'05Ì4Ì.D6DPuÿÈJ“…DEuÿÈJ‘…D:uÿÈJ’…D/uÿÈJ�…D$‘0DA04>>3!OücÑy‹"BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @¡¡°1°1@šš°1°1@$››°1°1'05Ì4Ì.D D3uÿÈJ �…D(uÿÈJ ‘…D‘0DA02Fÿñ60EÿÐÿÓÿÞ@0¡¡°1°1@B��°1°1@Pœœ°1°1@]œœ°1°1@j››°1°1@v¡¡°1°1@ˆ��°1°1'05Ì4Ì.DMDhuÿÈJ �>Fÿï60E>ÿ·ÿºÿÅÿÐÿÛ@£  °1°1@´¡¡°1°1@Æ  °1°1@×¢¢°1°1@ꢢ°1°1'05Ì4Ì.D6DNuÿÈJ�…DCuÿÈJ‘…D8uÿÈJ’…D-uÿÈJ“…D"‘0DA04Fÿñ60E>ÿ¹ÿ¼ÿÇÿÒÿÝ@¥¥°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>…D\uÿÈJ ‘…DQuÿÈJ ’…DFuÿÈJ “…D;uÿÈJ ”…D0uÿÈJ •…D%‘0DA06Fÿñ60Eÿ£ÿ¦ÿ²ÿ½ÿÈÿÓÿÞ@–¥¥°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NAME: ÿMAXIMUM VALUE: ÿUNIT: ÿTYPE OF LOOP:ÿ (1) setpoint controlÿ (2) AI switches DO if below setpointÿ (3) AI switches DO if above setpointÿ (4) AI onlyÿTYPE OF CONTROL:ÿ (1) don't careÿ (2) bandlimitÿ (3) upper limitÿ (4) lower limitÿNAME: ÿSAFE STATE: ÿ (1) lowÿ (2) highÿTYPE OF CONTROL: ÿ (1) ignoreÿ (2) abortÿ (3) alarmÿ (4) holdÿ (5) time resetÿ (6) buzzerÿLINK WITH DO NUMBER: ÿG     3"OýãÑy‹ "BqÿÈ@––°1°12Î2Í04ÍF uÿÈ‘"N2Α"N7 @¨¨°1°1@ ¦¦°1°1@7¤¤°1°1'05Ì4Ì.D D3uÿÈJ �…D(uÿÈJ ‘…D‘0DA02Fÿñ60EÿÐÿÓÿÞ@Lªª°1°1(uÿÈy 0qÿÊuÿÊDuÿÈy �UFOýãuÿÈy ‹ "BJ �…uÿÈJ uÿÊ‹ …DšuÿÊÑyUF2uÿÈJ >3%0 2ú2ø0 ÖˆFÁ°1@––°12ø’’°1@©©°1°1�ô(Ô0ô0 ÖDwD‰ÔˆþÿÿÿF™@!6#6#°1@E6*6*°1°12ü0 '05÷4÷.D62ü0@p6#6#°1@”6*6*°1°12ü0 DM2ü0DEDB‘0D;A0DFÿñ60E>ÿåÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿ¹ÿÝDáÔˆþÿF™@¿6#6#°1>uÿÊ‹ …OýãuÿÈy ‹ "BJ Ñy‹ …D‘0DV•0DOA FÿñE!ÿtÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨ÿ¨@g6&6&°1°1(uÿÈy0qÿÊuÿʈÿÿÿÿuÿÊÑyUFuÿÈJuÿÊ‹ …D•0&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@6*6*°1°12ü0 '05÷4÷.D62ü0 @+6#6#°1@O6*6*°1°12ü0 DL2ü0DDDA‘0D:A0DFÿñ60EÿæÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿºÿÞD;ÔˆþÿÿF„@z6464°1°12ü0 '05÷4÷.D,2ü0!@¯6464°1°12ü0 DL2ü0DDDA‘0D:A0DFÿñ60EÿæÿéÿéÿéÿéNAME: ÿTYPE OF DIGITAL OUTPUT: ÿ (1) normally closedÿ (2) normally openÿINTERLOCK WITH DO NUMBER: ÿCONDITIONAL INTERLOCK WITH DO NUMBER: ÿÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿÄÿÞD©ÔˆþÿÿÿF…@6A6A°1°12ü0'05÷4÷.D,2ü0"@B6A6A°1°12ü0DM2ü0DEDB‘0D;A0DFÿñ60E>ÿåÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿÃÿÝD‹E>ý~ý�þ)þÏÿaÔ�QFýBDçÖDÊDà0'05÷4÷.D0#DM0DGDD‘0>>3#@ªª°1°1(?ã�By0òÒˆÿÿÿF?ã�BÒ…@¤¤°1°1(?ã‘By0òÒˆÿÿÿF?ã‘BÒ…@0¦¦°1°1(?ã’By0òÒˆÿÿÿÿF?ã’BÒ…@G««°1°1(?ã“By0òÒˆÿÿÿÿF?ã“BÒ…@c««°1°1(?ã”By0òÒˆÿÿF?ã”BÒ…@§§°1°1(?ã•By0òÒˆÿÿ>D;A0DFÿï60E>ÿãÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿ×ÿÝD{0'05÷4÷.D0$DJ0DDDA‘0D:A0DFÿñ60EÿæÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿéÿÚÿàD‹E>ÿ+ÿ.ÿ“Ö�QFü@$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>F?ã•BÒ…@—¥¥°1°1(?ã–By0òÒˆÿÿF?ã–BÒ…$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>enter ÿ number or to exit: ÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿauto/manual switch is DI: ÿflame sensor is DI: ÿflame ignition is DO: ÿtemperature control is AI: ÿpreform temperature is AO: ÿhydrogen burner is AO: ÿoxigen burner is AO: ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME MAX. VALUE UNIT ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿ3$@©©°1°1(?ñ�By0òÒˆÿÿÿÿF?ñ�BÒ…@6 6 °1°1(?ñ‘By0òÒˆÿÿÿF?ñ‘BÒ…@;®®°1°1(?ñ’By0òÒˆÿÿÿF?ñ’BÒ…@Z¨¨°1°1(?ñ“By0òÒˆÿÿF?ñ“BÒ…@s¥¥°1°1(?ñ”By0òÒˆÿÿF?ñ”BÒ…$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>NR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿauto/manual switch is DI:ÿend switch gas inlet side is DI:ÿend switch exhaust side is DI:ÿLathe translation is AO:ÿLathe rotation is AO:ÿ3M (qöÇ=pöÒ�qöÍOöÃ=1%0 OöÃ@@ 1(OöÃ1"}ÿþOöÃ=1%²MØQF0DOöÃ10 @ªª°1°1°1@1˜˜°1°1@:ªª°1°1@U¤¤°1°1'0|ÿû€ÿû.DD*0%D$0D‘0DA02Fÿñ60E>ÿÙÿÜÿâ€ÿû=0PFÿŠOöÃ@j@v1OöÃ10 ŠöÃ1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>H     /D1/SYSTEM ÿSYSTEMEN ÿSYSTEM FILE EDITOR PROGRAMÿ(0) exitÿ(1) change/delete an entryÿ(2) print systemfileÿ/D1/SYSTEM ÿSYSTEMEN ÿ P=P+0 008D NEXT i 0098 8315 STOP 009D STOP O NUMBER: ÿSOFTSTART NUMBER: ÿRATIOLINK WITH AO NUMBER: ÿRATIOVALUE: ÿP =ÙQ€CONFIGUR2GETCHOIC GETCHAR $GETANSWE :READINT KREADREALF { READSTRI … pERROR 3!,OücÑy‹"BqÿÈ,,@––°1,°1,2Î2Í0,,4ÍF uÿÈ‘"N2Α"N7 , @¡¡°1°1,!@šš°1°1,"@$››°1°1,#'05Ì,$4Ì.D/,%D@,&uÿÈJ �…D2,'uÿÈJ ‘…D$,(‘,)0DA02Fÿî60E>ÿÃÿÉÿ×,*@0¡¡°1°1,+@B��°1°1,,@Pœœ°1°1,->>>  ) STARS  CLEARSCR4&¾WAI_AO_DIÊtAI_DISPL`AO_DISPL¸LDI_DISPL` DO_DISPLË«TEMP_DIS@]œœ°1°1,.@j››°1°1,/@v¡¡°1°1,0@ˆ��°1°1,1'05Ì,24Ì.Dg,3D,4uÿÈJ �…Dq,5uÿÈJ ‘…Dc,6uÿÈJ ’…DU,7uÿÈJ “…DG,8uÿÈJ ”…D9,9uÿÈJ •…D+,:‘,;0DA06Fÿî60EÿŒÿ’ÿ ÿ®ÿ¼ÿÊÿØ,<@–¥¥°1,=°1,>(uÿÈy0qÿÊ,?uÿʈÿÿÿÿF>>“ŒLATHE_DI�^PRINT_AI�_PRINT_AO… EPRINT_DI!…"SPRINT_DO#.$!PRINT_TE%&&PRINT_LA'%I*òPRINTSYS,@uÿÈJ,AuÿÊ‹ …D•,B0,C&>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>+g,AI_DELET-^.AO_DELET/ ,0 DI_DELET1 R2 DO_DELET3 &4TEMP_DEL4 &5LATHE_DE5 w6CREATE_S68ç8AI_CHANGNAME: ÿSAFE STATE: ÿ (1) lowÿ (2) highÿTYPE OF CONTROL: ÿ (1) ignoreÿ (2) abortÿ (3) alarmÿ (4) holdÿ (5) time resetÿ (6) buzzerÿLINK WITH DO NUMBER: ÿ::ñ=…AO_CHANG>8�@¬DI_CHANGA8ÐCŽDO_CHANGD'7F­TEMP_CHAG'àH‰LATHE_CHI %ÃM„EDITENTR3",NOýãÑy‹ "BqÿÈ,O,P@––°1,Q°1,R2Î2Í0,S,T4ÍF uÿÈ‘"N2Α"N7 ,U@¨¨°1°1,V@ ¦¦°1°1,W@7¤¤°1°1,X'05Ì,Y4Ì.D/,ZD@,[uÿÈJ �…D2,\uÿÈJ ‘…D$,]‘,^0DA02Fÿî60E>ÿÃÿÉÿ×,_@Lªª°1,`°1,a(uÿÈy 0qÿÊ,buÿÊD´,c>>> ?‡ '1' : CONTROL := DONTCARE; '2' : CONTROL := BANDLIMIT; '3' : CONTROL := UPPERLIMIT; '4' : CONTROL := LOWERLIMIT; OTHERWISE: ERROR(1) END; {CASE} WRITE('LINK WITH DO NUMBER: '); PROMPTPROCEDURE PROGRAM 0000 DIM B(500):BYTE 000C W=0 \P=1 001C FOR i=1 TO 1000 002F 8305 W=W+0 \ IF W>1000 THEN 8315 \ IF LAND(PEEK($FCF4),1)=1 THEN 8305 0062 B(12)=PEEK($FCF5) 006E IF B(P)=4 THEN 8315 0081 (OUTPUT); NUMBER := READINT(DOLINK); IF NUMBER IN [0..MAXDONR] THEN DOLINK := NUMBER ELSE ERROR(5); {NR TOO LARGE} END {WITH} END {change_AI}; $SUBTITLE CHANGE ANALOG OUTPUTS IN SYSTEMFILE PROCEDURE AO_change(VAI     R PORTNR :INTEGER); VAR INPUTSTRING : MAXSTRING; CHOICE : CHAR; CHANGE : BOOLEAN; NUMBER, I : INTEGER; BEGIN WITH SYSTEMENTRY^.AOLIST[PORTNR] DO BEGIN WRITE('NAME: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); ND = CURRENTSTEP); PROCSTATUS := FINISH; END {IF} ELSE IF PROCSTATUS <> RSET THEN WRITELN('process status is not reset') ELSE WRITELN ('no recipe loaded'); END; {start_proc} BEGIN clearscreen; STA IF CHANGE THEN NAME[1 FOR NAMELENGTH] := INPUTSTRING[1 FOR NAMELENGTH]; WRITE('MAXIMUM VALUE: '); PROMPT(OUTPUT); SCALE := READREAL(SCALE); WRITE('UNIT: '); PROMPT(OUTPUT); READSTRING(INPUTSTRING,CHANGE); RS; WRITELN('':20,' OPTICAL FIBERS CONTROL'); STARS; IOABORT (SYSTEMENTRY,FALSE); RESET (SYSTEMENTRY,'/D1/SYSTEM'); SYSERROR := IORESULT(SYSTEMENTRY); IOABORT (SYSTEMENTRY,TRUE); IF SYSERROR = 216 THEN WRITELN ('no configuration file' IF CHANGE THEN UNIT[1 FOR UNITLENGTH] := INPUTSTRING[1 FOR UNITLENGTH]; WRITE('LINK WITH AI NUMBER: '); PROMPT(OUTPUT); NUMBER := READINT(AILINK); CASE NUMBER OF 0: BEGIN I := AILINK; ) ELSE BEGIN GET (SYSTEMENTRY); WITH SYSTEMENTRY^ DO BEGIN SPEEDNR := LATHE[SPEED_AO]; INLETDI := LATHE[INLETSWITCH]; EXHAUSTDI := LATHE[EXHAUSTSWITCH]; END; init_status; STATUS.RECP_END := 0;  AILINK := 0; IF I <> 0 THEN AI_delete (I); END;{0} 1..MAXAINR : AILINK := NUMBER; OTHERWISE : ERROR(5) {NR TOO LARGE} END {CASE}; WRITE('LINK WITH DO NUMBER: '); PROMPT(OUTPUT); NUMBER REPEAT WRITELN('':20,'JOB SELECTION'); WRITELN; WRITELN('(0) EXIT'); WRITELN('(1) RECIPE EDITOR'); WRITELN('(2) LOAD A RECIPE'); WRITELN('(3) DISPLAY STATUS'); WRITELN('(4) CHANGE STATUS');  R• R�T := 0 TO 1000 DO X := X; UNTIL TIMEREMAIN <= 0 ELSE BEGIN REPEAT getDIstat; UNTIL (INLETDI + OFF1) IN IOSET; VALUE := AOLIST[SPEEDNR]; AOLIST[SPEEDNR0' : ; '1' : ;{CHAIN RECIPE EDITOR IF SYSTEM IS IDLE} '2' : load_recipe; '3' : BEGIN clearscreen; disp_status(FALSE); bottomline(OK); IF OK THE] := NEXTSPEED; NEXTSPEED := VALUE; setAOstat(SPEEDNR,AOLIST[SPEEDNR]); setDOAO(OFF2); DEPOSITION := TRUE; disp_status(FALSE); WRITELN('wait until exhaustswitch is high (inN disp_status(OK); END; '4' : {chng_status}; '5' : chng_jobnr; '6' : reset_proc; '7' : start_proc; '8' : hold_proc; '9' : {maintenance}; OTHERWISE : ERROR(1) p 10)'); REPEAT getDIstat; getAIstat; speedramp; FOR COUNT := 0 TO 1000 DO X := X; UNTIL (EXHAUSTDI +OFF1) IN IOSET; END {ELSE} UNTIL (RECP_E END {CASE}; UNTIL CHOICE = '0'; END {ELSE} END. {runtime}  '5' : chng_jobnr; '6' : reset_proc; '7' : start_proc; '8' : hold_proc; '9' : {maintenance}; OTHERWISE : ERROR(1) J     REAL_VAL6GETCHOICMGETCHAR  1READINT  mREADSTRIZ �ERROR Ä âSTARS  8 CLEARSCR   CURSORHO   FINDENDS  N © SEARCHST,‡ SEARCHFUi NAMECHEC  BOTTOMLIK&DISP_AISÌDISP_DIS ¿ DISPTIMEÚDISP_PRO¯1DISP_SYS ±DISP_STA)dPROCEDURE PROGRAM GUUS DIM PR:BYTE DIM B(500):BYTE OPEN #PR,"/P1":WRITE W=0 \P=1 FOR i=1 TO 20 8305 W=W+0 \ IF W>1000 THEN 8315 \ IF LAND(PEEK($FCF4),1)=1 THEN 8305 B(12)=PEEK($FCF5) IF B(P)=4 THEN 8315 P=P+0 NEXT i PRINT #PR,"HELLO" 8315 STOP STOP _CHNG_JOB ‡!%LOAD_REC"…) %�SETAOSTA&&'SETDOAO '*'¶(INIT_STA('Ç)SETSOFT ) G×*CLEARSOF*G[+SPEEDRAM+ Å- MOVE_HAL. ./NEWSTEP /63 ó«@3+GETDISTA4(GÄ5GETAISTA5¦6 PROCESSA6 J7!DEVIATIO7 Ú8"ALABTEST8 G+<#INPUTTES<+G\>$RESET_PR>)p?U%HOLD_PRO@hAJ&START_PRB(gEÐ'RUNTIME FPROCEDURE GUUS DIM PR:BYTE DIM B(500):BYTE OPEN #PR,"/P1":WRITE W=0 \P=1 FOR i=1 TO 20 8305 W=W+0 \ IF W>1000 THEN 8315 \ IF LAND(PEEK($FCF4),1)=1 THEN 8305 B(12)=PEEK($FCF5) IF B(P)=4 THEN 8315 P=P+0 NEXT i PRINT #PR,"HELLO" 8315 STOP STOP >>>>>>>>>>>>> ¥auto/manual switch is DI:ÿend switch gas inlet side is DI:ÿend switch exhaust side is DI:ÿLathe translation is AO:ÿLathe rotation is AO:ÿPROCEDURE PROGRAM DIM PR:BYTE DIM B(500):BYTE OPEN #PR,"/P1":WRITE W=0 \P=1 FOR i=1 TO 20 8305 W=W+0 \ IF W>1000 THEN 8315 \ IF LAND(PEEK($FCF4),1)=1 THEN 8305 B(12)=PEEK($FCF5) IF B(P)=4 THEN 8315 P=P+0 NEXT i PRINT #PR,"HELLO" 8315 STOP STOP >>>>>>>>>>3%,É,Ê0 ,Ë2ú2ø0 ,ÌÖˆF©,Í,ΰ1,Ï@––°12ø’’°1@©©°1,а1,Ñ�ô,Ò(Ô0ô,Ó0 ,ÔÖDA,ÕDP,ÖÔˆþÿÿÿFÈ,×,Ø@!6#6#°1@E6*6*°1°1,Ù2ü0 ,Ú'05÷,Û4÷.DS,Ü,Ý2ü0,Þ@p6#6#°1@”6*6*°1°1,ß2ü,à0 D[,á2ü0DP,âDJ,ã‘,ä0>>§D;A0DFÿì60E>ÿÝÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿãÿŸÿÒ,åDv,æÔˆþÿFÆ,ç,è@¿6#6#°1@6*6*°1°1,é2ü0 ,ê'05÷,ë4÷.DQ,ì,í2ü0 ,î@+6#6#°1@O6*6*°1°1,ï2ü0 ,ðDY,ñ2ü0DN,òDH,ó‘,ô0D;A0DFÿî60E>ÿßÿåÿåÿåÿåÿåÿåÿåÿåÿåÿå‡Í×"�Ø ÑÈ€PROGRAÍ*T€K�/P1ÿJ?‚ S�Ë>‚S�Ë?‚S�ËF�ËUŒ?‚ S‚ �Ëè>‚ ŽèËÔUME;¤>‘üô´�¹�ÝU`E;0?� óS‘üõ´?‚Ȇ�ÝUE;¤?‚S‚�Ëè?0?&T€K�HELLOÿ???ôôhˆÿÁˆÿÿÿÿF?ã“BÒ…,”@c««°1,•°1,–(>ÿåÿåÿåÿåÿåÿåÿåÿåÿ¡ÿÔ,õD ,öÔˆþÿÿF±,÷,ø@z6464°1°1,ù2ü0 ,ú'05÷,û4÷.DG,ü,ý2ü0!,þ@¯6464°1°1,ÿ2ü0 ,DX,2ü0DM,DG,‘,0D:A0DFÿî60Eÿàÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿ¬ÿÕ,DÞ,ÔˆþÿÿÿF·,,@6A6A°1°1>>K     , 2ü0, '05÷, 4÷.DG, , 2ü0",@B6A6A°1°1,2ü0,DY,2ü0DN,DH,‘,0D;A0DFÿî60E>ÿßÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿ«ÿÔ,,D‹E>ü·ü½ý—þmÿ/,Ô,�QFü`D0,ÖD ,D ,,0,'05÷,4÷.D(,0#DZ, >>>/D1/SYSTEM ÿSYSTEMEN ÿSYSTEM FILE EDITOR PROGRAMÿ(0) exitÿ(1) change/delete an entryÿ(2) print systemfileÿ/D1/SYSTEM ÿSYSTEMEN ÿ0DN,!DH,"‘,#0D;A0DFÿî60E>ÿßÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿåÿÊÿÓ,$Dœ,%,&0,''05÷,(4÷.D%,)0$DV,*0DM,+DG,,‘,-0D:A0DFÿî60EÿàÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿæÿÎÿ×,.,/D‹E>þëþñÿu,0Ö,1�Q>Y =,[€CONFIGURMGETCHOIC 1GETCHAR %$GETANSWE mREADINT ~READREALF � READSTRI ¢ pERROR Fû$>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  8 STARS  CLEARSCR4&úWAI_AO_DItAI_DISPLrAO_DISPLïLDI_DISPL DO_DISPLì«TEMP_DISenter ÿ number or to exit: ÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿTYPE OF LOOP TYPE OF CONTROL DOLINKÿNR NAME MAX. VALUE UNIT ÿ®ŒLATHE_DIÎ^PRINT_AIÎ_PRINT_AO Ä!EPRINT_DI"Ä#SPRINT_DO$I%!PRINT_TE&;'PRINT_LA(%L,òPRINTSYSAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME MAX. VALUE UNIT ÿAI-LINK DO-LINK SOFTST RATIOLINK RATIOÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿNR NAME SAFE STATE TYPE OF CONTROL DO-LINKÿ-Ž.AI_DELET/ˆ0AO_DELET1 D2 DI_DELET3 p4 DO_DELET5 86TEMP_DEL6 87LATHE_DE7 Œ8CREATE_S88;AI_CHANGNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿNR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCKÿ=:ÊA…AO_CHANGB8#E¬DI_CHANGF8`IŽDO_CHANGJ'—L­TEMP_CHAM')O‰LATHE_CHP %V„EDITENTR3,5M (qöÇ=pöÒ�qöÍOöÃ=1%,60 ,7OöÃ@@ 1,8(OöÃ1"}ÿþ,9OöÃ=1%,:²MØQF ,;0DOöÃ1,<,=,>0 ,?@ªª°1°1,@°1,A@1˜˜°1°1,B@:ªª°1°1,C@U¤¤°1°1,D'0|ÿû,E€ÿû.D%,FD6,G0%D-,H0D$,I‘,J0DA02Fÿî60E>ÿÍÿÓÿÜ,K€ÿû>>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=0PFÿa,LOöÃ@j@v1,MOöÃ1,N0 ,OŠöÃ1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXL     XXXXXXXXXXÿÿF…@6A6A°1°12ü0'05÷4÷.D,2ü0"@B6A6A°1°12ü0DM2ü0DEDB‘0D;A0DFÿñ60E>ÿåÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿèÿÃÿÝD‹E>ý~ý�þ)þÏÿaÔ�QFýBDçÖDÊDà0'05÷4÷.D0#DM0DGDD‘0>> AO = RECORD NAME : ARRAY[1..NAMELENGTH] OF CHAR; UNIT : ARRAY[1..UNITLENGTH] OF CHAR; SCALE : REAL; AILINK : 0..MAXAINR; DOLINK : 0..MAXDONR  R~Â"•œOÉïÑâjŽ$0CLjÀ¥ú„¡Ì I := I + 1; LINECOUNT := LINECOUNT + 1; IF LP AND (LINECOUNT = PAGELENGTH-1) THEN BEGIN PAGE(OUTPUT); LINECOUNT := 0; END {IF} UNTIL I > ENDNUM; WRITELN; WRITELN; WRITELN; LINECOUNT := LINECOUNT+3; END; {pri$TITLE SYSTEM FILE CONFIGURATOR PROGRAM PROGRAM CONFIGURATOR(INPUT,OUTPUT,SYSTEMENTRY); CONST NONAME = 'XXXXXXXXXX'; NOUNIT = 'XXXXX'; NAMELENGTH = 10; UNITLENGTH = 5; MAXAINR = 32; MAXAONR = 16; MAXnt_DI} PROCEDURE print_DO(VAR LINECOUNT:INTEGER;START,ENDNUM:INTEGER;LP:BOOLEAN); VAR I : INTEGER; BEGIN stars; WRITELN('':20,'DIGITAL OUTPUTS'); stars; WRITELN(CDO); I := START; LINECOUNT := LINECOUNT +10; REPEAT DO_display(I); I DINR = 24; MAXDONR = 32; MAXLENGTH = 50; PAGELENGTH =59; CAA='NR NAME MAX. VALUE UNIT '; CAI='TYPE OF LOOP TYPE OF CONTROL DOLINK'; CAO='AI-LINK DO-LINK SOFTST RATIOLINK RATIO'; := I + 1; LINECOUNT := LINECOUNT + 1; IF LP AND (LINECOUNT = PAGELENGTH-1) THEN BEGIN PAGE(OUTPUT); LINECOUNT := 0; END {IF} UNTIL I > ENDNUM; WRITELN; WRITELN; WRITELN; LINECOUNT := LINECOUNT+3; END; {print_DO CDI='NR NAME SAFE STATE TYPE OF CONTROL DO-LINK'; CDO='NR NAME TYPE OF DO INTERLOCK CONDITIONAL INTERLOCK'; TYPE AICONTROL = (DONTCARE, BANDLIMIT, UPPERLIMIT, LOWERLIMIT); AI_LOOP = (AIONLY, AIDOBELOW, A} $SUBTITLE PRINT SYSTEM ENTRIES PROCEDURE print_TEMP(VAR LINECOUNT:INTEGER; LP: BOOLEAN); BEGIN IF LP THEN PAGE(OUTPUT); stars; WRITELN('':20,'TEMPERATURE CONTROL ASSIGNMENTS'); stars; TEMP_display; WRITELN; WRITELN; END; {priIDOABOVE, SETPOINT); DICONTROL = (IGNORE, ABORT, ALARM, HOLD, TIMERESET, BUZZER); SAFESTATE = (LOW,HIGH); DOCONTROL = (NORMAL,INVERTED); TEMP_TYPE = (T_AUTO_MAN, FLAME_DI, LITFLAME, TEMP_AI, PRnt_TEMP} PROCEDURE print_LATHE(VAR LINECOUNT:INTEGER; LP: BOOLEAN); BEGIN stars; WRITELN('':20,'LATHE CONTROL ASSIGNMENTS'); stars; LATHE_display; WRITELN; WRITELN; END; {print_LATHE} $SUBTITLE MAIN PRINTING ROUTINE PROCEDURE printsyEF_AO, H2_AO, O2_AO); LATHE_TYPE = (L_AUTO_MAN, INLETSWITCH, EXHAUSTSWITCH, SPEED_AO, ROTAT_AO); AI = RECORD NAME : ARRAY[1..NAMELENGTH] OF CHAR; UNIT : ARRAY[1..UNITLENGTH] OF Cstem; VAR ANSWER,ANSWER1 : CHAR; OK,LP : BOOLEAN; LOOPSTART,LOOPEND,I,LINE : INTEGER; TYPESELECT : INTEGER; IOPORT : IOPORTTYPE; YR,MON,DAY,HR,MIN,SEC : INTEGER; BEGIN clearscreen; WRITELN ('OUTPUT ON LINEPRINTER (Y/N/)'); ANSWEHAR; SCALE : REAL; LOOP : AI_LOOP; CONTROL : AICONTROL; DOLINK : 0..MAXDONR; AOLINK : 0..MAXAONR END; R := getchar; LP := (ANSWER = 'Y'); WRITELN ('DISPLAY ALL ENTRIES? (Y/N/)'); ANSWER := getchar; IF LP THEN BEGIN REWRITE (OUTPUT,'/P1'); SYSTIME (YR,MON,DAY,HR,MIN,SEC); stars; WRITELN (YR:1,'/',MON:1,'/',DAY:1,'OPTICAL FIBERS