The present invention relates to manufacturing environments, and deals more particularly with using content and quality level to determine manufacturing routings.
A manufactured product may be comprised of a number of sub-products, which may alternatively be referred to simply as parts. A computer, for example, typically comprises various types of memory and storage hardware. In turn, the memory and/or storage hardware may be comprised of a number of smaller parts. A laptop computer may contain on the order of 30 to 40 parts, for example, whereas a large computer server may contain on the order of 30,000 to 40,000 parts. The term “assembly” is used herein to refer to a collection of more than one part. The term “sub-product” is used herein to refer to a part or assembly that is integrated with other parts or assemblies to build a product. For ease of reference, the term “commodity” is used herein to refer generally to parts and assemblies.
The present invention is directed to dynamically generating a routing specification for a plurality of commodities to be processed together. In one aspect, an embodiment of the present invention comprises: for each of the commodities, determining a current processing status thereof and using the determined current processing status and a commodity identifier associated with that one of the commodities to locate an associated routing definition, the associated routing definition specifying at least one process to be performed on that one of the commodities; optimizing a collection comprising the specification of the at least process from each of the associated routing definitions; and providing the optimized collection as the dynamically-generated routing specification for the plurality of commodities.
The commodities may comprise, for example, at least one part and/or at least one assembly comprising a plurality of parts. The current processing status may indicate, for each of the commodities, any processes that have already been conducted on that commodity. The optimization may comprise optimizing a frequency with which an associated routing definition is to be performed and/or argument values specified in an argument list for parameterizing an associated routing definition.
Embodiments of these and other aspects of the present invention may be provided as method, systems, and/or computer program products. It should be noted that the foregoing is a summary and thus contains, by necessity, simplifications, generalizations, and omissions of detail; consequently, those skilled in the art will appreciate that the summary is illustrative only and is not intended to be in any way limiting. Other aspects, inventive features, and advantages of the present invention, as defined by the appended claims, will become apparent in the non-limiting detailed description set forth below.
The present invention will be described with reference to the following drawings, in which like reference numbers denote the same element throughout.
Embodiments of the present invention are directed toward dynamically generating manufacturing routings in a manufacturing environment, using content and quality level information. The content and quality level information may pertain to multiple, disparate commodities which are to be processed together, and some of those commodities may have undergone various processes. (References herein to manufacturing are to be construed as also including assembly.)
An example of the various processes that may be performed on commodities during manufacturing of an end product is testing. For example, testing may be conducted on the individual parts, and when parts are assembled into an assembly that will subsequently be used in a product, additional testing may be conducted on that assembly. An assembly might be installed into yet another assembly, and further tests may be conducted on that resulting assembly. A varying amount of time may pass before a particular commodity is taken from inventory for installation into a product. Some of these commodities may be returned to inventory for various reasons. An order for a product might be changed after the building of the product has already started, for example, requiring one commodity to be removed and another to be installed. Or, interim testing may indicate problems with an already-installed commodity, necessitating removal and replacement. Typically, when an assembly is removed, it is separated into its individual parts and restocked for later use.
In systems known to the present inventors, no consideration is made during assembly of a product for commodities that may have already undergone various processing, such as testing that was performed on the commodity when it was previously installed in another product. Instead, known systems repeat the processing that is called for at a particular point in the assembly process without regard to whether some, or all, of that processing is redundant with the previously-performed processing. For example, a particular part “A” may have been tested using a particular testing procedure “X” for 30 minutes when part A was installed into assembly “A1”. Suppose that assembly A1 is installed into another assembly “A2”. If the manufacturing process calls for testing assembly A2 using the testing procedure X for 60 minutes, known systems make no consideration for the 30 minutes of testing that has already been performed on part A. Similarly, if part A is removed from assembly A1 after the 30 minutes of testing and installed into another assembly “B1” that also needs 30 minutes of testing procedure X, no consideration is given to the already-performed testing on part A. In either scenario, this leads to inefficient use of manufacturing time and resources.
Known systems also fail to consider differing requirements of commodities processed as a group during manufacturing. One commodity “C” might need 3 hours of a particular testing procedure “Y”, for example, while a different commodity “D” requires only 1 hour of that procedure Y. And, commodity D might also require a subsequent testing procedure “Z” whereas commodity C does not require testing procedure Z. Due to space and/or financial constraints, however, commodities are often combined together into groups for undergoing processes such as testing. According to common industry practice, a static routing is created where the processing requirements for a group of disparate commodities are determined by taking a union of the processing requirements of each commodity in the group. While this allows for combined processing, it is not optimized. Consider a simple example where a group comprises 100 of the above-described commodity C and 12 of the above-described commodity D. Using this known approach, the group would undergo a total of 4 hours of testing procedure Y (i.e., 3 hours according to the requirements of the commodity C and 1 hour according to the requirements of the commodity D) and all of these parts would then undergo the subsequent testing procedure Z (even though this test is not required for the commodity C). As demonstrated by this simple example, this known approach leads to inefficient use of manufacturing time and resources.
The present inventors know of no solution that optimizes processing by considering previously-performed processing or that optimizes processing requirements in a group of multiple, disparate commodities. An embodiment of the present invention, by contrast, addresses these issues.
The current industry approach determines the further processing for the collection of commodities using static routing information for the individual commodities, and generates a combined static routing for the collection. See Block 115. A “routing”, “routing definition”, or “routing list”, as those terms are used herein, refers to a specification of the operations or steps to be performed as a commodity or group of commodities is routed through the manufacturing process. The static routing information used at Block 115 may come from a material requirements planning (“MRP”) system, from an application program, and so forth. In
The sample table 110 is indexed by a commodity identifier; see column 111. Each entry in the sample table 110 also contains a routing list; see column 112. This routing list specifies a list of the processing that is to be performed on instances of this commodity. For example, suppose that commodity identifier “C1” refers to the disk drives shown at reference number 100a and that commodity identifier “C2” refers to the memory elements shown at reference number 100b. The first row of sample table 110 indicates that the 3 instances of commodity C1 are each to undergo a test “R1” followed by a test “R2”. The second row of sample table 110 indicates that the 2 instances of commodity C2 are each to undergo the same test R1 followed by a test “R3”.
Table 120 shows a sample output of Block 115, namely a combined static routing for the collection of components C1 and C2. In this sample table 120, the left column 121 identifies the grouped commodities and the right column 122 lists the processing that is to be performed on the commodities in this group. For the sample data shown in
The combined static routings are then sent to manufacturing (Block 125), where the specified processes are carried out (Block 130) on the commodities.
In some known systems, quality level data is recorded, as shown at 135, indicating the processing that has been performed at Block 130 for each of the commodities. This quality level data may be recorded at a serial number level within each part number or assembly number, thereby uniquely identifying the processing that has been performed on a particular commodity (i.e., on an individual part or assembly). Commonly-assigned U.S. patent application Ser. No. 11/612,981, which is titled “Method and System for Associating Objects in a Manufacturing Process” and which is referred to hereinafter as “the associations application”, discloses techniques which may be used for this quality level data recording.
The current industry approach shown in
An embodiment of the present invention addresses the above-described inefficiencies of known systems and current industry practice, dynamically determining routings using quality information that indicates previously-performed processing for each commodity and considering requirements of possibly-disparate commodities that have been grouped. (Note, however, that an alternative embodiment of the present invention may address a single one of these two aspects, and such alternative embodiment is deemed to be within the scope of the present invention.)
Leveraging the quality level data as recorded, for example, by an implementation of the associations application, the already-performed processing for each commodity may be used as input to a dynamic routing generator 210. See quality level repository 215, from which this information may be obtained. An additional input to dynamic routing generator 210 comprises, in an embodiment of the present invention, commodity routing information 220. This commodity routing information discussed in more detail below, with reference to sample data in
It should be noted that while manufacturing processes and routings are discussed herein with reference to testing, this is by way of illustration and not of limitation. Other types of processes may be specified in addition, or instead, in a routing.
An embodiment of the present invention may use information stored in several data structures. The data structures are referred to herein as using tables. This is by way of illustration and not of limitation, however, and an alternative embodiment may use data structures which are not represented as tables. Furthermore, an embodiment of the present invention is not limited to the particular data structures or formats shown herein; alternatively, an embodiment of the present invention may use more, fewer, or different data structures, and the format of those data structures may be different from that shown herein. Four data structures that may be used as input by an embodiment of the present invention will now be described with reference to
Referring now to
As shown in
Routing identifier 301 may be a string or integer value. Repeating a single routing identifier value in multiple rows of routing definition table 300 indicates that the operation in each of those rows is one of the steps of the routing which is defined by that routing identifier. The routing identifier may also be used to correlate to one or more commodity routing profiles (examples of which are provided in the sample commodity routing profile table 400 of
Step identifier 302 may be an integer or string value, and is unique within the scope of a particular routing identifier. The step identifier therefore uniquely identifies a particular step, or operation, in the processing associated with that routing identifier. The step identifier may be manually or programmatically assigned.
Operation 303 is preferably a string value that specifies some type of manufacturing process operation to be performed on a commodity. The particular syntax used for specifying an operation may vary without deviating from the scope of the present invention. An embodiment of the present invention preferably uses a syntax, however, that supports variables (also referred to herein as “arguments”) to enable parameterization of the steps. Values for these variables are propagated during optimization phases, as discussed below with reference to Block 745 of
The sample data in table 300 specifies a single routing definition having identifier “0111” and containing 5 steps, each step being defined in one of the 5 rows 310-350 of table 300. The first step (identified in column 302 of row 310 as step “A100”) specifies that an operation “IPLphyp.ctc” is to be performed. See column 303 of row 310. In the sample syntax used herein, a notation “−” followed by a string indicates presence of a parameter or argument specification. (The terms “parameter” and “argument” are used interchangeably herein.) In row 310, the argument specification is “speed=FAST”. For purposes of illustration, this may be considered as assignment of a statically-assigned parameter value (and dynamically-assigned parameter values are discussed with reference to row 320). That is, it may be presumed that the “speed” parameter indicates a speed to be used in the “IPLphyp.ctc” operation, and in this sample data, the parameter value for the “speed” parameter is specified as “FAST”. (Parameter values may be communicated to operations in various ways, without deviating from the scope of the present invention. For example, an operator might activate a switch associated with a fast speed for performing the operation in row 310, or might select a choice representing this parameter value from a graphical user interface.)
In the second step of this routing definition 0111 (identified in column 302 of row 320 as step “A200”), an operation “IDEtest.tc” is to be performed. See column 303 of row 320. This operation uses a dynamically-assigned parameter value, according to an argument value propagation feature supported by an embodiment of the present invention. In this sample data, the parameter name is “time” and the parameter value is specified in row 320 as “T1”. This string T1 is used as a variable (as can be determined, for example, by reference to the routing argument list column 406 of
Row 340 specifies a step “A130” having a parameter “T2”, and this parameter is processed in a manner similar to the T1 parameter. The steps “A120” and “A140” defined in rows 330 and 350, respectively, do not use parameters in this example.
Referring now to
As shown in
Quality tag 401 is preferably an identifier signifying the degree of processing which has already been conducted on a commodity, if any, and may be referred to more generally as the current processing status of the commodity. The serial number of a particular commodity instance may be used to retrieve its quality tag from a quality level data repository (as illustrated at 215 of
Commodity identifier 402 is preferably an identifier, such as a part number or assembly number, which identifies a type or family of commodity. As one alternative, the commodity identifier 402 may be a textual description, such as “4 G memory disk”.
Routing identifier 403 is preferably an identifier that correlates to a group of entries in the routing definition table, an example of which is provided in
Frequency value 404 is preferably an integer that indicates how many times the routing identified by the routing identifier in column 403 should be executed for a given type of commodity. In the sample data, the routing associated with routing identifier 0111 is to be performed 3 times for a commodity corresponding to row 410, but only 1 time for a commodity corresponding to row 440 (which presumably indicates that a commodity corresponding to row 440 has already undergone some of this processing) and so forth.
Optimization strategy 405 is specified, according to an embodiment of the present invention, as a value from predetermined list, and these values correspond to entries in frequency optimization strategy table 500 of
Routing argument list 406 comprises, according to an embodiment of the present invention, an argument list (which may alternatively be referred to as a tuple) of the form <key, value, strategy, type> that enables a routing to be parameterized. Entries in a particular routing argument list indicate what variables are configurable within a routing definition, and what values are to be used in that routing definition for a particular scenario. Referring by way of example to the first row 410 of table 400, two routing argument lists are specified in column 406, indicating that two different parameterizations may be applied to the routing identified in column 403 (as has been discussed above with reference to rows 320 and 330 of routing definition table 300). The first of these tuples is illustrated as <T1, 60, MAX, Integer>. This is interpreted, according to an embodiment of the present invention, as specifying that a parameter named “T1” is to use a value of “60”, and that conflicts (if any) pertaining to the T1 parameter are to be resolved using a keyword of“MAX” as an index to a resolution strategy for a data type of“Integer”. (Conflicts may occur if multiple disparate commodities specify different values in the argument list for a particular routing that is referenced by the routing definition of more than one of the commodities, as will be described below with reference to the argument list optimization strategy table 600 of
The variables using in a routing argument list may be of generally any data type, provided a corresponding optimization strategy for that data type is defined. When creating an entry in the commodity routing profile table 400, the strategy element of the routing argument list (i.e., the third position in the tuple) should use a similar data type for each similar key element (i.e., the first position in the tuple), thus facilitating an algorithmic resolution of conflicts. For example, if one tuple specifies T1 as the key and MAX as the strategy, where the optimization strategy compares numeric values (such as 60 from the second position in the tuple), another tuple should not specify T1 as the key and then specify a strategy (such as “COLOR” or “SPEED”) for which the resolution algorithm uses a non-numeric approach.
Entries in the commodity routing table 400 are preferably indexed using two values, namely the quality tag 401 and the commodity identifier 402. By specifying a particular quality tag and commodity identifier as the table index, a row or rows is/are retrieved from the table, and the retrieved information is used to define a routing block for the commodity in question. A “routing block” is a sequence of one or more operations that are to be performed on a commodity, where these operations may be defined in multiple routing definitions. For example, if a quality tag value of “NEW” and a commodity identifier value of “10N1234” are used as the index to table 400, rows 410-430 will be retrieved. These 3 rows correspond to 3 different routings (see column 403), and the resulting routing block will then be determined (as discussed in more detail with reference to
The sample data in table 400 pertains to 3 different types of commodity. The first commodity type has identifier “10N1234”, and rows 410-440 of table 400 specify routing profiles for this commodity type. The second commodity type has identifier “99N1111”, and the rows 450-460 of table 400 specify routing profiles for this commodity type. The third commodity type has identifier “00P1234”, and rows 470-480 of table 400 specify routing profiles for this commodity type. Table 400 illustrates use of 2 different quality tags, namely “NEW” and “0111C’. The quality tag value of“NEW” may be used, for example, as a keyword to indicate that this routing profile is to be used for the specified commodity 402 when no processing has been performed for an instance of this commodity. Accordingly, rows 410, 420, 430 specify routing profiles for instances of commodity type “10N1234” which have not yet been processed, whereas row 440 specifies a routing profile for instances of this commodity type which have already reached some processing point identified using the quality tag “0111C”.
Referring now to
As shown in
In this sample table 500, a frequency optimization strategy 501 may comprise one of a predetermined set of values. In the sample data, the set comprises 3 values, namely “MAX”, “MIN”, and “AVG”. See the optimization strategy column 501. The values in column 501 map to values from column 404 of table 400, and are used to locate the corresponding precedence value in column 502. (The 3 values used in column 501 are provided by way of illustration but not of limitation.)
Each of the frequency optimization strategy values in column 501 is assigned a corresponding precedence; see column 502. In the sample data, the precedence values 502 are sequentially-increasing integers, thereby indicating which optimization strategy takes higher precedence in the event of a conflict between multiple commodities. The discussions herein of using these precedence values presume that a highest precedence corresponds to the precedence value with the lowest number. Row 510 therefore indicates that “MAX” is the highest-precedence optimization strategy for frequency optimization. An embodiment of the present invention preferably allows the precedence values 502 to be modified by a user.
Referring now to
As shown in
Data type 601 is an identifier, defined by a user, which describes the value being optimized. Sample table 600 specifies 3 rows for an “Integer” data type and 2 rows for a “speed” data type.
Optimization strategy keyword 602 is preferably a user-selected value. The values in column 602 map to values within the routing argument lists (see column 406 of table 400), and are used to locate the corresponding precedence value in column 603. (The values used in column 602 are provided by way of illustration but not of limitation.) For example, when the data type is “speed”, the optimization strategy choices are shown in
Precedence 603 is preferably a sequentially-increasing integer value that is uniquely assigned within a particular data type to indicate which optimization strategy takes higher precedence for that data type in the event of a conflict between multiple components.
The sample data in table 600 specifies 2 different data types, as noted earlier, and each data type has its own unique set of optimization strategies and precedence values. For example, a highest precedence-associated with the integer 1, in the sample data—is associated with the optimization strategy “MAX” when the data type is Integer (see row 610) and when the data type is “Speed”, the highest precedence is associated with the optimization strategy “FAST” (see row 640).
Block 700 obtains a commodity routing profile for each commodity that is to be processed together as a group. Preferably, the commodity routing profiles are obtained from a repository 715, and sample commodity routing profiles were described above with reference to
A sample scenario is discussed herein by way of illustrating the processing in
Suppose, for the sample scenario, that instances of 2 disparate commodities are to be processed as a group. The instances of a particular one of these commodity types may be referred to generally as a subgroup. The first commodity type has identifier “10N1234”, and the quality level data for all of the instances of this commodity type (i.e., the instances in the first subgroup) indicates that these instances have not yet received any processing; the corresponding quality tag value for these instances is therefore “NEW”. The second commodity type has identifier “00P1234”, and the quality level data for all of the instances of this commodity type (i.e., the instances in the second subgroup) indicates that these instances have undergone processing; the corresponding quality tag value for these instances, in the sample scenario, is “0111C”. (Two subgroups would also arise, in a different scenario, if the instances in the collection to be processed are all of the same commodity type but have two different quality tags, indicating that the instances have undergone two different types or degrees of processing.) Using these quality tag and commodity identifiers, Block 700 of
Block 710 of
Block 720 uses, as input, the set of routings created by Block 710 as well as the frequency optimization strategy precedence table depicted at 725 of
Referring to
Referring to column 804 of table 850, it can be seen that the frequency values for the 4 rows of this table are 3, 1, 1, and 2. For the particular routing identifier “0111” (see column 803), table 850 specifies 2 different frequency values, namely 3 in row 851 and 2 in row 854. Accordingly, a conflict exists as to whether the process having routing identifier 0111 is to be performed 3 times or 2 times. The optimization strategy values in column 805 of table 850 are therefore used to resolve this conflict. The optimization strategy value in row 851 is “MAX”, and the optimization strategy value in row 854 is “MIN”. When taken together with the frequency values from column 804 of rows 851 and 854, this information indicates that the process identified using routing identifier 0111 is to be performed a maximum of 3 times, and a minimum of 2 times, on this collection of commodities. Notably, current industry practice would perform the routing 5 times-that is, 3 times according to row 851, and 2 times according to row 854.
Using the frequency 804 and optimization strategy 805 values from table 850, Block 720 accesses a frequency optimization strategy precedence table, such as table 500 of
No conflicts are found for the frequency of performing the routings having identifiers “0310” and “0340”, which correspond to rows 852, 853 of table 850. The frequency values from column 804 of rows 852, 853 are therefore copied directly into the frequency column 1002 of corresponding rows 1020, 1030 of data structure 1000 in
Block 730 uses the commodity routing information created by Block 700, and generates set of routing argument lists for each of the routings which are to be performed on the group of commodities.
Referring now to
Referring again to
Referring to
In the sample data of table 1100, routing identifier “0111” occurs in row 1110 and also in row 1120. An embodiment of the present invention therefore performs an optimization of the routing argument lists in those rows 1110, 1120. The occurrence of a routing identifier in column 1101 of table 1100 multiple times indicates that the manufacturing operation associated with this routing identifier is to be performed for the collection of commodities, and is applicable to 2 different subgroups of the commodities in that collection. (See rows 810 and 840 of table 800, for this example, which indicate that the 2 routing entries 1110, 1120 originated with commodities “10N1234” and “00P1234”.) Each of these different subgroups of the commodities may need the operation associated with routing identifier 0111 to be applied in different ways, and Block 740 therefore optimizes the routing so that the operation will be applied in an optimized manner. In particular, in contrast to known industry practices where the operation is applied without regard to potential redundancy or requirements of disparate commodities, an embodiment of the present invention accounts for these factors (including processing that may have already been performed).
In an embodiment of the present invention, each argument within the routing argument lists is optimized independently. In the example rows 1110 and 1120 in which the routing arguments lists are to be optimized, “T1” has an associated optimization strategy of “MAX” in argument list 1111 and an associated optimization strategy of “MIN” for argument list 1121. In the sample data, T1 is an argument representing a time length for performing a test, and argument list 1111 indicates that this test is to be performed for a maximum of 60 minutes, whereas argument list 1121 indicates that this test is to be performed for a minimum of 30 minutes. Block 740 accesses an argument list optimization strategy precedence table, such as table 600 of
The argument lists 1111, 1121 further specify that an optimization strategy for “Integer” is to be used in resolving this conflict. Using the Integer data type as an index to column 601 of table 600 locates rows 610-630. The “MAX” value from argument list 1111 matches the optimization strategy keyword value in row 601 of table 600, and the “MIN” value from argument list 1121 matches the optimization strategy keyword value in row 602 of table 600. Because row 601 has a higher priority than row 602, in this example, the argument list 1111 that specifies MAX takes precedence over the argument list 1121 that specifies MIN. Because argument list 1111 takes precedence, the integer value 60 specified therein is therefore selected for resolving the conflict, and the integer value 0 specified in argument list 1121 is therefore ignored. The argument value of 60 is therefore used, along with its corresponding argument T1, for the routing argument list 1211 in column 1202 of the corresponding row 1210 of table 1200.
Rows 1110, 1120 of table 1100 also have a conflict in use of the “T2” argument, and that conflict is also resolved by Block 740. In this case, argument list 1112 and argument list 1122 both specify an optimization strategy keyword of “MAX”. Therefore, instead of ignoring the value specified in one of the argument lists as in the case of argument lists 1111 and 1121, the argument values from both argument lists 1112 and 1122 are considered when resolving the T2 conflict. In this example, argument list 1122 specifies a value of 40, which is greater than the value of 30 specified in argument list 1112. Accordingly, the value 40 is selected, and is used, along with the corresponding argument T2, for the routing argument list 1212. The resulting routing 1212 therefore indicates that operation T2 should be performed for 40 minutes for the commodities in the collection, which meets the requirements of those commodities whose original routing definition indicates a need for 40 minutes of this operation and also meets the requirements of those commodities whose original routing definition indicates a need for 30 minutes of this operation.
Note that when resolving the conflict for T2 in argument lists 1212, 1222, where both of these argument lists specify “MAX” as their optimization strategy, an integer comparison is performed that selects the “max” value between the choices of 40 and 30. In the general case, an algorithm may be invoked to determined which of multiple values should be used to resolve a conflict. If the values are non-numeric color names, for example, an algorithm associated with the argument may be invoked to choose one of the colors from the choices.
Argument list optimizations are not performed with regard to the arguments in rows 1130 or 1140 of
Referring again to
Referring to
Block 745 comprises applying the routing arguments and values from table 1200 and the routing frequencies 1002 from table 1000 to the routing definitions—that is, routing definition 300, in this example—to generate the complete routing list for the group of commodities. Accordingly, the entries in table 1300 represent an updated version of the entries from routing definition table 300 of
In the general case, any remaining arguments in the routing definition are propagated to the routing definition in an analogous manner to that which has been described for rows 1320 and 1340.
Use of frequency value “3” from column 1002 in row 1010 of table 1000 indicates that the 5 steps “A100” through “A140” of this particular routing are to be performed 3 times. Due to space constraints, the additional 2 copies of steps A100 through A140 have not been shown in table 1300 of
As has been demonstrated, an embodiment of the present invention may reduce processing time for previously-processed commodities using techniques disclosed herein, and routings may be optimized with regard to overlapping requirements of multiple commodities to be processed as a group. At the same time, routings which are defined as being required for a particular commodity are included in the dynamically-generated routings for the group, ensuring that no required processes will be omitted. The disclosed techniques are scalable, and may be used in manufacturing environments that process a small number of different commodities as well as manufacturing environments that process a large number of different commodities. Routings are programmatically generated, as has been disclosed, and do not need to be manually determined for each group of commodities by a human operator. Efficiencies may also be realized by reusing routing definitions, for example using the above-described parameterization to adapt an already-specified routing definition to multiple commodities.
As will be appreciated by one of skill in the art, embodiments of the present invention may be provided as (for example) methods, systems, and/or computer program products. The invention can take the form of an entirely hardware embodiment, an entirely software embodiment, or an embodiment containing both hardware and software elements. In a preferred embodiment, the invention is implemented in software, which includes (but is not limited to) firmware, resident software, microcode, etc. Furthermore, the present invention may take the form of a computer program product which is embodied on one or more computer-usable storage media (including, but not limited to, disk storage, CD-ROM, optical storage, and so forth) having computer-usable program code embodied therein, where this computer program product may be used by or in connection with a computer or any instruction execution system. For purposes of this description, a computer-usable or computer-readable medium can be any apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device.
The medium may be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (“RAM”), a read-only memory (“ROM”), a rigid magnetic disk, and an optical disk. Current examples of optical disks include compact disk read-only memory (“CD-ROM”), compact disk read/write (“CD-R/W”), and DVD.
Referring now to
Input/output (“I/O”) devices (including but not limited to keyboards 618, displays 624, pointing devices 620, other interface devices 622, etc.) can be coupled to the system either directly or through intervening I/O controllers or adapters (616, 626).
Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks (as shown generally at 632). Modems, cable modem attachments, wireless adapters, and Ethernet cards are just a few of the currently-available types of network adapters.
Still referring to
The gateway computer 746 may also be coupled 749 to a storage device (such as data repository 748).
Those skilled in the art will appreciate that the gateway computer 746 may be located a great geographic distance from the network 742, and similarly, the wireless devices 710 and/or workstations 711 may be located some distance from the networks 742 and 744, respectively. For example, the network 742 may be located in California, while the gateway 746 may be located in Texas, and one or more of the workstations 711 may be located in Florida. The wireless devices 710 may connect to the wireless network 742 using a networking protocol such as the Transmission Control Protocol/Internet Protocol (“TCP/IP”) over a number of alternative connection media, such as cellular phone, radio frequency networks, satellite networks, etc. The wireless network 742 preferably connects to the gateway 746 using a network connection 750a such as TCP or User Datagram Protocol (“UDP”) over IP, X.25, Frame Relay, Integrated Services Digital Network (“ISDN”), Public Switched Telephone Network (“PSTN”), etc. The workstations 711 may connect directly to the gateway 746 using dial connections 750b or 750c. Further, the wireless network 742 and network 744 may connect to one or more other networks (not shown), in an analogous manner to that depicted in
The present invention has been described with reference to flow diagrams and/or block diagrams according to embodiments of the invention. It will be understood that each flow and/or block of the flow diagrams and/or block diagrams, and combinations of flows and/or blocks in the flow diagrams and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, embedded processor, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions specified in the flow diagram flow or flows and/or block diagram block or blocks.
These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including instruction means which implement the function specified in the flow diagram flow or flows and/or block diagram block or blocks.
The computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide steps for implementing the functions specified in the flow diagram flow or flows and/or block diagram block or blocks.
While embodiments of the present invention have been described, additional variations and modifications in those embodiments may occur to those skilled in the art once they learn of the basic inventive concepts. Therefore, it is intended that the appended claims shall be construed to include the described embodiments and all such variations and modifications as fall within the spirit and scope of the invention.