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

📄 waveviewer.frm

📁 采用VB编写的一个电路分析系统
💻 FRM
📖 第 1 页 / 共 3 页
字号:




Private Sub Form_Load()
 Dim k As Long
 Dim temp As Single
 retvalue = SetWindowPos(Me.hwnd, -1, Me.CurrentX, Me.CurrentY, 318, 350, &H40)
    '置中窗体
    Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
'------------------------------------------------------
Call clip1
Call clip2

time_div = 0.005
aroad.n_y = 0
aroad.n_v = 20
broad.n_v = 20
broad.n_y = 0
aroad.n0 = zeronode
aroad.n1 = 1
broad.n0 = zeronode
broad.n1 = 1

For k = 0 To 20
 ymat(k) = 0.1 * (10 - k)
Next k

temp = 1
For k = 0 To 18 Step 3
vmat(k) = 5 * temp
vmat(k + 1) = 2 * temp
vmat(k + 2) = 1 * temp
temp = temp * 0.1
Next k

time_divmat(0) = 0.00005
time_divmat(1) = 0.00002
time_divmat(2) = 0.00001
time_divmat(3) = 0.000005
time_divmat(4) = 0.000002
time_divmat(5) = 0.000001
time_divmat(6) = 0.0000005
time_divmat(7) = 0.0000002
time_divmat(8) = 0.0000001
time_divmat(9) = 0.00000005

 
 hline(0).X2 = Paper.Width
 For k = 1 To Fix(Paper.Height / 400)
 Load hline(k)
 hline(k).Visible = True
 hline(k).X2 = Paper.Width
 hline(k).Y1 = k * 400
 hline(k).Y2 = k * 400
 Next k
 For k = 1 To Fix(Paper.Width / 400)
 Load vline(k)
 vline(k).Visible = True
 vline(k).X1 = k * 400
 vline(k).X2 = k * 400
 Next k
End Sub

Private Sub Form_Unload(cancel As Integer)
If formstate = 1 Then
 cancel = 0
 Else
cancel = 1
waveviewer.Hide
End If
End Sub
 Sub HScroll1_Change()
Call clip1
Call clip2
displayinfos
End Sub
Sub clip1()
Line1.X1 = -Paper.left + M1.left + 50
Line1.X2 = -Paper.left + M1.left + 50
End Sub
Sub clip2()
Line2.X1 = -Paper.left + M2.left + 50
Line2.X2 = -Paper.left + M2.left + 50
End Sub



Private Sub HScroll1_Scroll()
Paper.left = -Fix(HScroll1.value * 7.6)
Call clip1
Call clip2
displayinfos
End Sub

Private Sub M1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
Source.Move M1.left + (X - oldx)
Call clip1
displayinfos
End Sub

Private Sub M1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
oldx = X
M1.Drag
End If
End Sub

Private Sub M2_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
Source.Move M2.left + (X - oldx)
Call clip2
displayinfos
End Sub

Private Sub M2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
oldx = X
M2.Drag
End If
End Sub



Private Sub savedata_Click()
Dim t1, t2, t3 As Single
On Error GoTo marks
CommonDialog1.ShowSave
Open CommonDialog1.FileName For Output As #1
Open fpath + "\pcas\dataexm.dat" For Input As #2
Do Until EOF(2)
Input #2, t1, t2, t3
Print #1, t1, t2, t3
Loop
marks::
End Sub

Private Sub scantime1_Scroll()
If scantime1.Tag > scantime1.TopIndex Then
scantype = 1
Else
time_div = time_divmat(scantime1.TopIndex)
If operating = 1 Then
Call drawwave(1)
End If
End If
scantime1.Tag = scantime1.TopIndex
End Sub

Private Sub setup_Click()
If waveviewer.Width = 4770 Then
   waveviewer.Width = 5775
   setup.Caption = "<<配置示波器<<"
Else
   waveviewer.Width = 4770
   setup.Caption = ">>配置示波器>>"
End If
End Sub
Sub drawgrid()
Dim k As Integer
   For k = 0 To Fix(Paper.Height / 200)
      Paper.Line (0, k * 200)-(Paper.Width, k * 200), RGB(100, 160, 160)
   Next k
  For k = 0 To Fix(Paper.Width / 200)
      Paper.Line (k * 200, 0)-(k * 200, Paper.Height), RGB(100, 160, 160)
   Next k
End Sub

Private Sub Timer1_Timer()
Dim k, Flags As Integer
Dim v1, v2, t As Single
ReDim tempvolt(Tcounts - 1, 2) As Single
' On Error GoTo marks::
 
 If t0 = 0 Then
 Open fpath + "\pcas\dataexm.dat" For Output As #1
 Open fpath + "\pcas\datatmp.dat" For Output As #2
 Print #1, t0, v01, v02
 End If
  
  t = t0
For k = 0 To Tcounts - 1
t = t + dett
v1 = getvalue(1, t)
v2 = getvalue(2, t)

Print #1, t, v1, v2

tempvolt(k, 0) = t
tempvolt(k, 1) = v1
tempvolt(k, 2) = v2
'Print #1, t, v1, v2
Next k
Call drawwave(0)
Flags = 1
marks::
If Flags = 0 Then
Timer1.Enabled = False
Close #1
MsgBox "just this time!"
End If
End Sub

Function getvalue(nn As Integer, times As Single) As Single
Dim k As Integer
If nn = 1 Then
  For k = 0 To frequencytype
  getvalue = getvalue + nodevinfo(aroad.n1, k).a * Sin(2 * pi * nowfrequency(k) * times + nodevinfo(broad.n0, k).alpha)
  getvalue = getvalue - nodevinfo(aroad.n0, k).a * Sin(2 * pi * nowfrequency(k) * times + nodevinfo(broad.n0, k).alpha)
  Next k
ElseIf nn = 2 Then
    For k = 0 To frequencytype
  getvalue = getvalue + nodevinfo(broad.n1, k).a * Sin(2 * pi * nowfrequency(k) * times + nodevinfo(broad.n0, k).alpha)
  getvalue = getvalue - nodevinfo(broad.n0, k).a * Sin(2 * pi * nowfrequency(k) * times + nodevinfo(broad.n0, k).alpha)
  Next k
End If
End Function
Sub drawwave(kind As Integer)
Dim k As Integer
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Timer1.Enabled = False
'-------------------------------------------------------------
If Fix(tempvolt(Tcounts - 1, 0) / time_div) - tempvalue >= Paper.Width Then
  Paper.Cls
  Paper.left = 0
   
If scantype = 1 Then
  time_div = time_divmat(scantime1.TopIndex)
  scantype = 0
End If
 tempvalue = Fix(t0 / time_div)
  papercounts = papercounts + 1
  HScroll1.value = 0
  Close #2
Open fpath + "\pcas\datatmp.dat" For Output As #2
End If

If kind = 0 Then
Paper.Line (Fix(t0 / time_div) - tempvalue, 1000 - Fix((v01 + aroad.n_y) / aroad.n_v))-(Fix(tempvolt(0, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(0, 1) + aroad.n_y) / aroad.n_v))
Paper.Line (Fix(t0 / time_div) - tempvalue, 1000 - Fix((v02 + broad.n_y) / broad.n_v))-(Fix(tempvolt(0, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(0, 2) + broad.n_y) / broad.n_v))

Print #2, t0, v01, v02
Print #2, tempvolt(0, 0), tempvolt(0, 1), tempvolt(0, 2)
For k = 0 To Tcounts - 2

If Fix(tempvolt(k, 0) / time_div) - tempvalue > 4400 Then
Paper.left = 4400 - Fix(tempvolt(k, 0) / time_div) + tempvalue
HScroll1.value = Fix(-Paper.left / 7.6)
End If

Paper.Line (Fix(tempvolt(k, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(k, 2) + broad.n_y) / broad.n_v))-(Fix(tempvolt(k + 1, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(k + 1, 2) + broad.n_y) / broad.n_v))
Paper.Line (Fix(tempvolt(k, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(k, 1) + aroad.n_y) / aroad.n_v))-(Fix(tempvolt(k + 1, 0) / time_div) - tempvalue, 1000 - Fix((tempvolt(k + 1, 1) + aroad.n_y) / aroad.n_v))

Print #2, tempvolt(k + 1, 0), tempvolt(k + 1, 1), tempvolt(k + 1, 2)
Next k

t0 = tempvolt(Tcounts - 1, 0)
v01 = tempvolt(Tcounts - 1, 1)
v02 = tempvolt(Tcounts - 1, 2)
'-------------------------------------------------------------
Timer1.Enabled = True

ElseIf kind = 1 Then

Timer1.Enabled = False
Dim tempt0, tempt1, tempv01, tempv11, tempv02, tempv12 As Single
Paper.Cls
Close #2
Open fpath + "\pcas\datatmp.dat" For Input As #2

If Not EOF(2) Then
Input #2, tempt0, tempv01, tempv02
End If

Do Until EOF(2)
Input #2, tempt1, tempv11, tempv12
Paper.Line (Fix(tempt0 / time_div) - tempvalue, 1000 - Fix((tempv02 + broad.n_y) / broad.n_v))-(Fix(tempt1 / time_div) - tempvalue, 1000 - Fix((tempv12 + broad.n_y) / broad.n_v))
Paper.Line (Fix(tempt0 / time_div) - tempvalue, 1000 - Fix((tempv01 + aroad.n_y) / aroad.n_v))-(Fix(tempt1 / time_div) - tempvalue, 1000 - Fix((tempv11 + aroad.n_y) / aroad.n_v))
tempt0 = tempt1
tempv01 = tempv11
tempv02 = tempv12
Loop
Close #2
Open fpath + "\pcas\datatmp.dat" For Output As #2

'scantime1.Enabled = False

Timer1.Enabled = True
End If
End Sub
Public Sub waveshowstart()
On Error GoTo marks::
Dim temp, flag As Single
Timer1.Enabled = False

Call wholeanalysis(2)
HScroll1.Enabled = True
temp = findmax
Tcounts = Fix(temp / 100) + 2
dett = 0.001 / Tcounts

t0 = 0
v01 = getvalue(1, 0)
v02 = getvalue(2, 0)
papercounts = 1
Timer1.Enabled = True
flag = 1
marks::
  If flag = 0 Then
    main.tbToolBar.Buttons(30).Image = 23
  MsgBox "电路尚不完善或电路中有错误,请先纠正再运行!"
  operating = 0
  End If
End Sub
Function findmax() As Single
Dim tempfrequency As Variant
For Each tempfrequency In nowfrequency

If tempfrequency > findmax Then
 findmax = tempfrequency
End If

Next tempfrequency
End Function
Private Sub displayinfos()
t1.Caption = FormatNumber((Line1.X1 + tempvalue) * time_div, 6)
t2.Caption = FormatNumber((Line2.X1 + tempvalue) * time_div, 6)
va1.Caption = FormatNumber(getvalue(1, CSng(t1.Caption)), 6)
va2.Caption = FormatNumber(getvalue(1, CSng(t2.Caption)), 6)
vb1.Caption = FormatNumber(getvalue(2, CSng(t1.Caption)), 6)
vb2.Caption = FormatNumber(getvalue(2, CSng(t2.Caption)), 6)
t1_t2.Caption = FormatNumber(CSng(t1.Caption) - CSng(t2.Caption), 6)
va1_va2.Caption = FormatNumber(CSng(va1.Caption) - CSng(va2.Caption), 6)
vb1_vb2.Caption = FormatNumber(CSng(vb1.Caption) - CSng(vb2.Caption), 6)
End Sub
Public Sub wave_end()
On Error GoTo marks::
 operating = 0
 t0 = 0
 papercounts = 0
 Close #1
 Close #2
marks::
End Sub

⌨️ 快捷键说明

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