kämst = kommen würdest...

Code:
'DIMs for PID
   Dim Cc As Integer
   Dim C_old As Integer
   Dim Drive As Bit                                         ' Regulator on ?
   Dim Manual_value As Single                               ' Output if not regulating
   Dim Pulse As Word
   Dim Pakt As Word
   Dim Sp As Single                                         ' Setpoint
   Dim Pv As Single                                         ' Process Value
   Dim Cv As Single                                         ' PID output
   Dim First_execution As Byte                              ' First start recognition
   Dim Initial_error As Single                              ' Startup difference
   Dim Last_pv As Single                                    ' Last PV
   Dim Last_sp As Single                                    ' Last SP
   Dim Sum_error As Single                                  ' Summed error value
   Dim D_pv As Single                                       ' Derrivated delta PV
   Dim Error As Single                                      ' Difference between SP and PV
   Dim Pterm As Single                                      ' Proportional calculated part
   Dim Iterm As Single                                      ' Integrated calculated part
   Dim Dterm As Single

'-----------------------
do
alles mögliche und...
        
Drive = 1
        Pulsein Pulse , Pind , 3 , 0                        ' time slices
        If Pulse = Pakt Then Goto Aa                        ' nur rechnen bei neuem Wert
        Pakt = Pulse
        Incr Etappe
        If Pakt = 0 Then Pakt = 38000
        Pv = Pakt / 111                                     'Fahrt start
        Gosub Regulator
        If C_old = Cc Then Goto Aa                          'Servo nur bei neuem Wert stellen
        Call Servo(4 , Cc)
        C_old = Cc
while
'----------------------------------------------
Regulator:
   ' -----[ Start of PID Regulator]---------------------------------------------

   Const Kp = 0.29                                          ' Proportional factor Eingang x P
   Const Ki = .25                                           ' Integration factor  diff + diff x zeit
   Const Kd = .65                                           ' Derivation factor   abweichung x zeit
   Sp = Speed
                                      ' Derivated calculated part
   ' -----[ Code ]--------------------------------------------------------------
  If Drive = 1 Then
      ' -------- Regulating modus
      Error = Sp - Pv
      Sum_error = Sum_error + Error
      Iterm = Ki * Sum_error                                ' Integrated CV part

      ' -------- First time startup
      If First_execution < 2 Then
         If First_execution = 0 Then
            Sum_error = Manual_value / Ki
            First_execution = 1
            Initial_error = Error
         End If
         Pterm = 0
         Dterm = 0
         If Initial_error > 0 And Error < 0 Then
            First_execution = 2
            Last_pv = Pv
         End If
         If Initial_error < 0 And Error > 0 Then
            First_execution = 2
            Last_pv = Pv
         End If
         Last_sp = Sp

      ' -------- Normal calculation loop
      Else
         D_pv = Last_pv - Pv
         Last_pv = Pv
         Dterm = Kd * D_pv                                  ' Derivated CV part
         If Sp = Last_sp Then
            ' -------- Normal loop when setpoint not changed
            Pterm = Kp * Error                              ' Proportional CV part
            ' -------- Loop when setpoint changed
            Else
            Pterm = 0
            Dterm = 0
            If Sp > Last_sp And Pv > Sp Then
               Last_sp = Sp
               Last_pv = Pv
            End If
            If Sp < Last_sp And Pv < Sp Then
               Last_sp = Sp
               Last_pv = Pv
            End If
         End If                                             ' Enf of SP change seperation                                   '
      End If                                                ' Enf of first time running seperation                                  '

      Cv = Pterm + Iterm                                    ' Summing of the tree
      Cv = Cv + Dterm                                       ' calculated terms

   ' -------- Forced modus
   Else                                                     ' When running in non regulationg modus
      Cv = Manual_value                                     ' Set output to predefined value
      First_execution = 0                                   ' restart bumpless
   End If

      If Cv < -5000 Then Cv = -5000
      If 5000 < Cv Then Cv = 5000
      Cc = Cv / 100
      Cc = Cc * 2
      If Backwards = 0 Then
         Cc = 128 + Cc
         If Cc < 80 Then Cc = 80
         If 128 < Cc Then Cc = 128
      Else
         Cc = 120 - Cc                                      'bei Rückwärtsfahrt
         If Cc < 128 Then Cc = 128
         If 170 < Cc Then Cc = 170

      End If

      'Print "P_akt:" ; Pakt ; " Cv:" ; Cv ; " CC: " ; Cc ; "Car_bearing" ; Car_bearing
Return
Der Code ist angepasst an einen Modellbauregler. Ich habe nur wenige Eingangsimpulse (10 pro Radumdrehung) und nehme daher die Timerzeit zwischen den abfallenden Flanken bei Pulsein Pulse...
Ich hoffe, alle DIMs mitgegeben zu haben. Übrigens stammt der Code auch aus diesem Forum. Ich finde nur die Stelle nicht mehr.