Lvjinjie

吕金杰 mobile:13662665247 E-mail:LVJINJIE@126.COM

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

        这是我的工控软件系列博客的第二篇,本篇博客中的项目主要是完成对航空仪表进行虚拟测试,此项目只是航空仪表仿真测试软件的一部分,原项目中相关的数据都从工控机的RS232串口传入,然后进行相关的数据分析并在界面上显示各个仪表的实时状态,查看仪表是否能正常工作。但考虑到园友无条件从串口获取正确的实时数据,因此本博客中的工程只对航空仪表的界面进行模拟,这和实际的项目是有很大区别的。 

        本博客因为对原项目进行了大量精简(其实原项目中的代码也就是在一个定时器内处理串口传来的实时数据,然后分析后在界面上显示),因此主要的任务还是界面的绘制上,下面是相关的运行效果图,感兴趣的朋友可以下载源文件和可执行程序运行看看:

        本工程的源代码是用VB写的,感兴趣的园友可以下载源代码运行看看,这里不再单独对源代码进行说明

相关源代码
Const pi = 3.14159265358979
Dim a1 As Long
Dim a2 As Long '
Dim a3 As Long '
Dim a4 As Long '
Dim a5 As Long '
Dim sk1 As Long '
Dim b As Long
Dim a6 As Long
Dim a7 As Long
Dim a8 As Long
Dim a9 As Long
Dim a10 As Long
Dim a11 As Long
Dim a12 As Long
Private s As Integer '声明秒
Private m As Integer '声明分
Private h As Integer '声明小时
Private d As Integer '声明日
  Private s2 As Integer '声明表
  Private s3 As Integer '声明秒
  Dim i, Angle
Option Explicit
Private sf As Integer  '声明秒
Private s1 As Integer  '声明秒
Private Function DtoR(x)
DtoR 
= x * (3.14159265358979 / 180)
End Function

Private Sub Form_Load() 'Graph1
Label1.ToolTipText = "点击此处运行程序 "

Timer7.Enabled 
= True
Picture4_Click
Picture1.Visible 
= True
Picture5_Click
Picture1_Click
Picture6_Click
End Sub
Private Sub Label1_Click()
If Label1 = "飞行启动" Then
Label1.ToolTipText 
= "点击此处关闭程序"
 Label1 
= "金杰设计"
 Timer1.Enabled 
= True
 Timer4.Enabled 
= True
 Label28 
= Label26
 Timer7.Enabled 
= True
 Timer3.Enabled 
= True
Else
If Label1 = "金杰设计" Then
Timer1.Enabled 
= False
Timer2.Enabled 
= False
Timer4.Enabled 
= False

Unload 
Me
End If
End If

Label47 
= "0" & vbCrLf & "1" & vbCrLf & "2" & vbCrLf & "3" & vbCrLf & "4" & vbCrLf & "5" & vbCrLf & "6" & vbCrLf & "7" & vbCrLf & "8" & vbCrLf & "9" & vbCrLf
Label48 
= "0" & vbCrLf & "1" & vbCrLf & "2" & vbCrLf & "3" & vbCrLf & "4" & vbCrLf & "5" & vbCrLf & "6" & vbCrLf & "7" & vbCrLf & "8" & vbCrLf & "9" & vbCrLf
Label14 
= "0" & vbCrLf & "1" & vbCrLf & "2" & vbCrLf & "3" & vbCrLf & "4" & vbCrLf & "5" & vbCrLf & "6" & vbCrLf & "7" & vbCrLf & "8" & vbCrLf & "9" & vbCrLf
Label15 
= "0" & vbCrLf & "1" & vbCrLf & "2" & vbCrLf & "3" & vbCrLf & "4" & vbCrLf & "5" & vbCrLf & "6" & vbCrLf & "7" & vbCrLf & "8" & vbCrLf & "9" & vbCrLf

End Sub

 

Private Sub Picture1_Click()
Dim i, Angle
Static flag As Boolean
If flag = False Then
flag 
= True
For i = 0 To 72
If i > 0 Then Load Line181(i)
Line181(i).Visible 
= True
Line181(i).BorderWidth 
= 2
Line181(i).BorderColor 
= RGB(2552550)     '设置LINE的精细和颜色
Next i
For i = 0 To 72
Picture1.Scale (
-11)-(1-1)
'Picture1.Circle (-1, 1), 30 '可删除
'
Picture1.FillColor = RGB(250, 0, 0)
Angle = i * 2 * Atn(1/ 18 '画标点
Line181(i).X1 = 0.98 * Cos(Angle)
Line181(i).Y1 
= 0.98 * Sin(Angle)


Line181(
72).BorderWidth = 4 '设置特殊角线宽
Line181(63).BorderWidth = 4
Line181(
54).BorderWidth = 4
Line181(
45).BorderWidth = 4
Line181(
36).BorderWidth = 4
Line181(
27).BorderWidth = 4
Line181(
18).BorderWidth = 4
Line181(
9).BorderWidth = 4 '设置特殊角线宽

Line181(
72).BorderColor = RGB(25500'设置90度的颜色
Line181(63).BorderColor = RGB(25500'设置225度的颜色
Line181(54).BorderColor = RGB(25500'设置180度的颜色
Line181(45).BorderColor = RGB(25500'设置-225度的颜色
Line181(36).BorderColor = RGB(25500'设置-90度的颜色
Line181(27).BorderColor = RGB(25500'设置0度的颜色
Line181(18).BorderColor = RGB(25500'设置0度的颜色
Line181(9).BorderColor = RGB(25500'设置45度的颜色

Line181(i).X2 
= Cos(Angle)
Line181(i).Y2 
= Sin(Angle)
Next i
= 15

 
End If
End Sub

Private Sub Picture4_Click() '时钟

s1 
= 0
= 0
= 0
= 0
Dim i, Angle
Static flag As Boolean
If flag = False Then
flag 
= True
For i = 0 To 65
If i > 0 Then Load Line183(i)
Line183(i).Visible 
= True
Line183(i).BorderWidth 
= 2
Line183(i).BorderColor 
= RGB(2552550'设置LINE的精细和颜色
Next i
End If
For i = 0 To 65
Picture4.Scale (
-11)-(1-1)
Picture4.Circle (
-11), 30
Angle 
= i * 2 * Atn(1/ 15
Line183(i).X1 
= 0.99 * Cos(Angle)  '设置刻度线长
Line183(i).Y1 = 0.99 * Sin(Angle) '设置刻度线长
Line183(0).BorderWidth = 3 '设置12,15,18,21的线宽
Line183(5).BorderWidth = 3
Line183(
10).BorderWidth = 3
Line183(
15).BorderWidth = 3
Line183(
20).BorderWidth = 3 '设置12,15,18,21的线宽
Line183(25).BorderWidth = 3
Line183(
30).BorderWidth = 3
Line183(
35).BorderWidth = 3
Line183(
40).BorderWidth = 3 '设置12,15,18,21的线宽
Line183(45).BorderWidth = 3
Line183(
50).BorderWidth = 3
Line183(
55).BorderWidth = 3
Line183(
0).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line183(5).BorderColor = RGB(25500)
Line183(
10).BorderColor = RGB(25500)
Line183(
15).BorderColor = RGB(25500)
Line183(
20).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line183(25).BorderColor = RGB(25500)
Line183(
30).BorderColor = RGB(25500)
Line183(
35).BorderColor = RGB(25500)
Line183(
40).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line183(45).BorderColor = RGB(25500)
Line183(
50).BorderColor = RGB(25500)
Line183(
55).BorderColor = RGB(25500)
Line183(i).X2 
= Cos(Angle)
Line183(i).Y2 
= Sin(Angle)
Next i
End Sub

 

 

Private Sub Picture5_Click()
Dim i, Angle
Static flag As Boolean
If flag = False Then
flag 
= True
For i = 0 To 23
If i > 0 Then Load Line160(i)
Line160(i).Visible 
= True
Line160(i).BorderWidth 
= 2
Line160(i).BorderColor 
= RGB(000'设置LINE的精细和颜色
Next i
For i = 0 To 23
Picture5.Scale (
-11)-(1-1)
Picture5.Circle (
-11), 30
Picture5.FillColor 
= RGB(25000)
Angle 
= i * 2 * Atn(1/ 5
Line160(i).X1 
= 0.95 * Cos(Angle)
Line160(i).Y1 
= 0.95 * Sin(Angle)
Line160(
12).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line160(11).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line160(10).BorderColor = RGB(25500)  '设置12,15,18,21的颜色
Line160(9).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line160(8).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line160(7).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line160(6).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line160(5).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line160(4).BorderColor = RGB(2552550'设置12,15,18,21的颜色

 

Line160(
3).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line160(2).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line160(1).BorderColor = RGB(02550'设置12,15,18,21的颜色

Line160(
18).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line160(19).BorderColor = RGB(02550'设置12,15,18,21的颜色

Line160(
20).BorderColor = RGB(02550'设置12,15,18,21的颜色

Line160(i).X2 
= Cos(Angle)
Line160(i).Y2 
= Sin(Angle)
Next i
= 15
 
End If

End Sub

Private Sub Picture6_Click()
Dim i, Angle
Static flag As Boolean
If flag = False Then
flag 
= True
For i = 0 To 23
If i > 0 Then Load Line162(i)
Line162(i).Visible 
= True
Line162(i).BorderWidth 
= 2
Line162(i).BorderColor 
= RGB(000'设置LINE的精细和颜色
Next i
For i = 0 To 23
Picture6.Scale (
-11)-(1-1)
Picture6.Circle (
-11), 30
Picture6.FillColor 
= RGB(25000)
Angle 
= i * 2 * Atn(1/ 5
Line162(i).X1 
= 0.95 * Cos(Angle)
Line162(i).Y1 
= 0.95 * Sin(Angle)
Line162(
12).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line162(11).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line162(10).BorderColor = RGB(02550)  '设置12,15,18,21的颜色
Line162(9).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line162(8).BorderColor = RGB(02550'设置12,15,18,21的颜色
Line162(7).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line162(6).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line162(5).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line162(4).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line162(3).BorderColor = RGB(2552550'设置12,15,18,21的颜色
Line162(2).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line162(1).BorderColor = RGB(25500'设置12,15,18,21的颜色

Line162(
18).BorderColor = RGB(25500'设置12,15,18,21的颜色
Line162(19).BorderColor = RGB(25500'设置12,15,18,21的颜色

Line162(
20).BorderColor = RGB(25500'设置12,15,18,21的颜色

Line162(i).X2 
= Cos(Angle)
Line162(i).Y2 
= Sin(Angle)
Next i
= 15
 
End If
End Sub

Private Sub Timer2_Timer() '时钟

Label26 
= Time

= s + 1 '飞行时间
If s >= 60 Then
= 0 '重新计算秒
= m + 1 '逢秒为60则分钟加1
If m >= 60 Then
= 0 '重新计算分
= h + 1 '逢分钟为60则小时加1
If h >= 24 Then
= 0 '重新计算小时
= d + 1 '逢24小时则天数加1
End If
End If
End If
Label31 
= h & "" & m & "" & s & ""


Const H1 = 61 '时钟
Const M1 = 62
Const s1 = 63
Dim Angle
Static LS
If Second(Now) = LS Then Exit Sub
LS 
= Second(Now)
Angle 
= 0.5236 * (75 - Second(Now) / 5'设置秒针
Line183(s1).BorderColor = RGB(25500)
Line183(s1).BorderWidth 
= 1
Line183(s1).X1 
= 0 - 0.18 * Cos(Angle)
Line183(s1).Y1 
= 0 - 0.18 * Sin(Angle)
Line183(s1).X2 
= 0.995 * Cos(Angle) '设置秒针线长
Line183(s1).Y2 = 0.995 * Sin(Angle) '设置秒针线长
Angle = 0.1047 * (75 - (Minute(Now) + Second(Now) / 60)) '设置分针
Line183(M1).BorderColor = &HF735AE
Line183(M1).BorderWidth 
= 2
Line183(M1).X1 
= 0 - 0.18 * Cos(Angle)
Line183(M1).Y1 
= 0 - 0.18 * Sin(Angle)
Line183(M1).X2 
= 0.95 * Cos(Angle)
Line183(M1).Y2 
= 0.95 * Sin(Angle)
Angle 
= 0.5236 * (15 - (Hour(Now) + Minute(Now) / 60)) '设置时针
Line183(H1).BorderColor = RGB(0255255)
Line183(H1).BorderWidth 
= 3
Line183(H1).X1 
= 0 - 0.18 * Cos(Angle)
Line183(H1).Y1 
= 0 - 0.18 * Sin(Angle)
Line183(H1).X2 
= 0.8 * Cos(Angle)
Line183(H1).Y2 
= 0.8 * Sin(Angle)

 


End Sub

Private Sub Timer1_Timer() '扫描
Static sum As Long
sum 
= sum + 1
Const s = 15 '时钟
'
Label9 = 74.47最小
'
Label9 = 76.97中间值
'
Label9 = 79.48最大
        Static q As Long
           q 
= q + 1
           Label9 
= 76.97 + q / 100
        
If Label9 > 79.18 Then
     
End If
          
If Label9 < 74.77 Then
     
End If
           
Angle 
= 0.5236 * (360 - Second(Now) / 5)
Line181(s2).BorderColor 
= RGB(02550)
Line181(s2).BorderWidth 
= 2
Line181(s2).X1 
= 0
Line181(s2).Y1 
= 0
Line181(s2).X2 
= -Cos(Label9)
Line181(s2).Y2 
= Sin(Label9)
 
Exit Sub
End Sub

Private Sub Timer3_Timer()
a3 
= a3 - 10
a2 
= a2 - 10
a4 
= a4 - 10 / 10
a5 
= a5 - 10 / 10
Label47.Top 
= a3
Label48.Top 
= a2
If a3 = -3930 Then
Label48.Top 
= 400
a2 
= 400
End If
If a2 = -3930 Then
Label47.Top 
= 400
a3 
= 400
End If
Label14.Top 
= -75 + a4
Label15.Top 
= -75 + a5
If a4 = -3930 Then
Label15.Top 
= 400
a5 
= 400
End If
If a5 = -3930 Then
Label14.Top 
= 400
a4 
= 400
End If
If a4 = -4330 Then
a10 
= a10 + 1
Label10 
= a10
End If
If a5 = -4330 Then
a10 
= a10 + 1
Label10 
= a10
End If
If a9 = 10 Then
a9 
= 0
Label10 
= "0"
End If
If a10 = 10 Then
a10 
= 0
Label10 
= "0"
a11 
= a11 + 1
Label13 
= a11
End If
If a11 = 10 Then
a11 
= 0
Label13 
= "0"
a12 
= a12 + 1
Label11 
= a11
End If
If a12 = 10 Then
a12 
= 0
Label11 
= "0"
End If
End Sub

Private Sub Timer4_Timer()

 

'Label99 = 74.78最小
'
Label99 = 76.97中间值
'
Label99 = 79.18最大
        Static q As Long
           q 
= q + 1
           Label33 
= q
           Label99 
= 79.18 - q / 90
Label6 
= q
   Label6 
= Label6 / 4
    Label7 
= "100" - Label6 & "%" & vbCrLf
 Label4 
= "剩余燃油" & vbCrLf & Label7 & vbCrLf
Angle 
= 0.5236 * (360 - Second(Now) / 5)
Line160(s2).BorderColor 
= &HFFFF00
Line160(s2).BorderWidth 
= 1
Line160(s2).X1 
= 0
Line160(s2).Y1 
= 0
Line160(s2).X2 
= 0.95 * -Cos(Label99)
Line160(s2).Y2 
= 0.95 * Sin(Label99)
 
If Label33 >= 85 Then
     Label34 
= "副油箱已抛弃!"
     Label34.Visible 
= True
     Shape4.Visible 
= True
     
     
     
End If

If Label33 >= 170 Then
     Label34 
= "注意返航!"
     
     Label34.ForeColor 
= &HFFFF&
      Shape4.BorderColor 
= &HFFFF&
     Shape4.FillColor 
= &HFFFF&
      Timer8.Enabled 
= True
     
End If
If Label33 >= 339 Then
     Label34 
= "剩余燃油够飞行10分钟!"
     Label34.ForeColor 
= &HFF&
      Shape4.BorderColor 
= &HFF&
     Shape4.FillColor 
= &HFF&
     Timer8.Enabled 
= True
     Timer8.Interval 
= 500
End If
If Label33 >= 369 Then
     Label34 
= "警告!剩余燃油仅够飞行5分钟"
     
      Timer8.Enabled 
= True
     Timer8.Interval 
= 250
End If

If Label99 = 74.78 Then
     Label34 
= "燃油耗尽"
     Timer4.Enabled 
= False
     Timer8.Enabled 
= False
End If

 

End Sub
Private Sub Picture7_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 37 Then '向左

 
End If
   
If KeyCode = 39 Then '向右

 
End If
 
If KeyCode = 38 Then
Label5.Top 
= Label5.Top - 10 '向上

Label19.Top 
= Label19.Top - 10
Label19 
= "高度" & (8520 - Label5.Top) & "m"
Label2 
= (8520 - Label5.Top) & "m"

Timer7.Enabled 
= True
 
 
 
If (8520 - Label5.Top) >= 25000 Then
 
 Label3.Visible 
= True
 
 
End If
 
  
If (8520 - Label5.Top) <= 25000 Then
 
 Label3.Visible 
= False
 
 
End If
 
   
If (8520 - Label5.Top) >= 8420 Then
 
 Label19.Top 
= 30
 Label5.Top 
= 70
 
End If
 
 
 

 
 
 
 
End If
 
If KeyCode = 40 Then '向下
 Label5.Top = Label5.Top + 10 '向上
 Label19.Top = Label19.Top + 10
 Label19 
= "高度" & (8520 - Label5.Top) & "m"
 Label2 
= (8520 - Label5.Top) & "m"
 Timer7.Enabled 
= True
 
End If
 
 
If (8520 - Label5.Top) <= 25000 Then
 
 Label3.Visible 
= False
 
 
End If
 
End Sub
Private Sub Timer5_Timer()
'Label99 = 74.77最小
'
Label99 = 76.97中间值
'
Label99 = 79.18最大 Label3
Label29 = Label32 * 2.42857142857143 / 1000 * 3600
 a6 
= a6 + 1
Label32 
= a6 - 1
 Label25 
= 74.77 + Label32 / 90
Angle 
= 0.5236 * (360 - Second(Now) / 5)
Line162(s2).BorderColor 
= &HFFFF00
Line162(s2).BorderWidth 
= 1
Line162(s2).X1 
= 0
Line162(s2).Y1 
= 0
Line162(s2).X2 
= 0.95 * -Cos(Label25)
Line162(s2).Y2 
= 0.95 * Sin(Label25)
 
If Label25 >= 79.17 Then  '向下
Timer5.Interval = 0
Timer5.Enabled 
= False
End If
If Label32 >= 325 Then
Label3 
= "警告:飞机已超过最大飞行速度!"
Label3.Visible 
= True
End If

End Sub
Private Sub Timer6_Timer()
Label29 
= Label32 * 2.42857142857143 / 1000 * 3600
Label32 
= a6 - 1
a6 
= a6 - 1
Label25 
= 74.77 + Label32 / 90
Angle 
= 0.5236 * (360 - Second(Now) / 5)
Line162(s2).BorderColor 
= &HFFFF00
Line162(s2).BorderWidth 
= 1
Line162(s2).X1 
= 0
Line162(s2).Y1 
= 0
Line162(s2).X2 
= 0.95 * -Cos(Label25)
Line162(s2).Y2 
= 0.95 * Sin(Label25)
 
If Label25 <= 74.78 Then '向下
Timer6.Interval = 0
Timer6.Enabled 
= False
End If
If Label32 <= 324 Then
Label3.Visible 
= False
End If
If Label32 <= 0 Then
Label29 
= "0"
End If
End Sub

Private Sub Label27_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
 
Static q1 As Long
Timer5.Enabled 
= True

Timer6.Interval 
= 50
Line7.Visible 
= False
Timer7.Enabled 
= True
 
End Sub
Private Sub Picture2_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Timer5.Enabled 
= False
Timer6.Enabled 
= False

End Sub
Private Sub Label21_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
Static q2 As Long
Timer6.Enabled 
= True
Timer5.Interval 
= 50

Line7.Visible 
= False
Timer7.Enabled 
= True
End Sub
Private Sub Timer7_Timer()
sk1 
= sk1 + 1
 
If sk1 = 1 Then
Label17 
= "    本次飞行资料" & vbCrLf & "----------------------" & vbCrLf
Label17 
= Label17 & "  起飞时间:" & Label28 & vbCrLf
Label17 
= Label17 & "  飞行高度:" & Label2 & vbCrLf
Label17 
= Label17 & "  空  速:" & vbCrLf
Label17 
= Label17 & "  加力速度:" & vbCrLf
Label17 
= Label17 & "  飞行高度:" & vbCrLf
Label17 
= Label17 & "  飞行速度:" & vbCrLf
Label17 
= Label17 & "  发动机功率:" & vbCrLf
Label17 
= Label17 & "  爬升速度:" & vbCrLf
Label17 
= Label17 & "  爬升过载:" & vbCrLf
Label17 
= Label17 & "  巡航速度:" & vbCrLf
Label17 
= Label17 & "  加速度过载:" & vbCrLf
Label17 
= Label17 & "  录音保存格式:" & vbCrLf
Label17 
= Label17 & "  内部燃油:" & vbCrLf
Label17 
= Label17 & "  瞬时转弯速度:" & vbCrLf
Label17 
= Label17 & "  持续转弯速度:" & vbCrLf
End If
If sk1 >= 2 Then
Timer7.Enabled 
= False
sk1 
= "0"
End If
End Sub

Private Sub Timer8_Timer()
a7 
= a7 + 1
If a7 = 1 Then
Shape4.Visible 
= True
End If
If a7 = 2 Then
Shape4.Visible 
= False
a7 
= 0
End If
End Sub

      源代码下载:航空仪表模拟 

      下一篇:键盘虚拟测试

posted on 2010-02-10 09:00  金杰  阅读(2143)  评论(13编辑  收藏  举报