痞酷網_PIGOO

 取回密碼
 立即註冊
搜尋
檢視: 693|回覆: 19

[維修實例] 安捷倫E3631A電源供應串列控制

[複製連結]
發表於 2018-6-10 00:21:46 | 顯示全部樓層 |閱讀模式
本文章最後由 antlu 於 2018-6-10 12:23 AM 編輯

多年來一直想學 VB 從 VB6 到VB2013 都買書來看,就是寫不出神麼玩意來!! 兩個原因: 1.三天打於兩天曬網 2.沒有天份
去年手頭上有一個溫度計有 MODBUS RS422功能,想要讀他的輸出,馬上就踢到鐵板 !! 於是請人幫忙影印一本 VISUAL BASIC 2010 (因為這本書已經不在出版) ,這本書看了半年的確獲得不少知識,裡面很多範例也讓我仿造出這一電源供應的控制.
買書來看才是王道!!

這本書影印也花了近500元


這本說明書也花了100多元


主角 安捷倫E3631A 電供







書本的範例:
安捷倫34401A 電表


固緯電供




安捷倫電源供應的RS232轉接頭




電腦USB轉RS232 轉換器


從書本上借用的程式..(網路上不會這麼詳細)


練習: 學習如何用相關的控制指令和電源供應溝通


進階版: 使用簡易的面板控制








轉到筆電WIN10 上面使用


相關經驗:
  一開始都沒有反應,經過串口大師測試居然可以控制,原來 不需要加" 的個符號,問題找到後就順手許多,我沒有寫"回應"的顯示,因為程式還蠻複雜的,準備下一階段再來努力,因為會牽涉到 Delegate  和 Invoke..
HP 的SCPI 標準指令是不錯的切入點,學了一個儀器之後其他也容易上手.
VB 2010 已經漸漸的不支援了,我對 VB的下載還是不熟練,目前 VB 2010 可以在 WINDOWS XP 使用,但是我的 WINDOWS 10 卻無法下載成功,還需要再學習!!
  USB 轉 RS232 無法使用在 WINDOWS 10 作業系統上,網路有人提供較舊的版本可以用,還需要了解...

  買書來看才是王道!! 這一本書非常推薦給大家!! 絕版怎麼辦? 中原大學圖書館可以借閱,感謝 交大项同學幫忙!!









本主題中包含更多資源 (圖片、附件...)

你需要 登入 才可以下載或檢視,沒有帳號?立即註冊

x

評分

15

檢視全部評分

發表於 2018-6-10 00:51:17 | 顯示全部樓層
Antlu大...

您那條線是 PL2303 晶片嗎??

請見 PL2303 FAKE for Windows
http://yhhuang1966.blogspot.com/2015/07/pl2303hx-win8.html

評分

3

檢視全部評分

發表於 2018-6-10 08:49:19 來自手機 | 顯示全部樓層
A大,源碼打開com port 是用win32的createfile嗎,給你的部分源碼瞧瞧,\\\\或許有用,路徑需要引用escape char不然會被解釋成只有一條\,這個問題是nt特有的,xp或95都可以,vista開始就改了
 樓主| 發表於 2018-6-10 11:41:52 | 顯示全部樓層
xiaolaba 發表於 2018-6-10 08:49 AM
A大,源碼打開com port 是用win32的createfile嗎,給你的部分源碼瞧瞧,\\\\或許有用,路徑需要引用escape  ...

Imports System.IO.Ports
Imports System.Text
Public Class Form1
    Dim IOflag As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each sp As String In SerialPort.GetPortNames
            cmbCOM.Items.Add(sp)
        Next
        cmbCOM.Sorted = True
        cmbCOM.SelectedIndex = 0
        IOflag = False

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        RS232.PortName = cmbCOM.SelectedItem.ToString
        RS232.BaudRate = 9600
        RS232.Parity = IO.Ports.Parity.None
        RS232.DataBits = 8
        RS232.StopBits = IO.Ports.StopBits.Two
        RS232.Encoding = encoding.ASCII
        If Not RS232.IsOpen Then
            RS232.Open()
            RS232.DtrEnable = True
            RS232.Write("SYSTEM:REMOTE" & vbCrLf)
            'RS232.DtrEnable = True
            timedelay(200)
        Else
            MsgBox("通訊埠已經開啟", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
            End
        End If
        If IOflag = False Then
            IOenable.BackColor = Color.Green
            RS232.Write("OUTP OFF" & vbCrLf)
        End If
    End Sub

    Private Sub timedelay(ByRef DT As Integer)
        Dim startTick As Integer
        startTick = Environment.TickCount()
        Do
            If Environment.TickCount() - startTick >= DT Then Exit Do
            Application.DoEvents()
        Loop
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        If Not RS232 Is Nothing Then
            If RS232.IsOpen Then
                RS232.Close()
            End If
        End If
        End
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IOenable.Click
       ' Dim IOflag As Boolean
        If IOflag Then
            IOenable.BackColor = Color.Red
            RS232.Write("OUTP ON" & vbCrLf)
        Else
            IOenable.BackColor = Color.Green
            RS232.Write("OUTP OFF" & vbCrLf)
        End If
        timedelay(200)
        IOflag = Not IOflag
    End Sub

  

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles currTextBox.TextChanged

    End Sub

    Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "1"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "1"
        End If

    End Sub

    Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn2.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "2"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "2"
        End If
    End Sub

    Private Sub btn3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn3.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "3"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "3"
        End If
    End Sub

    Private Sub btn4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn4.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "4"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "4"
        End If
    End Sub

    Private Sub btn5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn5.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "5"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "5"
        End If
    End Sub

    Private Sub bnt6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bnt6.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "6"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "6"
        End If
    End Sub

    Private Sub btn7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn7.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "7"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "7"
        End If
    End Sub

    Private Sub btn8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn8.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "8"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "8"
        End If
    End Sub

    Private Sub btn9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn9.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "9"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "9"
        End If
    End Sub

    Private Sub btn0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn0.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "0"
        End If
        If currsel.Checked Then
            currTextBox.Text &= "0"
        End If
    End Sub

    Private Sub btndot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btndot.Click
        If voltsel.Checked Then
            volt_TextBox.Text &= "."
        End If
        If currsel.Checked Then
            currTextBox.Text &= "."
        End If
    End Sub

    Private Sub btnClr_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClr.Click
        If voltsel.Checked Then
            volt_TextBox.Text = ""
        End If
        If currsel.Checked Then
            currTextBox.Text = ""
        End If
    End Sub



    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVIset.Click
        Dim Buf As String
        Dim voltChoice As String
        ' Dim currChoice As String

        If RadioP6V.Checked Then
            voltChoice = "P6V"
        End If
        If RadioP25V.Checked Then
            voltChoice = "P25V"
        End If
        If RadioN25V.Checked Then
            voltChoice = "N25V"
        End If

        Buf = "APPL " & voltChoice & ","
        Buf = Buf & " " & volt_TextBox.Text & ","
        Buf = Buf & " " & currTextBox.Text

        RS232.DtrEnable = True
        RS232.Write(Buf & vbCrLf)
        timedelay(200)

    End Sub

    Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        RS232.DtrEnable = True
        RS232.Write("*RST" & vbCrLf)
        timedelay(200)
    End Sub
End Class


百分之九九是抄襲,1% 是自己想的!! 這只是送指令給儀器!!完全沒有讀出!!

發表於 2018-6-10 11:54:15 | 顯示全部樓層
話說... Antlu大...
有沒有想把連接的方式做成Wifi傳輸??

http://bbs.pigoo.com/thread-68646-1-1.html
牛.. 可.. 以.. 送.. 給... 你... (因為... 牛不會玩....)

評分

1

檢視全部評分

 樓主| 發表於 2018-6-10 12:20:51 | 顯示全部樓層
xiaolaba 發表於 2018-6-10 08:49 AM
A大,源碼打開com port 是用win32的createfile嗎,給你的部分源碼瞧瞧,\\\\或許有用,路徑需要引用escape  ...
  1. Imports System.IO.Ports ' RS232 的功能匯入
  2. Imports System.Text ' 文字類別匯入
  3. Public Class Form1
  4.     Dim IOflag As Boolean  '全局變數 輸出旗標

  5.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  6.         For Each sp As String In SerialPort.GetPortNames '讀取所有串列埠的 埠口 指令一定用 "SerialPort" 不能用"RS232"
  7.             cmbCOM.Items.Add(sp) '把 讀到的 埠口 用Add方法 加到comCOM 的項目裡面
  8.         Next
  9.         cmbCOM.Sorted = True '排列好方便選擇
  10.         cmbCOM.SelectedIndex = 0 '初定為第一個COM PORT
  11.         IOflag = False '設定無輸出狀態
  12.     End Sub


  13.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  14.         RS232.PortName = cmbCOM.SelectedItem.ToString '把所選到的項目 "埠口" 轉成字串
  15.         RS232.BaudRate = 9600 '鮑率
  16.         RS232.Parity = IO.Ports.Parity.None
  17.         RS232.DataBits = 8
  18.         RS232.StopBits = IO.Ports.StopBits.Two '這一儀器2個停止位元
  19.         RS232.Encoding = Encoding.ASCII '使用 ASCII 編碼方式
  20.         If Not RS232.IsOpen Then '假如RS232沒開 舅開吧!!
  21.             RS232.Open()
  22.             RS232.DtrEnable = True '書上說的 DTR 要設定為 HI
  23.             RS232.Write("SYSTEM:REMOTE" & vbCrLf) 'RS232 指令送出 遠端模式,沒有遠端模式也可以,但是,無法做相關功能(讀)
  24.             'RS232.DtrEnable = True
  25.             timedelay(200) '書上設定的應該是避免下一指令過快下達造成誤動作吧!(我猜)
  26.         Else
  27.             MsgBox("通訊埠已經開啟", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
  28.             End
  29.         End If
  30.         If IOflag = False Then '開機判斷並且把輸出關掉避免誤動作
  31.             IOenable.BackColor = Color.Green
  32.             RS232.Write("OUTP OFF" & vbCrLf) ' 關閉電源供應的輸出指令
  33.         End If
  34.     End Sub

  35.     Private Sub timedelay(ByRef DT As Integer) '這是時間延遲的函數
  36.         Dim startTick As Integer
  37.         startTick = Environment.TickCount()
  38.         Do
  39.             If Environment.TickCount() - startTick >= DT Then Exit Do
  40.             Application.DoEvents() '避免PC因為延遲造成的效率下降
  41.         Loop
  42.     End Sub

  43.     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  44.         If Not RS232 Is Nothing Then
  45.             If RS232.IsOpen Then
  46.                 RS232.Close() '關閉RS232
  47.             End If
  48.         End If
  49.         End '結束程式
  50.     End Sub

  51.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IOenable.Click

  52.         If IOflag Then
  53.             IOenable.BackColor = Color.Red
  54.             RS232.Write("OUTP ON" & vbCrLf) '輸出ON
  55.         Else
  56.             IOenable.BackColor = Color.Green
  57.             RS232.Write("OUTP OFF" & vbCrLf) '輸出OFF
  58.         End If
  59.         timedelay(200)
  60.         IOflag = Not IOflag 'TOGGLE SW
  61.     End Sub

  62.   
  63.     '以下程式設定讀取按鍵功能 若選擇電壓輸入,把值輸到VOLT_TEXTBOX.TEXT 裡面,反之寫到電流項目
  64.     Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
  65.         If voltsel.Checked Then
  66.             volt_TextBox.Text &= "1"
  67.         End If
  68.         If currsel.Checked Then
  69.             currTextBox.Text &= "1"
  70.         End If

  71.     End Sub

  72.     Private Sub btn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn2.Click
  73.         If voltsel.Checked Then
  74.             volt_TextBox.Text &= "2"
  75.         End If
  76.         If currsel.Checked Then
  77.             currTextBox.Text &= "2"
  78.         End If
  79.     End Sub
複製代碼
 樓主| 發表於 2018-6-10 12:22:06 | 顯示全部樓層
dcstudio 發表於 2018-6-10 12:51 AM
Antlu大...

您那條線是 PL2303 晶片嗎??

DCSTUDIO大:
   感恩啊!!
 樓主| 發表於 2018-6-10 15:34:23 | 顯示全部樓層


  1. Imports System.IO.Ports
  2. Imports System.Text

  3. 'OPEN "COM1:9600,n,8,2,rs,cd,lf,pe"---忽 ï視g érequest to send , carrier detect ; send line feed;enable perity check
  4. '"SYST:REM"------不ü¢G能 à有3" 符 Ö號û1,否±_則h會P|異¡±常Ó`
  5. '"*RST;*CLS"  ---reset and clear the power supply------不ü¢G能 à有3" 符 Ö號û1,否±_則h會P|異¡±常Ó`
  6. '"*IND?"------不ü¢G能 à有3" 符 Ö號û1,否±_則h會P|異¡±常Ó`
  7. '"APPL P6V, 3.0, 3.0"------不ü¢G能 à有3" 符 Ö號û1,否±_則h會P|異¡±常Ó`
  8. '"OUTP ON"------不ü¢G能 à有3" 符 Ö號û1,否±_則h會P|異¡±常Ó`

  9. Public Class Form1
  10.     Dim IOflag As Boolean

  11.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  12.         For Each sp As String In SerialPort.GetPortNames
  13.             cmbCOM.Items.Add(sp)
  14.         Next
  15.         cmbCOM.Sorted = True
  16.         cmbCOM.SelectedIndex = 0
  17.         IOflag = False
  18.         IOenable.BackColor = Color.Blue
  19.     End Sub

  20.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
  21.         RS232.PortName = cmbCOM.SelectedItem.ToString
  22.         RS232.BaudRate = 9600
  23.         RS232.Parity = Parity.None
  24.         RS232.DataBits = 8
  25.         RS232.StopBits = StopBits.Two
  26.         RS232.Encoding = Encoding.ASCII
  27.         If Not RS232.IsOpen Then
  28.             RS232.Open()
  29.             btnSend.Enabled = True
  30.             'btnSetVolt.Enabled = True
  31.             RS232.DtrEnable = True
  32.             RS232.Write("SYST:REM" & vbCrLf)
  33.             'RS232.DtrEnable = True
  34.         Else
  35.             MsgBox("~~通q訊XT埠X ê開ø}啟Ó ª錯ï ä誤~(通q信H埠X ê已üw開ø}啟Ó ª)~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
  36.             End
  37.         End If
  38.     End Sub

  39.     Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  40.         Dim Buf As String

  41.         Buf = "APPL " & cmbVOLT.SelectedItem.ToString & ","  '電q壓§¢G範°d圍 ã
  42.         Buf = Buf & " " & voltInput.Text & ","  '設]定w電q壓§¢G值 ¨
  43.         Buf = Buf & " " & currInput.Text   '設]定w電q流y值 
  44.         RS232.DtrEnable = True
  45.         RS232.Write(Buf & vbCrLf)
  46.         TimeDelay(200)
  47.         txtReceive.Text &= Buf & vbCrLf
  48.     End Sub

  49.     Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
  50.         If Not RS232 Is Nothing Then
  51.             If RS232.IsOpen Then RS232.Close()
  52.         End If
  53.         End
  54.     End Sub

  55.     '*****************
  56.     'timeDelay
  57.     '*****************
  58.     Private Sub TimeDelay(ByVal DT As Integer)
  59.         Dim startTick As Integer
  60.         startTick = Environment.TickCount()
  61.         Do
  62.             If Environment.TickCount() - startTick >= DT Then Exit Do
  63.             Application.DoEvents()
  64.         Loop
  65.     End Sub


  66.     Private Sub IOenable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IOenable.Click

  67.         Dim BBuf As String
  68.         IOflag = Not IOflag
  69.         If IOflag Then
  70.             IOenable.BackColor = Color.Red
  71.             'RS232.DtrEnable = True
  72.             RS232.Write("OUTP ON" & vbCrLf)
  73.             txtReceive.Text &= "OUTPut ON" & vbCrLf
  74.         Else
  75.             IOenable.BackColor = Color.Green
  76.             'RS232.DtrEnable = True
  77.             RS232.Write("OUTP OFF" & vbCrLf)
  78.             txtReceive.Text &= Chr(34) & "OUTPut OFF" & Chr(34) & vbCrLf
  79.         End If
  80.         TimeDelay(200)
  81.         BBuf = RS232.ReadExisting()
  82.         txtReceive.Text &= BBuf & vbCrLf
  83.     End Sub

  84.    
  85.     Private Sub btmCMD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmCMD.Click
  86.         Dim cmdd As String
  87.         Dim DataStr As String
  88.         cmdd = TextInput.Text
  89.         'RS232.DtrEnable = True
  90.         RS232.Write(cmdd & vbCrLf)
  91.         txtReceive.Text &= Chr(34) & cmdd & Chr(34) & vbCrLf
  92.         DataStr = RS232.ReadExisting()
  93.         txtReceive.Text &= DataStr & vbCrLf
  94.     End Sub

  95.     Private Sub btnRstatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRstatus.Click
  96.         Dim StaCmd As String
  97.         Dim DisStatus As String
  98.         If RadioBtnI.Checked Then
  99.             StaCmd = StatusInput.Text
  100.             RS232.Write(StaCmd & vbCrLf)
  101.         End If
  102.         If RadioBtnS.Checked Then
  103.             StaCmd = StatusDisplay1.SelectedItem.ToString
  104.             RS232.Write(StaCmd & vbCrLf)
  105.         End If      
  106.         TimeDelay(200)
  107.         DisStatus = RS232.ReadExisting()
  108.         StatusDisplay.Text &= DisStatus & vbCrLf
  109.     End Sub

  110. End Class
複製代碼

本主題中包含更多資源 (圖片、附件...)

你需要 登入 才可以下載或檢視,沒有帳號?立即註冊

x
 樓主| 發表於 2018-6-10 16:02:13 | 顯示全部樓層
dcstudio 發表於 2018-6-10 11:54 AM
話說... Antlu大...
有沒有想把連接的方式做成Wifi傳輸??

DCSTUDIO大:
   感恩!! 我還在摸索!! 手頭上還有 溫度計 功率計 電壓表...有線的都搞不出來了,無線的又增加一個門檻...您還是送給其他網友吧!!
發表於 2018-6-10 16:19:37 | 顯示全部樓層
antlu 發表於 2018-6-10 04:02 PM
DCSTUDIO大:
   感恩!! 我還在摸索!! 手頭上還有 溫度計 功率計 電壓表...有線的都搞不出來了,無線的又增 ...

不急!
有想玩的人, 開口就是!
牛也是拆機的! 放著也是放著..
發表於 2018-6-10 19:15:03 | 顯示全部樓層

a 大, 你說這個 XP 可以用, win10 無法打開 com port 嗎
 樓主| 發表於 2018-6-10 22:00:33 | 顯示全部樓層
xiaolaba 發表於 2018-6-10 07:15 PM
a 大, 你說這個 XP 可以用, win10 無法打開 com port 嗎

xiaolaba大:
   可以在 XP W10 執行!! 但是 我的WIN10 不能下載 VISUAL STUDIO ,所以,一直都在 XP 編輯!!
發表於 2018-6-11 00:06:42 | 顯示全部樓層
這本VB影印書能製成電子版嗎?供下載參閱。非常希望能下載到看一看。
發表於 2018-6-11 08:58:39 | 顯示全部樓層
antlu 發表於 2018-6-10 10:00 PM
xiaolaba大:
   可以在 XP W10 執行!! 但是 我的WIN10 不能下載 VISUAL STUDIO ,所以,一直都在 XP 編輯!! ...

喔,抱歉誤會了
 樓主| 發表於 2018-6-11 11:51:27 | 顯示全部樓層
dsmith 發表於 2018-6-11 12:06 AM
這本VB影印書能製成電子版嗎?供下載參閱。非常希望能下載到看一看。

DSMITH大:
   建議您到學校圖書館借出來影印,因為這樣既可以朱筆加圈批又不傷眼還可以隨時翻閱!! 一舉數得!! 一如我把 安捷倫的數位電供也是影印下來,說次翻閱之後才得到一些相關經驗,我是 "十目一行,過目即忘" 別人是 "一目十行,過目不忘"
   此書我有問過出版社是否有電子書可以購買,出版社說沒有!! 基於智慧產權,WISH大應該也不會同意此一做法吧!!

評分

1

檢視全部評分

 樓主| 發表於 2018-6-11 11:58:30 | 顯示全部樓層
這一版本是可以讀取送出的資料,還有讀回儀器反映的資料 回應的都是"原始資料"
初學者可以利用它來 驗證 與電源供應的 通訊狀況,進而作為擴展的參考!!



  1. Imports System.IO.Ports
  2. Imports System.Text

  3. 'OPEN "COM1:9600,n,8,2,rs,cd,lf,pe"---忽視request to send , carrier detect ; send line feed;enable perity check
  4. '"SYST:REM"------不能有" 符號,否則會異常
  5. '"*RST;*CLS"  ---reset and clear the power supply------不能有" 符號,否則會異常
  6. '"*IND?"------不能有" 符號,否則會異常
  7. '"APPL P6V, 3.0, 3.0"------不能有" 符號,否則會異常
  8. '"OUTP ON"------不能有" 符號,否則會異常

  9. '這一版本是可以讀取送出的資料,還有讀回儀器反映的資料 回應的都是"原始資料"

  10. Public Class Form1
  11.     Dim IOflag As Boolean

  12.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  13.         For Each sp As String In SerialPort.GetPortNames
  14.             cmbCOM.Items.Add(sp)
  15.         Next
  16.         cmbCOM.Sorted = True
  17.         cmbCOM.SelectedIndex = 0
  18.         IOflag = False
  19.         IOenable.BackColor = Color.Blue
  20.     End Sub

  21.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
  22.         RS232.PortName = cmbCOM.SelectedItem.ToString
  23.         RS232.BaudRate = 9600
  24.         RS232.Parity = Parity.None
  25.         RS232.DataBits = 8
  26.         RS232.StopBits = StopBits.Two
  27.         RS232.Encoding = Encoding.ASCII
  28.         If Not RS232.IsOpen Then
  29.             RS232.Open()
  30.             btnSend.Enabled = True
  31.             RS232.DtrEnable = True
  32.             RS232.Write("SYST:REM" & vbCrLf)
  33.         Else
  34.             MsgBox("~~通訊埠開啟錯誤(通信埠已開啟)~~", MsgBoxStyle.Critical Or MsgBoxStyle.OkCancel)
  35.             End
  36.         End If

  37.     End Sub

  38.     Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
  39.         Dim Buf As String

  40.         Buf = "APPL " & cmbVOLT.SelectedItem.ToString & ","  '電壓範圍
  41.         Buf = Buf & " " & voltInput.Text & ","  '設定電壓值
  42.         Buf = Buf & " " & currInput.Text   '設定電流值
  43.         RS232.DtrEnable = True
  44.         RS232.Write(Buf & vbCrLf)
  45.         TimeDelay(200)
  46.         txtReceive.Text &= Buf & vbCrLf
  47.         txtReceive.SelectionStart = txtReceive.Text.Length
  48.         txtReceive.ScrollToCaret()
  49.         txtReceive.Focus()
  50.     End Sub

  51.     Private Sub btnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnd.Click
  52.         If Not RS232 Is Nothing Then
  53.             If RS232.IsOpen Then RS232.Close()
  54.         End If
  55.         End
  56.     End Sub

  57.     '*****************
  58.     'timeDelay
  59.     '*****************
  60.     Private Sub TimeDelay(ByVal DT As Integer)
  61.         Dim startTick As Integer
  62.         startTick = Environment.TickCount()
  63.         Do
  64.             If Environment.TickCount() - startTick >= DT Then Exit Do
  65.             Application.DoEvents()
  66.         Loop
  67.     End Sub

  68.     Private Sub IOenable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles IOenable.Click

  69.         Dim BBuf As String
  70.         IOflag = Not IOflag
  71.         If IOflag Then
  72.             IOenable.BackColor = Color.Red
  73.             'RS232.DtrEnable = True
  74.             RS232.Write("OUTP ON" & vbCrLf)
  75.             txtReceive.Text &= Chr(34) & "OUTPut ON" & Chr(34) & vbCrLf
  76.         Else
  77.             IOenable.BackColor = Color.Green
  78.             'RS232.DtrEnable = True
  79.             RS232.Write("OUTP OFF" & vbCrLf)
  80.             txtReceive.Text &= Chr(34) & "OUTPut OFF" & Chr(34) & vbCrLf
  81.         End If
  82.         TimeDelay(200)
  83.         BBuf = RS232.ReadExisting()
  84.         txtReceive.Text &= BBuf & vbCrLf
  85.         txtReceive.SelectionStart = txtReceive.Text.Length
  86.         txtReceive.ScrollToCaret()
  87.         txtReceive.Focus()
  88.     End Sub

  89.    
  90.     Private Sub btmCMD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btmCMD.Click
  91.         Dim cmdd As String
  92.         Dim DataStr As String
  93.         cmdd = TextInput.Text
  94.         'RS232.DtrEnable = True
  95.         RS232.Write(cmdd & vbCrLf)
  96.         txtReceive.Text &= Chr(34) & cmdd & Chr(34) & vbCrLf
  97.         DataStr = RS232.ReadExisting()
  98.         txtReceive.Text &= DataStr & vbCrLf
  99.         txtReceive.SelectionStart = txtReceive.Text.Length '此三行讓文字往上滾動,網路上學到的指令
  100.         txtReceive.ScrollToCaret()
  101.         txtReceive.Focus()
  102.     End Sub

  103.     Private Sub btnRstatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRstatus.Click
  104.         Dim StaCmd As String
  105.         Dim DisStatus As String
  106.         If RadioBtnI.Checked Then
  107.             StaCmd = StatusInput.Text
  108.             RS232.Write(StaCmd & vbCrLf)
  109.         End If
  110.         If RadioBtnS.Checked Then
  111.             StaCmd = StatusDisplay1.SelectedItem.ToString
  112.             RS232.Write(StaCmd & vbCrLf)
  113.         End If
  114.         TimeDelay(200)
  115.         DisStatus = RS232.ReadExisting()
  116.         StatusDisplay.Text &= DisStatus & vbCrLf
  117.         StatusDisplay.SelectionStart = StatusDisplay.Text.Length '此三行讓文字往上滾動,網路上學到的指令
  118.         StatusDisplay.ScrollToCaret()
  119.         StatusDisplay.Focus()
  120.     End Sub

  121. End Class
複製代碼
發表於 2018-6-12 17:44:41 來自手機 | 顯示全部樓層
antlu大 感覺儀表或電源可能用Labview來控制比較簡單一點呢

評分

1

檢視全部評分

發表於 2018-6-12 21:40:59 | 顯示全部樓層
本文章最後由 ericchou 於 2018-6-12 09:53 PM 編輯

有機會可試試
它的 USB介面 GPIB 連接線 (AGILENT 82357B HIGH-SPEED USB2.0/GPIB INTERFACE                                                                                                                        )
單組仿製品約2千多元

安捷倫82357B GPIB控制器開箱拆解
https://www.youtube.com/watch?v=r3oedj3DCiU



安捷倫82357B GPIB正版與否
https://www.youtube.com/watch?v=JWQt3-GVXLA



利用 E3631A可編程直流電源(GPIB連線) +Visual Basic程式for Excel 的資料處理
作二極體IV曲線追踪量測實例
https://www.youtube.com/watch?v=SoUqhCSBszQ




Visual Basic for Excel, Simple Example Program to Control Instruments
https://www.youtube.com/watch?v=VQ3kwS7pLl8




AGILENT 82357B HIGH-SPEED USB2.0/GPIB INTERFACE



本主題中包含更多資源 (圖片、附件...)

你需要 登入 才可以下載或檢視,沒有帳號?立即註冊

x

評分

3

檢視全部評分

 樓主| 發表於 2018-6-12 22:12:10 | 顯示全部樓層
haihwa 發表於 2018-6-12 05:44 PM
antlu大 感覺儀表或電源可能用Labview來控制比較簡單一點呢

HAIHWA大:
    LABWIEW 應該比較好用實用!! 但是,一來沒有相關的知識 二來需要軟體(要花錢買) 對我都有困難!!
 樓主| 發表於 2018-6-12 22:15:11 | 顯示全部樓層
ericchou 發表於 2018-6-12 09:40 PM
有機會可試試
它的 USB介面 GPIB 連接線 (AGILENT 82357B HIGH-SPEED USB2.0/GPIB INTERFACE               ...

ERIC大:
    RS232我都灰頭土臉了,若再加上 GPIB 我看要學到70歲(活到老學到老)!! 感謝提供相關資料!!

評分

1

檢視全部評分

你需要登入後才可以回覆 登入 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一筆 /1 下一筆

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2018-8-14 11:40 PM , Processed in 0.053187 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc.