VB 6.0 講義  - 用 VB來監控 電源供應器

說明

  用個人電腦來監控電源供應器,以Visaul Basic 來撰寫程式,透過RS232連線到電源供應器;可以設定電壓、電流及打開供電開關,並可以查詢目前的電源供應器所輸出的電壓、電流。

配備

1. 個人電腦 ( 需有 Com port )

2. 電源供應器 ( 需有 Com port ) - 以 MOTECH LPS305電源供應器 為例

3. RS 232

4. 負載設備 - 以 可變電阻 來調整 馬達負載螺旋槳

步驟

1. 先將配備裝置好(如下圖)

2. 打開VB,並設定新的使用元件-Microsoft Comm Control 5.0 (如下圖)

3. 擺放物件 (如下)

4. 修改物件的屬性 (如下)

將 Text1 的 MultiLine 屬性值 改為 True , ScrollBars 屬性值 改為 2-垂直捲軸

分將 Command1 到 Command6 的 Name 屬性改為以下6個名字

Command1_setup
Command2_request
Command3_clstxt
Command4_TrackIvalue
Command5_TurnOn
Command6_TurnOff

5. 撰寫程式碼 (如下)

Dim Mcommand(20) As String ' 將常用的指令放入字串陣列

Rem -----------------------------------------------
Rem 表單的載入事件, 開放通訊埠
Rem -----------------------------------------------

Private Sub Form_Load()
Mcommand(0) = "VSET1 " ' 將常用的指令放入字串陣列
Mcommand(1) = "VSET2 "
Mcommand(2) = "ISET1 "
Mcommand(3) = "ISET2 "
Mcommand(4) = "VOUT1"
Mcommand(5) = "VOUT2 "
Mcommand(6) = "IOUT1 "
Mcommand(7) = "IOUT2 "
Mcommand(8) = "OUT0 "
Mcommand(9) = "OUT1 "
Mcommand(10) = "STATUS"

Command1_setup.Caption = "送出設定"
Command2_request.Caption = "送出查詢"
Command3_clstxt.Caption = "清除 Debug 視窗"
Command4_TrackIvalue.Caption = "畫圖"
Command5_TurnOn.Caption = "開"
Command6_TurnOff.Caption = "關"

Label1.Caption = "正電壓 負電壓 正電流 負電流"
Label2(0).Caption = ""
Label2(1).Caption = ""
Label2(2).Caption = ""
Label2(3).Caption = ""
Label3.Caption = "每隔 秒追縱一次 (最小單位:0.2秒)"

Text1.Text = "追縱命令: " + Chr$(13) + Chr$(10)
Text2.Text = 10
Text3.Text = 0.2

Combo1.AddItem "設定正電壓"
Combo1.AddItem "設定負電壓"
Combo1.AddItem "設定正電流"
Combo1.AddItem "設定負電流"
Combo1.ListIndex = 0

MSComm1.CommPort = 1
MSComm1.PortOpen = True

End Sub

Rem -----------------------------------------------
Rem 用來暫停用的副程式 TimeDelay(秒)
Rem -----------------------------------------------
Private Sub TimeDelay(PauseTime)
Start = Timer ' 設定開始暫停的時刻。
Do While Timer < Start + PauseTime
DoEvents ' 將程式執行權讓給其它程式。
Loop
End Sub

Rem -----------------------------------------------
Rem 查詢 機器 狀態值 用的副程式
Rem -----------------------------------------------
Function query_status() As Integer
temp = Mcommand(10) + Chr$(13) + Chr$(10)
Text1.Text = Text1.Text + "送出命令: " + temp
MSComm1.Output = temp
Call TimeDelay(0.2)
query_status = Val(Mid(Text1.Text, Len(Text1.Text) - 15, 6)) ' 從 text1 抓狀態值
End Function

Rem -----------------------------------------------
Rem 通訊控制項的OnComm事件程序 引發事件後,將傳回的字串顯示在顯示區中
Rem -----------------------------------------------
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvCD ' CD 線的狀態發生變化.
Case comEvCTS ' CTS 線的狀態發生變化.
Case comEvDSR ' DSR 線的狀態發生變化.
Case comEvRing ' Ring Indicator 變化.
Case comEvReceive ' 收到 RThreshold # of
Text1.Text = Text1.Text + "傳回: " + MSComm1.Input
Case comEvSend ' 傳輸暫存區有 Sthreshold 個字元'
MSComm1.Input = ""
End Select
End Sub

Rem -----------------------------------------------
Rem 設定 正負電壓 及 正負電流
Rem -----------------------------------------------
Private Sub Command1_setup_Click()
Dim inp_value As Single

inp_value = Val(Text2.Text)

temp = Mcommand(Combo1.ListIndex) + Trim(Format(inp_value, "00.000")) + Chr$(13) + Chr$(10)

If inp_value < 0 Or inp_value > 32 Then
MsgBox "輸入值為0 ~ 32之間!", vbInformation + vbOKOnly, "系統訊息"
Else
MSComm1.Output = temp
Text1.Text = Text1.Text + "送出設定: " + temp
End If
End Sub

Rem -----------------------------------------------
Rem 讀取電壓及電流值
Rem -----------------------------------------------
Private Sub Command2_request_Click()
temp = query_status() ' 先查詢機器的狀態值
If temp \ 64 Mod 2 = 0 Then ' 若 第7個bit為0, 則是機器的供電開關未開
MsgBox ("機器的開關未開, 請先打開送電開關")
Else
Text1.Text = Text1.Text + "送出查詢" + Chr$(13) + Chr$(10)
For I = 4 To 7
MSComm1.Output = Mcommand(I) + Chr$(13) + Chr$(10)
Call TimeDelay(0.1)
Next I

Label2(3).Caption = Mid(Text1.Text, Len(Text1.Text) - 15, 6) ' 從 text1 抓數值
Label2(2).Caption = Mid(Text1.Text, Len(Text1.Text) - 35, 6)
Label2(1).Caption = Mid(Text1.Text, Len(Text1.Text) - 56, 7)
Label2(0).Caption = Mid(Text1.Text, Len(Text1.Text) - 76, 7)
End If
End Sub

Rem -----------------------------------------------
Rem 清除 Debug 視窗
Rem -----------------------------------------------
Private Sub Command3_clstxt_Click()
Text1.Text = ""
End Sub

Rem -----------------------------------------------
Rem 畫圖
Rem -----------------------------------------------
Private Sub Command4_TrackIvalue_Click()
Sx = 600 ' 原點 x座標
Sy = 6600 ' 原點 y座標
Ux = 600 * Val(Text3.Text) ' x單位: 600 / 1 秒
Uy = 960 ' y單位: 960 / 1 A
Ox = Sx ' 前1點 x座標
Oy = Sy ' 前1點 y座標
Interval = Val(Text3.Text)
DoTime = Int(8 / Interval) + 1
temp = query_status() ' 先查詢機器的狀態值
If temp \ 64 Mod 2 = 0 Then ' 若 第7個bit為0, 則是機器的供電開關未開
MsgBox ("機器的開關未開, 請先打開送電開關")
Else
Cls
For j = 1 To DoTime
Text1.Text = Text1.Text + "送出查詢" + Chr$(13) + Chr$(10)
MSComm1.Output = Mcommand(6) + Chr$(13) + Chr$(10)
Call TimeDelay(Interval)
I = Val(Mid(Text1.Text, Len(Text1.Text) - 15, 6))
Label2(2).Caption = I
Nx = Ox + Ux ' 計算新點的 x座標
Ny = Sy - Uy * I ' 計算新點的 y座標
Line (Ox, Oy)-(Nx, Ny)
Ox = Nx
Oy = Ny
Next j
End If
End Sub

Rem -----------------------------------------------
Rem 打開供電開關
Rem -----------------------------------------------
Private Sub Command5_TurnOn_Click()
temp = Mcommand(9) + Chr$(13) + Chr$(10)
Text1.Text = Text1.Text + "送出命令: " + temp
MSComm1.Output = temp
End Sub

Rem -----------------------------------------------
Rem 開閉供電開關
Rem -----------------------------------------------
Private Sub Command6_TurnOff_Click()
temp = Mcommand(8) + Chr$(13) + Chr$(10)
Text1.Text = Text1.Text + "送出命令: " + temp
MSComm1.Output = temp
End Sub

6.執行程式

以下4個圖片(分為 停止、低速、中速、高速)的方式來控制 可變電阻,以電腦來畫出電流的變化

電腦來監看電流的變化