📄 waveviewer.frm
字号:
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 + -