Engine fuel injection controller
FIELD OF THE INVENTION 
     This invention relates to an engine equipped with a mechanism purging fuel vapor in a fuel tank to an intake passage of the engine, more specifically, to a fuel injection control system for such an engine, 
     BACKGROUND OF THE INVENTION 
     In automobile engines, in order to prevent the escape of fuel vapor from a fuel tank into the atmosphere, the vapor is for example adsorbed by a canister of active carbon, and the adsorbed fuel is purged in the intake passage of the engine under predetermined running conditions. The fuel is removed from the canister and led into the intake passage by making use of the pressure difference between the atmosphere and the intake passage. For this purpose, the canister and intake passage are connected by a purge line, a purge valve which operates under predetermined running conditions being interposed in this line. Purge gas flowing into the intake passage from the purge line is led into the engine cylinder together with fuel injected by an injector provided in the intake passage, and burnt. 
     In many automobile engines which employ a three-way catalyst to process the engine exhaust gas, the air-fuel ratio (AFR) of the fuel mixture provided to the engine cylinder is feedback-controlled to stay in a certain region of a theoretically defined value. For example, a basic fuel amount is computed based on the intake volume of the engine, and this basic fuel injection amount is corrected based on the actual AFR detected by an oxygen sensor provided in an exhaust passage of the engine. 
     When the aforesaid purge gas is introduced, the fuel amount supplied to the engine cylinder increases by an amount corresponding to the purged fuel, and naturally the AFR becomes richer. In an engine with the above AFR feedback control system, the injection amount from the injector is corrected so that it is decreased. 
     If for example the detected AFR changes from lean to rich with reference to the theoretical value, an updating amount P is subtracted in one step from the feedback correction coefficient α, and am updating amount I are then subtracted integrally until the AFR next changes back to lean. This is so-called &#34;PI control&#34;. The correction coefficient α cam therefore be varied only in fixed proportions, and if the AFR is varying rapidly, a certain response time is required until the AFR can be made to converge to a target value. 
     If now the accelerator pedal is depressed so that the vehicle accelerates while fuel is being purged from the canister, the intake amount immediately increases, but the flowrate of purge gas does not vary so much. The fuel supplied to the engine is therefore insufficient due to the fact that the purge gas amount has decreased relative to the intake amount, so this deficiency is compensated by feedback control which increases the fuel amount injected by the injector. 
     Just before acceleration, however, the feedback control correction coefficient α had shifted from a center value of 1.0 to lean (e.g. 0.8) so as to make the AFR converge to the target value. A relatively long time is therefore required for the coefficient to change back to rich which is necessary to increase the fuel amount so that the vehicle can accelerate, and during this time the engine does not respond properly. 
     To deal with this problem, in Tokkai Hei 2-19631 published by the Japanese Patent Office, a method is proposed whereby the basic fuel amount is first decreased by a predetermined value while purge gas is being led into the cylinder, the AFR is modified to the target value (theoretical AFR) by feedback control, and the correction coefficient α is maintained close to the center value of 1.0 even during purge. For this purpose, the AFR correction coefficient α before starting purge is compared with the AFR correction coefficient α after purge which has fallen to a stable level below the predetermined value. By first subtracting a fuel correction amount corresponding to this difference from the basic fuel amount, the correction coefficient α during purge is thereby forcibly maintained in the region of 1.0 which is the center value. When the accelerator pedal is depressed, therefore, the feedback control correction coefficient α shifts to rich from the region of 1.0. Compared to the case when it shifts to rich from lean, the fuel amount increases more rapidly, hence the engine acceleration response is improved. 
     However, after starting purge, the basic fuel amount is only corrected after the correction coefficient α has almost stabilized to a constant value, and until this occurs, the only correction applied is that of feedback control. As mentioned hereintofore, the feedback correction coefficient α can be varied only in fixed proportions. Therefore, it cannot immediately respond to rapid fluctuations of AFR due to purge, and AFR errors tend to be large for a certain period after starting purge. Further, if the accelerator pedal is depressed during this period, the engine response worsens as stated heretofore. 
     Learning control is used to compensate for poor feedback control response. In learning control, the standing error of the AFR due to temporal variations of an air flow meter or the injector, is first corrected by learning. For example, if the injector becomes clogged due to long periods of use, the fuel amount is less for the same injection pulse width signal, so the AFR shifts to lean. If this AFR shift is memorized, a large pulse width is supplied to the injector when the vehicle is driven again based on the previously learned value, so there is no apparent change of injector flow characteristics from the time before clogging occurred. In other words, it is no longer necessary to apply feedback correction for decreases in fuel amount every time the injector clogs. 
     This learning control is referred to as learning control of the basic fuel amount, and it corrects the standard error of the AFR. However, if the AFR error due to purge is input by learning, there will be a large difference in the learning value depending on whether purge is or is not carried out. In this case, the learning process actually gives rise to more error, and AFR control is especially disturbed around the time when purge starts. In conventional learning control systems, therefore, learning was often prohibited during purge and was not useful for AFR control at that time. 
     SUMMARY OF THE INVENTION 
     It is am object of this invention to reduce AFR errors which occur during purge. 
     It is a further object of this invention to separate AFR errors due to purge and standing AFR errors, and by performing AFR control during purge based on values learned during purge, to achieve am AFR control which is both precise and stable. 
     It is yet a further object of this invention to learn AFR errors due to purge with high precision in a short time interval. 
     In order to achieve the above objects, this invention provides a fuel injection controller for an engine having a combustion chamber, an intake passage connected to the combustion chamber, a fuel tank for storing fuel, an injector for injecting fuel from the fuel tank into the intake passage, a device for detecting running conditions of the engine, a purge passage for introducing fuel vapor from the fuel tank into the intake passage, and a purge valve which opens and closes the purge passage according to the running conditions. This controller comprises a device for setting a basic fuel injection amount of the injector based on the engine running conditions, a device for detecting an air-fuel ratio of air and fuel supplied to the combustion chamber, a device for feedback correcting the basic fuel injection mount such that the air-fuel ratio is identical to a predetermined target air-fuel ratio, a device for learning the correction amount corresponding to the purge valve opening or closing, a device for storing a purge learning value obtained by the learning, a device for updating the purge learning value based on a variation of the correction amount, a device for determining whether or not a variation of the purge learning value has converged to within a predetermined region after the purge valve opening or closing, a device for clamping the purge learning value when the determining device has determined that the variation has converged to within the region, and a device for correcting the basic fuel injection amount based on the clamped value. 
     Preferably, the updating device comprises, a device for determining whether or not a direction of the purge learning value variation has inverted, a device for respectively selecting a predetermined learning updating amount which varies in a stepwise fashion when the direction has inverted, and a predetermined learning updating amount which varies progressively when the direction has not inverted, and a device for adding the selected updating amount to the purge learning value. 
     Also preferably, the convergence determining device comprises a counter for counting a number of the direction inversion and determines the convergence based on a count value of the counting device, and the clamping device comprises second device for storing each purge learning value when the direction has inverted and a device for computing an average value of at least two most recent purge learning values in the second storing device as a clamped value. 
     Also preferably, the updating device comprises a deuce for sapling an air-fuel ratio feedback correction amount before the purge valve opens or closes, a deuce for computing a difference between the sampled value and an air-fuel ratio feedback correction amount after the purge valve begins to open or close, a deuce for determining an updating value according to the difference, and a deuce for adding the updating value to the purge learning value. 
    
    
     The details as well as other features and advantages of this invention are set forth in the reminder of the specification and are shown in the accompanying drawings. 
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 is a schematic diagram of a fuel injection controller according to this invention. 
     FIG. 2 is a diagram showing the operational characteristics of a VC negative pressure valve according to this Invention. 
     FIG. 3 is a diagram showing the flow of fuel and air in a fuel gas purge system according to this invention. 
     FIG. 4-FIG. 8 are flowcharts showing the process by which flags are set according to this invention. 
     FIG. 9 is a flowchart showing the process of calculating a purge valve duty EVAP according to this invention. 
     FIG. 10 is a flowchart showing the process of initializing a learning value WC according to this invention. 
     FIG. 11-FIG. 13 are flowcharts showing the process of updating the learning values WC according to this invention. 
     FIG. 14-FIG. 16 are flowcharts showing the process of offset learning according to this invention. 
     FIG. 17 is a flowchart showing the process of calculating an AFR feedback correction coefficient α and the process of determining the conditions for prohibiting the updating of basic AFR learning values according to this invention. 
     FIG. 18 is a flowchart showing the process of calculating a prediction value QEFC of a purge fuel cylinder intake amount according to this invention. 
     FIG. 19 is a flowchart showing the process of calculating an air amount Q according to this invention. 
     FIG. 20 is a flowchart showing the process of calculating an injection pulse width CTIn according to this invention. 
     FIG. 21 is a flowchart showing the process of calculating a control duty ISCON of an auxiliary air control valve according to this invention. 
     FIG. 22 is a graph showing a table of target purge rates PAGERT provided in the fuel injection controller. 
     FIG. 23 is a graph showing a table of negative pressure correction rates KPVQH provided in the fuel injection controller. 
     FIG. 24 is a graph showing a table of battery voltage correction rates KPVVB provided in the fuel injection controller. 
     FIG. 25 is a graph showing a table of battery voltage correction rates VBOFPV related to purge valve actuation duty provided in the fuel injection controller. 
     FIG. 26 is a graph showing a table of purge valve basic duties EVAPO provided in the fuel injection controller. 
     FIG. 27 is a graph showing a table of intermediate values for finding EVAPO provided in v controller. 
     FIG. 28 is a graph showing a table of purge valve basic flowrates EVAPQ provided in this controller. 
     FIG. 29 is a graph showing a table of purge fuel flowrate correction rates KQPV provided in the fuel injection controller. 
     FIG. 30 is a graph showing a table of lower load limiting values TPCPC for purging provided in the fuel injection controller. 
     FIG. 31 is a graph showing a purging area according to this invention. 
     FIG. 32 is a graph showing a purge valve change-over pattern according to this invention. 
     FIG. 33 is a graph showing the variation of purge valve flowrate and purge rate by a purge valve control according to this invention. 
     FIG. 34 is a table specifying values of a learning updating amount ΔWC provided in the fuel injection controller. 
     FIG. 35 is a graph showing the variation of purge learning values when the fuel injection controller switches the purge valve to PURGE ON. 
     FIG. 36 is a waveform diagram showing the variation of AFR feedback correction coefficient α after the fuel injection controller releases a clamp. 
     FIG. 37 is graph showing general flowrate characteristics of a purge valve driven by a linear solenoid. 
     FIG. 38 is a table specifying values of a learning updating amount ΔOFSPV provided in the fuel injection controller. 
     FIG. 39 is a graph showing the variation of offset learning values OFSTPV when the fuel injection controller switches the purge valve to PURGE ON. 
     FIG. 40 is a graph showing the characteristics of a purge fuel cylinder intake amount prediction value QEFC found by the fuel injection controller. 
     FIG. 41 is a graph showing a table of purge correction amounts ISCEVP provided in the fuel injection controller. 
    
    
     DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     Referring to FIG. 1 of the drawings, a throttle valve 6 for adjusting the intake air volume and an air flow meter 7 for measuring the intake air volume are disposed in an intake pipe 17 of an automobile engine. Fuel is injected into the intake air from an injector 8, and the mixture of air and fuel is supplied to am engine cylinder. A control unit 2 consisting of a microprocessor determines a valve opening pulse width (injection pulse width) of the injector 8 which intermittently opens in synchronism with the engine such that the ratio of the intake air volume measured by the air flow meter 7 upstream of the throttle valve 6 to the fuel amount supplied to a cylinder from the injector 8 (i.e. the AFR) is almost equal to a theoretical AFR regardless of the engine running conditions. 
     Fuel stored in a fuel tank 15 is supplied to the injector 8 via a pump, not shown. A catalytic converter 4 containing three-way catalyst for treating the three toxic components in the exhaust, i.e. CO, HC and NOx, is installed in an exhaust pipe 3. 
     If the three-way catalyst is to be able to treat these three toxic components simultaneously, the AFR of the gas mixture supplied to the engine must lie within a narrow range (referred to hereinafter as a catalyst window) having the theoretical AFR as its center. If the AFR shifts to the rich side of this catalyst window, the amount of CO and HC which is discharged increases, while if it shifts to the lean side, more NOx is discharged. The controller 2 feedback controls the fuel injection amount based on a real AFR signal from an oxygen (O 2 ) sensor 5 installed upstream of the catalytic converter 4 of the exhaust pipe 3 such that the AFR of the gas mixture supplied to the engine cylinder is always within the catalyst window. 
     The characteristics of the O 2  sensor are such that its output varies rapidly at an exhaust gas oxygen concentration corresponding to the gas mixture having the theoretical AFR. If the mixture is on the rich side of the theoretical AFR, its output is approximately 1-volt, while if the mixture is on the lean side, its output is approximately 0-volt. Further, if the O 2  sensor output is higher than a slice level of approximately 0.5-volt, it is determined that the AFR of the gas mixture is rich, while if its output is lower them this slice level, it is determined that the AFR of the gas mixture is lean. If this determination is synchronized with the engine rotation, a determination may be made as to whether the AFR has Just changed to rich from lean or vice versa, or whether it is continuously on the rich or lean side. 
     Based on these determination results, the controller 2 performs feedback control of the AFR. In other words, immediately after the AFR has changed to rich, a step amount P is subtracted from the AFR feedback coefficient α, and integral amount I are then subtracted from α until Just before the AFR changes to lean. On the other hand, P is added to α immediately after the AFR has changed to lean, and I are then added to α until just before the AFR changes to rich. By adding a large value P in a stepwise manner immediately after there has been a change-over of AFR, a fast response is obtained, and by subsequently adding small values I after this stepwise change, the AFR is reverted to the other side gradually. In this way, the feedback control is stabilized. 
     In order to perform this feedback control, signals are input to the controller 2 from a crank angle sensor 9 for outputting a signal corresponding to the engine rotation speed and a Ref signal showing the basic position of the crank angle, a sensor 10 for detecting the opening TVO of the throttle valve 6, a water temperature sensor 11 for detecting the temperature of the engine cooling water, and a vehicle speed sensor 12 for detecting the vehicle speed. 
     If however the injector 8 becomes closed with the passage of time, the fuel amount supplied is less even if the injector 8 is driven with the sine pulse width, and every time the engine is started. The AFR will tend to be on the lean side for some time after AFR feedback control begins. To avoid this, the controller 2 performs basic AFR learning. The average value of the correction coefficient α settles at a higher value (around which α fluctuates) than the control center value (1.0) some time after AFR feedback control begins. Therefore, if this value αm is stored as a basic AFR learning value in a battery back-up, the injection pulse width is increased by an amount corresponding to the learning value am from when the engine next starts running, hence the AFR can be maintained within the catalyst window from the very start of feedback control. 
     The fuel supplied to the engine is not only injected by the injector 8, but is also supplied as purge gas from a purge passage 18 connected to an active carbon canister 16. The purpose of this canister 16 is to adsorb, on active carbon, fuel which has evaporated in the fuel tank 15 when the engine is at rest. The adsorbed fuel is separated from the active carbon by atmospheric air led into the canister when the engine is running, and is aspirated as purge gas together with air from the passage 18 into the intake pipe 17 by the negative pressure of the pipe 17. 
     The passage 18 is connected to a collector 17a downstream of the throttle valve 6 of the intake pipe 17, a purge valve 21 and diaphragm valve 22 being provided midway in the passage 18. This purge valve 21 is driven by a linear solenoid which responds to pulse signals sent at fixed intervals (e.g. 6.4 ms) from the controller 2. Its opening is increased the larger an ON duty corresponding to the proportion of ON time. 
     If the purge valve 21 sticks in the fully open position and the adsorbed fuel in the active carbon canister 16 is purged, the engine may stall and its idle rotation speed may increase. The diaphragm valve 22 is intended to prevent this from occurring, and opens or closes according to a VC negative pressure which is related to the throttle opening TVO as shown in FIG. 2. In other words, if the accelerator pedal is returned to its idling position and the throttle 6 is closed, the VC negative pressure approaches atmospheric pressure, and the diaphragm 22 closes the passage 18 regardless of whether the purge valve 21 is open or closed. 
     This purge of adsorbed fuel is performed during AFR feedback control, but if the basic AFR learning value αm is updated also during purge, an error occurs in the learning value αm. The controller 2 therefore prohibits updating of the learning value αm during purge. 
     However, if the fluctuation of AFR which becomes richer after purge begins, is made to correspond only to the correction coefficient α, as α can vary only in fixed proportions, the AFR will be rich for a relatively long time after starting purge until the variation of α has finished. According to this invention, therefore, the controller 2 controls the vehicle such that the AFR error during purge is reduced as far as possible according to the flowcharts shown in FIG. 4-FIG. 21. 
     First, the basic concept of this control will be simply described with reference to FIG. 3, then each item will be described in more detail. The Jobs comprising this control are executed in different time intervals as necessary. 
     As shown in FIG. 3, the purge valve flowrate QPV, which is the sum of the fuel flowrate and the air flowrate through the purge passage, is determined by the purge valve duty EVAP and the pressure difference before and after the purge valve. A purge fuel flowrate QEF may be calculated by: 
     
         QEF=QPV·WC                                        (1) 
    
     where, WC=purge gas fuel concentration. 
     A purge air flowrate QEA contained in the purge valve flowrate QPV may be calculated by: 
     
         QEA=QPV-QEF·KFQ#                                  (2) 
    
     where, KFQ#=a constant for converting the fuel flowrate to an air flowrate. 
     The air flowrate immediately downstream of the purge gas inlet of the intake air pipe 17 is the sum of this QEA and the air flowrate Qs measured by the air flow meter 7. 
     If the air flowrate (Qs+QEA) at an upstream position of the intake pipe 17 is determined, the air volume Qc in the engine cylinder may be found by applying a manifold cylinder filling model: 
     
         Qc=(Qs+QEA)·Fload+Qc·(1-Fload)           (3) 
    
     where, Fload is a weighting coefficient. 
     A fuel injection mount Qf from rite injector 8 installed in an engine intake port may be expressed by: 
     
         Qf=Qc·K#-QEFC                                     (4) 
    
     where, 
     K#=constant for making the AFR constant 
     QEFC=purge fuel cylinder intake amount QEFC is determined with respect to QEF assuming that the fuel gas diffuses as it passes along, and that there is a simple time delay. According to this controller, the fuel concentration WC of the purge gas is calculated with a high degree of precision by learning so as to determine how much correction is needed for the air volume and fuel volume during purge. Conventionally, the fuel concentration was not measured, a suitable value merely being found from experience. There was thus room for improvement the exhaust performance or running performance of the vehicle when there was a change-over to PURGE ON or PURGE OFF. Next, each item of the control process of this controller will be described in detail. In this description, English capital letters will in principle be used for symbols denoting quantities, mid expressions used in programming language will be used for symbols and commands used in computations. Calculation of a target duty EVAPT of the purge valve 21, determination of purge cut conditions, and determination of whether or not learning can be performed, take place according to the flowcharts shown in FIG. 4-FIG. 8. This control is performed as a background Job which does not affect the execution periods of other controls. 
     1. Purge Cut Conditions 
     1.1 Full Cut 
     If any of the following conditions (1)-(5) are satisfied, the purge valve 21 is immediately fully closed by setting the purge valve duty EVAP=0. Under these conditions, the diaphragm valve 22 closes, so the purge valve 21 also closes. On the other hand, if all these conditions are released, the purge valve 21 progressively opens. 
     (1) The ignition switch is OFF (step 23 in FIG. 6). 
     (2) The engine is not running (step 25 in FIG. 6). 
     (3) The start switch is ON (step 25 in FIG. 6). 
     (4) The idle switch is ON (step 26 in FIG. 6). 
     (5) The vehicle speed VSP is below a predetermined value VCPC# (step 27 in FIG. 6). 
     These conditions are checked, and if any of them are satisfied, a zero cut flag and a cut flag are set equal to 1 (steps 23-27 of FIG. 6, and step 30 of FIG. 7). The setting of the cut flag to 1 indicates an operation for closing the purge valve, and the setting of the zero cut flag to 1 indicates immediate cut. 
     These flags only have to be set once, so if the non-initial flag #F1STGKZ=1 in a step 29 of FIG. 7, it is determined that the required flags are already set, and the program leaves the routine without proceeding to the step 30. 
     If the non-initial flag=0, the non-initial flags #F1STGKP and #F1STGKY, which relate to the progressive cut mode and PURGE ON mode, are set to 0, and a count value PONREF of a continuous PURGE ON time is set to 0. Further, the non-initial flag #F1STGKZ of the full cut mode is set to 1 (steps 30, 28 of FIG. 7). 
     1.2 Progressive Cut 
     If any of the following conditions (6)-(11) are satisfied, the purge valve 21 is progressively closed. This is due to the fact that if purge is performed under these conditions, running performance and exhaust performance are adversely affected. If all these conditions are released, the purge valve 21 is progressively opened. 
     (6) The load is too small (step 33 in FIG. 6). 
     For example, a pulse width TP corresponding to the cylinder air volume and a lower purge permission limit TPCPC are compared, and if TP&lt;TPCPC, it is determined that the load is too small (steps 32, 33 in FIG. 6). 
     The lower purge permission limit TPCPC is found by looking up a table in FIG. 30 and performing an interpolation calculation from an engine revolution speed NE. In the following description, the operation of looking up a table wherever stated should always be understood to contain an interpolation calculation. 
     (7) The load is too large (step 34 in FIG. 6). 
     For example, a throttle valve air volume flowrate QH0 and an upper purge permission limit EVPCQH# are compared, and if QH0≧EVPCQH#, it is determined that the load is too large. The air flowrate QH0 is determined from the engine revolution speed NE and throttle opening TVO as in the prior art. 
     (8) The AFR is not under AFR feedback control (step 35 in FIG. 6). 
     This is due to the fact that the AFR cannot be maintained within the catalyst window if the AFR is not under feedback control. 
     (9) The AFR is clamped. 
     In this case the AFR feedback correction coefficient α is fixed, AFR feedback control has effectively stopped, and artificial selection flags set to correspond to the following clamps provided as options are set to 0 (steps 37-44 in FIG. 6): 
     (i) Temin clamp (flag #FPGTEM). 
     (ii) O 2  sensor initialization clamp (flag #FPGCLC). 
     (iii) High load region KMR clamp (flag #FPGKMR). 
     (iv) KHOT clamp (flag #FPGKH). 
     The clamp condition (i) corresponds to the case where the effective pulse width Te, obtained by subtracting a non-effective pulse width Ts from a quantity TI described hereinafter, is less than a minimum value. The clamp condition (ii) corresponds to the period during which the O 2  sensor is being initialized. The clamp condition (iii) corresponds to the high load region. The clamp condition (iv) corresponds to high water temperature when the engine tends to overheat. 
     The reason why artificial selection flags were used is due to the fact that purge speed requirements are different according to the type of vehicle, i.e. to the fuel tank system, and it is desired to adjust the purge area. However, as AFR errors due to purge cannot be corrected during clamp, the developers made provisions so that the values of the flags could be artificially selected. The values of the flags are therefore determined according to engine specifications when the engine is developed. 
     FIG. 31 shows what happens to the purge area after the aforesaid PURGE OFF areas are excluded. When condition (6) is satisfied, purge is cut off in the area shown by the TP cut arrow in the figure. When condition (7) is satisfied, purge is cut off in the area shown by the QH0 cut arrow in the figure. When condition (9)(iii) is satisfied, purge is cut off in the area should by the KMR cut in the figure. The remaining area is the area where purging is carried out, but even in this area, purge cut may be carried out according to the setting of various options. 
     (10) A purge learning cut flag=1 
     If all the following conditions are satisfied, a purge learning cut flag #FWCCUT is set equal to 1 (step 60 in FIG. 8). Purge learning will be described in more detail hereinafter. 
     (i) EONREF#≠FFFF (step 51 in FIG. 8). 
     EONREF# is provided to select whether or not to artificially perform purge cut for purge learning. If FFFF, which is the maximum value in hexadecimal notation, is artificially substituted in EONREF#, purge cut for purge learning can be avoided. 
     (ii) An offset learning reservation flag≠1 (step 52 in FIG. 8). 
     Offset learning is learning to absorb scatter in the actuation of the purge valve 21, i.e. the scatter when the purge valve 21 begins to open. This will be described hereinafter. 
     (iii) A purge learning permission flag≠1 (step 54 in FIG. 8). 
     If the purge learning is permitted, a continuous PURGE ON time counter value PONREF is set to 0 (steps 54, 61 in FIG. 8). This counts the continuous PURGE ON time from when purge learning has finished. 
     (iv) The continuous PURGE ON time counter PONREF is greater than the predetermined value #EONREF (step 55 in FIG. 8). 
     (v) The AFR is under feedback control, and the α is not clamped (step 56 in FIG. 8). 
     (vi) A basic duty EVAPO, described hereinafter, is greater than a lower limit (step 57 in FIG. 8). 
     (vii) The load QH0 is less than an upper limit (step 58 in FIG. 8). 
     (viii) A certain delay time has passed after the aforesaid conditions (i)-(vii) are satisfied (step 59 in FIG. 8). 
     More specifically, the reason why purge cut is performed when condition (iv) is satisfied is that if purge is performed too long, the fuel separating from the active carbon canister 16 decreases. The fuel concentration of the purge gas falls, and shifts away from the fuel concentration used for calculation (i.e. the purge learning value WC, described hereinafter). Therefore, even if the conditions are such as to permit purge, purge learning is performed while performing purge cut intermittently. 
     (11) An offset learning cut flag=1 
     If all the following conditions are satisfied, an offset learning cut flag is set equal to 1 (step 67 in FIG. 8). 
     (i) An offset learning reservation flag=1 (step 52 in FIG. 8). 
     As described hereinafter, this reservation is made when a purge learning value is clamped and purge learning has finished. 
     (ii) The AFR is under feedback control, and the α is not clamped (step 64 in FIG. 8). 
     (iii) The basic duty EVAPO, described hereinafter, is lower than an upper limit (step 65 in FIG. 8). 
     (iv) A certain delay time has passed after the aforesaid conditions (i)-(iii) are satisfied (CONTOFJ≧OFGDLY#) (step 66 in FIG. 8). 
     If any of file aforesaid conditions (6)-(11) are satisfied, the cut flag is set equal to 1 and a slow flag is set equal to 1 (step 47 in FIG. 7). The setting of the slow flag to 1 indicates that the opening or closing of the purge valve is performed gradually. The purge valve 21 is therefore gradually closed by setting the slow flag to 1 and the cut flag to 1. 
     On the other hand, when all of these conditions (6)-(11) are released, the controller is changed over to PURGE ON. The cut flag is then set to 0 and the slow flag is set to 1 so as to gradually open the purge valve 21 (step 49 in FIG. 7). 
     If the purge valve 21 is opened or closed in stages, the flags only have to be set once and the continuous PURGE ON time counter (PONREF) is cleared as in the steps 29, 30, 28 in the case of immediate cut (steps 46, 47, 45, and steps 48, 49, in FIG. 7). 
     2. Purge Valve Opening Characteristics 
     2.1 Relation to Purge Cut Conditions 
     If any of the aforesaid conditions (6)-(11) are satisfied, the purge valve duty EVAP is gradually reduced until it is equal to a purge valve target duty EVPCUT# during PURGE OFF (steps 91-95, and steps 91-94, 96, 97 in FIG. 9). The duty reduction rate at this time is expressed by (EVAPT-EVPCUT#)·SPECUT. SPECUT is a predetermined valve closing proportion of the purge valve per unit time, and EVAPT is a target duty during PURGE ON which will be described in the next section. The calculation of EVAP shown in FIG. 9 is carried out once every 100 ms as an independent job from the Jobs of FIG. 4-FIG. 8. 
     If all of the aforesaid conditions (1)-(11) are released, EVAP is first set equal to EVPCUT#, and the purge valve duty EVAP is increased at a rate of (EVAPT-EVPCUT#)·SPEON# until EVAP=EVAPT (steps 91,92, 98-100, and steps 91, 92, 98, 99, 101, 102 in FIG. 9). SPEON# is a predetermined valve opening proportion of the purge valve per unit time. 
     The control waveform of the purge valve duty EVAP is shown by the solid line FIG. 32. When there is a change-over from PURGE OFF to PURGE ON, EVAP is first set equal to EVPCUT#, and then gradually increases to EVAPT. When on the other hand there is a change-over from PURGE ON to PURGE OFF, EVAP is gradually decreased from EVAPT to EVPCUT#. In FIG. 32, the situation when there is a change-over to immediate cut is also shown by the broken line, and in this case only, EVAP becomes to 0 in one step. 
     The value of EVAP is also given In a background job in FIG. 4 (steps 12-17). If, in all cases, the value of EVAP is given by a Job executed every 100 msec as shown in FIG. 9, a response delay arises in the change of EVAP when the engine running condition is transient. A response delay occurs even when It is desired to perform an immediate cut In a transient state. In order to change EVAP over to the required value promptly during such a transient state, EVAP is calculated by a background job except when the purge valve 21 is opened or close progressively. 
     2.2 Purge Valve Target Duty 
     The purge valve target duty EVAPT is calculated by the following equation (step 9 of FIG. 4): 
     
         EVAPT=EVAP0+OFSTPV+VBOFPV                                  (5) 
    
     where, 
     EVAP0=purge valve basic duty 
     OFSTPV=purge valve actuation duty learning value 
     VBOFPV=battery voltage correction factor of purge valve actuation duty 
     EVAPT is provided with an upper limit (EVAPMAX#) (steps 10, 11 of FIG. 4). 
     Herein, OFSTPV of equation (5) is a learning value (referred to hereinafter as an offset learning value) corresponding to the purge valve actuation duty. The basic duty EVAP0 of equation (5) is calculated from: 
     
         EVAPO=constant·TQPV/(KPVQH·KPVVB)        (6) 
    
     where, 
     TQPV=purge valve target flowrate 
     KPVQH=negative pressure correction factor of purge valve flowrate 
     KPVVB=battery voltage correction factor of purge valve flowrate 
     or by looking up a table of the characteristics shown in FIG. 26. 
     The purge valve target flowrate TQPV of equation (6) is given by: 
     
         TQPV=Qs·PAGERT                                    (7) 
    
     where, 
     Qs=intake air volume measured by air flow meter 
     PAGERT=target purge rate 
     The target purge rate PAGERT of equation (7) is found from the purge learning value WC corresponding to the fuel concentration of the purge gas by looking up a table of the characteristics shown In FIG. 22 (step 3 in FIG. 4). 
     As shown in FIG. 22, when WC is large, PAGERT is reduced, and when WC is small, PAGERT is increased. As the error in the AFR is large if the fuel concentration is high, the target purge rate PAGERT is decreased if WC is large, i.e. if the fuel concentration is high, and the error in the AFR is thereby prevented from becoming large. On the other hand, when WC is small, i.e. the fuel concentration is low, purge is carried out rapidly at a high target purge rate. 
     In principle, even if the air flow meter flowrate Qs varies, the target purge rate PAGERT is made constant. It therefore has fiat characteristics whether WC is large or small, as shown by the solid line in the upper graph of FIG. 33. However, the purge valve flowrate is a maximum when the purge valve 21 is fully open, and then gradually decreases as the air flow meter flowrate Qs increases as shown on the graph. 
     If there is a fault in the O 2  sensor, air flow meter or throttle sensor, PAGERT is set to a purge rate (constant) NGPGRT# for sensor faults (steps 1, 2 in FIG. 4). 
     In equations (6) and (7) there are five parameters, i.e. TQPV, KPVQH, KPVVB, Qs and PAGERT. When many parameters are used to determine EVAPO as in this case, the precision of the purge valve basic duty EVAPO is affected by the precision to which the number of bytes or the table is given with respect to these parameters. 
     In the flowchart of FIG. 4, therefore, the purge valve target flowrate TQPV is given by the following equation (step 7): 
     
         TQPV=(Qs·PAGERT·coefficient)/KPVQH       (8) 
    
     EVAPO is calculated by the following relation (step 8): 
     
         EVAPO=table value/KPVVB                                    (9) 
    
     The correction precision of these calculation equations is better than that of equations (6) and (7) above. 
     The table value of equation (9) is found from the purge valve target flowrate TQPV by looking up a table of the characteristics shown In FIG. 27. 
     KPVQH in equation (8) is a correction factor for the amount by which the flowrate varies due to the pressure difference before and after the purge valve although the surface area of the flow passage of the valve is constant, and is found from the air flowrate QH0 by looking up a table of characteristics In FIG. 23 (step 4 in FIG. 4). The flow of purge gas becomes more difficult the smaller the pressure difference before and after the purge valve. Therefore, if the throttle valve air flowrate QH0 becomes larger, i.e. If the pressure difference before and after the purge valve becomes smaller for a construct purge valve opening, a correction is made so as to increase the purge valve target flowrate TQPV. 
     Herein, instead of actually detecting the pressure difference before and after the purge valve, QH0 is used as a pressure difference equivalent amount. When the engine is in a transient running condition, a cylinder or volume equivalent pulse width TP represents the purge valve pressure difference better than QH0, so TP could also be used. However, the relation of TP to the purge valve pressure difference is affected by differences of atmospheric pressure and Intake air temperature, therefore QH0 is used herein. The concept of using cylinder air volume equivalent pulse width TP is known in the art. Even if the air volume is measured by an air flow meter, the air actually flows into the cylinder with a substantially first order delay. TP therefore gave a fuel amount which was In a constant proportional relationship to air entering the cylinder with this first order delay. 
     KPWB In equation (9) is found from a battery voltage VB by looking up a table of characteristics In FIG. 24 (step 5 in FIG. 4). When the battery voltage VB falls, even If the purge valve 21 is driven at the same EVAPO, the ON duty value falls and the purge valve flowrate decreases. The value of KPVVB (battery voltage correction factor) is therefore Increased when the battery voltage VB falls, thereby increasing the ON duty value so as to maintain the same flowrate as before the battery voltage VB decreased. 
     VBOFPV, the battery voltage correction factor of the purge valve actuation duty in equation (8), is found from the battery voltage VB by looking up a table of characteristics In FIG. 25 (step 6). As In the case of the injector 8, the opening of the purge valve 21 does not perfectly correspond to the ON duty value, so a part of the duty has no useful effect. This part is affected by the battery voltage VB, and increases the more the battery voltage VB falls. If the battery voltage falls, the battery voltage correction factor of the purge valve actuation duty, VBOFPV, is therefore increased. In this way, the same flowrate is maintained regardless of the battery voltage VB. 
     The respective characteristics of the battery voltage correction factors, KPVVB and VBOFPV, differ according to the type of purge valve. FIGS. 24 and 25 refer to a purge valve driven by a linear solenoid. 
     2.3 Purge Valve Flowrate Prediction Value 
     A purge valve flowrate prediction value QV is given by the following relation (step 19 In FIG. 5): 
     
         QPV=EVAPQ·KPVQH                                   (10) 
    
     where, 
     EVAPQ=purge valve basic flowrate 
     KPVQH=negative pressure correction factor of purge valve flowrate 
     EVAPQ in equation 10 is found from (EVAP-OFSTPV-VBOFPV)·KPWB by looking up a table of characteristics in FIG. 28 (step 18 in FIG. 5). In FIG. 28, the reason why the horizontal axis is not EVAPO·KPVVB is that the value of EVAP-OFSTPV-VBOFPV (i.e. the value during transient fluctuations) and the value of EVAPO (value in the steady state) arc no longer identical when there is a change-over between PURGE ON and PURGE OFF. 
     3. Purge Learning Control 
     The purge gas/mixing ratio is learned separately from the basic AFR learning value αm. This corresponds to the purge gas fuel concentration. The reason why a purge learning value WC is provided separately from the basic AFR learning value αm is that, in contrast to the AFR error due to characteristic scatter in the air flow meter or the injector which has an extremely slow variation, the time fluctuation of the AFR error due to purge gas is relatively rapid. Therefore, by separating these learning values, the precision of AFR control is increased. 
     The fuel concentration of the purge gas is estimated as follows from α, which varies when there is a change-over between PURGE ON and PURGE OFF. 
     Assume that there is no standing error of the AFR, and that when purge learning is performed one or more times, only the purge gas hid becomes more concentrated compared to the immediately preceding occasion while other conditions remain the same. As a result the AFR shifts to rich, and the AFR feedback control coefficient shifts to below the control center value (1.0) so as to return the AFR to lean. Thus, when α has shifted to a lower value, the purge learning value WC is updated to a larger value, this updated WC corresponding to a higher fuel concentration than on the immediately preceding occasion. 
     Conversely, when the fuel concentration is less than oil the immediately preceding occasion, α shifts above the control center value. WC is then updated to a smaller value, the updated WC corresponding to a lower fuel concentration than on the immediately preceding occasion. 
     By estimating the purge gas fuel concentration In this way, AFR errors immediately after a change-over between PURGE ON and PURGE OFF can be prevented without installing a sensor. 
     3.1 Battery Back-up 
     When the ignition is switched ON, the purge learning value WC is initialized once as shown in FIG. 10. 
     When current is first passed through the controller 2, WC is first set equal to 1NWC# (steps 401 and 4O 2  in FIG. 10). 1NWC# is an initial value of WC for initial energization. 
     At all other times when current is passed through the controller 2, WC is set by the following equation (steps 401,405 in FIG. 10): 
     
         WC=WC (storage value)+WCST# 
    
     where, WCST#=WC addition value for engine start-up 
     WCST# takes account of the increase of fuel in the active carbon canister 16 when the vehicle is at rest. If no time elapsed from when the engine was previously at rest to engine start-up, there would be no AFR error due to the WC storage value even during purge when the engine is run. If time did elapse, however, fuel vapor collects the active carbon canister, and this appears as an AFR error when the engine is started. This fuel vapor (i.e. the fuel vapor collected while the vehicle is at rest) is therefore estimated by WCST#. 
     If any sensor has a fault in the WC learning process shown in FIGS. 11-13, WC is set equal to NGWC#, and purge learning is interrupted by setting the purge learning permission flag to 0 (steps 111-113 in FIG. 11). The RAM and flags for purge learning are also initialized or subjected to post-processing (step 114). 
     3.2 Purge Learning Permission Conditions 
     Learning of the purge gas mixing ratio is permitted when there is a change-over to PURGE ON or PURGE OFF. This learning is therefore performed after setting a flag indicating a change-over to PURGE ON or PURGE OFF, i.e. following steps 30, 47 or 49 in FIG. 7. In FIG. 7, if offset learning is not reserved, a WC learning permission flag (#FWCGKOK) is set equal to 1 (steps 82, 83). 
     The reason why learning is permitted when there is a change-over to PURGE ON or PURGE OFF without waiting for α to stop varying is in order to increase the frequency of learning. 
     3.3 Purge Learning Interruption Conditions 
     If the following conditions are satisfied, purge learning is interrupted (steps 116-119, 113 in FIG. 11). 
     (i) A purge learning permission flag=0 (step 116). 
     If there is a change-over from PURGE ON to PURGE OFF or vice versa during a period when purge learning conditions are satisfied, purge learning is interrupted (steps 81, 85 in FIG. 7). 
     (ii) The conditions are those other than when the AFR is under feedback control and α is not clamped (step 117 in FIG. 11). 
     This is because the conditions that the AFR is under feedback control, and that the learning value WC is not clamped, are learning conditions. 
     (iii) The purge valve basic duty (EVAPO) is smaller than a predetermined value (WCGDTY#) (step 118 in FIG. 11). 
     If the basic duty is small, it is impossible to know whether the AFR error is related to the basic duty or the purge valve actuation duty. Purge learning is therefore performed in the high flowrate region and offset learning in the low flowrate region of the purge valve as shown in the lower graph of FIG. 33. 
     (iv) The load represented by the throttle valve flowrate QH0 is higher than a predetermined value WCGQH# (step 119 in FIG. 11). 
     If any of the interruption conditions (i)-(iv) are satisfied, the program proceeds from a step 120 to the step 114, but If the cut flag for purge learning=1 at any intermediate point, the program skips over the step 113 as shown in FIG. 11. 
     The reason why the purge learning permission flag is not set equal to 0 in this case is as follows. If for rely reason purge learning is interrupted during a purge cut for purge learning, the purge valve 21 changes over to PURGE ON. If the purge learning permission flag is 0 at that time, the purge learning flag would be reset to 1 in steps 81-83 in FIG. 7 and PURGE ON learning would begin. In PURGE ON learning, purge learning is not performed until the purge valve duty EVAP exceeds the purge valve offset mount. This offset amount may be set for example to the sum of the battery voltage correction factor VBOFPV related to the purge valve actuation duty and a purge valve operation delay time equivalent amount DLYWCG# (steps 121, 122 in FIG. 11). 
     3.4 Purge Learning Value Updating 
     The average value ALPAV of the initial AFR feedback correction coefficient when purge learning starts is stored in a memory ALPST (steps 131-133 in FIG. 12). The calculation of ALPAV is performed by a method known In the art which is often used for basic AFR learning, as shown in FIG. 17. In other words as shown by steps 263-268 in this flowchart, when the step amount P is added to the AFR feedback coefficient α, ALPAV is given by the equation: 
     
         ALPAV=(ALPHA+ALPO)/2 
    
     where, 
     ALPHA=present value of α 
     ALPO=preceding value of α immediately before adding the amount P 
     However, if the AFR feedback coefficient α shifts from the clamped state to feedback control, the calculation of ALPAV is performed from the first control cycle after the clamp is released as shown in FIG. 36. Therefore, when the P addition court value (COUNTP) is less than 3, ALPAV is set equal to 0 (steps 265,269 in FIG. 17). Of course, both ALPAV and ALPO are 1.0 when the AFR feedback control coefficient α is clamped (steps 261, 262 in FIG. 17). In this way, the value of ALPAV when learning starts is stored in ALPST. Also, the value of ALPAV when learning starts is the same as the value of ALPAV before there is a change-over between PURGE ON and PURGE OFF. 
     While purge learning is permitted, the purge learning value WC is updated by the following equation (step 181 in FIG. 13). 
     
         WC=stored value of WC+ΔWC 
    
     The updated WC is limited between an upper limit (WCMAX#) and a lower limit (WCMIN#) (steps 183-185 in FIG. 13). 
     ΔWC is a learning updating amount. Different values are assigned to it according to whether there is a large or small difference between the AFR correction coefficient and ALPST, as shown in FIG. 34. This process is shown in FIG. 12 and FIG. 13 (if the difference is large, the values are ±PWCH and ±IWCH, while if the difference is small, the values are ±PWCL and ±IWCL). 
     The waveform shown in FIG. 35 will be used instead of FIG. 12 and FIG. 13 to describe how the learning updating values ΔWC are assigned. 
     FIG. 35 refers to the situation when there is a change-over to PURGE ON. 
     When α shifts to lean due to a change-over to PURGE ON, ALPAV, the average value of α (shown by a broken line) also shifts to lean. At a point A where ALPAV&lt;ALPST, the learning value WC is increased stepwise by PWCL# (step amount), and is then increased gradually by IWCL# (integral amount). 
     If this processing is insufficient, α exceeds a predetermined range DALPH# at a point B and shifts further to the lean side, the learning value WC is increased stepwise by PWCH# (which is also a step amount) which has a greater value than the aforesaid PWCL#, and is then increased gradually by IWCH# (integral amount) which has a greater value than the aforesaid IWCL#. In this way, if α deviates from ALPST by an amount greater than DALPH#, the learning speed is increased by giving WC a larger step amount PWCH# or integral amount IWCH#. 
     In order to avoid overshoot of the learning value WC, addition (or subtraction) of the step amount PWCH# is performed only once while purge learning is permitted. 
     From a point D, at which the difference between α and ALPST is again within the predetermined range DALPH#, IWCL# is used, and from a point E at which ALPAV exceeds ALPST, small values PWCL# and IWCL# are used for both the step and integral amounts. 
     The difference between α and ALPST is calculated as ΔALP in a step 135 in FIG. 12. The judgment of whether or not ΔALP is within the predetermined range DALPH# is performed in steps 137, 145, 174 and 177. 
     3.5 Purge Learning Clamp 
     When EVAP=EVAPT or EVAP=EVPCUT, the average value of the peaks of the two immediately preceding purge learning values WC is found. Subsequently, WC is clamped at this value, and purge learning is terminated. The peak value of the purge learning value WC is the value of WC just before PWCL# is added or subtracted. 
     Therefore, just before adding PWCL# to (or subtracting PWCL# from) ΔWC in FIG. 13, the value in a memory OLDWC1 is transferred to a memory OLDWC2, and the value in a memory WC is transferred to the memory OLDWC1. A PWCL addition count value CONTPWCL is then increased by 1 (steps 155, 158, steps 164, 166). When the count value CONTPWCL exceeds a predetermined value NSWCGK# (e.g. 3), it is judged that the learning value has converged, the value of (OLDWC1+OLDWC2)/ 2 is substituted in WC (steps 125, 126 in FIG. 11), and the purge learning permission flag is set equal to 0 (step 128). 
     The reason why the purge learning value WC is clamped in this way is as follows. AFR control precision is increased by separating the purge learning value WC from the basic AFR learning value αm, hence it is desirable to terminate purge learning quickly. If purge learning were carried out for prolonged periods, variations of α due to change of running conditions would come into purge learning as errors. In other words, it is desirable to terminate purge learning within a short time interval during which the running conditions do not change, and to eliminate AFR errors due to change of running conditions at times other than change-over between PURGE ON and PURGE OFF by basic AFR learning. 
     Also, at a point Q in FIG. 35, as the amount PWCL# is added during the purge valve change-over (slow flag=1), it is not counted in the PWCL addition count value (CONTPWCL) (steps 124, 130 in FIG. 11). 
     4. Purge Valve actuation Duty Learning 
     As shown in FIG. 37, the purge valve actuation duty (duty when the purge valve begins to open) of the purge valve 21 driven by the linear solenoid, has a scatter due to temperature dependence. This scatter largely affects the purge rate in the small flowrate region. For example the opening of the purge valve becomes more difficult the higher the temperature, therefore the real purge rate becomes smaller for higher temperature even for the same basic duty EVPO. 
     A learning value corresponding to the purge valve actuation duty (referred to hereinafter as an offset learning value) OFSTPV is therefore introduced separately from the purge learning value WC. 
     In FIG. 37, the purge valve flowrate varies linearly with the ON duty, and its slope is considered to be effectively constant. If this line is considered to undergo a parallel shift depending on the temperature, we may write: 
     
         Target duty=Basic duty+Purge valve actuation duty 
    
     Assume that there are no AFR errors due to other causes, that the purge valve temperature increases from a state wherein offset learning has been performed at least once, and that the purge valve actuation duty has increased. In this case, the opening of the purge valve is delayed due to the temperature rise, the purge valve flowrate decreases, and the purge rate falls. Due to the fall of purge rate, the AFR tends to lean, and to restore it to rich, α and the average value of α (ALPAV) become greater than the control center value (1.0). 
     Therefore if, when α has shifted to a higher value, the offset learning value OFSTPV is updated to a higher value, the purge valve flowrate will be restored to what it was before the temperature rise. This updated learning value corresponds to the purge valve actuation duty after temperature rise. 
     Conversely, if the purge valve opens more quickly due to a fall of purge valve temperature, the purge valve flowrate increases and the AFR tends to rich, so α and ALPAV are shifted to below the control center value. In this case the offset learning value OFSTPV is updated to a smaller value so as to restore the purge valve flowrate to what it was before the temperature drop. This updated learning value is identical to the purge valve actuation duty after temperature drop. 
     The concepts of offset learning and purge learning are therefore exactly the same, the differences between the two residing only in the fact that the names of constants and parameters are different, and the fact that the direction of updating learning values is reversed. Herein, therefore, these differences will be discussed in simple terms. 
     4.1 Offset Learning Permission Conditions 
     Offset learning is also permitted when there is a change-over to PURGE ON or PURGE OFF, but offset learning is reserved fro after the purge learning value WC is clamped (steps 126, 127 in FIG. 11). This is done to separate the AFR error due to purge which is corrected by the learning value WC, and the AFR error due to purge valve actuation scatter which is corrected by the learning value OFSTPV. 
     As shown in FIG. 33, when the scatter of purge valve actuation characteristics due to temperature is superimposed on the graph of purge rate characteristics (solid line), the broken lines in the figure are obtained, and the scatter of purge rate in the low flowrate region rapidly increases. This is because if there is a constant temperature difference, the scatter of the purge valve flowrate is effectively constant irrespective of the purge valve duty as shown in FIG. 37. Therefore, in terms of purge rate, the proportion of scatter is larger the smaller the air flow meter flowrate Qs. 
     Purge learning is therefore first performed in the high flowrate region which is not affected by this scatter so as to remove AFR error due to purge, and then offset learning is performed in the low flowrate region where scatter is large so as to remove AFR error due to scatter of the purge valve actuation duty of the purge valve 21. 
     In a wider sense, the offset learning value is also a purge learning value. 
     4.2 Offset Learning Interruption Conditions 
     In offset learning, If the basic duty EVAPO is greater than a predetermined value OFGDTY#, learning is interrupted (steps 194, 196 in FIG. 14). In other words, offset learning is performed when EVAPO is small. On the other hand, as shown in step 118 in FIG. 11, purge learning is performed only if EVAPO is large. 
     4.3 Learning Value Updating 
     As can be seen by comparing FIG. 38 and FIG. 34, the attachment of a positive or negative sign to the learning updating value ΔOFSTPV is opposite to that for ΔWC. The variation of the learning value OFSTPV when there is a change-over to PURGE ON is therefore as shown in FIG. 39. In this figure, OFSTPV is negative in the upper region and positive in the lower region. 
     5. Basic AFR Learning 
     The basic AFR learning process is shown in FIG. 17. 
     5.1 Learning Prohibition Conditions 
     If any of the following conditions are satisfied, the basic AFR learning value αm is not updated (steps 281-284,285 in FIG. 17). 
     (i) Purge learning has not yet been performed (step 281). 
     (ii) The slow flag=1 (step 282). 
     This is when there is a change-over to PURGE ON or to PURGE OFF. 
     (iii) The purge learning permission flag=1 (step 283). 
     (iv) The offset learning reservation flag=1 or the offset learning permission flag=1 (step 284). 
     The reason why basic AFR learning is prohibited not only during purge as in (ii), but also during purge learning and offset learning as in (iii) and (iv), is to prevent AFR error due to purge gas which has a relatively fast time variation from affecting AFR error which has an extremely slow variation (due to scatter in the characteristics of the air flow meter or injector) for which purpose αm was introduced. 
     The basic learning AFR Call is of course updated by: 
     
         αm=storage value of αm+Δαm 
    
     where, Δαm=learning updating amount, and the learning updating amount is calculated by: 
     
         Δαm=(ALPAV·1.0)·GAIN 
    
     where, 
     ALPAV=average value of ALPHA 
     GAIN=updating proportion (value less than or equal to 1) 
     6. Fuel Injection Pulse Width Characteristic Equation 
     6.1 Fuel Injection Pulse Width 
     A fuel injection pulse width CTIn for each cylinder is calculated by the following equation (step 323 in FIG. 20): 
     
         CTIn=TI+CHOSn+ERACIn                                       (11) 
    
     where, 
     n=Injector number 
     TI=common fuel injection pulse width for all cylinders 
     CHOSn=increase or decrease for each cylinder 
     ERACIn=pulse width shifted from interrupted injection to synchronous injection 
     This equation is known in the art. 
     The fuel injection pulse width TI in equation (11) is calculated by the following equation (step 322 in FIG. 20): 
     
         TI=(TP-TEFC+KATHOS)·TFBYA·(α+αm)+Ts(12) 
    
     for simultaneous Injection, and: 
     
         TI=(TP-TEFC+KATHOS)·TFBYA·(α+αm)·2+Ts(13) 
    
     for sequential injection, 
     where, 
     TP=pulse width corresponding to cylinder air volume 
     TEFC=pulse width corresponding to purged fuel 
     KATHOS=wall flow correction amount 
     TFBYA=target AFR 
     α=AFR feedback correction coefficient 
     αm=basic AFR learning value 
     Ts=Ineffectual pulse width 
     The difference from the prior art resides in the fact that in equations (12) and (13), TEFC is subtracted from TP. When purge gas is introduced into the intake air pipe, a surplus fuel quantity TEFC in the purge gas enters the cylinder. However, to maintain the stone AFR as when purge is not carried out, this purge gas fuel mount is subtracted from the fuel amount supplied to each cylinder from the injector 8. 
     The pulse width corresponding to the cylinder air volume TP is found in the same way as in the prior art (steps 312, 313 in FIG. 20), i.e.: 
     
         TPO=Qs·KCONST#·KTRM/NE                   (14) 
    
     
         TP=TPO·FLOAD+TP·(1-FLOAD)                (15) 
    
     where, 
     TPO=pulse width corresponding to air volume of air flow meter 
     Qs=air volume of air flow meter 
     KCONST#=constant 
     KTRM=trimming coefficient used for correcting air volume error 
     NE=engine rotation speed 
     FLOAD=weighting average coefficient 
     These equations are also known in the art, and are used for phase adjustment to correspond with the cylinder intake timing. 
     6.2 Purge Fuel Equivalent Pulse Width 
     The pulse width corresponding to the purge fuel TEFC is found from the following equation (step 311 in FIG. 20): 
     
         TEFC=QEFC·KCONST#/NE                              (16) 
    
     where, 
     QEFC=prediction value of cylinder purge fuel intake 
     KCONST#=constant 
     NE=engine rotation speed 
     Equation (16) is the same type of equation as equation (14), and performs a unit conversion of the prediction value of cylinder purge fuel intake QEFC to an injection pulse width. 
     The prediction value of cylinder purge fuel intake QEFC is expressed as a series combination of two first order delays (weighting averages)with respect to the purge fuel flowrate (QEF)+dead time. In other words: 
     
         QEF1=QEF·EDMP1#+QEF1·(1-EDMP1#)          (17) 
    
     
         QEF2=QEF·EDMP2#+QEF2·(1-EDMP2#)          (18) 
    
     where, 
     QEF1=Intermediate prediction value of purge fuel flowrate 
     EDMP1#=weighting average coefficient 1 
     QEF2=intermediate prediction value of purge fuel flowrate 
     EDMP2#=weighting average coefficient 2 
     The value obtained by delaying QEF2 by a predetermined number (QEFDLY#) of Ref signals (generated every 180° for 4 cylinders, and every 120° for 6 cylinders), is QEFC (steps 293-295 in FIG. 18). This may be explained as follows. 
     The purge fuel flowrate QEF entering the intake air pipe from the purge valve (fuel alone) has a dead time (simple time delay) until it reaches the cylinder, and the fuel vapor diffuses as It is passes along. The waveform of QEFC may therefore be represented as shown in FIG. 40. 
     If a certain number of memories are prepared to store calculated values of QEF2, and the value of QEF2 is progressively shifted to an adjacent memory, the value of QEF2 corresponding to the preceding number of times QEFDLY# may be set equal to QEFC (step 295 in FIG. 18). 
     The purge fuel flowrate QEF of equation (17) may be calculated by the following equation (step 21 in FIG. 5): 
     
         QEF=WC·QPV·KQPV                          (19) 
    
     where, 
     WC=purge learning value 
     QPV=purge valve flowrate prediction value 
     KQPV=purge valve flowrate correction factor 
     Thus, by multiplying the prediction value of the purge valve flowrate QPV by the value WC corresponding to the fuel concentration of the purge gas, QEF, the purge fuel amount, can be found. 
     The flowrate correction factor KQPV in equation (19) is found from the prediction value of purge valve flowrate QPV by looking tip a table of the characteristics shown in FIG. 29 (step 20 in FIG. 5). 
     7. Intake Air Volume 
     When purge is carried out, the air volume Q used in calculating the injection amount is given by: 
     
         Q=Qs+QEA                                                   (20) 
    
     where, 
     Qs=air volume of air flow meter 
     QEA=purge air flowrate (excluding fuel amount) 
     Herein, if an artificial selection flag FPQA=1, the air volume is corrected by a purge air amount using equation (20), and If FPQA=0, no correction is made (steps 302, 303, and steps 302, 304 in FIG. 19). 
     The reason why equation (20) is used during purge, is that as the air volume entering the intake air manifold 17 from the purge valve 21 is not measured by the upstream air flow meter 7, an AFR lean error is produced by the additional air volume due to purge. During purge, therefore, this lean error is prevented by using Q in equation (20). This purge includes the case where air alone enters without any fuel adsorbed in the active carbon canister 16. There is also a measurement delay in the air flow meter 7, but this can be dealt with as disclosed in Tokkai Hei 3-222849 published by the Japanese Patent Office. 
     The purge air flowrate QEA in equation (20) can be calculated by: 
     
         QEA=QPV-QEF·KFQ#                                  (21) 
    
     where, 
     QPV=purge gas flowrate (air+fuel) 
     QEF=purged fuel flowrate 
     KFQ#=factor for correcting fuel flowrate to air flowrate 
     As QEA is synchronized with the EVAP (purge valve duty) output executed by a Ref signal Job (step 291 in FIG. 18), the value of QEA found by a background job is temporarily stored in a memory QEAB (step 22 in FIG. 5), and the value of QEAB is then transferred to a memory QEA by the Ref signal Job (step 292 in FIG. 18). 
     The air flowrate and fuel vapor flowrate are different although the flowpath is the same, and KFQ# in equation (21) corrects for this difference. 
     8. Wall Flow Correction 
     When the vehicle accelerates, the injection amount must be increased. No matter how good the fuel injection characteristics of the injector may be, however, part of the fuel adheres to the air intake manifold wall. This fuel flows as a liquid down the wall of the air intake pipe, and enters the cylinder at a slower speed than the fuel mixed with air. In other words, due to wall flow, the gas mixture entering the cylinder temporarily becomes thinner. In order to prevent this temporary thinning of the gas mixture, the fuel amount is increased by a wall flow correction mount KATHOS during acceleration. Conversely, during deceleration, the manifold pressure suddenly reverts to a high negative pressure. In this case the fuel adhering to the manifold wall is immediately vaporized, the gas mixture temporarily becomes too concentrated, and CO, HC increase. During deceleration, therefore, this vaporized wall flow amount is subtracted from the fuel amount. 
     Insofar as concerns wall flow correction, a controller which aims to correct the low frequency component of wall flow (the wall flow component which varies relatively slowly) is disclosed in Tokkai Sho 63-38656 and Tokkai Sho 63-38650 published by the Japanese Patent Office. In this controller, a steady state adhesion amount (MFH) is memorized for each running condition of the vehicle. Under transient conditions, the variation of this steady slate adhesion amount is added to (or for deceleration, subtracted from) the pulse width TP corresponding to the cylinder air volume in predetermined proportions for each fuel injection as a total correction amount (KATHOS). 
     Further, a controller which aims to correct the high frequency component of wall flow (the wall flow component which vanes relatively quickly), is disclosed in Tokkai 3-111639 published by the Japanese Patent Office. In this controller, the wall flow accompanying the variation of air volume is calculated by introducing the concepts of an increase/decrease correction amount CHOSn for each cylinder, an interruption injection amount INJSETn for each cylinder, and an over-injection correction mount ERACIn for each cylinder. 
     However, the fuel vapor in the purge gas which evaporates from the fuel tank 15 is a light fuel composed mainly of volatile constituents such as butane, and as they are almost entirely present as vapor even in the intake air pipe, they do not set up a wall flow. In calculating the wall flow correction amount KATHOS, therefore, the purge fuel amount (TEFC) must be removed from consideration. 
     When purge is performed, the steady state adhesion amount MFH is calculated by: 
     
         MFH=MFHTVO·CYLINDR#·(TP-TEFC)            (22) 
    
     where, 
     MFHTVO=adhesion factor 
     CYLINDR#=number of cylinders 
     TP=pulse width corresponding to cylinder air volume 
     TEFC=pulse width corresponding to purge fuel 
     In other words, by subtracting from TP the fuel amount TEFC which does not give rise to wall flow, the prediction precision of the wall flow correction amount KATHOS is improved and the AFR under transient conditions can be given a more suitable value. 
     However, there are some engines wherein a wall flow correction amount is not introduced. In these cases, when an artificial selection flag FPFHL=1, equation (22) is used (steps 315, 316 in FIG. 20). 
     When FPFHL=0, MFH is calculated by: 
     
         MFH=MFHTVO·CYLINDR#·TP 
    
     as in the prior art (steps 315-318 in FIG. 20). Hence, the situation cam be adapted to both types of engine. 
     Similarly, in the case of CHOSn, INJSETn and ERACIn, a common fuel injection pulse width TI for all cylinders is calculated by writing the pulse width corresponding to the cylinder air volume by TP-TEFC=TPP when the artificial selection flag FPFHS=1, stud by TP as in the prior art when FPFHS=0 (steps 319,320, and steps 319, 321 in FIG. 20). 
     9. Idle Rotation Speed Control 
     When purge air is taken into the engine, the output torque increases. In other words, the output largely varies on low load even for the same accelerator depression due to change-over between PURGE ON and PURGE OFF, and the running characteristics of the vehicle are adversely affected. 
     In this case, If an auxiliary air valve whereof the opening can be continuously varied according to a duty signal is provided in a passage by-passing the throttle valve 6, and this auxiliary air valve is throttled as purge air is introduced, impairment of running conditions can be prevented. This auxiliary valve provides control when the engine is running idle, i.e. when the accelerator is not depressed. 
     Therefore, when an artificial selection flag FEVISC=1, an auxiliary valve control duty ISCON may be calculated by the following equation (steps 324,326 in FIG. 21 ): 
     
         ISCON=previous ISCON-ISCEVP                                (23) 
    
     where, ISCEVP=purge correction factor 
     If on the other hand FEVISC=0, ISCON is given by the following relation (steps 324, 327 in FIG. 21): 
     
         ISCON=previous ISCON 
    
     The purge correction factor ISCEVP in equation (23) is found from QEA/KPVQH by looking up a table of the characteristics shown in FIG. 41 (step 325 in FIG. 21 ). 
     The previous ISCON in equation (23) is given for example by: 
     
         ISCON=ISCi+ISCp+ISCtr+ISCat+ISCa+ISCrfn                    (24) 
    
     where, 
     ISCI=Idle feedback control Integral 
     ISCp=Idle feedback control differential 
     ISCtr=air increase amount during deceleration 
     ISCat=D range correction of automatic transmission vehicle 
     ISCa=correction when air conditioner is ON 
     ISCrfn=correction when radiator fan is ON 
     This completes the description of each part of the control system. 
     The action of the controller 2 according to the aforesaid construction will now be described. 
     When there is a change-over to PURGE ON, the AFR temporarily becomes richer. To restore this rich AFR to the theoretical AFR, the fuel amount is reduced by α, but α does not follow the AFR very quickly. As a result, the purge gas fuel concentration becomes higher, and if the purge rate is too high, the AFR moves outside the catalyst window leading to an increase of NOx. During purge, learning is prohibited so that errors do not occur in the basic AFR learning value can, so the only way of dealing with the change of AFR due to purge is to compensate by means of feedback control. 
     In this case, if the fuel concentration of purge gas is known, the AFR can still be kept within the catalyst window from the start of purge. However, the fuel concentration of purge gas varies according to the environmental temperature of the vehicle and the period for which it has been left standing, etc., so it is impossible to have a precise value for the fuel concentration unless It is measured by a sensor. Moreover, values obtained from experience are of only limited use in improving the precision of the AFR. 
     The controller 2, in order to deal with AFR errors due to purge, begins updating a purge learning value WC, introduced separately frown the basic AFR learning value αm, if there is a change of α immediately after a change-over to PURGE ON or PURGE OFF. As shown in FIG. 7, if the values of a cut flag, zero cut flag or slow flag are changed due to a change-over to PURGE ON or PURGE OFF, the purge learning permission flag is set to 1, and provided purge learning has not already been prohibited, purge learning begins (steps 30, 81, 83, steps 47, 81, 83 and steps 49, 81, 83 in FIG. 7, step 116 in FIG. 11, FIG. 12 and FIG. 13). Once purge learning is in progress and it is Judged that the learning value WC has converged, the learning value WC is clamped and purge learning is terminated. 
     When learning begins, the average value of α, ALPAV, is transferred to the memory ALPST (steps 131-133 in FIG. 12). As learning begins due to a change-over to PURGE ON or OFF, the average value of α prior to change-over is sampled by ALPST. 
     By comparing this ALPST with ALPAV, which varies due to change-over to PURGE ON or OFF, it cam be determined whether or not the relative order of magnitude of these two quantities has inverted. Immediately after inversion, a large step amount ±PWCL is chosen as the learning updating value ΔWC, and from the second occasion onwards, a small integral amount ±IWCL which is much smaller than the step amount, is chosen as the learning updating value ΔWC. In this way, when there is an inversion, a large value is given by a step amount PWCL# so that the learning value WC varies in a stepwise manner, while when there is no inversion, WC is made to vary slowly by a small integral amount IWCL#. 
     When ALPAV&gt;ALPST for the first time in FIG. 13, it is judged that the AFR has inverted to rich, and the step amount PWCL# is subtracted from the learning value WC (steps 151-153, 156, 181 in FIG. 13). If the condition ALPAV&gt;ALPST continues it is determined that there has been no inversion, and the integral amount IWCL# is subtracted from the learning value WC (steps 151-153, 160, 181 in FIG. 13). 
     Conversely, when ALPAV&lt;ALPST for the first time, it is determined that the AFR has inverted to lean, and the step amount PWC# is added to the learning value WC (steps 151, 152, 162, 165, 181 in FIG. 13). If the condition ALPAV&lt;ALPST, an integral amount IWCL# is added (steps 151, 152, 162, 168, 181 in FIG. 13). In this way, the learning value WC is updated. 
     When ΔALP=α-ALPST is large, PWCH# and IWCL# are used instead of the aforesaid step amount PWCL# and integral amount IWCH#. 
     Convergence of the learning value WC is determined from the number of inversions in the relative order of magnitude of ALPAV and ALPST. As the step amount ±PWCL# is assigned only when there is an inversion, the number of inversions is equal to the number of additions of PWCL#. Therefore, If a count value CONTPWCL is increased by 1 each time PWCL# is assigned (steps 165, 156 in FIG. 13), the number of inversions can be counted (steps 166, 158). This count value CONTPWCL is compared with a predetermined value NSWCGK# (step 125 in FIG. 11), and it is determined that the learning value WC has converged when the count value reaches the predetermined value. 
     Further, when convergence has been determined, the average value of at least the two immediately preceding learning values is calculated, and the learning value is clamped at this average value. When there is an inversion in the relative order of magnitude, a value in the memory OLDWC1 is transferred to the memory OLDWC2, and the value in the memory WC is transferred to OLDWC1 (steps 162, 164 and steps 153, 155 in FIG. 13). In this way, the third preceding learning value is stored in OLDWC2, the second preceding learning value is stored in OLDWC1, and the immediately preceding learning value is stored in WC. When it is determined that the learning value WC has converged, the average value of the two immediately preceding learning values (OLDWC1+OLDWC2)/2, or the average value of the three immediately preceding learning values (OLDWC1+OLDWC2+OLDWC3)/3 is stored in WC (steps 125, 126 in FIG. 11). The purge learning permission flag is then set to 0, and purge learning is terminated (step 128 in FIG. 11). 
     In the same way, the offset learning value OFSTPV is also updated immediately after a change-over to PURGE ON or OFF (steps 30, 47, 49, 81, 84 in FIG. 7, step 192 FIG. 14, FIG. 15 and FIG. 16). In other words, it is first determined whether or not the offset learning value OFSTPV has converged (steps 234, 236, 238, and steps 225, 227, 230 in FIG. 16, and step 199 in FIG. 14). If it is determined that it has converged, the offset learning value OFSTPV is clamped at the average of the two immediately preceding learning values (steps 199, 200 in FIG. 14). 
     However, if purge learning has not been carried out even once, α(=ALPHA) shifts to a small value when there is a change-over to PURGE ON as shown in FIG. 35. In this example, the learning value WC is updated from a point A at which ALPAV is smaller than ALPST. Although change-over to PURGE OFF is not shown in the figure, learning starts at a point after the change-over when ALPAV has exceeded ALPST. The controller therefore does not wait until a has finished varying due to PURGE ON or OFF, but starts learning Immediately after the change-over. The learning frequency is therefore increased, and learning can rapidly progress. As learning starts immediately after change-over, the AFR can be kept within the catalyst window from the start of purge provided that there is not such a great change of fuel concentration in the purge gas compared to the immediately preceding occasion when purge was carried out. Even if the fuel concentration does change with respect to the previous occasion, the learning value WC at that time is updated, and the AFR is immediately returned to the catalyst window by the updated value. 
     Further, learning starts immediately after a change-over to PURGE ON or OFF, so learning is performed Irrespective of whether the PURGE ON time is long or short. 
     However, if purge learning is continued for a long period and the running conditions change during purge learning, there is a risk that the standing error of the AFR due to time-dependent variations of the injector or air flow meter may be interpreted as AFR errors due to purge. 
     It is therefore determined whether or not the purge learning value WC has converged, and If it is Judged that it has converged, the learning value is clamped. After the learning value WC is clamped, there should be no more AFR errors due to purge as a result of the learning value WC, and purge learning may be terminated without any adverse effect. At the same time as purge learning is terminated, the prohibition of basic AFR learning is released, and standing error of the AFR due to time-dependent variations may then be dealt with by basic AFR learning. By clamping WC, AFR error due to purge and standing error of AFR are clearly distinguished, and the learning precision of these learning values can be maintained at a high level. 
     The learning value WC is updated by a step amount ±PWCL# Immediately after the relative order of magnitude of ALPAV and ALPST has inverted, and by an integral amount ±IWCL# when the relative order of magnitude remains the same. The learning value WC is therefore made to vary with a fast response by the step amount, and smooth learning control is achieved by the integral amount. 
     As the learning value WC is also a control amount, the response characteristics of learning control may degenerate or give rise to hunting according to how this amount is assigned. However, the form of the variation of the learning value WC is the same type of PI waveform as the variation of α regardless of the control period. It is thus possible to achieve both fast response and stability which is characteristic of PI control. 
     Further, when convergence of the learning value WC is approached, inversion of the learning value WC clearly appears in terms of the step amount ±PWCL#. As shown in FIG. 35, in the vicinity of the convergence point, the learning value WC changes from increasing to decreasing at points J and M where the step amount PWCL# is subtracted from the learning value WC, and changes from decreasing to increasing at a point L where the step amount is added to the learning value WC. 
     The learning value WC converges as it undergoes repeated inversion. As inversion of the learning value WC can be detected from the step amount PWCL#, convergence of the learning value is easily determined. Clamping of the learning value WC can therefore be performed rapidly, and the learning value can be clamped at a precise value. 
     According to this embodiment, another step amount +PWCH# is assigned. This amount is used when α has varied more than ALPST, i.e. when the learning value is not near convergence. In the vicinity of convergence, the step amount ±PWCL# should be considered. 
     Further, as convergence is determined from the number of inversions of the learning value WC, the learning value WC can be clamped at a value reasonably close to the convergence center without the effect of overshoot. According to this embodiment, inversion of the learning value is detected by the step mount PWCL#, so the number of additions of PWCL# is equal to the number of inversions of the learning value WC. In this case, the number of additions is incremented irrespective of whether PWCL# is positive or negative. 
     As shown in FIG. 35, when a which had shifted to lean, is converging towards ALPST (the convergence center in this case), ALPAV first cuts ALPST at a point E, overshoots, and cuts ALPST at a point F with less overshoot, following which ALPAV can be considered to have effectively converged at a point G cutting ALPST. 
     The learning value WC alternately inverts from increasing to decreasing, and from decreasing to increasing, as α varies. If a point N in the figure is the current point, the learning peak value immediately prior to the third preceding inversion (learning value at the point J) overshoots, and the learning peak value immediately prior to the second preceding inversion (learning value at the point L) undershoots a little. From the learning peak value Immediately prior to the immediately preceding inversion (learning value at a point M) onwards, the overshoot has effectively assumed a negligible value. Therefore, if the number of inversions of the learning value up to the immediately preceding occasion is equal to a predetermined value (e.g. the three occasions J, L, M), the learning value WC can be determined to have converged, and the average of the learning peak values at the points M, L (the two most recent values), or the average of the learning peak values at the points M, L, J (the three most recent values) taking the current point N as a reference, will be a value which is very close to the convergence center of the learning value. 
     The predetermined value NSWCGK# for determining convergence is not limited to three occasions, mid may also be based on 4 or 5 occasions. This brings the learning value closer to the convergence center, but causes release of prohibition of basic AFR learning to be delayed. 
     However, if there is a standing error of the AFR as when in FIG. 35, ALPST is not 1.0, but 1.2 or 0.8, and the learning updating amount ΔWC is determined based on the shift of α from the control center (1.0), a learning error arises corresponding to this standing error. 
     According to this embodiment, the average value of α immediately prior to changeover to PURGE ON or OFF is sampled, and the learning updating amount ΔWC is calculated based on this value ALPST. The effect of the standing error can therefore be eliminated, and the AFR error due to purge separated from other errors with good precision. 
     The value of α immediately prior to change-over may also be used as a reference, but as there is some scatter in the value of α on each occasion, the precision of the learning value WC is better If the average value of α immediately prior to change-over is used. 
     In the case of the offset learning value OFSTPV, as in the case of the purge learning value WC, the controller does not wait for the variation of α due to change-over to PURGE ON or OFF to finish, and by stating learning immediately after change-over, learning can progress rapidly. Also, by clamping the learning value when it is determined that the offset learning value has converged, the AFR error due to scatter in the purge valve and the standing error of the AFR α be clearly separated. Further, by performing offset learning after clamping the purge learning value, the AFR error due to scatter in the purge valve actuation duty can be separated from the AFR error due to purge itself. 
     Further, by causing the offset learning value OFSTPV to vary by a step mount ±POFSL# immediately after inversion of the relative order of magnitude of ALPAV and ALPST, and by an integral amount ±IOFSL# when the relative order of magnitude remains the same, conversion of the learning value cam be easily determined, and the learning value can be rapidly clamped in the vicinity of the convergence center of the offset learning value without any effect of overshoot when the learning value has reached ALPHA by determining the number of inversions of same. Still further, the effect of standing error of the AFR cam be eliminated by calculating a learning updating amount ΔOFSTPV based on the average value of α immediately prior to change-over to PURGE ON or OFF. 
     According to this embodiment, the case has been described for a purge valve 21 driven by a linear solenoid. The purge valve 21 is however not limited to a valve driven by a linear solenoid, and it may also be a rotary valve or a valve driven by a step motor. In the case of a valve driven by a step motor, however, the flowrate characteristics are not affected by temperature unlike the case of a purge valve driven by a linear solenoid or a rotary valve. The purge valve actuation duty is therefore zero, and there is no need to introduce the offset learning value. 
     The foregoing description of the preferred embodiments for the purpose of illustrating this invention is not to be considered as limiting or restricting the invention, since many modifications may be made by those skilled in the art without departing from the scope of the invention. 
     The embodiments of this invention in which an exclusive property or privilege is claimed are defined as follows: