The present invention relates to motion control systems and, more particularly, to a software system that facilitates the creation of motion control commands.
The purpose of a motion control device is to move an object in a desired manner. The basic components of a motion control device are a controller and a mechanical system. The controller controls the mechanical system to move in a desired manner based on an application program comprising a sequence of instructions. While the mechanical system commonly comprises a drive and an electrical motor, other systems can be used to cause movement of an object based on a control signal. Additionally, it is possible for a motion control device to comprise a plurality of drives and motors to allow multi-axis control of the movement of the object.
Motion control devices are typically classified as general motion devices or computer numeric control (CNC) devices. General motion devices are general-purpose machines typically characterized by low cost controllers. CNC devices are relatively specialized, high level systems employing a high cost controller. The term “motion control system” will be used in the following discussion to refer to any system employing one or both of a general motion device and a CNC device. A motion control system is often used in conjunction with a host computer or programmable logic controller (PLC). The host computer or PLC allows the use of a high-level programming language to generate control commands that are passed to the controller. Application programs may be stored at various locations in a motion control system, including directly on the controller of a target device such as a general motion device or CNC device.
The present invention is of particular importance in the context of a motion control system in which multiple programming languages and language variants are used. Companies that manufacture motion control devices are, traditionally, hardware oriented companies that manufacture software dedicated to the hardware that they manufacture. These software products may be referred to as low-level programs. Low-level programs usually work directly with the motion control command language specific to a given motion control device. While such low-level programs offer the programmer substantially complete control over the hardware, these programs are highly hardware dependent.
In contrast to low-level programs, high-level software programs, referred to sometimes as factory automation applications, allow a factory system designer to develop application programs that combine large numbers of input/output (I/O) devices, including motion control devices, into a complex system used to automate a factory floor environment. These factory automation applications allow any number of I/O devices to be used in a given system, as long as these devices are supported by the high-level program. Custom applications, developed by other software developers, cannot be developed to take advantage of the simple motion control functionality offered by the factory automation program.
Additionally, these programs do not allow the programmer a great degree of control over the each motion control device in the system. Each program developed with a factory automation application must run within the context of that application.
The present invention also optionally has more specific application to an environment in which a general motion device is used to implement an application program written for a CNC device. The principles of the present invention are, however, generally applicable to any target motion control device that generates movement based on an application program.
A typical motion control system created for a particular task may use one or more application programs written in any number of different programming languages. The need thus exists for systems and methods that facilitate the generation of motion control commands in a multi-language environment. In addition, because of the relatively low cost of controllers for general motion devices, the need exists for systems and methods that convert programs written for CNC devices into control commands for general motion devices.
A number of software programs currently exist for programming individual motion control devices or for aiding in the development of systems containing a number of motion control devices.
The following is a list of documents disclosing presently commercially available high-level software programs: (a) Software Products For Industrial Automation, iconics 1993; (b) The complete, computer-based automation tool (IGSS), Seven Technologies A/S; (c) OpenBatch Product Brief, PID, Inc.; (d) FIX Product Brochure, Intellution (1994); (e) Paragon TNT Product Brochure, Intec Controls Corp.; (f) WEB 3.0 Product Brochure, Trihedral Engineering Ltd. (1994); and (g) AIMAX-WIN Product Brochure, TA Engineering Co., Inc. The following documents disclose simulation software: (a) ExperTune PID Tuning Software, Gerry Engineering Software; and (b) XANALOG Model NL-SIM Product Brochure, XANALOG.
The following list identifies documents related to low-level programs: (a) Compumotor Digiplan 1993–94 catalog, pages 10–11; (b) Aerotech Motion Control Product Guide, pages 233–34; (c) PMAC Product Catalog, page 43; (d) PC/DSP-Series Motion Controller C Programming Guide, pages 1–3; (e) Oregon Micro Systems Product Guide, page 17; (f) Precision Microcontrol Product Guide.
The Applicants are also aware of a software model referred to as WOSA that has been defined by Microsoft for use in the Windows programming environment. The WOSA model is discussed in the book Inside Windows 95, on pages 348–351. WOSA is also discussed in the paper entitled WOSA Backgrounder: Delivering Enterprise Services to the Windows-based Desktop. The WOSA model isolates application programmers from the complexities of programming to different service providers by providing an API layer that is independent of an underlying hardware or service and an SPI layer that is hardware independent but service dependent. The WOSA model has no relation to motion control devices.
The Applicants are also aware of the common programming practice in which drivers are provided for hardware such as printers or the like; an application program such as a word processor allows a user to select a driver associated with a given printer to allow the application program to print on that given printer.
While this approach does isolate the application programmer from the complexities of programming to each hardware configuration in existence, this approach does not provide the application programmer with the ability to control the hardware in base incremental steps. In the printer example, an application programmer will not be able to control each stepper motor in the printer using the provided printer driver; instead, the printer driver will control a number of stepper motors in the printer in a predetermined sequence as necessary to implement a group of high level commands.
The software driver model currently used for printers and the like is thus not applicable to the development of a sequence of control commands for motion control devices.
The Applicants are additionally aware of application programming interface security schemes that are used in general programming to limit access by high-level programmers to certain programming variables. For example, Microsoft Corporation's Win32 programming environment implements such a security scheme. To the Applicants' knowledge, however, no such security scheme has ever been employed in programming systems designed to generate software for use in motion control systems.
The present invention is a motion control system comprising a source application program, a target device, a parser component, an emitter component, and a program engine component. The source application program is defined by a source language specification. The target device creates motion under control of application programs defined by a target language specification. The parser component contains logic for parsing application programs defined by the source language specification. The emitter component contains logic for translating application programs defined by the source language specification into application programs defined by the target language specification. The program engine component sends at least a portion of a source application program to the parser component to be parsed into a parsed application. The program engine component then sends the parsed application to the emitter component to be translated into a target application defined by the second language specification. The program engine then sends the target application either directly or indirectly to the target device.
Referring initially to
The translation system 20 comprises a program engine 30, a parse engine 32, and an emit engine 34. Generally speaking, the parse engine 32 parses a source application program to obtain a parsed program, and the emit engine 34 converts the parsed program into a target program comprising one or more target commands. The commands may be machine specific but are more likely to conform to one or more hardware independent application programming interfaces (APIs) associated with the motion services module 24. In either case, the target application program conforms to a different language specification than the source application program. The target program is then sent either directly or indirectly to a target device 28.
All logic for translating a source application program to a target application program may be included in one or more parser components 40 and emitter components 42. Preferably, however, the parse engine 32 and emit engine 34 contain logic that is universal to the conversion of all source languages, while the parser components 40 and emitter components 42 contain only the logic required to perform the parsing and converting operations for a particular language. As new languages are developed or adopted, new parser components 40 and emitter components 42 may be developed and “plugged into” the parse engine 32 and the emit engine 34.
The motion services module 24 is or may be conventional and will be described herein only to the extent necessary for a complete understanding of the present invention. The motion services module 24 defines at least one and typically a plurality of APIs 50. As generally described above, the target commands conform to one or more of the APIs 50. For example, a first API 50a represents a standardized API to which hardware manufacturers may conform when designing motion control devices. A second API 50b represents a proprietary API as described, for example, in U.S. Pat. Nos. 5,691,897, 5,867,385, and 6,209,037. As discussed above, the motion services module 24 is not required in all of the scenarios in which the translation system 20 may be used and implemented.
The details of construction and operation of the translation system 20 will now be described in further detail.
The program engine 30 is designed to run any type of ASCII based application program regardless of its internal format. To do this, the program engine 30 uses the parser component 40 and emitter components 42 to understand (and optionally export) any application program written in a supported source language. The motion services module 24 is then used to run any target programs in an online or offline manner. When run in an online mode, motions occur immediately as the program is run; when running in an offline mode, the command file 26 is generated based on whatever target is in use by the motion services module 24.
The program engine 30, parse engine 32, and emit engine 34 work together to run programs in an online, offline or translated manner. Clients of the motion services module 24 can select or pre-configure the mode for which the program engine 30 runs when processing a source program.
The program engine 30 component is the main component used by the client. The program engine 30 coordinates all other components to carry out tasks necessary to process a given application program file. STEP, RS274D or other program files (ASCII or Binary) are example program file formats that may be passed to the program engine 30 for processing.
The parse engine 32 is responsible for managing all specific data parser component 40. A primary purpose of the exemplary parse engine 32 is to provide a universal base of functionality within the parse engine 32. Each specific parser component 40 may be as slim and simple as possible to create. As described above, a separate parse engine 32 and parser component 40 is not mandatory; however if the parse engine 32 is not used, the parser component 40 must then implement all parse functionality, including the universal base functionality that would otherwise be provided in the parse engine 32.
The parser components 40 are responsible for parsing the contents of the data format that the parser component 40 understands. For example, a standard EIA-274 parser component 40 would be expected to parse all standard EIA-274 based programs, whereas GE Fanuc G&M Code specific parser component 40 would be expected to parse a GE Fanuc G&M Code variant of the EIA-274 language (or other G&M code language). On another extreme, a STEP-238 parser component 40 would be expected to parse STEP-238 programs.
Like the parse engine 32, the emit engine 34 manages a set of components with the overall task of outputting a specific program format or directly performing actions that represent the actions requested by each line in a program previously parsed. Like the parse engine 32, the emit engine 34 is not required. If the emit engine 34 is not used, each emitter component 42 is expected to implement all specific emit functionality for a given output type and also to implement all generic functionality normally implemented by the emit engine 34.
Each emitter component 42 is responsible for outputting a specific output format. For example, a GE Fanuc type of emitter component 42 may output a GE Fanuc G&M Code variant. On the other hand, a direct emitter type of emitter component 42 may make direct calls to the XMC Motion Service to carry out the operations requested.
The application programs 22 are each associated with a particular language such as G&M Code files or STEP Code files. G&M Code files are CNC program files based on the EIA-274 ANSI standard format and variants thereof. STEP Code files are STEP program files designed to replace the need for G&M Code Files.
Referring now to
The following steps occur when running a program in the on-line mode. First the source application program or a portion of the program (via a program buffer) is sent to the program engine 30. Next, the program engine 30 directs the parse engine 32 to parse each line of the program (or program buffer). Optionally, a parser component 40 may take over the operations of the parse engine 32. In this case, the program engine 30 would communicate directly to the appropriate parser component 40.
When using the parse engine 32, the parse engine 32 performs all generic operations (such as file management, etc) and passes the data to the parser component 40 in a data buffer for the parser component 40 to parse. During the process, the parser component 40 tokenizes the data and parses out all parameter data into a universal format.
The tokens and universal data format created by the parse engine 32 and parser component 40 are then used by the program engine 30 to direct the XMC Motion Services (via the XMCAPI or OMAC compliant API) to carry out each operation corresponding to each token.
Referring now to
The following steps occur when running a program in the on-line mode. First, the source program or a portion thereof is sent (via a program buffer) to the program engine 30. Next, the program engine 30 directs the parse engine 32 to parse each line of the program (or program buffer). As above, one of the optional parser components 40 may take over the operations of the parse engine 32. In this case, the program engine 30 would communicate directly to the parser component 40.
When the parse engine 32 is used, the parse engine 32 performs all generic operations (such as file management, etc) and passes the data to the parser component 40. The data is stored in a data buffer and parsed by the parser component 40. During the process, the parser component 40 tokenizes the data and parses out all parameter data into a universal format. The tokens and universal data format created by the parse engine 32 and parser component 40 are then passed to the emit engine 34 for processing.
When processing the universal tokens, the emit engine 34 first directs the XMC Motion Services to ‘Define’ a new program or sub-program (for each specified in the universal data). After defining the program (or sub-program) the emit engine 34 calls one of the APIs 50, such as the industry standard first API 50a or the proprietary second API 50b as necessary to perform the actions specified by each token. As described above, the emit component 42 may be used to replace the emit engine 34 and perform specific algorithms (or improvements therein) that the existing emit engine 34 does not perform.
Referring now to
When using the parse engine 32, the parse engine performs all generic operations (such as file management, etc) and passes the data to the parser component 40 in a data buffer for the parser component 40 to parse. During the process, the parser component 40 tokenizes the data and parses out all parameter data into a universal format. The tokens and universal data format created by the parse engine 32 and parser component 40 are then passed to the emit engine 34 for processing.
When processing the universal tokens, the emit engine 34 directs the emitter component 42 to output each token in the format that it supports. The output information is passed back to the emit engine 34. As above, a specific emit component 42 may be used to replace the emit engine 34 and perform specific algorithms (or improvements therein) that the existing emit engine 34 does not perform.
When the specific data format is received from the emitter component 42, the emit engine 34 then outputs the data buffer to the target data format (i.e. a file, data buffer, or other target). Again, a specific emit component 42 may be used to replace the emit engine 34 and perform specific algorithms (or improvements therein) that the existing emit engine 34 does not perform.
Referring now to
In the example above, the program engine 30, parse engine 32 and emit engine 34 are all contained within one module. This organization is not required but optimal for overall performance. The specific parser components 40 and specific emitter components 42 will more than likely be housed in separate binary modules to allow third party support for such modules. Again, the location of each component can vary as the program engine 30 can also implement and house specific parser component 40 and emitter components within the main program module. As shown with both the parser engine 32 and emit engine 34 in the diagram above, all specific parser components 40 and emitter components 42 preferably expose the IXMCDirect interface to allow seamless communications between all other modules.
The IXMCDirect interface is used for most communications between all components making up the program engine 30. The IXMCDirect interface comprises the following methods as specified in the standard OLE/COM IDL format:
A more detailed description of each method implemented by the object is described below.
IXMCDirect::GetProperty:
The IXMCDirect::GetProperty method is used to query the property corresponding to the property name ‘pszPropName’. Each component defines the properties that it supports.
IXMCDirect::SetProperty
The IXMCDirect::SetProperty method is used to set a property in the component corresponding to the ‘pszPropName’ property. For the set of properties supported by the component, see the specific component description.
IXMCDirect::InvokeMethod
The IXMCDirect::InvokeMethod method is used to call a specific method implemented by the motion services module 24. For more information on the methods supported, see the description of the specific component.
The following discussion describes the specific methods and properties that each component supports.
The program engine 30 component exposes the following properties and methods via the IXMCDirect interface described above.
Property Summary
No properties are specified for this component at this time.
Methods Summary
The following methods are implemented by the program engine 30 component:
The IDX_XMC_PROGENG_SetComponents method is used to set specific parser component 40 and emitter components used to process both input and output data.
IDX_XMC_PROGENG_SetInputPath
The IDX_XMC_PROGENG_SetInputPath method is used to set the root path for all programs. Unless a program name already has a path pre-pended to it, the path specified by this method is used to reference all programs and sub-programs.
IDX_XMC_PROGENG_SetInputProgram
The IDX_XMC_PROGENG_SetInputProgram method is used to set the active program that the program engine 30 is to process.
IDX_XMC_PROGENG_SetInputProgramBuffer
The IDX_XMC_PROGENG_SetInputProgramBuffer method is used to set the active program buffer that the program engine 30 is to process. Any previous calls to SetInputProgram are overridden after making this call.
IDX_XMC_PROGENG_SetOutputPath
The IDX_XMC_PROGENG_SetOutputPath method is used to set the root path for all output programs. Unless a program name already has a path pre-pended to it, the path specified by this method is used to reference all programs and sub-programs.
IDX_XMC_PROGENG_SetOutputProgram
The IDX_XMC_PROGENG_SetOutputProgram method is used to set the active output program that the program engine 30 is to create.
IDX_XMC_PROGENG_SetOutputProgramBuffer
The IDX_XMC_PROGENG_SetOutputProgramBuffer method is used to set the active output program buffer that the program engine 30 is to process. Any previous calls to SetOutputProgram are overridden after making this call.
IDX_XMC_PROGENG_SetBreak
The IDX_XMC_PROGENG_SetBreak method is used to set a break-point in either the main program or a sub-program used by the main program.
IDX_XMC_PROGENG_GetInputProgram
The IDX_XMC_PROGENG_GetInputProgram method is used to retrieve the current program and sub-program (if available) names. If a buffer is used instead of a program, a value of “internal buffer” is returned.
IDX_XMC_PROGENG_GetOutputProgram
The IDX_XMC_PROGENG_GetOutputProgram method is used to retrieve the current output program and sub-program (if available) names. If a buffer is used instead of a program, a value of “internal buffer” is returned.
IDX_XMC_PROGENG_GetState
The IDX_XMC_PROGENG_GetState method is used to retrieve the current state of the program engine 30.
IDX_XMC_PROGENG_Run
The IDX_XMC_PROGENG_Run method is used to run the active program currently set in the program engine 30.
IDX_XMC_PROGENG_Reset
The IDX_XMC_PROGENG_Run method is used to stop running a program and reset the current position in the active program to the beginning of the program.
IDX_XMC_PROGENG_RemoveBreak
The IDX_XMC_PROGENG_RemoveBreak method is used to remove a break-point in either the main program or a sub-program used by the main program.
IDX_XMC_PROGENG_RemoveAllBreaks
The IDX_XMC_PROGENG_RemoveAllBreaks method is used to remove all break-points previously set.
The parser engine component 32 exposes the following properties and methods via the IXMCDirect interface described above.
Property Summary
No properties are specified for this component at this time.
Methods Summary
The following methods are implemented by the parser engine component:
The IDX_XMC_PARSEENG_SetInputRoot method is used to set the root path for all programs. Unless a program name already has a path pre-pended to it, the path specified by this method is used to reference all programs and sub-programs.
IDX_XMC_PARSEENG_SetInput
The IDX_XMC_PARSEENG_SetInput method is used to set the active program, program buffer, or other program source that the parse engine 32 is to process.
IDX_XMC_PARSEENG_GetInput
The IDX_XMC_PARSEENG_GetInput method is used to retrieve the current program or sub-program (if available) name.
IDX_XMC_PARSEENG_Step
The IDX_XMC_PARSEENG_Step method is used to step to the next line in the active program currently set in the parse engine 32.
IDX_XMC_PARSEENG_Reset
The IDX_XMC PARSEENG_Reset method is used to reset the current position in the active program to the beginning of the program.
IDX_XMC_PARSEENG_ParseLine
The IDX_XMC_PARSEENG_ParseLine method is used to parse the current line into a universal token and associated parameters.
The XMC emit engine component 34 exposes the following properties and methods via the IXMCDirect interface described above.
Property Summary
No properties are specified for this component at this time.
Methods Summary
The following methods are implemented by the emit engine 34 component:
The IDX_XMC_EMITENG_SetOutputRoot method is used to set the root path for all programs. Unless a program name already has a path pre-pended to it, the path specified by this method is used to reference all programs and sub-programs.
IDX_XMC_EMITENG_SetOutput
The IDX_XMC_EMITENG_SetOutput method is used to set the active output program, program buffer, or other program source that the emit engine 34 outputs all program data to.
IDX_XMC_EMITENG_GetOutput
The IDX_XMC_EMITENG_GetOutput method is used to retrieve the current program or sub-program (if available) name.
IDX_XMC_EMITENG_EmitLine
The IDX_XMC_EMITENG_EmitLine method is used to emit the current line based on a universal token set and associated parameters.
Each parser component component 40 exposes the following properties and methods via the IXMCDirect interface described above.
Property Summary
No properties are specified for this component at this time.
Methods Summary
The following methods are implemented by each parser component 40 component:
The IDX_XMC_PARSEENG_ParseLine method is used to parse the current line into a universal token and associated parameters.
Each emitter component 42 exposes the following properties and methods via the IXMCDirect interface described above.
Property Summary
No properties are specified for this component at this time.
Methods Summary
The following methods are implemented by each emitter component 42:
The IDX_XMC_EMITENG_EmitLine method is used to emit the current line based on a universal token set and associated parameters.
The following discussion contains the definitions of all special types used by the methods and properties of each component making up the program engine 30.
XMC_PARAM_DATA Structure
All methods exposed by each component in the program engine 30 system use the standard XMC parameters set to describe data used to set and query properties as well as invoke methods. The standard parameters are in the following format:
pObj->InvokeMethod(LPXMC_PARAM_DATA rgData, DWORD dwcount); Each element in the rgData array corresponds to a parameter, with the first element in the array corresponding to the first parameter.
The XMC_PARAM_DATA structure can contain either a numerical or a string value and is defined as follows:
The ‘adt’ member of the XMC_PARAM_DATA structure describes the data contained within the XMC_PARAM_DATA structure. The values are described below:
When querying and setting boolean TRUE/FALSE values, any non-zero value is considered TRUE, whereas a zero value is considered FALSE.
The following discussion contains examples of the three methods that the program engine 30 processes program data: online, offline and translation.
All examples shown in this section (including the online, offline and translation examples) use the same input data. For this reason, the first step of translating the input data to the intermediate universal tokenized data is presented in this section. Each following example, builds on the tokenized data presented in this section for the main difference in each is in how the output data and/or actions are produced.
The following source code is used as the G&M Code ASCII text file input to the program engine 30.
When processing the input data, the following is an example of the intermediate universal tokens (and associated parameters) that represent the program after it is parsed.
The following pseudo code demonstrates how the program engine 30 is used to convert the input data file shown above into a the intermediate universal tokenized data and associated parameters above.
In the online processing example, a standard RS274D G&M Code ASCII text file is used as input and run using the XMC Motion Services. The same input data presented in the ‘Preparation Example’ is used for this example and, for that reason, this example will use the same intermediate universal tokenized data shown above.
The following pseudo code represents the actions output (i.e. the motions that occur) when running the input file with the program engine 30.
When processing the input file, the following communications occur between the program engine 30 and its associated components.
The offline example is similar to the on-line example. The major difference between these examples is that, when the program name token is received (TOK_PROGNAME), the program engine 30 directs the XMC Motion Services to ‘Define’ a program using the given program name. In addition, just after processing the final token, the program engine 30 directs the XMC Motion Services to ‘End’ the program thus creating a new program on the current motion target used by the XMC Motion Services. For more information on defining and ending motion programs, see the XMC C++ Reference documentation contained within the XMC for Visual Studio product.
When running in translation mode, the universal tokens and associated parameters are passed to the emit engine 34 that uses the tokens to create a new program output based on the target emitter used. The following pseudo code demonstrates how the program engine 30 is used to convert the intermediate universal tokenized data and associated parameters above into a newly formatted output program file.
Using the universal tokens, the emitter converts the tokens into the appropriate output corresponding to the format supported by the emitter. For example, in the example above, the Okuma emitter would output a MIN file in the Okuma variant of the G-Code language.
The translator system 20 described above is designed to translate one type of program format to another type of program format where a program format can be either an off-line program format or an online format where a driver is called immediately as the program is translated. In another example a one-program format may be translated into a universal ‘meta’ format that is hardware independent yet supported by the motion services module 24. In particular, when the meta format is run the format is interpreted into direct calls into the motion services module which are then run on the current driver.
Referring now to
The CNC proxy system 120 is used to map CNC functionality onto a general motion control driver 122. When used with the translator system 20 and the motion services module 24, the CNC proxy system 120 supports translated programs that use CNC functionality. For example, feedrate override, spindlerate, etc are functions that are not normally supported by general motion controllers. To allow the translator system 20 to run on a motion services module 24 connected to a general motion system, the CNC proxy system 120 handles the required mapping between CNC functionality and the general motion functionality provided by a general motion controller functioning as the target device 28.
As shown in
The CNC proxy driver component 130 is the main module used to make the link between a CNC system and a general motion controller. CNC functions are very specific to the types of operations that occur on a CNC machine, and a General Motion Controller applies to a very broad set of applications. The CNC proxy driver component 130 comprises a set of special algorithms and mapping to allow the use of a general motion controller to implement a CNC based solution.
The emulation driver component 134 is an optional component used to emulate driver operations and defines a broader set of motion functionality that, when combined with the native motion driver, provides the client application 22 with access to a richer set of motion functionality.
The bridge driver component 132 is an optional component used to handle all common driver functionality. The bridge driver component 132 thus makes each target driver 122 very simple and focused primarily on performing the motion operations implemented by the target device 28 or general motion controller (including software, hardware and even remote or network based motion controllers).
The driver component 122 is the native motion control driver that embodies the native motion controller language (or API calls) needed to control the target motion control system.
The exemplary CNC proxy driver component 130 is a module that implements the XMCCNC API function calls and uses internal algorithms to map those CNC operations to the functionality provided by the target driver 122 and/or the emulation driver 134. For example, the feedrate of a tool-head may be calculated using the actual velocities along three axes in three space. When queried, the XMC CNC Proxy Driver would first query the target driver for the actual velocity along the three axes, then calculate the feedrate and return the calculated value.
The driver extension component 136 is an optional component that allows third parties to expand the functionality of the CNC proxy driver component 130 with custom algorithms.
The stream component 138 is an optional component that encapsulates how a driver 122 communicates with the target motion hardware. Optionally, the driver component 122 may handle all communication with the target motion system, therefore eliminating the need for the stream component 138.
The CNC proxy system 120 is used in several common scenarios. When the proxy system 120 is first used, it must be initialized. Once initialized, CNC operations (functions or properties) are performed on the overall motion system. The following sections describe these scenarios in detail.
Referring now to
First, the motion services module 24 queries the target driver 122 for information describing the Service Provider Interface (SPI) support that the driver 122 implements. When queried, the driver 122 returns a table of information describing whether each function in the SPI is implemented, should be emulated, or is not supported.
Next, the motion services module 24 builds an internal Service Provider Interface table that contains pointers to all functions making up the SPI. Depending on how the target driver implements each SPI, a pointer in the table either points to the SPI function implemented by the Driver (when the driver implements the function) or the Emulation component (when the driver does not implement or requests emulation of the function).
Next, the motion services module 24 passes the SPI function table to the CNC proxy driver component 130; the CNC proxy driver component 130 later uses the SPI function table when mapping the CNC functions and properties to the general motion functionality.
Next the motion services module 24 initializes the bridge driver 132 and passes a pointer to the CNC proxy driver component 130 a general proxy. And finally, any existing driver extension modules 136 are created and registered with the CNC proxy driver component 130.
Once initialized, the entire system is ready to perform CNC operations as shown in
The following steps occur when performing a CNC operation on the XMC system. When the client application 22 requests any CNC type operations from the motion services module 24, the motion services module 24 in-turn directs the calls to the CNC proxy driver component 130. Upon receiving the request, the CNC proxy driver component 130 uses the SPI function table, which points to either emulation component 134 or the SPI functions implemented by the driver component 122, to perform general motion operations needed to carry out the requested CNC operation.
If the SPI function called is implemented by the emulation component 134, the emulation component 134 in-turn uses the target driver 122 to carry out the general motion operation or operations that emulate the CNC operation.
When requested to perform general motion operations, the driver component 122 performs any language translations (or direct memory access operations, or API calls) necessary to perform the general motion operation. If used, the stream component 138 allows communication with the target motion system. If the stream component 138 is not used, the driver component 122 may optionally directly communicate with the target motion system 28.
In the event that the CNC proxy driver component 130 does not implement the CNC operation requested, the request is routed to any registered driver extension modules 136 to give them a chance to perform the requested operation. The driver extension modules 136 are normally used when a third party implements additional CNC functionality not supported by the current CNC operations. Upon receiving the request, the driver extension component 136 can optionally use the stream component 138 to communicate with the target motion control system. As another alternative, the driver extension 136 may also talk directly to the target motion system 28.
All driver level modules other than the General Driver Proxy, are required to implement the IXMC_DrvCore_Direct interface. Most communications between drivers occur through this interface.
The IXMC_DrvCore_Direct interface is used for most communications between all driver level components. The following methods make up this interface (as specified in the standard OLE/COM IDL format):
Method Summary
The IXMC_DrvCore_Direct interface is made up of the following functions.
A more detailed description of each method implemented by the object is described below.
IXMC_DrvCore_Direct::SetTargetStream
The IXMC_DrvCore_Driver::InvokeMethod method is used to run a method on the component implementing the method.
The following discussion describes special algorithms used when mapping the CNC functionality to the general motion driver used to eventually implement portions of the CNC functionality.
Function mapping is an important concept used to make the link between the CNC proxy driver component 130 and the target motion control driver and emulation modules. When making this link, the motion services component 24 passes to the CNC proxy driver component 130 a function table with entries that correspond to each of the functions in the general motion SPI. This table is used to access each general motion function, which are then used by the implementation of the CNC operations.
Referring now to
The XMC_SPI_FNTABLE_ENTRY structure defines each entry in the SPI table passed to the CNC proxy driver component 130.
When first initialized, the CNC proxy driver component 130 is sent the SPI table so that this table can be used later when running CNC type operations. To initialize the CNC proxy driver component 130, the table is passed to the CNC Proxy by the Motion component through an array of XMC_PARAM_DATA elements. The following source code sample demonstrates pseudo code of the initialization process.
Once the CNC proxy driver component 130 is initialized, it will hold a copy of the full SPI Table containing all SPI functions implemented by either the target Driver or Emulation component.
Once the CNC proxy driver component 130 is initialized it is ready to perform CNC operations. When performing CNC operations, the CNC proxy driver component 130 uses the functions pointed to by the entries of the SPI Table to complete the CNC operations requested. The following example, demonstrates how to call methods contained within the XMC SPI function table.
The following discussion contains the definitions of all special types used by the methods and properties of each component making up the program engine 30 system.
All methods exposed by each component in the system 120 use the standard XMC parameters set to describe data used to set and query properties as well as invoke methods. The standard parameters are in the following format: pObj->InvokeMethod (LPXMC_PARAM_DATA rg Data, DWORD dwCount);
Each element in the rgData array corresponds to a parameter, with the first element in the array corresponding to the first parameter.
The XMC_PARAM_DATA structure can contain either a numerical or a string value and is defined as follows:
The ‘adt’ member of the XMC_PARAM_DATA structure describes the data contained within the XMC_PARAM_DATA structure. The values are described below:
When querying and setting boolean TRUE/FALSE values, any non-zero value is considered TRUE, whereas a zero value is considered FALSE.
This application claims priority of U.S. Provisional Application Ser. No. 60/352,302 filed Jan. 28, 2002, which is incorporated herein by reference, and U.S. Provisional Application Ser. No. 60/353,366 filed Jan. 31, 2002, which is also incorporated herein by reference.
Number | Name | Date | Kind |
---|---|---|---|
4159417 | Rubincam | Jun 1979 | A |
4199814 | Rapp et al. | Apr 1980 | A |
4418381 | Molusis et al. | Nov 1983 | A |
4531182 | Hyatt | Jul 1985 | A |
4688195 | Thompson et al. | Aug 1987 | A |
4713808 | Gaskill | Dec 1987 | A |
4767334 | Thorne et al. | Aug 1988 | A |
4769771 | Lippmann et al. | Sep 1988 | A |
4782444 | Munshi et al. | Nov 1988 | A |
4800521 | Carter et al. | Jan 1989 | A |
4809335 | Rumsey | Feb 1989 | A |
4815011 | Mizuno et al. | Mar 1989 | A |
4840602 | Rose | Jun 1989 | A |
4846693 | Baer | Jul 1989 | A |
4855725 | Fernandez | Aug 1989 | A |
4857030 | Rose | Aug 1989 | A |
4887966 | Gellerman | Dec 1989 | A |
4897835 | Gaskill | Jan 1990 | A |
4912650 | Tanaka et al. | Mar 1990 | A |
4923428 | Curran | May 1990 | A |
4937737 | Schwane et al. | Jun 1990 | A |
4987537 | Kawata | Jan 1991 | A |
5005135 | Morser et al. | Apr 1991 | A |
5020021 | Kaji et al. | May 1991 | A |
5095445 | Sekiguchi | Mar 1992 | A |
5120065 | Driscoll et al. | Jun 1992 | A |
5126932 | Wolfson et al. | Jun 1992 | A |
5168441 | Onarheim et al. | Dec 1992 | A |
5175684 | Chong | Dec 1992 | A |
5175817 | Adams et al. | Dec 1992 | A |
5175856 | Van Dyke et al. | Dec 1992 | A |
5230049 | Chang et al. | Jul 1993 | A |
5245703 | Hubert | Sep 1993 | A |
5247650 | Judd et al. | Sep 1993 | A |
5377258 | Bro | Dec 1994 | A |
5390304 | Leach et al. | Feb 1995 | A |
5390330 | Talati | Feb 1995 | A |
5392207 | Wilson et al. | Feb 1995 | A |
5402518 | Lowery | Mar 1995 | A |
5412757 | Endo | May 1995 | A |
5438529 | Rosenberg et al. | Aug 1995 | A |
5450079 | Dunaway | Sep 1995 | A |
5453933 | Wright et al. | Sep 1995 | A |
5465215 | Strickland et al. | Nov 1995 | A |
5491813 | Bondy et al. | Feb 1996 | A |
5493281 | Owens | Feb 1996 | A |
5511147 | Abdel-Malek | Apr 1996 | A |
5541838 | Koyama et al. | Jul 1996 | A |
5576727 | Rosenberg et al. | Nov 1996 | A |
5577253 | Blickstein | Nov 1996 | A |
5596994 | Bro | Jan 1997 | A |
5600373 | Chui et al. | Feb 1997 | A |
5604843 | Shaw et al. | Feb 1997 | A |
5607336 | Lebensfeld et al. | Mar 1997 | A |
5608894 | Kawakami et al. | Mar 1997 | A |
5613117 | Davidson et al. | Mar 1997 | A |
5617528 | Stechmann et al. | Apr 1997 | A |
5623582 | Rosenberg | Apr 1997 | A |
5625821 | Record et al. | Apr 1997 | A |
5636994 | Tong | Jun 1997 | A |
5652866 | Aldred et al. | Jul 1997 | A |
5655945 | Jani | Aug 1997 | A |
5659753 | Murphy et al. | Aug 1997 | A |
5666161 | Kohiyama et al. | Sep 1997 | A |
5670992 | Yasuhara et al. | Sep 1997 | A |
5691897 | Brown et al. | Nov 1997 | A |
5691898 | Rosenberg et al. | Nov 1997 | A |
5701140 | Rosenberg et al. | Dec 1997 | A |
5707289 | Watanabe et al. | Jan 1998 | A |
5724074 | Chainani et al. | Mar 1998 | A |
5733131 | Park | Mar 1998 | A |
5734373 | Rosenberg et al. | Mar 1998 | A |
5737523 | Callaghan et al. | Apr 1998 | A |
5739811 | Rosenberg et al. | Apr 1998 | A |
5746602 | Kikinis | May 1998 | A |
5752880 | Gabai et al. | May 1998 | A |
5754855 | Miller et al. | May 1998 | A |
5764155 | Kertesz et al. | Jun 1998 | A |
5790178 | Shibata et al. | Aug 1998 | A |
5800268 | Molnick | Sep 1998 | A |
5801946 | Nissen et al. | Sep 1998 | A |
5805785 | Dias et al. | Sep 1998 | A |
5818537 | Enokida et al. | Oct 1998 | A |
5821920 | Rosenberg et al. | Oct 1998 | A |
5821987 | Larson | Oct 1998 | A |
5822207 | Hazama et al. | Oct 1998 | A |
5825308 | Rosenberg | Oct 1998 | A |
5828575 | Sakai | Oct 1998 | A |
5836014 | Faiman, Jr. | Nov 1998 | A |
5846132 | Junkin | Dec 1998 | A |
5848415 | Guck | Dec 1998 | A |
5852441 | Nakajima et al. | Dec 1998 | A |
5855483 | Collins et al. | Jan 1999 | A |
5867385 | Brown et al. | Feb 1999 | A |
5873765 | Rifkin et al. | Feb 1999 | A |
5889670 | Schuler et al. | Mar 1999 | A |
5889672 | Schuler et al. | Mar 1999 | A |
5890963 | Yen | Apr 1999 | A |
5907704 | Gudmundson et al. | May 1999 | A |
5907831 | Lotvin et al. | May 1999 | A |
5914876 | Hirai | Jun 1999 | A |
5920476 | Hennessey et al. | Jul 1999 | A |
5924013 | Guido et al. | Jul 1999 | A |
5956484 | Rosenberg et al. | Sep 1999 | A |
5959613 | Rosenberg et al. | Sep 1999 | A |
5960085 | De La Huerga | Sep 1999 | A |
5977951 | Danieli et al. | Nov 1999 | A |
6012961 | Sharpe et al. | Jan 2000 | A |
6020876 | Rosenberg et al. | Feb 2000 | A |
6028593 | Rosenberg et al. | Feb 2000 | A |
6031973 | Gomi et al. | Feb 2000 | A |
6038603 | Joseph | Mar 2000 | A |
6046727 | Rosenberg et al. | Apr 2000 | A |
6057828 | Rosenberg et al. | May 2000 | A |
6061004 | Rosenberg | May 2000 | A |
6070010 | Keenleyside et al. | May 2000 | A |
6078308 | Rosenberg et al. | Jun 2000 | A |
6078968 | Lo et al. | Jun 2000 | A |
6083104 | Choi | Jul 2000 | A |
6090156 | MacLeod | Jul 2000 | A |
6100874 | Schena et al. | Aug 2000 | A |
6101425 | Govindaraj et al. | Aug 2000 | A |
6101530 | Rosenberg et al. | Aug 2000 | A |
6104158 | Jacobus et al. | Aug 2000 | A |
6125385 | Wies et al. | Sep 2000 | A |
6128006 | Rosenberg et al. | Oct 2000 | A |
6131097 | Peurach et al. | Oct 2000 | A |
6139177 | Venkatraman et al. | Oct 2000 | A |
6144895 | Govindaraj et al. | Nov 2000 | A |
6147647 | Tassoudji et al. | Nov 2000 | A |
6161126 | Wies et al. | Dec 2000 | A |
6166723 | Schena et al. | Dec 2000 | A |
6169540 | Rosenberg et al. | Jan 2001 | B1 |
6173316 | De Boor et al. | Jan 2001 | B1 |
6191774 | Schena et al. | Feb 2001 | B1 |
6195592 | Schuler et al. | Feb 2001 | B1 |
6209037 | Brown et al. | Mar 2001 | B1 |
6216173 | Jones et al. | Apr 2001 | B1 |
6219032 | Rosenberg et al. | Apr 2001 | B1 |
6219033 | Rosenberg et al. | Apr 2001 | B1 |
6232891 | Rosenberg | May 2001 | B1 |
6233545 | Datig | May 2001 | B1 |
6243078 | Rosenberg | Jun 2001 | B1 |
6246390 | Rosenberg | Jun 2001 | B1 |
6252579 | Rosenberg et al. | Jun 2001 | B1 |
6252853 | Ohno | Jun 2001 | B1 |
6259382 | Rosenberg | Jul 2001 | B1 |
6271833 | Rosenberg et al. | Aug 2001 | B1 |
6278439 | Rosenberg et al. | Aug 2001 | B1 |
6285351 | Chang et al. | Sep 2001 | B1 |
6286133 | Hopkins | Sep 2001 | B1 |
6288705 | Rosenberg et al. | Sep 2001 | B1 |
6288716 | Humpleman | Sep 2001 | B1 |
6290565 | Galyean, III et al. | Sep 2001 | B1 |
6292170 | Chang et al. | Sep 2001 | B1 |
6292174 | Mallett et al. | Sep 2001 | B1 |
6292712 | Bullen | Sep 2001 | B1 |
6292714 | Okabayashi | Sep 2001 | B1 |
6295530 | Ritchie et al. | Sep 2001 | B1 |
6300936 | Braun et al. | Oct 2001 | B1 |
6300937 | Rosenberg | Oct 2001 | B1 |
6301634 | Gomi et al. | Oct 2001 | B1 |
6304091 | Shahoian et al. | Oct 2001 | B1 |
6305011 | Safonov | Oct 2001 | B1 |
6309275 | Fong et al. | Oct 2001 | B1 |
6310605 | Rosenberg | Oct 2001 | B1 |
6317116 | Rosenberg et al. | Nov 2001 | B1 |
6317871 | Andrews et al. | Nov 2001 | B1 |
6343349 | Braun et al. | Jan 2002 | B1 |
6353850 | Wies et al. | Mar 2002 | B1 |
6366272 | Rosenberg et al. | Apr 2002 | B1 |
6366273 | Rosenberg et al. | Apr 2002 | B1 |
6374255 | Peurach et al. | Apr 2002 | B1 |
6400996 | Hoffberg et al. | Jun 2002 | B1 |
6401005 | Schwarz et al. | Jun 2002 | B1 |
6425118 | Molloy et al. | Jul 2002 | B1 |
6442451 | Lapham | Aug 2002 | B1 |
6463404 | Appleby | Oct 2002 | B1 |
6470377 | Sevcik et al. | Oct 2002 | B1 |
6480896 | Brown et al. | Nov 2002 | B1 |
6497606 | Fong et al. | Dec 2002 | B1 |
6519594 | Li | Feb 2003 | B1 |
6519646 | Gupta et al. | Feb 2003 | B1 |
6523171 | Dupuy et al. | Feb 2003 | B1 |
6528963 | Hong | Mar 2003 | B1 |
6571141 | Brown | May 2003 | B1 |
6652378 | Cannon et al. | Nov 2003 | B1 |
6658627 | Gallup et al. | Dec 2003 | B1 |
6662361 | Jackson | Dec 2003 | B1 |
6665688 | Callahan et al. | Dec 2003 | B1 |
6678713 | Mason et al. | Jan 2004 | B1 |
6778949 | Duan et al. | Aug 2004 | B1 |
20010020944 | Brown et al. | Sep 2001 | A1 |
20010029443 | Miyahira | Oct 2001 | A1 |
20010032268 | Brown et al. | Oct 2001 | A1 |
20010037492 | Holzmann | Nov 2001 | A1 |
20020052939 | Lee | May 2002 | A1 |
20020165627 | Brown et al. | Nov 2002 | A1 |
20020165708 | Kumhyr | Nov 2002 | A1 |
20020177453 | Chen et al. | Nov 2002 | A1 |
20030033150 | Balan et al. | Feb 2003 | A1 |
20030061023 | Menezes et al. | Mar 2003 | A1 |
20040025150 | Heishi et al. | Feb 2004 | A1 |
20040044794 | Srinivasan | Mar 2004 | A1 |
Number | Date | Country |
---|---|---|
0442676 | Aug 1991 | EP |
0 281 427 | Aug 1992 | EP |
0508912 | Oct 1992 | EP |
0 583 908 | Feb 1994 | EP |
821522 | Jan 1998 | EP |
0275826 | Jul 1998 | EP |
2 224 896 | Dec 1991 | GB |
59 228473 | Jun 1983 | JP |
08161335 | Jun 1996 | JP |
2000020114 | Jan 2000 | JP |
WO 9211731 | Jul 1992 | WO |
WO 9308654 | Apr 1993 | WO |
WO 9507504 | Mar 1995 | WO |
Number | Date | Country | |
---|---|---|---|
60352302 | Jan 2002 | US | |
60353366 | Jan 2002 | US |