The information provided in this section is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
The present disclosure relates to asymmetric alternating current (AC) motors, and more particularly to circuits for controlling operation of asymmetric AC motors.
Electric machines are utilized in a wide variety of applications. For example, hybrid electric vehicles (HEVs) typically include an electric traction drive system that includes a multi-phase alternating current (AC) motor. The AC motor is driven by a power inverter, which receives power from a direct current (DC) power source, such as a storage battery. The inverter converts a DC voltage to an AC voltage, which is then used to drive the AC motor to turn a shaft of a HEV drivetrain.
One or more AC motors may be implemented on a vehicle. The AC motors may be asymmetric motors, such as interior permanent magnet synchronous motors (IPMSMs). IPMSMs are used in high performance applications because of high corresponding power density and efficiency ratings.
A control system for controlling operation of an asymmetric motor to operate as a symmetric motor is provided. The control system includes a memory, a first summer, a proportional flux error-to-voltage converter, a complex integration module, a second summer, and a control module. The memory is configured to store a time constant, a first damping resistance for a d-axis of the asymmetric motor, and a second damping resistance for a q-axis of the asymmetric motor. The first summer is configured to determine a flux error for the d-axis and the q-axis of the asymmetric motor based on a commanded flux value and a feedback flux value. The proportional flux error-to-voltage converter is configured to convert the flux error to a proportional voltage term. The complex integration module is configured to, based on the time constant, a synchronous angular velocity of the asymmetric motor, and a sampling period, calculate an integral voltage term. The second summer is configured to sum the proportional voltage term, the integral voltage term, and a damping resistance voltage to generate a voltage command signal, where the damping resistance voltage is based on the first damping resistance and the second damping resistance. The control module is configured to control operation of the asymmetric motor based on the voltage command signal.
In other features, the control system further includes a regulator configured to calculate the time constant based on the sampling period for sampling current or flux of the asymmetric motor, where the regulator includes the proportional flux error-to-voltage converter, the complex integration module, and the second summer.
In other features, the control system further includes a regulator configured to calculate the damping resistance voltage based on at least one of the time constant, an amount of current associated with the d-axis, an amount of current associated with the q-axis, one or more partial derivatives of surface flux maps, an amount of flux associated with the d-axis, an amount of flux associated with the q-axis, or an actual resistance of the asymmetric motor, where the regulator includes the proportional flux error-to-voltage converter, the complex integration module, and the second summer.
In other features, the control system further includes a regulator configured to calculate the damping resistance voltage based on the time constant, an amount of current associated with the d-axis, an amount of current associated with the q-axis, an amount of flux associated with the d-axis, an amount of flux associated with the q-axis, and an actual resistance of the asymmetric motor, where the regulator includes the proportional flux error-to-voltage converter, the complex integration module, and the second summer.
In other features, the control module is configured to operate the asymmetric motor to provide a modified plant representation of the asymmetric motor of
in the Laplace domain, where τmod is the time constant and ωe is the synchronous angular velocity.
In other features, the proportional flux error-to-voltage converter is configured to generate the proportional voltage term based on a preselected bandwidth.
In other features, the complex integration module is configured to modify the proportional voltage term by an amount of gain and discrete integration process. The amount of gain is based on the time constant, the synchronous angular velocity and the sampling period.
In other features, the control module is configured to operate the asymmetric motor based on a first flux based linearized machine equation for the d-axis and a second flux based linearized equation for the q-axis. The first flux based linearized machine equation and the second flux based linearized equation are in a same form as symmetric machine equations.
In other features, the control system further includes a regulator configured to regulate operation of the asymmetric motor using a same time constant to sampling period ratio for each of the d-axis and the q-axis. The regulator includes the proportional flux error-to-voltage converter, the complex integration module, and the second summer.
In other features, the control system further includes: a current module configured to estimate an amount of d and q axes current for a next sample time subsequent to a current sample time; and a current-to-flux converter configured to convert the estimated amount of d and q axes current to the feedback flux value. The feedback flux value is an amount of flux for the d and q axes.
In other features, a method of controlling operation of an asymmetric motor to operate as a symmetric motor is provided. The method includes: calculating a time constant, a first damping resistance for a d-axis of the asymmetric motor, and a second damping resistance for a q-axis of the asymmetric motor; determining a flux error for the d-axis and the q-axis of the asymmetric motor based on a commanded flux value and a feedback flux value; converting the flux error to a proportional voltage term; based on the time constant, a synchronous angular velocity of the asymmetric motor, and a sampling period, modifying the proportional voltage term to provide an integral voltage term; summing the proportional voltage term, the integral voltage term, and a damping resistance voltage to generate a voltage command signal, where the damping resistance voltage is based on the first damping resistance and the second damping resistance; and controlling operation of the asymmetric motor based on the voltage command signal.
In other features, the method includes calculating the time constant based on the sampling period for sampling current or flux of the asymmetric motor.
In other features, the method includes calculating the damping resistance voltage based on at least one of the time constant, an amount of current associated with the d-axis, an amount of current associated with the q-axis, one or more partial derivatives of surface flux maps, an amount of flux associated with the d-axis, an amount of flux associated with the q-axis, or an actual resistance of the asymmetric motor.
In other features, the method includes calculating the damping resistance voltage based on the time constant, an amount of current associated with the d-axis, an amount of current associated with the q-axis, an amount of flux associated with the d-axis, an amount of flux associated with the q-axis, and an actual resistance of the asymmetric motor.
In other features, the method further includes operating the asymmetric motor to provide a modified plant representation of the asymmetric motor of
in the Laplace domain, where τmod is the time constant and ωe is the synchronous angular velocity.
In other features, the method further includes generating the proportional voltage term based on a preselected bandwidth.
In other features, the method includes modifying the proportional voltage term by an amount of gain and discrete integration process, where the amount of gain is based on the time constant, the synchronous angular velocity and the sampling period.
In other features, the method further includes operating the asymmetric motor based on a first flux based linearized machine equation for the d-axis and a second flux based linearized equation for the q-axis, where the first flux based linearized machine equation and the second flux based linearized equation are in a same form as symmetric machine equations.
In other features, the method further includes regulating operation of the asymmetric motor using a same time constant to sampling period ratio for each of the d-axis and the q-axis.
In other features, the method further includes: estimating an amount of d and q axes current for a next sample time subsequent to a current sample time; and converting the estimated amount of d and q axes current to the feedback flux value, where the feedback flux value is an amount of flux for the d and q axes.
Further areas of applicability of the present disclosure will become apparent from the detailed description, the claims and the drawings. The detailed description and specific examples are intended for purposes of illustration only and are not intended to limit the scope of the disclosure.
The present disclosure will become more fully understood from the detailed description and the accompanying drawings, wherein:
In the drawings, reference numbers may be reused to identify similar and/or identical elements.
Traditionally, asymmetric motors have been difficult to analyze and tune. Motor control systems are set forth herein, which operate asymmetric motors, such that the asymmetric motors appear symmetric. Motor dynamics are manipulated by setting a time constant versus sampling period ratio and calculating and applying virtual d-axis and q-axis resistance damping values, such that the motor operates similar to a symmetric motor. A couple example symmetric motors are an induction motor and a surface permanent magnet synchronous motor (SPMSM). Controls analysis may be applied for pole placement and controller tuning. This results in a controller (or motor control module) with significantly improved dynamic performance, stiffness, and robustness to, for example, variations in corresponding parameters (e.g., variations in flux, voltage, current, etc.). Other advantages are further described below.
The power source 114 supplies the DC voltage to voltage line 130. Voltage line 132 may be at a reference voltage or ground potential. The power source 114 and the voltage sensor 116 are connected to the voltage lines 130, 132. The voltage sensor detects a voltage difference between the voltage lines 130, 132. A capacitor 134 may be connected to the voltage lines 130, 132.
The voltage inverter 118 converts the DC voltage potential across the voltage lines 130, 132 to AC voltages, which are supplied to the asymmetric motor. The voltage inverter includes three sets of diode-transistor pairs, where each set includes two transistors connected in series and respective diodes connected in parallel with the corresponding transistor. The voltage inverter 118 includes transistors 140, 142, 144, 146, 148, 150 and diodes 152, 154, 156, 158, 160, 162. The current sensors 120 detect current for each phase output of the voltage inverter 118.
The motor control module 124 generates control signals in the form of pulse width modulation (PWM) signals, which are provided respectively to the transistors 140, 142, 144, 146, 148, 150. The PWM signals are generated based on an output of a regulating module (or regulator). Example regulating modules are shown in
The control system 110 may also include a memory 170, which may be implemented as part of the motor control module 124 or may be separate from the motor control module 124 as shown. The memory 170 may store any of the equations, parameters, variables, look-up-tables, and/or other data and/or signals disclosed herein.
Machine equivalent circuits shown in
Flux linkages (referred to hereinafter as flux) of the d-axis and q-axis may be represented by equations 3 and 4, where λd is the d-axis flux and λq is the q-axis flux, where f and g are functions.
λd=f(Id, Iq) (3)
λq=g(Id, Iq) (4)
Torque output of the IPMSM 200 of
i Te=(3P/2)(λdIq−λqId) (5)
The current command generation module 508 receives a torque command signal Te* and a DC voltage signal Vdc and generates a d-axis and q-axis current command signal Idq*. The current regulating module 510 generates a voltage command signal Vdq* based on the d-axis and q-axis current command signal Id*, a d-axis and q-axis current signal Idq, and a synchronous angular velocity signal ωe. The switch control module 512 generates a duty cycle signal D* based on the voltage command signal Vdq, the DC voltage signal Vdc and an angular position of the asymmetric motor 502. The voltage inverter 514 generate 3-phase voltage signals Vabc based on the duty cycle signal D* and the physical DC voltage applied to the inverter. Current sensors 518 detect current flow for respective phases of the asymmetric motor 502.
The 3-phase current-to-axis current converting module 514 converts current of the 3-phases as detected by the current sensors 518 to the d-axis and q-axis current signal Idq. The angular position-to-angular velocity converting module 516 calculates or estimates the derivative of an angular position θe corresponding to the electrical angular position of the rotor of the asymmetric motor 502 to provide the electrical synchronous angular velocity represented by the synchronous angular velocity signal ωe.
Although the above stated d-axis and q-axis signals are described as each being a single signal, each of these signals may be represented as two signals a d-axis signal and a q-axis signal. For example, the d-axis and q-axis current command signal Idq* may be represented as a d-axis current command signal Id* and q-axis current command signal Iq*. Similarly, the d-axis and q-axis current signal Idq may be represented as a d-axis current signal Id and a q-axis current signal Iq. Also, the voltage command signal Vdq* may be represented as a d-axis voltage command signal Vd* and a q-axis voltage command signal V.
The current regulating module 600 includes gain blocks 606, 608, 610, 612, 614, 616, which multiply gains Kpq, Kiq, ωeKppq, Kpd, Kid, ωeKppd by outputs of the summers 602, 604. A first summer 618 sums outputs of the gain blocks 608, 616. A second summer 620 subtracts an output of the gain block 610 from an output of the gain block 614. The outputs of the summers 618, 620 are integrated by discrete time integrators 622, 624. Outputs of the integrators 622, 624 are summed respectively with outputs of the gain blocks 606, 612 via the summers 626, 628. The gain blocks 606, 608, the summers 618, 626 and the discrete time integrator 622 provide a first proportional integral (PI) loop 630. The gain blocks 612, 614, the summers 620, 628, and the integrator 624 provide a second PI loop 632.
Resistance damping blocks 634, 636 multiply a resistance damping value Rdamp by each of the current signals Id, Iq. Outputs of the resistance damping blocks 634, 636 are subtracted via summers 638, 640 and respectively from the outputs of the summers 626, 628 to provide the voltage command signals Vd*, Vq*.
Current regulator tuning, using the control system 500 of
The following examples provide a control system that controls an asymmetric motor in such a manner that the asymmetric motor, with respect to a regulating module, operates as a symmetric motor. The examples simplify regulating control, eliminate static versus transient inductance concerns, provide the same tuning for both the d-axis and q-axis of an asymmetric motor, and improve regulating performance and robustness as further described below.
The following examples are based on the understanding that relationships between flux of an asymmetric motor and d-axis current and q-axis current levels are not two-dimensional, but are actually three-dimensional.
Alternative forms of equations 1 and 2 above are provided below as machine equations 6 and 7.
Equations 6 and 7 may be linearized about an operating point using an operating point model represented by equations 8 and 9. This includes taking a partial derivative of a function with respect to each variable.
The resulting linearized machine equations are equations 10 and 11.
Equations 10 and 11 are small signal representations of the machine equations 6 and 7 using small signal analysis.
The q-axis and d-axis current levels may be defined as a function of the d-axis and q-axis flux, as represented by equations 12 and 13, which have corresponding surface flux maps of Id and versus λd and λq and f and g are functions. In equations 12 and 13, the three-dimensional maps in
I
q
=f(λd,λq) (12)
I
d
=g(λd,λq) (13)
Solving for Δlq and ΔId using small signal analysis and the surfaces corresponding to equations 12 and 13 provides equations 14 and 15, where changes in current are defined as a function of changes in flux. This provides a relationship between a small signal change in current relative to a small signal change in flux.
The right sides of equations 14 and 15 may be plugged into equations 10 and 11 to provide the following linear machine equations 16 and 17 in a flux format.
Equations 16 and 17 are not a function of current. The partial derivative terms
of equations 16 and 17 are directly related to an inverse of inductance (or 1/inductance) and may be calculated from the surface maps of
In addition, since the values of
are small compared to the values of
and become increasingly negligible as speed of the asymmetric motor increases, equations 16 and 17 may be simplified to provide equations 18 and 19.
Utilizing asymmetric virtual damping resistances, the time constants
may be virtually modified by the control module to provide a single modified time constant
as represented by equation 20. The asymmetric virtual damping resistances Rdamp.d and Rdamp.q are used to make the corresponding control module and/or regulating module operate as though the asymmetric motor has a modified resistance, which is greater than an actual resistance of the asymmetric motor.
Calibration is performed to set τmod and the algorithm solves for virtual damping resistances Rdamp.q, Rdamp.d. As a result, equations 18 and 19 are modified to provide symmetric machine equations 21 and 22, which are based on flux and the modified time constant.
After utilizing asymmetric virtual damping according to equation 20, equations 21 and 22 display that the asymmetric motor has been virtually modified to appear as a symmetric motor to the control module.
Equations 21 and 22 may be converted to the Laplace domain (or s-domain) and written in a single vector format to provide equation 23, where j is the complex axis notation.
Using the closed loop transfer function for a complex vector controller as represented by equation 24 provides closed loop transfer function equation 25 which displays the potential for pole-zero cancellation.
Tuning is provided by selecting a ratio Ke, which is equal to the modified time constant τmod divided by a sampling period Ts by which, for example flux or current is sampled and provided as a feedback parameter. In other words, a target time constant τmod is calculated based on the desired ratio of
set by Ke. The virtual damping resistances are then calculated using equations 26 and 27 and based on current versus flux maps, such as the inverse of the maps shown in
Regulating module bandwidth ωb is then selected and the gain Kp is set equal to ωb, which is the same for both d and q axes. The bandwidth ωb is a frequency in radians per second. Tuned pole/zero cancellation is provided by setting the gain Ki=Kpτmod−1, which is also the same for both d and q axes.
Based on the above equations 21-23 and 25-27, a control system 900 and corresponding modified plant 902 of
In
At 1002, a torque command signal Tem* is generated. The torque command signal may be generated based on, for example, load requests to change speed and/or acceleration of a vehicle (e.g., the vehicle 112).
At 1004, the flux command generation module 904 generates a flux command signal λdq*, which is a function of the torque command signal Tem*, and may depend on motor speed, and the inverter DC voltage. In one embodiment, values of the flux command signal λdq* are determined using a look-up-table (LUT) that relates values of commanded torque to values of commanded flux.
At 1006, the summer 906 determines an error in flux λdq,err by subtracting flux of a current sample λdq or of a next estimated current sample z·{circumflex over (λ)}dq to provide the flux error λdq,err, where z refers to a one sample instant advance (i.e., one time sample in the future).
At 1008, the regulating module 908 generates a commanded voltage signal z·Vdq* corresponding to the voltage to be applied over the next sample period. At 1008A, the proportional flux error-to-voltage converting module 920 multiplies bandwidth ωb by λdq,err to provide a proportional voltage term, which is provided to the complex integration module 922 and the summer 924. At 1008B, the complex integration module 922 applies a complex gain to the proportional voltage term followed by discrete integration of the result to provide an integral voltage term, referred to as a discrete integration process. Therefore, module 922 may be represented as
in the discrete domain (or z-domain).
At 1008C, the summer 924 sums (i) the proportional voltage term, (ii) the integral voltage term and (iii) a sum of (a) the d-axis damping resistance voltage Id·Rdamp,d and (b) a product of j and the q-axis damping resistance voltage Iq·Rdamp,q to provide the voltage command signal z·Vdq*, wherein the damping resistance voltages may be determined using equations 29 and 30. In one embodiment, when the current module 914 is included, the summer 924 sums (i) the proportional voltage term, (ii) the integral voltage term and (iii) a sum of (a) the d-axis damping resistance voltage z·Id·Rdamp,d and (b) a product of j and the q-axis damping resistance voltage z·Iq·Rdamp,q based on the next estimated sample current z·Id of the d-axis and next estimated sample current z·Iq of the q-axis to provide the voltage command signal z·Vdq*, where j is complex axis notation for a complex number.
At 1010, the switch control module 910 generates pulse width modulating signals to control, for example, the switches 140, 142, 144, 146, 148, 150 of
At 1016, the current may be sampled for one or more phases of the asymmetric motor using, for example, the current sensors 120. The current Idq may be determined based on the sampled current and rotor angular position. At 1020, the current module 914, when included, estimates a current level of a next current sample. The next current sample is represented as current signal z·Idq. At 1022, the current-to-flux converting module 916 converts the current Idq or the current z·Idq to flux, which are represented respectively as λdq and z·{circumflex over (λ)}dq. The λdq (or z·{circumflex over (λ)}dq) is a function of the current Idq (or z·Idq) and may be determined using a LUT relating values of the flux λdq (or z·{circumflex over (λ)}dq) to values of the current Idq (or z·Idq). Operation 1001 may be performed subsequent to operation 1022. One or more of operations 1001, 1002, 1004, 1006, 1008, 1012, 1014, 1016, 1020, 1022 may be performed every sample period. For example, if the sampling period is changing, then based on equation (28) a new time constant τmod is calculated and new damping resistance values are used. This should be updated in
The above-described operations are meant to be illustrative examples. The operations may be performed sequentially, synchronously, simultaneously, continuously, during overlapping time periods or in a different order depending upon the application. Also, any of the operations may not be performed or skipped depending on the implementation and/or sequence of events.
The above-disclosed method improves current and torque regulation, dynamic performance, and robustness of an asymmetric motor. This is achieved by virtually manipulating d and q axes time constants of a plant to achieve a virtually symmetric machine (or motor). Individual virtual damping resistances for d and q axes are determined. Resistance damping values are used to target a set ratio of plant time constant and a sample frequency. The time constant is selected to provide a virtually symmetric machine. The corresponding regulation is performed based on flux, referred to as the flux domain.
By using a same time constant to sample period ratio for both d and q axes, performance and dynamic torque response is not negatively affected as compared to operating an asymmetric motor based on different time constant to sampling period ratios for the d and q axes. Also, by using the same time constant to sample period ratio for both d and q axes, increased damping resistance can be provided, which decreases sensitivity and increases operating stiffness. Since the disclosed control system has decreased sensitivity, the control system is robust to parameter inaccuracies, such as inaccuracies in inductance, resistance, flux, etc. of an asymmetric motor. Stiffness refers to how a regulating module responds to disturbances. The higher the stiffness, the better the response to disturbances or, in other words, the better the rejection of disturbances to prevent negatively affecting performance. The disclosed regulating module of
The foregoing description is merely illustrative in nature and is in no way intended to limit the disclosure, its application, or uses. The broad teachings of the disclosure can be implemented in a variety of forms. Therefore, while this disclosure includes particular examples, the true scope of the disclosure should not be so limited since other modifications will become apparent upon a study of the drawings, the specification, and the following claims. It should be understood that one or more steps within a method may be executed in different order (or concurrently) without altering the principles of the present disclosure. Further, although each of the embodiments is described above as having certain features, any one or more of those features described with respect to any embodiment of the disclosure can be implemented in and/or combined with features of any of the other embodiments, even if that combination is not explicitly described. In other words, the described embodiments are not mutually exclusive, and permutations of one or more embodiments with one another remain within the scope of this disclosure.
Spatial and functional relationships between elements (for example, between modules, circuit elements, semiconductor layers, etc.) are described using various terms, including “connected,” “engaged,” “coupled,” “adjacent,” “next to,” “on top of,” “above,” “below,” and “disposed.” Unless explicitly described as being “direct,” when a relationship between first and second elements is described in the above disclosure, that relationship can be a direct relationship where no other intervening elements are present between the first and second elements, but can also be an indirect relationship where one or more intervening elements are present (either spatially or functionally) between the first and second elements. As used herein, the phrase at least one of A, B, and C should be construed to mean a logical (A OR B OR C), using a non-exclusive logical OR, and should not be construed to mean “at least one of A, at least one of B, and at least one of C.”
In the figures, the direction of an arrow, as indicated by the arrowhead, generally demonstrates the flow of information (such as data or instructions) that is of interest to the illustration. For example, when element A and element B exchange a variety of information but information transmitted from element A to element B is relevant to the illustration, the arrow may point from element A to element B. This unidirectional arrow does not imply that no other information is transmitted from element B to element A. Further, for information sent from element A to element B, element B may send requests for, or receipt acknowledgements of, the information to element A.
In this application, including the definitions below, the term “module” or the term “controller” may be replaced with the term “circuit.” The term “module” may refer to, be part of, or include: an Application Specific Integrated Circuit (ASIC); a digital, analog, or mixed analog/digital discrete circuit; a digital, analog, or mixed analog/digital integrated circuit; a combinational logic circuit; a field programmable gate array (FPGA); a processor circuit (shared, dedicated, or group) that executes code; a memory circuit (shared, dedicated, or group) that stores code executed by the processor circuit; other suitable hardware components that provide the described functionality; or a combination of some or all of the above, such as in a system-on-chip.
The module may include one or more interface circuits. In some examples, the interface circuits may include wired or wireless interfaces that are connected to a local area network (LAN), the Internet, a wide area network (WAN), or combinations thereof. The functionality of any given module of the present disclosure may be distributed among multiple modules that are connected via interface circuits. For example, multiple modules may allow load balancing. In a further example, a server (also known as remote, or cloud) module may accomplish some functionality on behalf of a client module.
The term code, as used above, may include software, firmware, and/or microcode, and may refer to programs, routines, functions, classes, data structures, and/or objects. The term shared processor circuit encompasses a single processor circuit that executes some or all code from multiple modules. The term group processor circuit encompasses a processor circuit that, in combination with additional processor circuits, executes some or all code from one or more modules. References to multiple processor circuits encompass multiple processor circuits on discrete dies, multiple processor circuits on a single die, multiple cores of a single processor circuit, multiple threads of a single processor circuit, or a combination of the above. The term shared memory circuit encompasses a single memory circuit that stores some or all code from multiple modules. The term group memory circuit encompasses a memory circuit that, in combination with additional memories, stores some or all code from one or more modules.
The term memory circuit is a subset of the term computer-readable medium. The term computer-readable medium, as used herein, does not encompass transitory electrical or electromagnetic signals propagating through a medium (such as on a carrier wave); the term computer-readable medium may therefore be considered tangible and non-transitory. Non-limiting examples of a non-transitory, tangible computer-readable medium are nonvolatile memory circuits (such as a flash memory circuit, an erasable programmable read-only memory circuit, or a mask read-only memory circuit), volatile memory circuits (such as a static random access memory circuit or a dynamic random access memory circuit), magnetic storage media (such as an analog or digital magnetic tape or a hard disk drive), and optical storage media (such as a CD, a DVD, or a Blu-ray Disc).
The apparatuses and methods described in this application may be partially or fully implemented by a special purpose computer created by configuring a general purpose computer to execute one or more particular functions embodied in computer programs. The functional blocks, flowchart components, and other elements described above serve as software specifications, which can be translated into the computer programs by the routine work of a skilled technician or programmer.
The computer programs include processor-executable instructions that are stored on at least one non-transitory, tangible computer-readable medium. The computer programs may also include or rely on stored data. The computer programs may encompass a basic input/output system (BIOS) that interacts with hardware of the special purpose computer, device drivers that interact with particular devices of the special purpose computer, one or more operating systems, user applications, background services, background applications, etc.
The computer programs may include: (i) descriptive text to be parsed, such as HTML (hypertext markup language), XML (extensible markup language), or JSON (JavaScript Object Notation) (ii) assembly code, (iii) object code generated from source code by a compiler, (iv) source code for execution by an interpreter, (v) source code for compilation and execution by a just-in-time compiler, etc. As examples only, source code may be written using syntax from languages including C, C++, C#, Objective-C, Swift, Haskell, Go, SQL, R, Lisp, Java®, Fortran, Perl, Pascal, Curl, OCaml, Javascript®, HTML5 (Hypertext Markup Language 5th revision), Ada, ASP (Active Server Pages), PHP (PHP: Hypertext Preprocessor), Scala, Eiffel, Smalltalk, Erlang, Ruby, Flash®, Visual Basic®, Lua, MATLAB, SIMULINK, and Python®.