⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 自控源程序.frm

📁 文中详细介绍了函数优化(有无约束均可)、组合优化算法的原理和源程序
💻 FRM
📖 第 1 页 / 共 3 页
字号:
      X1              =   480
      X2              =   600
      Y1              =   6000
      Y2              =   6000
   End
   Begin VB.Line Line31 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   5640
      Y2              =   5640
   End
   Begin VB.Line Line32 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   5280
      Y2              =   5280
   End
   Begin VB.Line Line33 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   4920
      Y2              =   4920
   End
   Begin VB.Line Line34 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   4560
      Y2              =   4560
   End
   Begin VB.Line Line36 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   600
      Y1              =   960
      Y2              =   1920
   End
   Begin VB.Line Line37 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   3840
      Y2              =   3840
   End
   Begin VB.Line Line38 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   3480
      Y2              =   3480
   End
   Begin VB.Line Line39 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   3120
      Y2              =   3120
   End
   Begin VB.Line Line40 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   2760
      Y2              =   2760
   End
   Begin VB.Line Line41 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   2400
      Y2              =   2400
   End
   Begin VB.Line Line42 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   2040
      Y2              =   2040
   End
   Begin VB.Line Line43 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   1680
      Y2              =   1680
   End
   Begin VB.Line Line44 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   480
      X2              =   600
      Y1              =   480
      Y2              =   0
   End
   Begin VB.Line Line46 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   720
      Y1              =   0
      Y2              =   480
   End
   Begin VB.Label Label2 
      BackColor       =   &H80000008&
      Caption         =   "1"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H8000000E&
      Height          =   495
      Left            =   240
      TabIndex        =   6
      Top             =   4080
      Width           =   255
   End
   Begin VB.Label Label9 
      BackColor       =   &H80000008&
      Caption         =   "1.5"
      ForeColor       =   &H8000000E&
      Height          =   255
      Left            =   120
      TabIndex        =   5
      Top             =   2280
      Width           =   375
   End
   Begin VB.Label Label10 
      BackColor       =   &H80000008&
      Caption         =   "0.5"
      ForeColor       =   &H8000000E&
      Height          =   255
      Left            =   120
      TabIndex        =   4
      Top             =   5880
      Width           =   375
   End
   Begin VB.Line Line35 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   360
      Y1              =   4200
      Y2              =   4200
   End
   Begin VB.Line Line45 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   600
      Y1              =   120
      Y2              =   960
   End
   Begin VB.Line Line47 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   480
      Y1              =   1320
      Y2              =   1320
   End
   Begin VB.Line Line48 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   480
      Y1              =   960
      Y2              =   960
   End
   Begin VB.Line Line49 
      BorderColor     =   &H8000000E&
      BorderWidth     =   2
      X1              =   600
      X2              =   360
      Y1              =   600
      Y2              =   600
   End
   Begin VB.Label Label11 
      BackColor       =   &H80000012&
      Caption         =   "2"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H8000000E&
      Height          =   255
      Left            =   240
      TabIndex        =   3
      Top             =   480
      Width           =   135
   End
   Begin VB.Line Line9 
      BorderColor     =   &H8000000E&
      X1              =   1800
      X2              =   9840
      Y1              =   7200
      Y2              =   7200
   End
   Begin VB.Line Line28 
      BorderColor     =   &H80000005&
      X1              =   10200
      X2              =   9960
      Y1              =   6240
      Y2              =   6120
   End
   Begin VB.Line Line29 
      BorderColor     =   &H80000005&
      X1              =   10200
      X2              =   9960
      Y1              =   6240
      Y2              =   6360
   End
   Begin VB.Line Line5 
      BorderColor     =   &H8000000E&
      X1              =   5880
      X2              =   9600
      Y1              =   5640
      Y2              =   5640
   End
   Begin VB.Line Line7 
      BorderColor     =   &H8000000E&
      X1              =   5880
      X2              =   9600
      Y1              =   6840
      Y2              =   6840
   End
   Begin VB.Line Line65 
      BorderColor     =   &H8000000E&
      X1              =   5880
      X2              =   5640
      Y1              =   6240
      Y2              =   6120
   End
   Begin VB.Line Line67 
      BorderColor     =   &H8000000E&
      X1              =   5880
      X2              =   5640
      Y1              =   6240
      Y2              =   6360
   End
End
Attribute VB_Name = "PID控制器"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim G, U As Double
Public D, ESS
Dim A, F, B, J, i, L, K, W, LX, DN, KJ, KN, KM, ESSTTC
Dim H, Q As Integer
Dim Tbc, Ttc, JY, XP, PW, CJ, QW, ZX, PL, EM, tao
Dim Ym, Tm, Ytg, SJ, V, ESS0
Dim NN, MM, C, o, N, XT
Dim XX(7, 9), Z(9), Uk()


Public Sub SYMM()

Command3_Click
End Sub

Private Sub Command1_Click()
PID控制器.Hide
PID控制器.Show

End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
 '-----------------------------------求输入函数--------------------------------------------
i = 1
C = Text3: o = C
L = Len(o)
Do
 Z(i) = Left(o, 1): o = Right(o, L - 1)

 
   If Z(i) = "+" Then Let N = i
  If Z(i) = "i" Or Z(i) = "I" Then Let CJ = CSng(Mid(C, N + 1, i - N - 1)) '脉冲输入
  If Z(i) = "S" Or Z(i) = "s" Then Let ZX = CSng(Mid(C, N + 1, i - N - 1)) '正弦输入
  If Z(i) = "U" Or Z(i) = "u" Then Let JY = CSng(Mid(C, N + 1, i - N - 1)) '阶跃输入
  If Z(i) = "T" Or Z(i) = "t" Then Let XP = CSng(Mid(C, N + 1, i - N - 1)) '斜坡输入
  If Z(i) = "^" Then Let PW = CSng(Mid(C, N + 1, i - N - 2))               '抛物线输入
    L = Len(o): i = i + 1
Loop While L > 0

W = -1

 '------------------------------------输入绘图参数-------------------------------------------
  Do
       If ZX <> 0 Then PL = InputBox(" 正弦函数频率ω=?", "输入绘图参数", 1, 3000, 100)
       Tbc = InputBox("                                                                                                                                                                                  采样周期 T=? ", "输入绘图参数", 0.01, 3000, 100)
       Ttc = InputBox("                                                                                                                                                                                  波形长度 t=? ", "输入绘图参数", 20, 3000, 100)
       
       Ytg = InputBox("                                                                                                                                                                                  波形高度 Y=? ", "输入绘图参数", 2, 3000, 100)
  Loop While Ytg = "" Or Tbc = ""
    
   
 '-------------------------------------读取纯滞后时间tao ------------------------------------------

     
     
    W = CSng(Text1): W = W / Tbc: ReDim Uk(W): tao = CInt(W)
     
    
 '-------------------------------------给出系统差分方程------------------------------
    
    XX(4, 2) = 16220.5: XX(4, 1) = -32000: XX(4, 0) = 15780.5: XX(5, 0) = 20
    
    
 '系统差分方程16220.5y(k)-32000y(k-1)+15780.5y(k-2) = 20u(k) XX(4, i) =a(i);XX(5, j)=b(j)
    
 '分母阶数  NN:
     NN = 2
 
 '分子阶数  MM:
     
     MM = 0
  
  '计算u(k)=XX(3, MM)
  
  XX(3, MM) = JY + XP * Tbc * W + 0.5 * PW * Tbc * Tbc * W * W + ZX * Sin(6.283 * PL * Tbc * W)
  If CJ <> 0 Then XX(3, 0) = CJ / Tbc  '脉冲函数u(k)=1/T
  '仿真迭代开始
      W = -1
        Do

          W = W + 1
          If Abs(XX(6, NN)) < 99999 Then Call DYYN_Paint '调用打印y(k)子程序
          If NN <= 1 And MM <= 1 Then XX(6, NN) = XX(3, MM) * XX(1, 0) / (XX(0, 0) + XX(1, 0))
         
           If NN > MM Then Call JSYN '调用计算y(k)子程序
         
          XT = JY + XP * Tbc * W + 0.5 * PW * Tbc * Tbc * W * W + ZX * Sin(6.283 * PL * Tbc * W)
          If XX(6, NN) > Ym Then Let Ym = XX(6, NN): Tm = Tbc * W '记录y(k)的最大值及时间
         
          ESS = XT - XX(6, NN)
          If Tbc * W < Ttc Then ESSTTC = ESS  '记录稳态误差
          
        Loop While U <= 12000 And Abs(XX(6, NN)) < 99999
     
  '仿真迭代结束
     
     If Abs(XX(6, NN)) > 99999 Then DrawWidth = 8: PSet (5400, 3300), QBColor(14 - D): Print " 系统不稳定!"
     
  '变量清零
     W = 0: Q = 0
     For i = 2 To 7
     For J = 0 To NN
     XX(i, J) = 0
     Next J
     Next i

   
       DrawWidth = 4: PSet (2000, 500 + D * 200), QBColor(15 - D): Print " Y 1格="; Ytg / 20; " T 1格="; Ttc / 20; "(秒)"; " Cm = "; Ym; " Tm = "; Tm; "(秒)"; "  e("; Ttc; ")="; ESSTTC
     Ym = 0: Tm = 0
  D = D + 1

End Sub


'------------------计算输出y(k)-----------------------------------------

Public Sub JSYN()

 A = 0: B = 0
For J = 0 To NN - 1
  A = A + XX(4, J) * XX(6, J)
 
  XX(6, J) = XX(6, J + 1)
  
Next J
For J = 0 To MM - 1
  
  B = B + XX(5, J) * XX(3, J)
  
  XX(3, J) = XX(3, J + 1)
Next J
B = B + XX(5, J) * XX(3, J)
XX(6, NN) = (B - A) / XX(4, NN)  'y(k)= XX(6, nn)
A = 0: B = 0: If NN > 0 Then XX(6, NN - 1) = XX(6, NN)

'------------------------------PID控制-------------------------------------------------

XT = JY + XP * Tbc * W + 0.5 * PW * Tbc * Tbc * W * W + ZX * Sin(6.283 * PL * Tbc * W)  '输入量r(t)=XT
  
bl = CSng(Text2): JF = CSng(Text5): WF = CSng(Text4) '读取PID参数

 
If Check1.Value = 1 Then
  If W * Tbc > Ttc / 1.4 Then XX(6, NN) = XX(6, NN) - 0.2
End If     '模拟干扰信号

For J = tao To 1 Step -1: Uk(J) = Uk(J - 1): Next J '模拟纯滞后
 
 
 ESS = XT - XX(6, NN) '计算系统误差e=r-y
  
 EM = EM + ESS '误差积分
 
 Uk(0) = bl * ESS + JF * EM + WF * ((ESS - ESS0) / Tbc) '计算控制量其中(ESS - ESS0) / Tbc误差的微分

ESS0 = ESS

XX(3, MM) = Uk(tao) '控制量延迟后,作为被控对象的输入量

If XX(3, MM) < -1 * CSng(Text9) Then XX(3, MM) = -1 * CSng(Text9) '控制量限幅
If XX(3, MM) > CSng(Text9) Then XX(3, MM) = CSng(Text9)
'-----------------------------------------------------------------------
End Sub

'------------------打印y(k)-----------------------------------------

Private Sub DYYN_Paint()
DrawWidth = 2
G = Int(7790 - 7200 * XX(6, NN) / Ytg): U = Int(Tbc * W * 9600 / Ttc + 600)  'G-y坐标;U-x坐标
If D = 7 Then D = 8
If D = 14 Then D = 0
PSet (U, G), QBColor(15 - 1 * D)
DrawWidth = 1
G = Int(7800 - 1.05 * 7200 * XT / Ytg): PSet (U, G), RGB(0, 0, 0)
G = Int(7800 - 7200 * XT / Ytg): PSet (U, G), RGB(250, 0, 0)
G = Int(7800 - 0.95 * 7200 * XT / Ytg): PSet (U, G), RGB(0, 0, 0)

End Sub






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -