Abstract:
An improved machine programming and control system includes the utilization of a continuous, multiple-block, flow chart or charts, all or a portion of which is displayed. Each entered flow chart is executed without conversion to other languages, such that machines are controlled in accordance with the flow charts that are displayed. Multiple flow charts may be entered each to separately control different machines or different parts of the same machine. The flow charts are displayed in a multiple-block presentation and a block numbering system permits rapid on-screen generation of flow charts, editing of the flow charts, and debugging of the flow charts through the utilization of an interrupt. A uniquely improved debugging system, active on an execution interrupt, permits rapid value changing for selected displayed flow chart blocks and permits a single-scan program rerun for verification. Upon run-time interruption, either the number of the flow chart block being executed at the time of interruption is automatically displayed or the block is highlighted so that a flow chart or charts may be edited and corrected on-the-fly. A new formatting system, inserts a block number format entry in the object program which is the output of the compiler, which entry is skipped by an Executive program during run-time execution, but which is retrievable upon a debugging cycle.

Description:
FIELD OF INVENTION 
     This invention relates to machine control, and more particularly to an improved formatting and debugging system, and to the utilization of a continuous multi-block flow chart display, for ease of flow chart generation and editing. 
     BACKGROUND OF THE INVENTION 
     Machine control, up to the present, was in general dependent on so-called ladder diagrams which were manually constructed either from the requirements for the machine or from a flow chart which was manually translated into a ladder diagram. The ladder diagram technique has been utilized, inter alia, to specify control systems involving relays and solenoids, motors, valves, hydraulic systems, lights, switches, and other electro-mechanical devices for drilling, welding, paint spraying, assembling parts, materials handling, fabrication, and in general control of machines for whatever purpose. However, ladder diagrams are extremely cumbersome in usage, and while there has been a large amount of experience with such ladder diagrams, they do not emulate the normal though process as well as do flow charts. 
     Flow charts, in general, include Decision blocks and other types of blocks, called Action blocks, which track closely the mental processes required to instruct a machine to go through various procedures. Regardless of the ability to describe machine function in flow chart form in the past, machines were treated as fixtures controllable by switches, solenoids, timers, etc., which were representable in ladder diagram form. The fixture might be a riveting machine or the fixture could be a drill and riveting machine. As manufacturing processes became more complex so did the language necessary for machine control, with the ladder diagram technique being almost impossible to implement, especially for closed loop systems. 
     In order to implement a ladder diagram, a specialized controller, such as manufactured by Gould or Allen Bradley, was built which was programmed in ladder language so that once a change was made in operation of the machine which the controller was to control, the controller had to be reprogrammed at the ladder language level in order to make the change. Such a change could merely involve the altering of a the stop point in the movement of an arm, head, or other mechanical device. 
     In summary, prior to the Subject Invention there existed so-called programmable controllers which operated in a harsh industrial environment and sensed inputs and outputs, and controlled machines with ladder language developed from traditional relay diagrams, which were difficult to construct, much less alter. 
     In the middle 1980&#39;s, Universal Automation of Hudson, N.H. developed a methodology and system for programming machines, especially robots, by defining the operation of a simple robot or machine through the use of a number of pictorially designated decision, logic, data entry, or run-time blocks as exemplified by CONTROL, WAIT, MOVE, EXIT, DECISION, and COMPARE flow chart blocks. 
     In these earlier machines a flow chart was manually generated using these flow chart blocks and each flow chart block could be called up at a computer console, at which time all of the particular tasks to be performed by that block were entered in tabular form, from whence the programmer went to the next sequential block. The reason for the use of flow charts as opposed to ladder diagrams was that flow charts could be drawn to represent almost any type of task involved, and more closely emulated the human thought process. Thus, any task could be represented in flow chart form and, with the ability to automatically execute a flow chart, the early Universal Automation system provided a powerful tool in which levels upon levels of programming could be eliminated. 
     Moreover, for the early Universal Automation systems, rather than scanning through the entire computer memory, tasks were performed on a block-by-block basis, in which the machines were controlled by virtue of the compiling of the final flow chart or flow charts into data converted through an Executive program into run-time instructions for each of the individual machines. In that sense, the computer-generated flow charts actually controlled the end use devices. 
     One of the features of the earlier work done by Universal Automation was the fact that, rather than time multiplexing tasks to be done without regard to the length of the task that had to be done, each individual flow chart block was executed, with the execution taking only that length of time necessary for the execution of a particular block. The execution of the blocks continued as long as the next block number was higher than the previous block number, with the task being suspended when the block number was equal to or lower than that of the block being executed. This minimized the amount of time necessary for the utilization of memory and computer power, such that personal computers were able to handle not only the generation of a flow chart but also the execution of a flow chart without the use of time multiplexing or conversion to another programming language. 
     As will be appreciated, the earlier work by Universal Automation completely bypassed the programmable controller by providing an image of the flow chart, created block-by-block, in the virtual memory of a computer. Thus the earlier Universal Automation systems completely bypassed the ladder diagrams in favor of executing a compiled flow chart or flow charts, which eliminated the need for the programmable controller and added an area of generality which was user-friendly to the point that a flow chart could be manually generated and then entered block-by-block into the computer. It will be appreciated that in these earlier systems the flow chart was drawn on a piece of paper and entered into the computer on a series of prompts. There was no display of a flow chart symbol on the screen. The computer served merely as an interface which asked questions about the drawn flow chart, which answers were entered into the computer so that the program could run. 
     Later Universal Automation introduced a system which displayed a single block of a flow chart so that entries could be made in a menu to the side of this single block. The block took one of six forms, e.g. one of those mentioned above, with each of the blocks being numbered. This permitted, in a limited way, the verification of inputting correct information. 
     The six types of blocks were as follows: The first type of block was a CONTROL block that allowed the user to turn on or off an output signal from the personal computer or CPU. It also allowed a turn on or off of an internal flag bit, a start, a stop, or a reset of a timer, or a clear, increment or decrement of an internal counter. Thus, the purpose of the CONTROL block was for instance, to start timers, increment counters, decrement counters, and then provide control that the turning on or off of an output signal would provide. The second block was a WAIT block which established a predetermined delay in the flow chart. WAIT blocks were obviously important to allow other things to occur, and the amount of delay was settable. The third block was a MOVE block which moved data through the system in parallel. In other words, the MOVE block permitted groups of input data or the value of counters or registers to be moved to output nodes, or to counters or registers. The next type of block was an EXIT block which allowed the user to leave the flow chart to go to any other type language required. The fifth type of block was the DECISION block which allowed the user to base a yes or no decision on an input sensor. It could also base a decision on internal bits being true, certain function keys on the computer keyboard being pressed, or certain time-out timers being completed. The sixth block was a COMPARE block which permitted the comparison of values in which a yes/no decision could be based on a result equal to or greater than or less than the particular values to be compared. 
     It will be noted that the blocks in the prior Universal Automation machines could be accessed individually by block numbers, but this required the user to have a separate handwritten flow chart in order to be able to ascertain what block to access prior to going to the computer screen to either alter, change, delete, or modify the function of a single block. 
     Once all the blocks had been completed in a hand-done flow chart and entered into the computer, each block was displayed one at a time and verified by the operator. Assuming that the program met the specifications of the programmer, the information was compiled into data which, upon operation of an Executive program, drove I/O devices to execute the particular flow chart through the transmission of signals to the end-use machine. 
     The first flow chart programmers included a so-called editor, in which the flow charts were entered, with the editor displaying one block of the flow chart at a time, and with a menu of value selections to one side or the other of a block. These earlier machines also included a compiler, which compiled the flow chart or flow charts and created object data for use by the Executive program. The compiler also checked the flow chart for correctness of connection points, with the compiler producing a data file which was dependent on the types of blocks used, the connection points within the flow charts and various other criteria. Thus, in these machines, once compiled, data from the compiler was acted on by the Executive program to execute the flow chart by generating proper signals to I/O devices. 
     It will be noted that in the earlier Universal Automation machines, the compiler did not have to change from computer to computer or application to application. The Executive program was virtually all that was necessary to change and it could be changed in one or two ways. It was changed dependent upon the particular I/O system and also was changed for the given microprocessor utilized. Thus, until the particular microprocessor or input/output device was specified, there was no need to change the Executive portion of the program. The Edit programs and Compiler programs were completely independent and, from that basis alone, provided an editing advantage in that all editing and program generation was done in flow chart format. 
     Moreover, the earlier Universal Automation systems proved to run two to five times faster than the programmable controllers. This was because when a programmable computer solves its logic, it has to scan all of its memory locations to determine what to do. With the flow chart method of programming and execution, as will be discussed, one keeps track of where one is on each flow chart all the time. The Universal Automation system in effect only executes those statements of blocks on the flow chart that have to do with any particular given scan. Thus, the scan rate of the Universal Automation system was from two to five times faster than programmable controller scan rates. 
     One of the basic difficulties involved in the early Universal Automation systems was that no continuous flow chart, or part thereof, was produced on the computer screen. This became very inconvenient with respect to the formulation and generation of flow charts. A not small number of error routinely occurred in transferring a hand-drawn flow chart block-by-block to the single block representation of the flow chart on the screen. Also, one of the problems in representation of even a single flow chart block on the screen was the size of the screen and the inability to produce characters which were small enough to fit beside the representation of the block. Thus, menus were used on one side of the flow chart block to describe what was going on in the flow chart block. Moreover, this involved mental correspondence of a block to a chart of data. Another problem with the earlier machines was that the flow chart block was not drawn on the machine. Rather it was printed out on a printer which increased the difficulty in entering in the flow charts. 
     By way of further background, another and very real problem confronting the industry was the ability to reprogram the machines or robots &#34;on the spot&#34; when, for instance, a particular program did not provide expected machine movement or a machine broke down. It was ordinarily necessary, even with the early Universal Automation systems, to go back to the original program which was done by hand, correct it, re-enter it, and then recompile the program and run it to see if it would, in fact, run as expected. There was no ability to both interrupt the running of the program and to debug the program other than by guessing where in the program the error occurred. There was however a &#34;freeze&#34; capability in these early systems, as well as a rerun capability. 
     In summary, the earlier ladder diagram systems were almost intolerably complicated both in terms of the language involved and the debugging, as well as defining or redefining the role that the programmable controller was to play. While the early Universal Automation flow chart systems were easier to program than the ladder diagram systems, were faster than the programmable controllers, and alleviated the need for programmable controllers there was still a need for better programming and debugging techniques. 
     SUMMARY OF THE INVENTION 
     In order to solve these problems, the Subject Invention provides an improved machine programming and control system which includes the utilization of a continuous, multiple-block, flow chart or charts, all or a portion of which is displayed. Each displayed flow chart is executed without conversion to other languages, such that machines are controlled in accordance with the flow charts that are displayed. Multiple flow charts may be entered each to separately control different machines of different parts of the same machine. The flow charts are displayed in a multiple-block presentation, and a block numbering system is provided which permits rapid on-screen generation of flow charts, editing of the flow charts on screen, and debugging of the flow charts on screen should a run-time interrupt be initiated. A unique debugging system, active on an execution interrupt, permits rapid value changing for selected and displayed flow chart blocks and permits a single scan program rerun for verification of the displayed program change. Upon run-time interruption, either the number of the flow chart block being executed at the time of interruption is automatically displayed or the block is highlighted so that a flow chart or charts may be edited and corrected on-the-fly. In another embodiment, the flow of flow chart block up to the block executing at the time of interrupt is highlighted. Moreover, a new formatting system, different from the previous flow chart formatting systems, inserts a block number format entry before any Action block in the object program generated by the compiler prior to execution by the Executive program, which entry is skipped during run-time execution, but which is retrievable upon a debugging cycle. 
     More specifically, for a machine controlled by the execution of a flow chart, when a particular entry results in a machine operation which is incorrect, it is very important to be able to immediately locate the portion of the program which caused the incorrect machine function and to be able to change it immediately. In order to do this, the format for in the object program is changed in the Subject Invention to add a block number, which block number is invisible to the Executive program during execution. In other words, during executions, the block numbers are skipped and an Action block is the first element addressed. Thus, each of the format blocks contain the newly provided block number, with the remainder of the elements being for instance an action code element (the Action block), a mnemonic element, a fixed value element, a data-type element, and a destination-address element. With these elements, all of the simple robotic or machine operations can take place. The previous freeze capability halts the execution of the particular flow chart at the executing block and stays on that block until released. After a &#34;freeze&#34;, as before, with an ENABLE, flow charts may be allowed to execute in a rerun mode, with the starting point being at the beginning of a subroutine flow chart. 
     Thus, during execution, the Executive program ignores the first three bytes corresponding to the block number and executes. Thus, the execution cycle simply jumps over the block number and goes directly to the first action code. As before, execution of a block is accomplished in ascending order with a descending order resulting in the suspension of execution of the flow chart so that another flow chart can be executed. Finally, flow chart numbers not only keep track of orderly flow of the programs but are utilized to make a decision as to whether to continue executing blocks within a given flow chart or to suspend a flow chart execution and to continue to any other flow chart. 
     Thus, upon interrupt of the system due to a machine malfunction or mispositioning etc., the number of the flow chart block in control at the point of interruption is automatically displayed, followed by display of the flow chart block. Alternatively, the flow chart blocks being executed at the time of interrupt are highlighted on the display. This permits the operator to easily change the program on-the-fly. A novel debugging system is provided due to the display of the portion of the flow chart executing at interruption. Thus one can read the status of any input; display the status of any output or flag; force the status of that output or flag on or off; read the value of counters, timers, and registers and allows change of these values in a visible display. Then a single scan execute of the displayed flow chart facilitates final program validation. Thus, the subject system provides for easy debugging of a program so that if, for instance, a position on an XY table is off by a given amount the given amount can be changed at the machine by changing a displayed value at a given flow chart block. Thereafter, the change is tried, and if successful, the program can be run further for checking. 
     Thus the new data format permits debugging of flow chart blocks through the display of a block number which is invisible during execution, but becomes visible during the interrupt process so that the flow chart entry can be easily edited or changed. Note the flow chart executing at the time of interrupt can be highlighted, and even the path previously taken through the flow chart to get to this block can be highlighted and this can be displayed in a different color or other indicator such as dotting the path. 
     A second feature is a debugging system in which, because of the display, changes can be instantaneously made to the flow chart and tried in a single scan execution. 
     A most important feature of the subject invention is the actual display of a continuous flow chart, or part thereof, rather than individual flow chart elements. Note, multiple, simultaneously-displayed flow charts can be accommodated by the Subject System. While the early Universal Automation systems required the manual conversion from an already hand-drawn flow chart to data entry, in the subject system the ability to produce or generate continuous portions of the flow chart on the computer screen not only provides ready editability to the initial flow chart, but also editability during subsequent changes in the flow chart once the flow chart has actually been executed and tried on the particular machine. 
     In order to provide for the display of a continuous flow chart as opposed to single flow chart blocks, a new set of instructions are necessary in the drawing of the blocks on the screen. While general purpose programs exist for the drawing of virtually any type of character on the screen, these programs are much too complex to be utilized with any degree of facility in a flow charting system. A simplified drawing system is therefore provided in which only certain allowed lines and symbols are permitted. These lines are horizontal lines, vertical lines, the formation of rectangles, and the formation of diamonds, in which the line length to each next block is fixed in an XY sense. Other symbols and lines are an enable symbol, and horizontal spaced lines with triangular ends, ie an unequal hexagon. The essence of this flow block drawing program is that the screen in one embodiment 640×350 dots, with the assembler merely actuating the appropriate dots for a given symbol or fixed length line. 
     Another feature of the drawing system is that the screen is divided up into cells, with only one block allowed per cell and only prescribed arrows within the cell along only certain paths. This alleviates the problem of specifying XY coordinates for symbols and lines. Here the flow chart is defined by cells and locations within a cell. This is accomplished by a specialized flow charting sheet. 
     In addition to the particular blocks and the way they are generated on the screen along with the particular lines to and from the blocks, a three by five dot matrix permits the labeling of the blocks on the screen, rather than in a menu beside the block. It will be appreciated that most computer terminals have a limited amount of space on the screen and the ability to provide intelligible symbology next to a continuous flow chart is almost as important as the ability to provide a continuous flow chart itself. 
     The ability to scroll through the continuous flow chart by displaying contiguous and continuous portions of the flow charts permits the operator to continually go backwards and forwards over his particular flow chart to look for errors or to add or delete that which he deems necessary. Not only are transcription errors completely eliminated by the subject system, because the flow chart has an immediately defined image in the memory of the CPU, its execution in the exact form indicated on the screen is assured. 
     In summary, the linking together of flow chart blocks on a display screen permits on-line generation of a flow chart, or series of flow charts for multiple machines. Note, the generation of a flow chart is self-executing through the aforementioned Executive program and compiler. Thus, in the subject invention, more than one flow chart block is displayed on the screen, with as many as fifteen or twenty blocks being displayed in one embodiment, thereby to give the programmer optimal ability to see the structure of his program. Additionally the three by five matrix alpha-numeric labeling is both readable and understandable even though small. During editing, this labeling system eliminates the necessity of having a menu or window set to one side to provide for the variables that are necessary in specifying the functions of each of the flow chart symbols or blocks. Finally, the utilization of a particularly efficient method of displaying alpha-numeric characters permits the presentation of continuous flow charts in a manner which is easily readable. 
     The use of the continuous flow chart in conjunction with the additional data format block which specifies the interrupted block only during execution interruption, provides easy access to the portion of the program which must be changed assuming the machine is not behaving according to plan or is behaving properly but inappropriately due to a programming error. 
     Thus, the subject system eliminates the need for programmable controllers. It eliminates the need for ladder diagrams and conversion to machine language. There is no need to reconfigure the compiler from computer to computer. Execution and, therefore, machine control is done directly from the flow chart. The entire flow chart is provided with the block numbers presented during a debug interruption cycle. The unique debugging system includes a display which identifies or displays the block being executed within each flow chart at the time of interruption. A single scan execution after debugging provides rapid verification for displayed program changes. There is no need, in the present system, to scan all memory locations since the only portion of the program that is executed is the executed flow chart block. The subject system is two to five times faster than even the fastest of the present programmable controllers, with each flow chart representing a task and with multi-tasking capability provided by the subject system in that the system switches flow flow chart to flow chart. At no time are the tasks time-multiplexed such that the time spent on each task is just that necessary to do the task. With each flow chart representing a task, putting together a system permits a user to link tasks together, with certain tasks being executed concurrently or sequentially. this multi-tasking capability is transparent to the user, with the time spent on each task dependent on what is happening within the task rather than being time multiplexed. The fact that the tasks are made nontransparent in their execution to the user provides aid in debugging a particular system. Note, all that is necessary to provide for machine control is to provide a flow chart, enter in the block numbers, and execute from that level without conversion to another language. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     These and other features of the Subject Invention will be better understood in conjunction with the Detailed Description taken in conjunction with the Drawings of which: 
     FIG. 1 is a diagrammatic representation of the Subject machine Control System operating from flow charts to control multiple machines; 
     FIGS. 2A and 2B show an original flow chart and a change made after a run-time interrupt to permit on-the-fly changes and program reruns; 
     FIG. 3 is a block diagram of the Subject System illustrating display of continuous flow charts, flow chart block numbers and the subject debugger and interrupt system; 
     FIG. 4A is a block diagram of a prior-art, programmable-controller system; 
     FIG. 4B is a block diagram of a flow chart-driven machine control involving single flow chart block display; 
     FIG. 5 is a diagrammatic illustration of the data format to be used by the Executive program of FIG. 2; 
     FIG. 6 is a diagrammatic illustration of the correspondence of a displayed flow chart to a graphic memory, and editor memory, and finally to an object memory, after compilation; 
     FIG. 7 is a diagram of a typical punch press to be run by the Subject System; 
     FIG. 8 is a simplified flow chart to control the punch press of FIG. 8; 
     FIG. 9 is a diagrammatic representation of a three by five alphanumeric character placeable beside a flow chart block; and 
     FIG. 10 shows a specialized flow charting sheet. 
    
    
     DETAILED DESCRIPTION 
     Referring now to FIG. 1, a machine control system generally designated by reference character 10 is shown coupled to three different robotic machines 12, 14, and 16 via buses 18, 20, and 22 respectively. The machine control system includes a CRT-type display or monitor 24, on which are presented three different flow charts 26, 28, and 30 with each of the depicted flow charts being a section of the larger flow chart to which it belongs. 
     As will be described, the displayed flow charts are also carried in the memory of the CPU used in the machine control system, which, in one embodiment utilizes a programmable personal computer or a like machine which has a keyboard or other entry device 32 and is provided with a debugging system at 34, as will be described. 
     It is one of the features of the subject machine control system that the flow charts which are displayed on monitor 24, are directly converted into machine language object code which results in the appropriate I/O signals being applied to buses 18, 20, and 22 respectively to control the respective machines through direct execution of the flow chart. The flow chart is executed in the sense that its image is compiled within the machine control system and the data therefrom is loaded into an Executive program which includes a logic solver, and I/O scanner. The output of the I/O scanner drives and I/O device or module, as will be described. The I/O module drives the respective machines or machine elements in accordance with the compiled and executed flow chart. 
     CONTINUOUS FLOW CHARTS &amp; DEBUGGING 
     It is a primary feature of the subject system that the flow charts are presented on the display in a continuous and contiguous form so that they may be readily entered into the editor portion of the CPU and also easily edited, from whence they are directly executed after they are compiled. Thus, the display of the continuous and contiguous flow charts, or portions thereof, provides for ease of editing as well as entry, with the debugging unit 34 providing for ease of debugging an original program during a run-time execution of the program. 
     Again, as will be described later, in the debugging phase of the machine control system, debugger 34, upon interrupt of the execution of a flow chart, takes control over the machine control system and displays a highlighted flow chart element on display or monitor 24, which flow chart block is the one being executed at the time of the interrupt of the machine control. Alternatively, as will be seen, monitor 24 may display a listing of all of the flow chart block numbers, which block numbers correspond to the blocks being executed at the time of the interrupt. From that display, one can call up through the debugger the particular flow chart block, change its value via keypad 32, and through a single scan execute the altered program to ascertain if the machine is behaving in the manner prescribed. 
     Referring now to FIG. 2A a typical flow chart to be executed is illustrated to include flow chart blocks 40, 42, 44, 46, 48, 49, 50, 52, 53, and 54. These flow chart blocks define a portion of a continuous flow chart, in which during an interrupt, flow chart block 52 may be highlighted by the aforementioned debugger. It can be seen by FIG. 2B that an additional set of flow chart blocks 56 has been added in a loop illustrated by line 58 to correct whatever was the problem with the initial program. Thereafter, upon recompiling, the program illustrated in FIG. 2B is executed via the system of FIG. 1, with the simple editing having been accomplished through the addition of an additional set of blocks in the displayed flow chart. 
     While additional flow chart blocks have been added to the initial flow chart as illustrated in FIG. 2B, it is sometimes only necessary to change the values of preexisting flow chart blocks. In this case, the debugger does not require recompiling of the altered program but rather, in a single-scan, will execute the displayed changes in the program, assuming the blocks had merely been altered in terms of value changes. 
     This is an extremely advantageous way of on-the-fly editing of programmable machines in that displayed values may be changed in the debugger, and the displayed values executed without going through a complete recompile. Should more extensive changes be made to the program, the debugger allows the operator to isolate and display the particular program blocks which were executing at the time of interrupt and then re-edit the program through an editor, which will be described hereinafter. After the more complicated changes have been made by the editor, they are compiled by the compiler and loaded into the Executive program so that the machine may be properly controlled. 
     What will be apparent from the FIG. 2A and 2B diagrams is that what is presented to the operator is a continuous flow chart or portion thereof, in which the flow blocks are contiguous and numbered; and in which the values are displayed immediately adjacent the flow chart blocks in the appropriate positions for the particular block as illustrated in FIG. 8. This is unlike previous systems in which if flow charts were used, only an individual block was displayed. 
     Having displayed the flow chart block numbers along with the flow chart blocks, it is possible to alter the program simply and easily by editing on the screen, in which screen entries are automatically mirrored into the editor or graphic memory within the computer utilized. Thus, as will be discussed in connection with FIG. 6, there is a correspondence between the displayed flow chart, the graphic memory, the editor memory and the object memory in the Executive program. This correspondence allows complete confidence that the flow chart, once edited on the screen, will be executed in precisely the manner presented by the screen. 
     Referring now to FIG. 3, the machine control system 10 is seen to include a programmable computer or CPU designated by a dotted box 50 and an input device 52, such as the aforementioned keyboard. the CPU includes a flow chart development editor 54, a compiler 56 which produces object data 58 that is loaded into an executive unit 60 which includes an executive program that performs logic solving and I/O scanning functions. This unit provides signals through an I/O device 62 to a machine 64. 
     The flow chart development editor includes a disk memory 66, as illustrated, and a utilities package 68 which, in general, permits the development of flow chart symbology on display 24, as illustrated to the right of CPU 50. Note that the flow chart generating program resides in the editor. It will be appreciated that blocks and the flow charts are numbered by numbers such as 1.00; 2.00; . . . 8.00. These block numbers identify the blocks, with the lines describing the particular order in which they are desired to be run. 
     As also illustrated, the object data which is represented by block 58 may be coupled to a microprocessor 70 programmed with the aforementioned Executive program. Microprocessor 70, with its Executive program takes the place of unit 60 and may be utilized exteriorly of the CPU to run various machines. In other words, unit 60 of the CPU may be replaced with a preprogrammed microprocessor which, in essence, performs the same function. 
     It will be noted that debugger 34, is supplied with data on bus 72 from the unit 60, in which when an interrupt 74 is inputted via keypad 52, unit 60 is inhibited while, at the same time, providing data to debugger 34 to indicate which block or blocks are being executed at the time of interrupt. Inhibit signals come from the keyboard 52 over bus 76 as illustrated. 
     Debugger 34, in one embodiment, drives display 24 via bus 77 to highlight the particular block which was executing at the time of interrupt, this highlighting being shown by block 78. Also debugger 34 may highlight in a different fashion, the flow chart execution path to that block as illustrated at 79. 
     In an alternative embodiment, upon inhibiting of the executive program, a list of flow charts plus the block number in each flow chart which was executing at the interrupt is displayed on display 24. Here this display is illustrated by reference character 80 which is driven via data transmitted over bus 81. 
     The debugger functions in the following ways. It will be appreciated that the debugging system for the prior Universal Automation systems merely permitted reading of inputs, reading and changing the states of outputs, reading and changing the states of initial flags, reading and changing the values of times, counters, and registers, performing a single-scan execution or resuming or ending execution. The present debugging system performs all of the above with the added feature of display so as to alert the user quickly and to provide accurate change identification. Additionally, the subject debugger program, in one embodiment, highlights changes and flow chart paths to aid debugging. Moreover, the Subject System now permits full flow chart editing capabilities such as deleting blocks, moving blocks, changing flow paths or routes, and adding blocks. Thus the editor, compiler, and debugger function are now combined into one program for exceptional flexibility with all relevant data now displayed. Once the particular flow chart blocks have been altered to the satisfaction of the programmer, the debugger upon command can initiate a single scan, here illustrated at 82, of the newly debugged program via keypad 52 so that it may be executed by unit 60 via the I/O device 62, such that machine operation can be verified. The single-scan data is inputted to unit 60 over bus 84 as illustrated. 
     What will be appreciated is that the subject system permits the display of continuous flow chart blocks to aid in the flow chart development, as well as the debugging process. The block numbers are displayed for purpose of enabling the programmer to get back into the flow chart at the required spot and highlights are utilized to indicate, during an interrupt cycle, which blocks in the program were executing at the time of the interrupt. 
     It will also be appreciated that the CPU in the subject system can handle as many as 50 machines at one time in one embodiment, and thus as many as 50 different flow charts can be executed either simultaneously or sequentially depending on the flow of the manufacturing process which is controlled by the subject system. 
     Thus, it may be more appropriate rather than highlighting blocks on a screen since so many flow charts are involved, to provide the listing as illustrated by display 80, so that should the machine be carrying a large number of flow charts, only the flow charts that are necessary to be edited will be called up to the display. 
     As will be seen hereinafter, it is the provision of the Executive program with a new data format, in which flow chart blocks are designated by number in the program but are skipped over when execution begins, which provides the system with the type of debugging flexibility and data management which makes editing and debugging an exceptionally simple process for the end user. 
     To recapitulate with respect to the prior art and referring now to FIG. 4A it will be appreciated that in the prior art a manually-derived flow chart 100 was converted to a ladder diagram 102 which was then programmed into a programmable controller 104 in ladder language, which programmable controller controlled machine 106 via an I/O device 108 that produced the requisite signals for machine control. As illustrated, a closed loop 109 from the machine provided the programmable controller with inputs derived from the machine so that the programmable controller could operate in a closed loop manner. The closed loop machines with their programmable controllers are extremely complex, as described before, and perhaps unnecessarily so in view of the subject flow chart programming and control system. 
     The subject system has increased flexibility and ease of usage, as compared to the earlier Universal Automation system illustrated in FIG. 4B, in which a hand-drawn flow chart 110 was, upon prompts, entered in to a flow chart development system 112 with the aid of a single-block display 114, that involved a block 116 and a menu beside it here illustrated by reference character 118. The flow chart developer, as described above, drove a compiler 120 which, in turn, drove an executive unit 122 which outputted its logic solver, and I/O scanner through an I/O device 124 to a machine (not shown). 
     FORMAT 
     Referring now to FIG. 5, the data format of the object data produced by the compiler is illustrated in which 3 bytes are initially utilized for the block number as is illustrated at 130. It will be appreciated that this format is interpreted in the Executive program. The format contains a block number, an action code, a mnemonic number, a fixed value, a data type and a destination address. The action code, as illustrated at 132, is 1 byte in length which indicates, inter alia, the type of block which is to be executed and additional information. Withing the 1 byte it is possible to identify such actions as turning on and off an output or flag providing a compare, providing a move, clearing, incrementing or decrementing a counter, starting, stopping, or resetting a timer, testing an input, flag, or a timer or a function key on a key board, or telling the Executive Program to wait or exit. After the action code there is a branching to either a compare-decision-wait-exit mode, in which mnemonic numbers as illustrated at 134 define the numbers of such elements as an output, an input, a flag, a timer, a counter, or a register. Thereafter, a branch occurs to a wait-exit block in the form of a destination address 136. The other portion of the branch is to an optional control-decision block in which a further action code is illustrated at 138 which is followed by another mnemonic block 140. This outputs to a decision-control branch such that for a control branch there is a destination address 142, whereas if there is a decision branch a &#34;yes&#34; destination address 144 or &#34;no&#34; destination address at 146 is accessed. 
     The other branch from action block 132 is a move-compare branch in which the data type 148 is accessed. Thereafter a mnemonic number 150 or fixed value 152 can be accessed, with an optional mnemonic number block 154 or fixed value block 156 being provided. Thereafter there is a branch to a &#34;move&#34;, wherein on the move side of the branch there is a destination address 158; whereas on the compare side of the branch there may be a &#34;yes&#34; destination address 160 or &#34;no&#34; destination address 162. Note that the above diagram is provided for illustrative purposes only to show the location of the block number element ahead of all others for a given task. 
     During execution of any particular program, the block number is skipped until such time as the aforementioned interrupt occurs at which time the block number is read out in terms of its 3 bytes of information. 
     With this new addition to the format block the above-identified debugging and control is made considerably easier which also permits the display of the relevant flow chart blocks which are actively being executed at the time of the interrupt. 
     Referring to FIG. 6 it will be seen that a flow chart generally indicated at 170 is carried in the graphic memory format form as illustrated at 172 which identifies the graphic location and criteria such as the presence or absence of a line. The function of the block is carried in the editor memory form at 174. After compiling of the editor output at 176, the object data in the above format form is placed in object memory as illustrated by format 178. 
     It is the purpose of this diagram to indicate that what is established in the editor memory is reflected on screen at the same time as that which is executed. Thus the graphic memory defines the visual representation of the flow chart image in the editor memory. Therefore the graphics can change position while the flow chart stays the same in the editor memory. Thus, while the program or flow chart can be represented many ways on screen, the editor memory and hence the object code remain constant for a given flow chart input. 
     Referring now to FIG. 7, the simple control of a punch press and a conveyor is illustrated. Here the punch press has a head 242, which is solenoid-driven such that the press head is moved in a direction illustrated by double ended arrow 244, whereas a work piece 246 to be punched is driven by solenoid actuation to move the piece in a direction perpendicular to the movement of the punch press head. 
     Typically when the machine is in an automatic mode and controlled by the Subject System a start button 250 on a control panel generally indicated at 252 is pressed. This is subsequent to the operator first selecting the number of cycles to be utilized and the number of pieces to be punched, in this case indicated by thumb wheels 254 to indicate that 23 pieces are to be processed. To make sure that the machine is in the automatic mode the start button 250 is depressed with switch 255 in the automatic mode. 
     When in the automatic mode the machine is controlled by the flow chart of FIG. 8 such that the enable bubble at the top of the flow chart is the &#34;power on and automatic control&#34; vehicle. The freeze criteria is implemented by a stop button 256 on the panel in FIG. 7 as illustrated at 257 to be responsive to I-10. Thus after power on and the machine placed in the automatic mode, which is input 8, this results in the accessing of the first exit flow chart block, which is given block number 1.00. The exit flow chart block enables one to leave the flow chart and go to some other language to put on screen a message, for instance, on the face of a CRT, that says that the machine is now running. Running from the exit flow chart block is a decision block which ascertains that the start button has been pressed. This is block number 2.00 and has an input I-9. Pushing the start button results in an input at input 9 which results in a &#34;yes&#34;. At this point one of the move blocks is accessed as illustrated at flow chart block 3.00. The inputs to this block are I-0 through I-7 which corresponds to the position of the thumb wheel switches. As a result the thumb wheel switch outputs are &#34;moved&#34; into counter C-0. The hardware inputs of 0 to 7 are therefore transferred to the thumb wheel counter, at which point the next block, block 4.00, turns off the cycle complete light 258 of FIG. 7. This is accomplished at output 0-3. The cycle complete light could have been on from a previous cycling of the machine so it is at this point that is it shut off during a new cycle. At this point, the counter for the unit is cleared as indicated by C-1 as this counter keeps track of the incrementing of the conveyor. The conveyor is moved through the utilization of block number 5.00 in which a value is inputted to pulse or index the conveyor via, for instance, a stepping motor or solenoid. A value is placed in the &#34;index conveyor&#34; portion of this block such that there is an output pulse at 0-4, the length of the pulse being determined by internal timer 258. The length of the output pulse determines the number of steps for the stepping motor and this may be changed so as to properly position the part under the punch press. 
     Likewise, the position of the head is controlled by a timer 259 which produces a different length pulse, again to produce an indexed or stepping motor type of drive for the head, such that the head is brought down by a distance commensurate with the length of the pulse produced by timer 259 at output 0-1. 
     It will therefore be appreciated that in the embodiment described, the positioning of the parts of the machine are provided by virtue of the translation of the timer pulse length into a length or throw governed by stepping motors, solenoids, or other devices. 
     After block 5.00 is a decision block 6.00 having an input I-11 which may be from a limit switch which answers the question, &#34;is the press down?&#34; If so, the next block accessed is block 7.00 which is a &#34;pulse on up solenoid&#34; which controls a solenoid by the pulse at output 0-2. The length of this pulse is controlled by a like timer 260 to pull up the head after the punch has been made. This is only accomplished after the head has performed the punching operation as indicated by the punch down input I-11. The head is moved up in accordance with the timer 260 output associated with block 7.00 and its up positions is indicated by an input I-12 at block 8.00 which indicates that the press is up. At that point the cycle counter is incremented at 9.00 such that counter C-1 is incremented. Thus the counter is incremented every time that a part is punched, with block 10.00 comparing the cycle counter output to thumb wheel counter and if they are not equal, then the process loops back to block 5.00 to index the conveyor which repeats the whole process again. The blocks are continually executed until a comparison to the cycle counter equals that of the thumb wheel counter at which point the cycle complete light is actuated by output 0-3 from block 11.00. At this point the flow chart is exited at block 12.00 to go back to block 2.00. The &#34;exit flow chart&#34; may place on the face of the CRT a display which indicates that the machine is no longer running since a loop is made back from 12.00 to 2.00, where the program waits until the start button is again pressed. 
     What will be appreciated is that this simplified flow chart shows the utilization of a number of flow chart blocks in which each has its indication immediately in or adjacent the block so that when it is presented on the CRT screen all of its functions are within the flow chart or adjacent to it, as opposed to being presented in a menu. 
     Should there be a mispositioning of the press or a limit switch fails, execution may be inhibited, with the interrupt immediately calling up and displaying the executing block number; or the executing block itself is highlighted on the display. At this point, should a timer change need to be made, the value can be immediately inputted into the corresponding timer so as to change the length of the timer pulse and thus the position of the corresponding element of the machine. With these changes made possible by the display of the executing block it is now possible, with the aforementioned debugger, to be able to change the program on-the-fly and to run through the program without recompiling, thereby to immediately ascertain if the timer pulses are of the requisite length to provide the requisite machine movement. 
     Alternatively, for instance, if the press is not down, then it can be ascertained that it may be a faulty limit switch. This can be ascertained because if the &#34;press down&#34; block 6.00 is highlighted, this alters the operator either to a programming error or to a machine error. As illustrated in the flow charts of FIG. 2, should there be a necessity of adding or subtracting flow chart elements in order to obtain proper machine control, it is the interruption which provides for the place in the cycle where the program must be changed. Thus, the program can be changed on-the-fly with the exception that the debugger activates the editor should new flow chart elements be necessary as opposed to the mere changing of flow chart values. Should new flow chart entries be necessary then it is necessary to go through a compile routine in order to test out the new program. 
     Referring to FIG. 9, it can be seen that the type of alphanumeric indication utilized adjacent the flow chart can be easily depicted by a three by five dot matrix system which permits exceptionally small numbers to be placed on the screen adjacent to the flow chart, which numbers are nontheless readable. This provides a unique capability when utilizing a flow chart to have all the information that is normally provided for a flow chart to actually appear on the screen at the flow chart block. Thus, the three by five character alphanumeric generating provides for exceptionally small, yet readable nonclementure to be put at a place where it is expected when doing a flow chart. It is therefore part of the subject invention that the flow charts be labeled by a dot matrix character generating system, which when utilized in combination with the subject process makes it uniquely easy to use, edit and otherwise modify the corresponding program or programs. 
     Referring to FIG. 10, a flow charting work sheet is presented, which is self-explanatory, to aid the user in using the subject flow chart drawing technique. Note that only one flow chart block is permitted per cell and only certain lines can be drawn using this chart. Since in one embodiment the screen is divided up into the same type cells, performing the flow chart on this sheet aids flow chart entry. Source code for the above system is now presented: 
     EDITOR ##SPC1## 
     COMPILER ##SPC2## 
     RUN/DEBUG ##SPC3## 
     GRAPHICS EDITOR 
     (subroutine called from Editor) ##SPC4## 
     DATA STORAGE ROUTINES FOR EDITOR &amp; COMPILER ##SPC5## 
     DATA STORAGE ROUTINES FOR GRAPHICS ##SPC6## 
     SCREEN DRAWING ROUTINES FOR GRAPHICS ##SPC7## 
     GRAPHICS PRINT ROUTINES ##SPC8## 
     EXECUTIVE ##SPC9##